{"version":3,"file":"mdb.umd.min.js","sources":["../../src/js/mdb/dom/data.js","../../src/js/mdb/util/index.js","../../src/js/mdb/dom/event-handler.js","../../src/js/mdb/dom/manipulator.js","../../src/js/mdb/dom/selector-engine.js","../../src/js/bootstrap/mdb-prefix/dom/data.js","../../src/js/bootstrap/mdb-prefix/util/index.js","../../src/js/bootstrap/mdb-prefix/dom/event-handler.js","../../src/js/bootstrap/mdb-prefix/dom/manipulator.js","../../src/js/bootstrap/mdb-prefix/util/config.js","../../src/js/bootstrap/mdb-prefix/base-component.js","../../src/js/bootstrap/mdb-prefix/button.js","../../src/js/autoinit/init.js","../../src/js/free/button.js","../../src/js/bootstrap/mdb-prefix/dom/selector-engine.js","../../src/js/bootstrap/mdb-prefix/util/backdrop.js","../../src/js/bootstrap/mdb-prefix/util/component-functions.js","../../src/js/bootstrap/mdb-prefix/util/focustrap.js","../../src/js/bootstrap/mdb-prefix/util/scrollbar.js","../../src/js/bootstrap/mdb-prefix/offcanvas.js","../../src/js/bootstrap/mdb-prefix/util/swipe.js","../../src/js/bootstrap/mdb-prefix/carousel.js","../../src/js/free/carousel.js","../../node_modules/@popperjs/core/lib/enums.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../node_modules/@popperjs/core/lib/utils/math.js","../../node_modules/@popperjs/core/lib/utils/userAgent.js","../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../node_modules/@popperjs/core/lib/utils/within.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/popper-lite.js","../../node_modules/@popperjs/core/lib/popper.js","../../src/js/bootstrap/mdb-prefix/util/sanitizer.js","../../src/js/bootstrap/mdb-prefix/util/template-factory.js","../../src/js/bootstrap/mdb-prefix/tooltip.js","../../src/js/bootstrap/mdb-prefix/popover.js","../../src/js/free/popover.js","../../src/js/bootstrap/mdb-prefix/scrollspy.js","../../src/js/free/scrollspy.js","../../src/js/bootstrap/mdb-prefix/tab.js","../../src/js/free/tab.js","../../src/js/free/tooltip.js","../../node_modules/detect-autofill/dist/detect-autofill.js","../../src/js/free/base-component.js","../../src/js/free/input.js","../../src/js/bootstrap/mdb-prefix/collapse.js","../../src/js/free/collapse.js","../../src/js/bootstrap/mdb-prefix/dropdown.js","../../src/js/free/dropdown.js","../../src/js/free/ripple.js","../../src/js/free/range.js","../../src/js/pro/animate.js","../../node_modules/chart.js/dist/chunks/helpers.segment.mjs","../../node_modules/chart.js/dist/chart.mjs","../../node_modules/deepmerge/dist/cjs.js","../../src/js/pro/charts/chartsDefaults.js","../../src/js/pro/charts/charts.js","../../src/js/pro/lightbox.js","../../src/js/pro/rating.js","../../src/js/mdb/perfect-scrollbar/lib/css.js","../../src/js/mdb/perfect-scrollbar/lib/dom.js","../../src/js/mdb/perfect-scrollbar/lib/class-names.js","../../src/js/mdb/perfect-scrollbar/lib/event-manager.js","../../src/js/mdb/perfect-scrollbar/process-scroll-diff.js","../../src/js/mdb/perfect-scrollbar/lib/util.js","../../src/js/mdb/perfect-scrollbar/update-geometry.js","../../src/js/mdb/perfect-scrollbar/handlers/click-rail.js","../../src/js/mdb/perfect-scrollbar/handlers/drag-thumb.js","../../src/js/mdb/perfect-scrollbar/handlers/keyboard.js","../../src/js/mdb/perfect-scrollbar/handlers/mouse-wheel.js","../../src/js/mdb/perfect-scrollbar/handlers/touch.js","../../src/js/mdb/perfect-scrollbar/index.js","../../src/js/mdb/util/focusTrap.js","../../src/js/mdb/util/keycodes.js","../../src/js/mdb/util/touch/swipe.js","../../src/js/mdb/util/touch/index.js","../../src/js/pro/sidenav.js","../../src/js/bootstrap/mdb-prefix/alert.js","../../src/js/mdb/util/stack.js","../../src/js/pro/alert.js","../../src/js/bootstrap/mdb-prefix/toast.js","../../src/js/pro/toast.js","../../src/js/pro/timepicker/templates.js","../../src/js/pro/timepicker/utils.js","../../src/js/pro/timepicker/index.js","../../src/js/pro/navbar.js","../../src/js/pro/infinite-scroll.js","../../src/js/pro/lazy-load.js","../../src/js/pro/datepicker/date-utils.js","../../src/js/pro/datepicker/templates.js","../../src/js/pro/datepicker/index.js","../../src/js/pro/popconfirm.js","../../src/js/pro/datatable/html/pagination.js","../../src/js/pro/datatable/html/columns.js","../../src/js/pro/datatable/html/rows.js","../../src/js/pro/datatable/html/table.js","../../src/js/pro/datatable/util.js","../../src/js/pro/select/select-option.js","../../src/js/pro/select/selection-model.js","../../src/js/pro/select/util.js","../../src/js/pro/select/templates.js","../../src/js/pro/select/index.js","../../src/js/pro/datatable/index.js","../../src/js/pro/stepper.js","../../src/js/pro/sticky.js","../../src/js/pro/touch/touchUtil.js","../../src/js/pro/touch/press.js","../../src/js/pro/touch/swipe.js","../../src/js/pro/touch/pan.js","../../src/js/pro/touch/pinch.js","../../src/js/pro/touch/tap.js","../../src/js/pro/touch/rotate.js","../../src/js/pro/touch/index.js","../../src/js/pro/smooth-scroll.js","../../node_modules/perfect-scrollbar/dist/perfect-scrollbar.esm.js","../../src/js/pro/perfect-scrollbar.js","../../src/js/pro/loading-management/templates.js","../../src/js/pro/loading-management/index.js","../../src/js/mdb/util/sanitizer.js","../../src/js/pro/autocomplete/templates.js","../../src/js/pro/autocomplete/index.js","../../src/js/bootstrap/mdb-prefix/modal.js","../../src/js/mdb/util/scrollbar.js","../../src/js/pro/modal.js","../../src/js/pro/clipboard.js","../../src/js/pro/chips/templates.js","../../src/js/pro/chips/chip.js","../../src/js/pro/chips/index.js","../../src/js/pro/multi-range/template.js","../../src/js/pro/multi-range/utils.js","../../src/js/pro/multi-range/index.js","../../src/js/pro/date-time-picker/utils.js","../../src/js/pro/date-time-picker/templates.js","../../src/js/pro/date-time-picker/index.js","../../src/js/autoinit/callbacks/free.js","../../src/js/autoinit/initSelectors/pro.js","../../src/js/autoinit/initSelectors/free.js","../../src/js/autoinit/callbacks/charts.js","../../src/js/autoinit/callbacks/pro.js","../../src/js/autoinit/index.pro.js","../../src/js/mdb.pro.umd.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst mapData = (() => {\n  const storeData = {};\n  let id = 1;\n  return {\n    set(element, key, data) {\n      if (typeof element[key] === 'undefined') {\n        element[key] = {\n          key,\n          id,\n        };\n        id++;\n      }\n\n      storeData[element[key].id] = data;\n    },\n    get(element, key) {\n      if (!element || typeof element[key] === 'undefined') {\n        return null;\n      }\n\n      const keyProperties = element[key];\n      if (keyProperties.key === key) {\n        return storeData[keyProperties.id];\n      }\n\n      return null;\n    },\n    delete(element, key) {\n      if (typeof element[key] === 'undefined') {\n        return;\n      }\n\n      const keyProperties = element[key];\n      if (keyProperties.key === key) {\n        delete storeData[keyProperties.id];\n        delete element[key];\n      }\n    },\n  };\n})();\n\nconst Data = {\n  setData(instance, key, data) {\n    mapData.set(instance, key, data);\n  },\n  getData(instance, key) {\n    return mapData.get(instance, key);\n  },\n  removeData(instance, key) {\n    mapData.delete(instance, key);\n  },\n};\n\nexport default Data;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nconst toType = (obj) => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString\n    .call(obj)\n    .match(/\\s([a-z]+)/i)[1]\n    .toLowerCase();\n};\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst getUID = (prefix) => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = (element) => {\n  let selector = element.getAttribute('data-mdb-target');\n\n  if (!selector || selector === '#') {\n    const hrefAttr = element.getAttribute('href');\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = (element) => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = (element) => {\n  const selector = getSelector(element);\n\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = (element) => {\n  if (!element) {\n    return 0;\n  }\n\n  // Get transition-duration of the element\n  let { transitionDuration, transitionDelay } = window.getComputedStyle(element);\n\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n  // Return 0 if element or transition duration is not found\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  }\n\n  // If multiple durations are defined, take the first\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n\n  return (\n    (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) *\n    MILLISECONDS_MULTIPLIER\n  );\n};\n\nconst triggerTransitionEnd = (element) => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = (obj) => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = (obj) => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return document.querySelector(obj);\n  }\n\n  return null;\n};\n\nconst emulateTransitionEnd = (element, duration) => {\n  let called = false;\n  const durationPadding = 5;\n  const emulatedDuration = duration + durationPadding;\n\n  function listener() {\n    called = true;\n    element.removeEventListener(TRANSITION_END, listener);\n  }\n\n  element.addEventListener(TRANSITION_END, listener);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(element);\n    }\n  }, emulatedDuration);\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach((property) => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new Error(\n        `${componentName.toUpperCase()}: ` +\n          `Option \"${property}\" provided type \"${valueType}\" ` +\n          `but expected type \"${expectedTypes}\".`\n      );\n    }\n  });\n};\n\nconst isVisible = (element) => {\n  if (!element) {\n    return false;\n  }\n\n  if (element.style && element.parentNode && element.parentNode.style) {\n    const elementStyle = getComputedStyle(element);\n    const parentNodeStyle = getComputedStyle(element.parentNode);\n\n    return (\n      elementStyle.display !== 'none' &&\n      parentNodeStyle.display !== 'none' &&\n      elementStyle.visibility !== 'hidden'\n    );\n  }\n\n  return false;\n};\n\nconst isDisabled = (element) => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = (element) => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  }\n\n  // Can find the shadow root otherwise it'll return the document\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  }\n\n  // when we don't find a shadow root\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => function () {};\n\nconst reflow = (element) => element.offsetHeight;\n\nconst getjQuery = () => {\n  const { jQuery } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-mdb-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst onDOMContentLoaded = (callback) => {\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = document.documentElement.dir === 'rtl';\n\nconst array = (collection) => {\n  return Array.from(collection);\n};\n\nconst element = (tag) => {\n  return document.createElement(tag);\n};\n\nconst defineJQueryPlugin = (plugin) => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n\n    /* istanbul ignore if */\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nexport {\n  getjQuery,\n  TRANSITION_END,\n  getUID,\n  getSelectorFromElement,\n  getElementFromSelector,\n  getTransitionDurationFromElement,\n  triggerTransitionEnd,\n  isElement,\n  getElement,\n  emulateTransitionEnd,\n  typeCheckConfig,\n  isVisible,\n  isDisabled,\n  findShadowRoot,\n  noop,\n  reflow,\n  array,\n  element,\n  onDOMContentLoaded,\n  isRTL,\n  defineJQueryPlugin,\n};\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst $ = getjQuery();\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout',\n};\nconst nativeEvents = [\n  'click',\n  'dblclick',\n  'mouseup',\n  'mousedown',\n  'contextmenu',\n  'mousewheel',\n  'DOMMouseScroll',\n  'mouseover',\n  'mouseout',\n  'mousemove',\n  'selectstart',\n  'selectend',\n  'keydown',\n  'keypress',\n  'keyup',\n  'orientationchange',\n  'touchstart',\n  'touchmove',\n  'touchend',\n  'touchcancel',\n  'pointerdown',\n  'pointermove',\n  'pointerup',\n  'pointerleave',\n  'pointercancel',\n  'gesturestart',\n  'gesturechange',\n  'gestureend',\n  'focus',\n  'blur',\n  'change',\n  'reset',\n  'select',\n  'submit',\n  'focusin',\n  'focusout',\n  'load',\n  'unload',\n  'beforeunload',\n  'resize',\n  'move',\n  'DOMContentLoaded',\n  'readystatechange',\n  'error',\n  'abort',\n  'scroll',\n];\n\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let { target } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--; '') {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            EventHandler.off(element, event.type, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    }\n\n    // To please ESLint\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  let typeEvent = originalTypeEvent.replace(stripNameRegex, '');\n  const custom = customEvents[typeEvent];\n\n  if (custom) {\n    typeEvent = custom;\n  }\n\n  const isNative = nativeEvents.indexOf(typeEvent) > -1;\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(\n    originalTypeEvent,\n    handler,\n    delegationFn\n  );\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation\n    ? bootstrapDelegationHandler(element, handler, delegationFn)\n    : bootstrapHandler(element, handler);\n\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n\n  Object.keys(storeElementEvent).forEach((handlerKey) => {\n    if (handlerKey.indexOf(namespace) > -1) {\n      const event = storeElementEvent[handlerKey];\n\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  extend(element, events, componentName) {\n    events.forEach((event) => {\n      EventHandler.on(element, `${event.name}.bs.${componentName}`, (e) => {\n        const eventParameters = {};\n        if (event.parametersToCopy) {\n          event.parametersToCopy.forEach((param) => {\n            eventParameters[param] = e[param];\n          });\n        }\n\n        const mdbEvent = EventHandler.trigger(\n          element,\n          `${event.name}.mdb.${componentName}`,\n          eventParameters\n        );\n\n        if (mdbEvent.defaultPrevented) {\n          e.preventDefault();\n        }\n      });\n    });\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(\n      originalTypeEvent,\n      handler,\n      delegationFn\n    );\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.charAt(0) === '.';\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach((elementEvent) => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach((keyHandlers) => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.indexOf(handlerKey) > -1) {\n        const event = storeElementEvent[keyHandlers];\n\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const typeEvent = event.replace(stripNameRegex, '');\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.indexOf(typeEvent) > -1;\n\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true,\n      });\n    }\n\n    // merge custom informations in our event\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach((key) => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          },\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  },\n};\n\nexport const EventHandlerMulti = {\n  on(element, eventsName, handler, delegationFn) {\n    const events = eventsName.split(' ');\n\n    for (let i = 0; i < events.length; i++) {\n      EventHandler.on(element, events[i], handler, delegationFn);\n    }\n  },\n  off(element, originalTypeEvent, handler, delegationFn) {\n    const events = originalTypeEvent.split(' ');\n\n    for (let i = 0; i < events.length; i++) {\n      EventHandler.off(element, events[i], handler, delegationFn);\n    }\n  },\n};\n\nexport default EventHandler;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-mdb-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-mdb-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {\n      ...element.dataset,\n    };\n\n    Object.keys(attributes)\n      .filter((key) => key.startsWith('mdb'))\n      .forEach((key) => {\n        let pureKey = key.replace(/^mdb/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(attributes[key]);\n      });\n\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-mdb-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft,\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft,\n    };\n  },\n\n  style(element, style) {\n    Object.assign(element.style, style);\n  },\n\n  toggleClass(element, className) {\n    if (!element) {\n      return;\n    }\n\n    if (element.classList.contains(className)) {\n      element.classList.remove(className);\n    } else {\n      element.classList.add(className);\n    }\n  },\n\n  addClass(element, className) {\n    if (element.classList.contains(className)) return;\n    element.classList.add(className);\n  },\n\n  addStyle(element, style) {\n    Object.keys(style).forEach((property) => {\n      element.style[property] = style[property];\n    });\n  },\n\n  removeClass(element, className) {\n    if (!element.classList.contains(className)) return;\n    element.classList.remove(className);\n  },\n\n  hasClass(element, className) {\n    return element.classList.contains(className);\n  },\n};\n\nexport default Manipulator;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NODE_TEXT = 3;\n\nconst SelectorEngine = {\n  closest(element, selector) {\n    return element.closest(selector);\n  },\n\n  matches(element, selector) {\n    return element.matches(selector);\n  },\n\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    const children = [].concat(...element.children);\n\n    return children.filter((child) => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (this.matches(ancestor, selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (this.matches(next, selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  },\n};\n\nexport default SelectorEngine;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\n\nexport default {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element);\n\n    // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(\n        `Bootstrap doesn't allow more than one instance per element. Bound instance: ${\n          Array.from(instanceMap.keys())[0]\n        }.`\n      );\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n\n    instanceMap.delete(key);\n\n    // free up element references if there are no instances left for an element\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  },\n};\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = (selector) => {\n  if (selector && window.CSS && window.CSS.escape) {\n    // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n    selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n  }\n\n  return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = (object) => {\n  if (object === null || object === undefined) {\n    return `${object}`;\n  }\n\n  return Object.prototype.toString\n    .call(object)\n    .match(/\\s([a-z]+)/i)[1]\n    .toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = (prefix) => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getTransitionDurationFromElement = (element) => {\n  if (!element) {\n    return 0;\n  }\n\n  // Get transition-duration of the element\n  let { transitionDuration, transitionDelay } = window.getComputedStyle(element);\n\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n  // Return 0 if element or transition duration is not found\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  }\n\n  // If multiple durations are defined, take the first\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n\n  return (\n    (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) *\n    MILLISECONDS_MULTIPLIER\n  );\n};\n\nconst triggerTransitionEnd = (element) => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = (object) => {\n  if (!object || typeof object !== 'object') {\n    return false;\n  }\n\n  if (typeof object.jquery !== 'undefined') {\n    object = object[0];\n  }\n\n  return typeof object.nodeType !== 'undefined';\n};\n\nconst getElement = (object) => {\n  // it's a jQuery object or a node element\n  if (isElement(object)) {\n    return object.jquery ? object[0] : object;\n  }\n\n  if (typeof object === 'string' && object.length > 0) {\n    return document.querySelector(parseSelector(object));\n  }\n\n  return null;\n};\n\nconst isVisible = (element) => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  // Handle `details` element as its content may falsie appear visible when it is closed\n  const closedDetails = element.closest('details:not([open])');\n\n  if (!closedDetails) {\n    return elementIsVisible;\n  }\n\n  if (closedDetails !== element) {\n    const summary = element.closest('summary');\n    if (summary && summary.parentNode !== closedDetails) {\n      return false;\n    }\n\n    if (summary === null) {\n      return false;\n    }\n  }\n\n  return elementIsVisible;\n};\n\nconst isDisabled = (element) => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = (element) => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  }\n\n  // Can find the shadow root otherwise it'll return the document\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  }\n\n  // when we don't find a shadow root\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = (element) => {\n  element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\n\nconst getjQuery = () => {\n  if (window.jQuery && !document.body.hasAttribute('data-mdb-no-jquery')) {\n    return window.jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = (callback) => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        for (const callback of DOMContentLoadedCallbacks) {\n          callback();\n        }\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = (plugin) => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n  return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n\n  let called = false;\n\n  const handler = ({ target }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  const listLength = list.length;\n  let index = list.indexOf(activeElement);\n\n  // if the element does not exist in the list return an element\n  // depending on the direction and if cycle is allowed\n  if (index === -1) {\n    return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n  }\n\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\nexport {\n  defineJQueryPlugin,\n  execute,\n  executeAfterTransition,\n  findShadowRoot,\n  getElement,\n  getjQuery,\n  getNextActiveElement,\n  getTransitionDurationFromElement,\n  getUID,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop,\n  onDOMContentLoaded,\n  parseSelector,\n  reflow,\n  triggerTransitionEnd,\n  toType,\n};\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js';\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout',\n};\n\nconst nativeEvents = new Set([\n  'click',\n  'dblclick',\n  'mouseup',\n  'mousedown',\n  'contextmenu',\n  'mousewheel',\n  'DOMMouseScroll',\n  'mouseover',\n  'mouseout',\n  'mousemove',\n  'selectstart',\n  'selectend',\n  'keydown',\n  'keypress',\n  'keyup',\n  'orientationchange',\n  'touchstart',\n  'touchmove',\n  'touchend',\n  'touchcancel',\n  'pointerdown',\n  'pointermove',\n  'pointerup',\n  'pointerleave',\n  'pointercancel',\n  'gesturestart',\n  'gesturechange',\n  'gestureend',\n  'focus',\n  'blur',\n  'change',\n  'reset',\n  'select',\n  'submit',\n  'focusin',\n  'focusout',\n  'load',\n  'unload',\n  'beforeunload',\n  'resize',\n  'move',\n  'DOMContentLoaded',\n  'readystatechange',\n  'error',\n  'abort',\n  'scroll',\n]);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n  return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++;\n}\n\nfunction getElementEvents(element) {\n  const uid = makeEventUid(element);\n\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    hydrateObj(event, { delegateTarget: element });\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let { target } = event; target && target !== this; target = target.parentNode) {\n      for (const domElement of domElements) {\n        if (domElement !== target) {\n          continue;\n        }\n\n        hydrateObj(event, { delegateTarget: target });\n\n        if (handler.oneOff) {\n          EventHandler.off(element, event.type, selector, fn);\n        }\n\n        return fn.apply(target, [event]);\n      }\n    }\n  };\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n  return Object.values(events).find(\n    (event) => event.callable === callable && event.delegationSelector === delegationSelector\n  );\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n  const isDelegated = typeof handler === 'string';\n  // TODO: tooltip passes `false` instead of selector, so we need to check\n  const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n\n  if (!nativeEvents.has(typeEvent)) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [isDelegated, callable, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  let [isDelegated, callable, typeEvent] = normalizeParameters(\n    originalTypeEvent,\n    handler,\n    delegationFunction\n  );\n\n  // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n  if (originalTypeEvent in customEvents) {\n    const wrapFunction = (fn) => {\n      return function (event) {\n        if (\n          !event.relatedTarget ||\n          (event.relatedTarget !== event.delegateTarget &&\n            !event.delegateTarget.contains(event.relatedTarget))\n        ) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    callable = wrapFunction(callable);\n  }\n\n  const events = getElementEvents(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n\n  if (previousFunction) {\n    previousFunction.oneOff = previousFunction.oneOff && oneOff;\n\n    return;\n  }\n\n  const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = isDelegated\n    ? bootstrapDelegationHandler(element, handler, callable)\n    : bootstrapHandler(element, callable);\n\n  fn.delegationSelector = isDelegated ? handler : null;\n  fn.callable = callable;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n\n  element.addEventListener(typeEvent, fn, isDelegated);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n\n  for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n    if (handlerKey.includes(namespace)) {\n      removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n    }\n  }\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, false);\n  },\n\n  one(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFunction) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [isDelegated, callable, typeEvent] = normalizeParameters(\n      originalTypeEvent,\n      handler,\n      delegationFunction\n    );\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getElementEvents(element);\n    const storeElementEvent = events[typeEvent] || {};\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof callable !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!Object.keys(storeElementEvent).length) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      for (const elementEvent of Object.keys(events)) {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      }\n    }\n\n    for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n      }\n    }\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n\n    let jQueryEvent = null;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args);\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && jQueryEvent) {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  },\n};\n\nfunction hydrateObj(obj, meta = {}) {\n  for (const [key, value] of Object.entries(meta)) {\n    try {\n      obj[key] = value;\n    } catch {\n      Object.defineProperty(obj, key, {\n        configurable: true,\n        get() {\n          return value;\n        },\n      });\n    }\n  }\n\n  return obj;\n}\n\nexport default EventHandler;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n  if (value === 'true') {\n    return true;\n  }\n\n  if (value === 'false') {\n    return false;\n  }\n\n  if (value === Number(value).toString()) {\n    return Number(value);\n  }\n\n  if (value === '' || value === 'null') {\n    return null;\n  }\n\n  if (typeof value !== 'string') {\n    return value;\n  }\n\n  try {\n    return JSON.parse(decodeURIComponent(value));\n  } catch {\n    return value;\n  }\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-mdb-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-mdb-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    const mdbKeys = Object.keys(element.dataset).filter(\n      (key) => key.startsWith('mdb') && !key.startsWith('mdbConfig')\n    );\n\n    for (const key of mdbKeys) {\n      let pureKey = key.replace(/^mdb/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    }\n\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-mdb-${normalizeDataKey(key)}`));\n  },\n};\n\nexport default Manipulator;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js';\nimport { isElement, toType } from './index.js';\n\n/**\n * Class definition\n */\n\nclass Config {\n  // Getters\n  static get Default() {\n    return {};\n  }\n\n  static get DefaultType() {\n    return {};\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config);\n    config = this._configAfterMerge(config);\n    this._typeCheckConfig(config);\n    return config;\n  }\n\n  _configAfterMerge(config) {\n    return config;\n  }\n\n  _mergeConfigObj(config, element) {\n    const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n    return {\n      ...this.constructor.Default,\n      ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n      ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n      ...(typeof config === 'object' ? config : {}),\n    };\n  }\n\n  _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n    for (const [property, expectedTypes] of Object.entries(configTypes)) {\n      const value = config[property];\n      const valueType = isElement(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(\n          `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n        );\n      }\n    }\n  }\n}\n\nexport default Config;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js';\nimport EventHandler from './dom/event-handler.js';\nimport Config from './util/config.js';\nimport { executeAfterTransition, getElement } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.2';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n  constructor(element, config) {\n    super();\n\n    element = getElement(element);\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    this._config = this._getConfig(config);\n\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  // Public\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n\n    for (const propertyName of Object.getOwnPropertyNames(this)) {\n      this[propertyName] = null;\n    }\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config, this._element);\n    config = this._configAfterMerge(config);\n    this._typeCheckConfig(config);\n    return config;\n  }\n\n  // Static\n  static getInstance(element) {\n    return Data.get(getElement(element), this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return (\n      this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n    );\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n  static eventName(name) {\n    return `${name}${this.EVENT_KEY}`;\n  }\n}\n\nexport default BaseComponent;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport { defineJQueryPlugin } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'button';\nconst DATA_KEY = 'bs.button';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst CLASS_NAME_ACTIVE = 'active';\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE));\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, (event) => {\n//   event.preventDefault();\n\n//   const button = event.target.closest(SELECTOR_DATA_TOGGLE);\n//   const data = Button.getOrCreateInstance(button);\n\n//   data.toggle();\n// });\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Button);\n\nexport default Button;\n","import SelectorEngine from '../mdb/dom/selector-engine';\nimport { defineJQueryPlugin } from '../mdb/util/index';\n\nconst mapComponentsData = (() => {\n  const componentsData = [];\n  return {\n    set(componentName) {\n      componentsData.push(componentName);\n    },\n    get(componentName) {\n      return componentsData.includes(componentName);\n    },\n  };\n})();\n\nexport const InitializedComponents = {\n  set(componentName) {\n    mapComponentsData.set(componentName);\n  },\n  get(componentName) {\n    return mapComponentsData.get(componentName);\n  },\n};\n\nconst isInitialized = (componentName) => {\n  return InitializedComponents.get(componentName);\n};\n\nexport const bindCallbackEventsIfNeeded = (component) => {\n  if (!isInitialized(component.NAME)) {\n    const manualInit = true;\n    initComponent(component, manualInit);\n  }\n};\n\nconst initComponent = (component, manualInit = false) => {\n  if (!component || InitializedComponents.get(component.NAME)) {\n    return;\n  }\n\n  InitializedComponents.set(component.NAME);\n\n  const thisComponent = _defaultInitSelectors[component.NAME] || null;\n  const isToggler = thisComponent?.isToggler || false;\n\n  defineJQueryPlugin(component);\n  if (thisComponent?.advanced) {\n    thisComponent.advanced(component, thisComponent?.selector);\n    return;\n  }\n\n  if (isToggler) {\n    thisComponent.callback(component, thisComponent?.selector);\n\n    return;\n  }\n\n  if (manualInit) {\n    return;\n  }\n\n  SelectorEngine.find(thisComponent?.selector).forEach((element) => {\n    let instance = component.getInstance(element);\n    if (!instance) {\n      instance = new component(element); // eslint-disable-line\n      if (thisComponent?.onInit) {\n        instance[thisComponent.onInit]();\n      }\n    }\n  });\n};\n\nlet _defaultInitSelectors;\nexport class InitMDB {\n  constructor(defaultInitSelectors) {\n    _defaultInitSelectors = defaultInitSelectors;\n  }\n\n  init = (components) => {\n    components.forEach((component) => initComponent(component));\n  };\n\n  initMDB = (components, checkOtherImports = false) => {\n    const componentList = Object.keys(_defaultInitSelectors).map((element) => {\n      const requireAutoInit = Boolean(\n        document.querySelector(_defaultInitSelectors[element].selector)\n      );\n\n      if (requireAutoInit) {\n        const component = components[_defaultInitSelectors[element].name];\n        if (!component && !InitializedComponents.get(element) && checkOtherImports) {\n          // eslint-disable-next-line no-console\n          console.warn(\n            `Please import ${_defaultInitSelectors[element].name} from \"MDB\" package and add it to a object parameter inside \"initMDB\" function`\n          );\n        }\n        return component;\n      }\n\n      return null;\n    });\n\n    this.init(componentList);\n  };\n}\n","import Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\n\nimport BSButton from '../bootstrap/mdb-prefix/button';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\nconst NAME = 'button';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_CLICK = `click${EVENT_KEY}`;\nconst EVENT_TRANSITIONEND = 'transitionend';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\n\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_SHOWN = 'shown';\nconst CLASS_NAME_FIXED_ACTION_BTN = 'fixed-action-btn';\n\nconst SELECTOR_ACTION_BUTTON = '.fixed-action-btn:not(.smooth-scroll) > .btn-floating';\nconst SELECTOR_LIST_ELEMENT = 'ul .btn';\nconst SELECTOR_LIST = 'ul';\n\nclass Button extends BSButton {\n  constructor(element) {\n    super(element);\n    this._fn = {};\n\n    if (this._element) {\n      Data.setData(this._element, DATA_KEY, this);\n      this._init();\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n  }\n\n  // Static\n  static get NAME() {\n    return NAME;\n  }\n\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n      if (!data && /dispose/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new Button(this, _config);\n      }\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](options);\n      }\n    });\n  }\n\n  // Getters\n  get _actionButton() {\n    return SelectorEngine.findOne(SELECTOR_ACTION_BUTTON, this._element);\n  }\n\n  get _buttonListElements() {\n    return SelectorEngine.find(SELECTOR_LIST_ELEMENT, this._element);\n  }\n\n  get _buttonList() {\n    return SelectorEngine.findOne(SELECTOR_LIST, this._element);\n  }\n\n  get _isTouchDevice() {\n    return 'ontouchstart' in document.documentElement;\n  }\n\n  // Public\n  show() {\n    if (Manipulator.hasClass(this._element, CLASS_NAME_FIXED_ACTION_BTN)) {\n      EventHandler.off(this._buttonList, EVENT_TRANSITIONEND);\n      EventHandler.trigger(this._element, EVENT_SHOW);\n      // EventHandler.on(this._buttonList, EVENT_TRANSITIONEND, this._bindListOpenTransitionEnd);\n      this._bindListOpenTransitionEnd();\n      Manipulator.addStyle(this._element, { height: `${this._fullContainerHeight}px` });\n      this._toggleVisibility(true);\n    }\n  }\n\n  hide() {\n    if (Manipulator.hasClass(this._element, CLASS_NAME_FIXED_ACTION_BTN)) {\n      EventHandler.off(this._buttonList, EVENT_TRANSITIONEND);\n      EventHandler.trigger(this._element, EVENT_HIDE);\n      // EventHandler.on(this._buttonList, EVENT_TRANSITIONEND, this._bindListHideTransitionEnd);\n      this._bindListHideTransitionEnd();\n      this._toggleVisibility(false);\n    }\n  }\n\n  dispose() {\n    if (Manipulator.hasClass(this._element, CLASS_NAME_FIXED_ACTION_BTN)) {\n      EventHandler.off(this._actionButton, EVENT_CLICK);\n      this._actionButton.removeEventListener(EVENT_MOUSEENTER, this._fn.mouseenter);\n      this._element.removeEventListener(EVENT_MOUSELEAVE, this._fn.mouseleave);\n    }\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n  _init() {\n    if (Manipulator.hasClass(this._element, CLASS_NAME_FIXED_ACTION_BTN)) {\n      this._saveInitialHeights();\n      this._setInitialStyles();\n      this._bindInitialEvents();\n    }\n  }\n\n  _bindMouseEnter() {\n    this._actionButton.addEventListener(\n      EVENT_MOUSEENTER,\n      // prettier-ignore\n      this._fn.mouseenter = () => {\n        if (!this._isTouchDevice) {\n          this.show();\n        }\n      }\n      // prettier-ignore\n    );\n  }\n\n  _bindMouseLeave() {\n    this._element.addEventListener(\n      EVENT_MOUSELEAVE,\n      // prettier-ignore\n      this._fn.mouseleave = () => {\n        this.hide();\n      }\n      // prettier-ignore\n    );\n  }\n\n  _bindClick() {\n    EventHandler.on(this._actionButton, EVENT_CLICK, () => {\n      if (Manipulator.hasClass(this._element, CLASS_NAME_ACTIVE)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    });\n  }\n\n  _bindListHideTransitionEnd() {\n    EventHandler.on(this._buttonList, EVENT_TRANSITIONEND, (event) => {\n      if (event.propertyName === 'transform') {\n        EventHandler.off(this._buttonList, EVENT_TRANSITIONEND);\n        this._element.style.height = `${this._initialContainerHeight}px`;\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      }\n    });\n  }\n\n  _bindListOpenTransitionEnd() {\n    EventHandler.on(this._buttonList, EVENT_TRANSITIONEND, (event) => {\n      if (event.propertyName === 'transform') {\n        EventHandler.off(this._buttonList, EVENT_TRANSITIONEND);\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n      }\n    });\n  }\n\n  _toggleVisibility(isVisible) {\n    const action = isVisible ? 'addClass' : 'removeClass';\n    const listTranslate = isVisible ? 'translate(0)' : `translateY(${this._fullContainerHeight}px)`;\n    Manipulator.addStyle(this._buttonList, { transform: listTranslate });\n\n    if (this._buttonListElements) {\n      this._buttonListElements.forEach((el) => Manipulator[action](el, CLASS_NAME_SHOWN));\n    }\n    Manipulator[action](this._element, CLASS_NAME_ACTIVE);\n  }\n\n  _getHeight(element) {\n    const computed = window.getComputedStyle(element);\n    const height = parseFloat(computed.getPropertyValue('height'));\n    return height;\n  }\n\n  _saveInitialHeights() {\n    this._initialContainerHeight = this._getHeight(this._element);\n    this._initialListHeight = this._getHeight(this._buttonList);\n    this._fullContainerHeight = this._initialContainerHeight + this._initialListHeight;\n  }\n\n  _bindInitialEvents() {\n    this._bindClick();\n    this._bindMouseEnter();\n    this._bindMouseLeave();\n  }\n\n  _setInitialStyles() {\n    this._buttonList.style.marginBottom = `${this._initialContainerHeight}px`;\n    this._buttonList.style.transform = `translateY(${this._fullContainerHeight}px)`;\n\n    this._element.style.height = `${this._initialContainerHeight}px`;\n  }\n}\n\nexport default Button;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js';\n\nconst getSelector = (element) => {\n  let selector = element.getAttribute('data-mdb-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttribute = element.getAttribute('href');\n\n    // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n    if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n      return null;\n    }\n\n    // Just in case some CMS puts out a full URL with the anchor appended\n    if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n      hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n    }\n\n    selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null;\n  }\n\n  return selector;\n};\n\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter((child) => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode.closest(selector);\n\n    while (ancestor) {\n      parents.push(ancestor);\n      ancestor = ancestor.parentNode.closest(selector);\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n  // TODO: this is now unused; remove later along with prev()\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  },\n\n  focusableChildren(element) {\n    const focusables = [\n      'a',\n      'button',\n      'input',\n      'textarea',\n      'select',\n      'details',\n      '[tabindex]',\n      '[contenteditable=\"true\"]',\n    ]\n      .map((selector) => `${selector}:not([tabindex^=\"-\"])`)\n      .join(',');\n\n    return this.find(focusables, element).filter((el) => !isDisabled(el) && isVisible(el));\n  },\n\n  getSelectorFromElement(element) {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return SelectorEngine.findOne(selector) ? selector : null;\n    }\n\n    return null;\n  },\n\n  getElementFromSelector(element) {\n    const selector = getSelector(element);\n\n    return selector ? SelectorEngine.findOne(selector) : null;\n  },\n\n  getMultipleElementsFromSelector(element) {\n    const selector = getSelector(element);\n\n    return selector ? SelectorEngine.find(selector) : [];\n  },\n};\n\nexport default SelectorEngine;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js';\nimport Config from './config.js';\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop';\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`;\n\nconst Default = {\n  className: 'modal-backdrop',\n  clickCallback: null,\n  isAnimated: false,\n  isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n  rootElement: 'body', // give the choice to place backdrop under different elements\n};\n\nconst DefaultType = {\n  className: 'string',\n  clickCallback: '(function|null)',\n  isAnimated: 'boolean',\n  isVisible: 'boolean',\n  rootElement: '(element|string)',\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n  constructor(config) {\n    super();\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    const element = this._getElement();\n    if (this._config.isAnimated) {\n      reflow(element);\n    }\n\n    element.classList.add(CLASS_NAME_SHOW);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n    this._isAppended = false;\n  }\n\n  // Private\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = this._config.className;\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _configAfterMerge(config) {\n    // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n    config.rootElement = getElement(config.rootElement);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    const element = this._getElement();\n    this._config.rootElement.append(element);\n\n    EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n\n    this._isAppended = true;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n}\n\nexport default Backdrop;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js';\nimport SelectorEngine from '../dom/selector-engine.js';\nimport { isDisabled } from './index.js';\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n  const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n  const name = component.NAME;\n\n  EventHandler.on(document, clickEvent, `[data-mdb-dismiss=\"${name}\"]`, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n    const instance = component.getOrCreateInstance(target);\n\n    // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n    instance[method]();\n  });\n};\n\nexport { enableDismissTrigger };\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js';\nimport SelectorEngine from '../dom/selector-engine.js';\nimport Config from './config.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap';\nconst DATA_KEY = 'bs.focustrap';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`;\n\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\n\nconst Default = {\n  autofocus: true,\n  trapElement: null, // The element to trap focus inside of\n};\n\nconst DefaultType = {\n  autofocus: 'boolean',\n  trapElement: 'element',\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n  constructor(config) {\n    super();\n    this._config = this._getConfig(config);\n    this._isActive = false;\n    this._lastTabNavDirection = null;\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  activate() {\n    if (this._isActive) {\n      return;\n    }\n\n    if (this._config.autofocus) {\n      this._config.trapElement.focus();\n    }\n\n    EventHandler.off(document, EVENT_KEY); // guard against infinite focus loop\n    EventHandler.on(document, EVENT_FOCUSIN, (event) => this._handleFocusin(event));\n    EventHandler.on(document, EVENT_KEYDOWN_TAB, (event) => this._handleKeydown(event));\n\n    this._isActive = true;\n  }\n\n  deactivate() {\n    if (!this._isActive) {\n      return;\n    }\n\n    this._isActive = false;\n    EventHandler.off(document, EVENT_KEY);\n  }\n\n  // Private\n  _handleFocusin(event) {\n    const { trapElement } = this._config;\n\n    if (\n      event.target === document ||\n      event.target === trapElement ||\n      trapElement.contains(event.target)\n    ) {\n      return;\n    }\n\n    const elements = SelectorEngine.focusableChildren(trapElement);\n\n    if (elements.length === 0) {\n      trapElement.focus();\n    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n      elements[elements.length - 1].focus();\n    } else {\n      elements[0].focus();\n    }\n  }\n\n  _handleKeydown(event) {\n    if (event.key !== TAB_KEY) {\n      return;\n    }\n\n    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n  }\n}\n\nexport default FocusTrap;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js';\nimport SelectorEngine from '../dom/selector-engine.js';\nimport { isElement } from './index.js';\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  // Public\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n    this._disableOverFlow();\n    // give padding to element to balance the hidden scrollbar width\n    this._setElementAttributes(\n      this._element,\n      PROPERTY_PADDING,\n      (calculatedValue) => calculatedValue + width\n    );\n    // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n    this._setElementAttributes(\n      SELECTOR_FIXED_CONTENT,\n      PROPERTY_PADDING,\n      (calculatedValue) => calculatedValue + width\n    );\n    this._setElementAttributes(\n      SELECTOR_STICKY_CONTENT,\n      PROPERTY_MARGIN,\n      (calculatedValue) => calculatedValue - width\n    );\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n    this._resetElementAttributes(this._element, PROPERTY_PADDING);\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n  // Private\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProperty, callback) {\n    const scrollbarWidth = this.getWidth();\n    const manipulationCallBack = (element) => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProperty);\n      const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n      element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _saveInitialAttribute(element, styleProperty) {\n    const actualValue = element.style.getPropertyValue(styleProperty);\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProperty, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProperty) {\n    const manipulationCallBack = (element) => {\n      const value = Manipulator.getDataAttribute(element, styleProperty);\n      // We only want to remove the property if the value is `null`; the value can also be zero\n      if (value === null) {\n        element.style.removeProperty(styleProperty);\n        return;\n      }\n\n      Manipulator.removeDataAttribute(element, styleProperty);\n      element.style.setProperty(styleProperty, value);\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n      return;\n    }\n\n    for (const sel of SelectorEngine.find(selector, this._element)) {\n      callBack(sel);\n    }\n  }\n}\n\nexport default ScrollBarHelper;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport Backdrop from './util/backdrop.js';\nimport { enableDismissTrigger } from './util/component-functions.js';\nimport FocusTrap from './util/focustrap.js';\nimport { defineJQueryPlugin, isDisabled, isVisible } from './util/index.js';\nimport ScrollBarHelper from './util/scrollbar.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas';\nconst DATA_KEY = 'bs.offcanvas';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;\nconst ESCAPE_KEY = 'Escape';\n\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\n\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;\n\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-toggle=\"offcanvas\"]';\n\nconst Default = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false,\n};\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  scroll: 'boolean',\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n    this._focustrap = this._initializeFocusTrap();\n    this._addEventListeners();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n    }\n\n    this._element.setAttribute('aria-modal', true);\n    this._element.setAttribute('role', 'dialog');\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    const completeCallBack = () => {\n      if (!this._config.scroll || this._config.backdrop) {\n        this._focustrap.activate();\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n      EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._focustrap.deactivate();\n    this._element.blur();\n    this._isShown = false;\n    this._element.classList.add(CLASS_NAME_HIDING);\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING);\n      this._element.removeAttribute('aria-modal');\n      this._element.removeAttribute('role');\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n    this._focustrap.deactivate();\n    super.dispose();\n  }\n\n  // Private\n  _initializeBackDrop() {\n    const clickCallback = () => {\n      if (this._config.backdrop === 'static') {\n        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n        return;\n      }\n\n      this.hide();\n    };\n\n    // 'static' option will be translated to true, and booleans will keep their value\n    const isVisible = Boolean(this._config.backdrop);\n\n    return new Backdrop({\n      className: CLASS_NAME_BACKDROP,\n      isVisible,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: isVisible ? clickCallback : null,\n    });\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element,\n    });\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, (event) => {\n      if (event.key !== ESCAPE_KEY) {\n        return;\n      }\n\n      if (this._config.keyboard) {\n        this.hide();\n        return;\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n    });\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n//   const target = SelectorEngine.getElementFromSelector(this);\n\n//   if (['A', 'AREA'].includes(this.tagName)) {\n//     event.preventDefault();\n//   }\n\n//   if (isDisabled(this)) {\n//     return;\n//   }\n\n//   EventHandler.one(target, EVENT_HIDDEN, () => {\n//     // focus on trigger when it is closed\n//     if (isVisible(this)) {\n//       this.focus();\n//     }\n//   });\n\n//   // avoid conflict when clicking a toggler of an offcanvas, while another is open\n//   const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n//   if (alreadyOpen && alreadyOpen !== target) {\n//     Offcanvas.getInstance(alreadyOpen).hide();\n//   }\n\n//   const data = Offcanvas.getOrCreateInstance(target);\n//   data.toggle(this);\n// });\n\n// EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n//   for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n//     Offcanvas.getOrCreateInstance(selector).show();\n//   }\n// });\n\n// EventHandler.on(window, EVENT_RESIZE, () => {\n//   for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n//     if (getComputedStyle(element).position !== 'fixed') {\n//       Offcanvas.getOrCreateInstance(element).hide();\n//     }\n//   }\n// });\n\n// enableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Offcanvas);\n\nexport default Offcanvas;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js';\nimport Config from './config.js';\nimport { execute } from './index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe';\nconst EVENT_KEY = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\n\nconst Default = {\n  endCallback: null,\n  leftCallback: null,\n  rightCallback: null,\n};\n\nconst DefaultType = {\n  endCallback: '(function|null)',\n  leftCallback: '(function|null)',\n  rightCallback: '(function|null)',\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n  constructor(element, config) {\n    super();\n    this._element = element;\n\n    if (!element || !Swipe.isSupported()) {\n      return;\n    }\n\n    this._config = this._getConfig(config);\n    this._deltaX = 0;\n    this._supportPointerEvents = Boolean(window.PointerEvent);\n    this._initEvents();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  dispose() {\n    EventHandler.off(this._element, EVENT_KEY);\n  }\n\n  // Private\n  _start(event) {\n    if (!this._supportPointerEvents) {\n      this._deltaX = event.touches[0].clientX;\n\n      return;\n    }\n\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX;\n    }\n  }\n\n  _end(event) {\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX - this._deltaX;\n    }\n\n    this._handleSwipe();\n    execute(this._config.endCallback);\n  }\n\n  _move(event) {\n    this._deltaX =\n      event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n  }\n\n  _handleSwipe() {\n    const absDeltaX = Math.abs(this._deltaX);\n\n    if (absDeltaX <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltaX / this._deltaX;\n\n    this._deltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n  }\n\n  _initEvents() {\n    if (this._supportPointerEvents) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, (event) => this._start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, (event) => this._end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, (event) => this._start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, (event) => this._move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, (event) => this._end(event));\n    }\n  }\n\n  _eventIsPointerPenTouch(event) {\n    return (\n      this._supportPointerEvents &&\n      (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n    );\n  }\n\n  // Static\n  static isSupported() {\n    return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n  }\n}\n\nexport default Swipe;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport Manipulator from './dom/manipulator.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport {\n  defineJQueryPlugin,\n  getNextActiveElement,\n  isRTL,\n  isVisible,\n  reflow,\n  triggerTransitionEnd,\n} from './util/index.js';\nimport Swipe from './util/swipe.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel';\nconst DATA_KEY = 'bs.carousel';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`;\nconst EVENT_SLID = `slid${EVENT_KEY}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\n\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-mdb-slide], [data-mdb-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-mdb-ride=\"carousel\"]';\n\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT,\n};\n\nconst Default = {\n  interval: 5000,\n  keyboard: true,\n  pause: 'hover',\n  ride: false,\n  touch: true,\n  wrap: true,\n};\n\nconst DefaultType = {\n  interval: '(number|boolean)', // TODO:v6 remove boolean support\n  keyboard: 'boolean',\n  pause: '(string|boolean)',\n  ride: '(boolean|string)',\n  touch: 'boolean',\n  wrap: 'boolean',\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._interval = null;\n    this._activeElement = null;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this._swipeHelper = null;\n\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._addEventListeners();\n\n    if (this._config.ride === CLASS_NAME_CAROUSEL) {\n      this.cycle();\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // FIXME TODO use `document.visibilityState`\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause() {\n    if (this._isSliding) {\n      triggerTransitionEnd(this._element);\n    }\n\n    this._clearInterval();\n  }\n\n  cycle() {\n    this._clearInterval();\n    this._updateInterval();\n\n    this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n  }\n\n  _maybeEnableCycle() {\n    if (!this._config.ride) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n      return;\n    }\n\n    this.cycle();\n  }\n\n  to(index) {\n    const items = this._getItems();\n    if (index > items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    const activeIndex = this._getItemIndex(this._getActive());\n    if (activeIndex === index) {\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, items[index]);\n  }\n\n  dispose() {\n    if (this._swipeHelper) {\n      this._swipeHelper.dispose();\n    }\n\n    super.dispose();\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    config.defaultInterval = config.interval;\n    return config;\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, (event) => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause());\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle());\n    }\n\n    if (this._config.touch && Swipe.isSupported()) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n      EventHandler.on(img, EVENT_DRAG_START, (event) => event.preventDefault());\n    }\n\n    const endCallBack = () => {\n      if (this._config.pause !== 'hover') {\n        return;\n      }\n\n      // If it's a touch-enabled device, mouseenter/leave are fired as\n      // part of the mouse compatibility events on first tap - the carousel\n      // would stop cycling until user tapped out of it;\n      // here, we listen for touchend, explicitly pause the carousel\n      // (as if it's the second time we tap on it, mouseenter compat event\n      // is NOT fired) and after a timeout (to allow for mouse compatibility\n      // events to fire) we explicitly restart cycling\n\n      this.pause();\n      if (this.touchTimeout) {\n        clearTimeout(this.touchTimeout);\n      }\n\n      this.touchTimeout = setTimeout(\n        () => this._maybeEnableCycle(),\n        TOUCHEVENT_COMPAT_WAIT + this._config.interval\n      );\n    };\n\n    const swipeConfig = {\n      leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n      rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n      endCallback: endCallBack,\n    };\n\n    this._swipeHelper = new Swipe(this._element, swipeConfig);\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n    if (direction) {\n      event.preventDefault();\n      this._slide(this._directionToOrder(direction));\n    }\n  }\n\n  _getItemIndex(element) {\n    return this._getItems().indexOf(element);\n  }\n\n  _setActiveIndicatorElement(index) {\n    if (!this._indicatorsElement) {\n      return;\n    }\n\n    const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n\n    activeIndicator.classList.remove(CLASS_NAME_ACTIVE);\n    activeIndicator.removeAttribute('aria-current');\n\n    const newActiveIndicator = SelectorEngine.findOne(\n      `[data-mdb-slide-to=\"${index}\"]`,\n      this._indicatorsElement\n    );\n\n    if (newActiveIndicator) {\n      newActiveIndicator.classList.add(CLASS_NAME_ACTIVE);\n      newActiveIndicator.setAttribute('aria-current', 'true');\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || this._getActive();\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-mdb-interval'), 10);\n\n    this._config.interval = elementInterval || this._config.defaultInterval;\n  }\n\n  _slide(order, element = null) {\n    if (this._isSliding) {\n      return;\n    }\n\n    const activeElement = this._getActive();\n    const isNext = order === ORDER_NEXT;\n    const nextElement =\n      element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n\n    if (nextElement === activeElement) {\n      return;\n    }\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const triggerEvent = (eventName) => {\n      return EventHandler.trigger(this._element, eventName, {\n        relatedTarget: nextElement,\n        direction: this._orderToDirection(order),\n        from: this._getItemIndex(activeElement),\n        to: nextElementIndex,\n      });\n    };\n\n    const slideEvent = triggerEvent(EVENT_SLIDE);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      // TODO: change tests that use empty divs to avoid this check\n      return;\n    }\n\n    const isCycling = Boolean(this._interval);\n    this.pause();\n\n    this._isSliding = true;\n\n    this._setActiveIndicatorElement(nextElementIndex);\n    this._activeElement = nextElement;\n\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    nextElement.classList.add(orderClassName);\n\n    reflow(nextElement);\n\n    activeElement.classList.add(directionalClassName);\n    nextElement.classList.add(directionalClassName);\n\n    const completeCallBack = () => {\n      nextElement.classList.remove(directionalClassName, orderClassName);\n      nextElement.classList.add(CLASS_NAME_ACTIVE);\n\n      activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName);\n\n      this._isSliding = false;\n\n      triggerEvent(EVENT_SLID);\n    };\n\n    this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_SLIDE);\n  }\n\n  _getActive() {\n    return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n  }\n\n  _getItems() {\n    return SelectorEngine.find(SELECTOR_ITEM, this._element);\n  }\n\n  _clearInterval() {\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Carousel.getOrCreateInstance(this, config);\n\n      if (typeof config === 'number') {\n        data.to(config);\n        return;\n      }\n\n      if (typeof config === 'string') {\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n//   const target = getElementFromSelector(this);\n\n//   if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n//     return;\n//   }\n\n//   event.preventDefault();\n\n//   const carousel = Carousel.getOrCreateInstance(target);\n//   const slideIndex = this.getAttribute('data-mdb-slide-to');\n\n//   if (slideIndex) {\n//     carousel.to(slideIndex);\n//     carousel._maybeEnableCycle();\n//     return;\n//   }\n\n//   if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n//     carousel.next();\n//     carousel._maybeEnableCycle();\n//     return;\n//   }\n\n//   carousel.prev();\n//   carousel._maybeEnableCycle();\n// });\n\n// EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n//   const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n//   for (const carousel of carousels) {\n//     Carousel.getOrCreateInstance(carousel);\n//   }\n// });\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Carousel);\n\nexport default Carousel;\n","import EventHandler from '../mdb/dom/event-handler';\nimport BSCarousel from '../bootstrap/mdb-prefix/carousel';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel';\n\nconst EVENT_SLIDE_BS = 'slide.bs.carousel';\nconst EVENT_SLID_BS = 'slid.bs.carousel';\n\nconst EXTENDED_EVENTS = [\n  { name: 'slide', parametersToCopy: ['relatedTarget', 'direction', 'from', 'to'] },\n  { name: 'slid', parametersToCopy: ['relatedTarget', 'direction', 'from', 'to'] },\n];\n\nclass Carousel extends BSCarousel {\n  constructor(element, data) {\n    super(element, data);\n\n    this._init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, EVENT_SLIDE_BS);\n    EventHandler.off(this._element, EVENT_SLID_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Private\n  _init() {\n    this._bindMdbEvents();\n  }\n\n  _bindMdbEvents() {\n    EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n  }\n}\n\nexport default Carousel;\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n  var x = _ref.x,\n      y = _ref.y;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }, getWindow(popper)) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        });\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref) {\n        var name = _ref.name,\n            _ref$options = _ref.options,\n            options = _ref$options === void 0 ? {} : _ref$options,\n            effect = _ref.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n\nexport const DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: [],\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href',\n]);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n  const attributeName = attribute.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n    }\n\n    return true;\n  }\n\n  // Check if a regular expression validates the attribute.\n  return allowedAttributeList\n    .filter((attributeRegex) => attributeRegex instanceof RegExp)\n    .some((regex) => regex.test(attributeName));\n};\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n    return sanitizeFunction(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (const element of elements) {\n    const elementName = element.nodeName.toLowerCase();\n\n    if (!Object.keys(allowList).includes(elementName)) {\n      element.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...element.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n\n    for (const attribute of attributeList) {\n      if (!allowedAttribute(attribute, allowedAttributes)) {\n        element.removeAttribute(attribute.nodeName);\n      }\n    }\n  }\n\n  return createdDocument.body.innerHTML;\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js';\nimport Config from './config.js';\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js';\nimport { execute, getElement, isElement } from './index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory';\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  content: {}, // { selector : text ,  selector2 : text2 , }\n  extraClass: '',\n  html: false,\n  sanitize: true,\n  sanitizeFn: null,\n  template: '<div></div>',\n};\n\nconst DefaultType = {\n  allowList: 'object',\n  content: 'object',\n  extraClass: '(string|function)',\n  html: 'boolean',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  template: 'string',\n};\n\nconst DefaultContentType = {\n  entry: '(string|element|function|null)',\n  selector: '(string|element)',\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n  constructor(config) {\n    super();\n    this._config = this._getConfig(config);\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  getContent() {\n    return Object.values(this._config.content)\n      .map((config) => this._resolvePossibleFunction(config))\n      .filter(Boolean);\n  }\n\n  hasContent() {\n    return this.getContent().length > 0;\n  }\n\n  changeContent(content) {\n    this._checkContent(content);\n    this._config.content = { ...this._config.content, ...content };\n    return this;\n  }\n\n  toHtml() {\n    const templateWrapper = document.createElement('div');\n    templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n\n    for (const [selector, text] of Object.entries(this._config.content)) {\n      this._setContent(templateWrapper, text, selector);\n    }\n\n    const template = templateWrapper.children[0];\n    const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n\n    if (extraClass) {\n      template.classList.add(...extraClass.split(' '));\n    }\n\n    return template;\n  }\n\n  // Private\n  _typeCheckConfig(config) {\n    super._typeCheckConfig(config);\n    this._checkContent(config.content);\n  }\n\n  _checkContent(arg) {\n    for (const [selector, content] of Object.entries(arg)) {\n      super._typeCheckConfig({ selector, entry: content }, DefaultContentType);\n    }\n  }\n\n  _setContent(template, content, selector) {\n    const templateElement = SelectorEngine.findOne(selector, template);\n\n    if (!templateElement) {\n      return;\n    }\n\n    content = this._resolvePossibleFunction(content);\n\n    if (!content) {\n      templateElement.remove();\n      return;\n    }\n\n    if (isElement(content)) {\n      this._putElementInTemplate(getElement(content), templateElement);\n      return;\n    }\n\n    if (this._config.html) {\n      templateElement.innerHTML = this._maybeSanitize(content);\n      return;\n    }\n\n    templateElement.textContent = content;\n  }\n\n  _maybeSanitize(arg) {\n    return this._config.sanitize\n      ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn)\n      : arg;\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [this]);\n  }\n\n  _putElementInTemplate(element, templateElement) {\n    if (this._config.html) {\n      templateElement.innerHTML = '';\n      templateElement.append(element);\n      return;\n    }\n\n    templateElement.textContent = element.textContent;\n  }\n}\n\nexport default TemplateFactory;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core';\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport Manipulator from './dom/manipulator.js';\nimport {\n  defineJQueryPlugin,\n  execute,\n  findShadowRoot,\n  getElement,\n  getUID,\n  isRTL,\n  noop,\n} from './util/index.js';\nimport { DefaultAllowlist } from './util/sanitizer.js';\nimport TemplateFactory from './util/template-factory.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW = 'show';\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\n\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n\nconst EVENT_HIDE = 'hide';\nconst EVENT_HIDDEN = 'hidden';\nconst EVENT_SHOW = 'show';\nconst EVENT_SHOWN = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK = 'click';\nconst EVENT_FOCUSIN = 'focusin';\nconst EVENT_FOCUSOUT = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\n\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left',\n};\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  animation: true,\n  boundary: 'clippingParents',\n  container: false,\n  customClass: '',\n  delay: 0,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  html: false,\n  offset: [0, 6],\n  placement: 'top',\n  popperConfig: null,\n  sanitize: true,\n  sanitizeFn: null,\n  selector: false,\n  template:\n    '<div class=\"tooltip\" role=\"tooltip\">' +\n    '<div class=\"tooltip-arrow\"></div>' +\n    '<div class=\"tooltip-inner\"></div>' +\n    '</div>',\n  title: '',\n  trigger: 'hover focus',\n};\n\nconst DefaultType = {\n  allowList: 'object',\n  animation: 'boolean',\n  boundary: '(string|element)',\n  container: '(string|element|boolean)',\n  customClass: '(string|function)',\n  delay: '(number|object)',\n  fallbackPlacements: 'array',\n  html: 'boolean',\n  offset: '(array|string|function)',\n  placement: '(string|function)',\n  popperConfig: '(null|object|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  selector: '(string|boolean)',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError(\"Bootstrap's tooltips require Popper (https://popper.js.org)\");\n    }\n\n    super(element, config);\n\n    // Private\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._isHovered = null;\n    this._activeTrigger = {};\n    this._popper = null;\n    this._templateFactory = null;\n    this._newContent = null;\n\n    // Protected\n    this.tip = null;\n\n    this._setListeners();\n\n    if (!this._config.selector) {\n      this._fixTitle();\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle() {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    this._activeTrigger.click = !this._activeTrigger.click;\n    if (this._isShown()) {\n      this._leave();\n      return;\n    }\n\n    this._enter();\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n\n    EventHandler.off(\n      this._element.closest(SELECTOR_MODAL),\n      EVENT_MODAL_HIDE,\n      this._hideModalHandler\n    );\n\n    if (this._element.getAttribute('data-mdb-original-title')) {\n      this._element.setAttribute('title', this._element.getAttribute('data-mdb-original-title'));\n    }\n\n    this._disposePopper();\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this._isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW));\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(\n      this._element\n    );\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    // TODO: v6 remove this or make it optional\n    this._disposePopper();\n\n    const tip = this._getTipElement();\n\n    this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n\n    const { container } = this._config;\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.append(tip);\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n    }\n\n    this._popper = this._createPopper(tip);\n\n    tip.classList.add(CLASS_NAME_SHOW);\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop);\n      }\n    }\n\n    const complete = () => {\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN));\n\n      if (this._isHovered === false) {\n        this._leave();\n      }\n\n      this._isHovered = false;\n    };\n\n    this._queueCallback(complete, this.tip, this._isAnimated());\n  }\n\n  hide() {\n    if (!this._isShown()) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE));\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const tip = this._getTipElement();\n    tip.classList.remove(CLASS_NAME_SHOW);\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop);\n      }\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    this._isHovered = null; // it is a trick to support manual triggering\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (!this._isHovered) {\n        this._disposePopper();\n      }\n\n      this._element.removeAttribute('aria-describedby');\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN));\n    };\n\n    this._queueCallback(complete, this.tip, this._isAnimated());\n  }\n\n  update() {\n    if (this._popper) {\n      this._popper.update();\n    }\n  }\n\n  // Protected\n  _isWithContent() {\n    return Boolean(this._getTitle());\n  }\n\n  _getTipElement() {\n    if (!this.tip) {\n      this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n    }\n\n    return this.tip;\n  }\n\n  _createTipElement(content) {\n    const tip = this._getTemplateFactory(content).toHtml();\n\n    // TODO: remove this check in v6\n    if (!tip) {\n      return null;\n    }\n\n    tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);\n    // TODO: v6 the following can be achieved with CSS only\n    tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n\n    const tipId = getUID(this.constructor.NAME).toString();\n\n    tip.setAttribute('id', tipId);\n\n    if (this._isAnimated()) {\n      tip.classList.add(CLASS_NAME_FADE);\n    }\n\n    return tip;\n  }\n\n  setContent(content) {\n    this._newContent = content;\n    if (this._isShown()) {\n      this._disposePopper();\n      this.show();\n    }\n  }\n\n  _getTemplateFactory(content) {\n    if (this._templateFactory) {\n      this._templateFactory.changeContent(content);\n    } else {\n      this._templateFactory = new TemplateFactory({\n        ...this._config,\n        // the `content` var has to be after `this._config`\n        // to override config.content in case of popover\n        content,\n        extraClass: this._resolvePossibleFunction(this._config.customClass),\n      });\n    }\n\n    return this._templateFactory;\n  }\n\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TOOLTIP_INNER]: this._getTitle(),\n    };\n  }\n\n  _getTitle() {\n    return (\n      this._resolvePossibleFunction(this._config.title) ||\n      this._element.getAttribute('data-mdb-original-title')\n    );\n  }\n\n  // Private\n  _initializeOnDelegatedTarget(event) {\n    return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n  }\n\n  _isAnimated() {\n    return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE));\n  }\n\n  _isShown() {\n    return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW);\n  }\n\n  _createPopper(tip) {\n    const placement = execute(this._config.placement, [this, tip, this._element]);\n    const attachment = AttachmentMap[placement.toUpperCase()];\n    return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n  }\n\n  _getOffset() {\n    const { offset } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map((value) => Number.parseInt(value, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return (popperData) => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [this._element]);\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [\n        {\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements,\n          },\n        },\n        {\n          name: 'offset',\n          options: {\n            offset: this._getOffset(),\n          },\n        },\n        {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary,\n          },\n        },\n        {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`,\n          },\n        },\n        {\n          name: 'preSetPlacement',\n          enabled: true,\n          phase: 'beforeMain',\n          fn: (data) => {\n            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n            this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n          },\n        },\n      ],\n    };\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [defaultBsPopperConfig]),\n    };\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    for (const trigger of triggers) {\n      if (trigger === 'click') {\n        EventHandler.on(\n          this._element,\n          this.constructor.eventName(EVENT_CLICK),\n          this._config.selector,\n          (event) => {\n            const context = this._initializeOnDelegatedTarget(event);\n            context.toggle();\n          }\n        );\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn =\n          trigger === TRIGGER_HOVER\n            ? this.constructor.eventName(EVENT_MOUSEENTER)\n            : this.constructor.eventName(EVENT_FOCUSIN);\n        const eventOut =\n          trigger === TRIGGER_HOVER\n            ? this.constructor.eventName(EVENT_MOUSELEAVE)\n            : this.constructor.eventName(EVENT_FOCUSOUT);\n\n        EventHandler.on(this._element, eventIn, this._config.selector, (event) => {\n          const context = this._initializeOnDelegatedTarget(event);\n          context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n          context._enter();\n        });\n        EventHandler.on(this._element, eventOut, this._config.selector, (event) => {\n          const context = this._initializeOnDelegatedTarget(event);\n          context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n            context._element.contains(event.relatedTarget);\n\n          context._leave();\n        });\n      }\n    }\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(\n      this._element.closest(SELECTOR_MODAL),\n      EVENT_MODAL_HIDE,\n      this._hideModalHandler\n    );\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    if (!title) {\n      return;\n    }\n\n    if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n      this._element.setAttribute('aria-label', title);\n    }\n\n    this._element.setAttribute('data-mdb-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n    this._element.removeAttribute('title');\n  }\n\n  _enter() {\n    if (this._isShown() || this._isHovered) {\n      this._isHovered = true;\n      return;\n    }\n\n    this._isHovered = true;\n\n    this._setTimeout(() => {\n      if (this._isHovered) {\n        this.show();\n      }\n    }, this._config.delay.show);\n  }\n\n  _leave() {\n    if (this._isWithActiveTrigger()) {\n      return;\n    }\n\n    this._isHovered = false;\n\n    this._setTimeout(() => {\n      if (!this._isHovered) {\n        this.hide();\n      }\n    }, this._config.delay.hide);\n  }\n\n  _setTimeout(handler, timeout) {\n    clearTimeout(this._timeout);\n    this._timeout = setTimeout(handler, timeout);\n  }\n\n  _isWithActiveTrigger() {\n    return Object.values(this._activeTrigger).includes(true);\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n    for (const dataAttribute of Object.keys(dataAttributes)) {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n        delete dataAttributes[dataAttribute];\n      }\n    }\n\n    config = {\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {}),\n    };\n    config = this._mergeConfigObj(config);\n    config = this._configAfterMerge(config);\n    this._typeCheckConfig(config);\n    return config;\n  }\n\n  _configAfterMerge(config) {\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay,\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    for (const [key, value] of Object.entries(this._config)) {\n      if (this.constructor.Default[key] !== value) {\n        config[key] = value;\n      }\n    }\n\n    config.selector = false;\n    config.trigger = 'manual';\n\n    // In the future can be replaced with:\n    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n    // `Object.fromEntries(keysWithDifferentValues)`\n    return config;\n  }\n\n  _disposePopper() {\n    if (this._popper) {\n      this._popper.destroy();\n      this._popper = null;\n    }\n\n    if (this.tip) {\n      this.tip.remove();\n      this.tip = null;\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n}\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Tooltip);\n\nexport default Tooltip;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js';\nimport { defineJQueryPlugin } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'popover';\n\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n\nconst Default = {\n  ...Tooltip.Default,\n  content: '',\n  offset: [0, 8],\n  placement: 'right',\n  template:\n    '<div class=\"popover\" role=\"tooltip\">' +\n    '<div class=\"popover-arrow\"></div>' +\n    '<h3 class=\"popover-header\"></h3>' +\n    '<div class=\"popover-body\"></div>' +\n    '</div>',\n  trigger: 'click',\n};\n\nconst DefaultType = {\n  ...Tooltip.DefaultType,\n  content: '(null|string|element|function)',\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Overrides\n  _isWithContent() {\n    return this._getTitle() || this._getContent();\n  }\n\n  // Private\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TITLE]: this._getTitle(),\n      [SELECTOR_CONTENT]: this._getContent(),\n    };\n  }\n\n  _getContent() {\n    return this._resolvePossibleFunction(this._config.content);\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n}\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Popover);\n\nexport default Popover;\n","import EventHandler from '../mdb/dom/event-handler';\nimport BSPopover from '../bootstrap/mdb-prefix/popover';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover';\n\nconst EVENT_SHOW_BS = 'show.bs.popover';\nconst EVENT_SHOWN_BS = 'shown.bs.popover';\nconst EVENT_HIDE_BS = 'hide.bs.popover';\nconst EVENT_HIDDEN_BS = 'hidden.bs.popover';\nconst EVENT_INSERTED_BS = 'inserted.bs.popover';\n\nconst EXTENDED_EVENTS = [\n  { name: 'show' },\n  { name: 'shown' },\n  { name: 'hide' },\n  { name: 'hidden' },\n  { name: 'inserted' },\n];\n\nclass Popover extends BSPopover {\n  constructor(element, data) {\n    super(element, data);\n\n    this._init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this.element, EVENT_SHOW_BS);\n    EventHandler.off(this.element, EVENT_SHOWN_BS);\n    EventHandler.off(this.element, EVENT_HIDE_BS);\n    EventHandler.off(this.element, EVENT_HIDDEN_BS);\n    EventHandler.off(this.element, EVENT_INSERTED_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Private\n  _init() {\n    this._bindMdbEvents();\n  }\n\n  _bindMdbEvents() {\n    EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n  }\n}\n\nexport default Popover;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy';\nconst DATA_KEY = 'bs.scrollspy';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`;\nconst EVENT_CLICK = `click${EVENT_KEY}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE = 'active';\n\nconst SELECTOR_DATA_SPY = '[data-mdb-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n\nconst Default = {\n  offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: '0px 0px -25%',\n  smoothScroll: false,\n  target: null,\n  threshold: [0.1, 0.5, 1],\n};\n\nconst DefaultType = {\n  offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: 'string',\n  smoothScroll: 'boolean',\n  target: 'element',\n  threshold: 'array',\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    if (!this._config.target) {\n      return;\n    }\n\n    // this._element is the observablesContainer and config.target the menu links wrapper\n    this._targetLinks = new Map();\n    this._observableSections = new Map();\n    this._rootElement =\n      getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n    this._activeTarget = null;\n    this._observer = null;\n    this._previousScrollData = {\n      visibleEntryTop: 0,\n      parentScrollTop: 0,\n    };\n    this.refresh(); // initialize\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  refresh() {\n    this._initializeTargetsAndObservables();\n    this._maybeEnableSmoothScroll();\n\n    if (this._observer) {\n      this._observer.disconnect();\n    } else {\n      this._observer = this._getNewObserver();\n    }\n\n    for (const section of this._observableSections.values()) {\n      this._observer.observe(section);\n    }\n  }\n\n  dispose() {\n    if (this._observer) {\n      this._observer.disconnect();\n    }\n    super.dispose();\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n    config.target = getElement(config.target) || document.body;\n\n    // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n    config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n\n    if (typeof config.threshold === 'string') {\n      config.threshold = config.threshold.split(',').map((value) => Number.parseFloat(value));\n    }\n\n    return config;\n  }\n\n  _maybeEnableSmoothScroll() {\n    if (!this._config.smoothScroll) {\n      return;\n    }\n\n    // unregister any previous listeners\n    EventHandler.off(this._config.target, EVENT_CLICK);\n\n    EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, (event) => {\n      const observableSection = this._observableSections.get(event.target.hash);\n      if (observableSection) {\n        event.preventDefault();\n        const root = this._rootElement || window;\n        const height = observableSection.offsetTop - this._element.offsetTop;\n        if (root.scrollTo) {\n          root.scrollTo({ top: height, behavior: 'smooth' });\n          return;\n        }\n\n        // Chrome 60 doesn't support `scrollTo`\n        root.scrollTop = height;\n      }\n    });\n  }\n\n  _getNewObserver() {\n    const options = {\n      root: this._rootElement,\n      threshold: this._config.threshold,\n      rootMargin: this._config.rootMargin,\n    };\n\n    return new IntersectionObserver((entries) => this._observerCallback(entries), options);\n  }\n\n  // The logic of selection\n  _observerCallback(entries) {\n    const targetElement = (entry) => this._targetLinks.get(`#${entry.target.id}`);\n    const activate = (entry) => {\n      this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n      this._process(targetElement(entry));\n    };\n\n    const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n    const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n    this._previousScrollData.parentScrollTop = parentScrollTop;\n\n    for (const entry of entries) {\n      if (!entry.isIntersecting) {\n        this._activeTarget = null;\n        this._clearActiveClass(targetElement(entry));\n\n        continue;\n      }\n\n      const entryIsLowerThanPrevious =\n        entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n      // if we are scrolling down, pick the bigger offsetTop\n      if (userScrollsDown && entryIsLowerThanPrevious) {\n        activate(entry);\n        // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n        if (!parentScrollTop) {\n          return;\n        }\n\n        continue;\n      }\n\n      // if we are scrolling up, pick the smallest offsetTop\n      if (!userScrollsDown && !entryIsLowerThanPrevious) {\n        activate(entry);\n      }\n    }\n  }\n\n  _initializeTargetsAndObservables() {\n    this._targetLinks = new Map();\n    this._observableSections = new Map();\n\n    const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n\n    for (const anchor of targetLinks) {\n      // ensure that the anchor has an id and is not disabled\n      if (!anchor.hash || isDisabled(anchor)) {\n        continue;\n      }\n\n      const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n      // ensure that the observableSection exists & is visible\n      if (isVisible(observableSection)) {\n        this._targetLinks.set(decodeURI(anchor.hash), anchor);\n        this._observableSections.set(anchor.hash, observableSection);\n      }\n    }\n  }\n\n  _process(target) {\n    if (this._activeTarget === target) {\n      return;\n    }\n\n    this._clearActiveClass(this._config.target);\n    this._activeTarget = target;\n    target.classList.add(CLASS_NAME_ACTIVE);\n    this._activateParents(target);\n\n    EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target });\n  }\n\n  _activateParents(target) {\n    // Activate dropdown parents\n    if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(\n        SELECTOR_DROPDOWN_TOGGLE,\n        target.closest(SELECTOR_DROPDOWN)\n      ).classList.add(CLASS_NAME_ACTIVE);\n      return;\n    }\n\n    for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n      // Set triggered links parents as active\n      // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n      for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n        item.classList.add(CLASS_NAME_ACTIVE);\n      }\n    }\n  }\n\n  _clearActiveClass(parent) {\n    parent.classList.remove(CLASS_NAME_ACTIVE);\n\n    const activeNodes = SelectorEngine.find(\n      `${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`,\n      parent\n    );\n    for (const node of activeNodes) {\n      node.classList.remove(CLASS_NAME_ACTIVE);\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n//   for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n//     ScrollSpy.getOrCreateInstance(spy);\n//   }\n// });\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(ScrollSpy);\n\nexport default ScrollSpy;\n","import EventHandler from '../mdb/dom/event-handler';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport Manipulator from '../mdb/dom/manipulator';\nimport BSScrollSpy from '../bootstrap/mdb-prefix/scrollspy';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_ACTIVATE_BS = 'activate.bs.scrollspy';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`;\n\nconst CLASS_COLLAPSIBLE = 'collapsible-scrollspy';\nconst CLASS_ACTIVE = 'active';\n\nconst SELECTOR_LIST = 'ul';\nconst SELECTOR_ACTIVE = `.${CLASS_ACTIVE}`;\nconst SELECTOR_COLLAPSIBLE_SCROLLSPY = `.${CLASS_COLLAPSIBLE}`;\n\nclass ScrollSpy extends BSScrollSpy {\n  constructor(element, data) {\n    super(element, data);\n\n    this._collapsibles = [];\n    this._init();\n\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_ACTIVATE_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Private\n  _init() {\n    this._bindActivateEvent();\n    this._getCollapsibles();\n\n    if (this._collapsibles.length === 0) {\n      return;\n    }\n\n    this._showSubsection();\n    this._hideSubsection();\n  }\n\n  _getHeight(element) {\n    return element.offsetHeight;\n  }\n\n  _hide(target) {\n    const itemsToHide = SelectorEngine.findOne(SELECTOR_LIST, target.parentNode);\n    itemsToHide.style.overflow = 'hidden';\n    itemsToHide.style.height = `${0}px`;\n  }\n\n  _show(target, destinedHeight) {\n    target.style.height = destinedHeight;\n  }\n\n  _getCollapsibles() {\n    const collapsibleElements = SelectorEngine.find(SELECTOR_COLLAPSIBLE_SCROLLSPY);\n\n    if (!collapsibleElements) {\n      return;\n    }\n\n    collapsibleElements.forEach((collapsibleElement) => {\n      const listParent = collapsibleElement.parentNode;\n      const list = SelectorEngine.findOne(SELECTOR_LIST, listParent);\n      const listHeight = list.offsetHeight;\n      this._collapsibles.push({\n        element: list,\n        relatedTarget: collapsibleElement.getAttribute('href'),\n        height: `${listHeight}px`,\n      });\n    });\n  }\n\n  _showSubsection() {\n    const activeElements = SelectorEngine.find(SELECTOR_ACTIVE);\n    const actives = activeElements.filter((active) => {\n      return Manipulator.hasClass(active, CLASS_COLLAPSIBLE);\n    });\n\n    actives.forEach((active) => {\n      const list = SelectorEngine.findOne(SELECTOR_LIST, active.parentNode);\n      const height = this._collapsibles.find((collapsible) => {\n        return (collapsible.relatedTarget = active.getAttribute('href'));\n      }).height;\n      this._show(list, height);\n    });\n  }\n\n  _hideSubsection() {\n    const unactives = SelectorEngine.find(SELECTOR_COLLAPSIBLE_SCROLLSPY).filter((collapsible) => {\n      return Manipulator.hasClass(collapsible, 'active') === false;\n    });\n    unactives.forEach((unactive) => {\n      this._hide(unactive);\n    });\n  }\n\n  _bindActivateEvent() {\n    EventHandler.on(this._element, EVENT_ACTIVATE_BS, (e) => {\n      this._showSubsection();\n      this._hideSubsection();\n      EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n        relatedTarget: e.relatedTarget,\n      });\n    });\n  }\n}\n\nexport default ScrollSpy;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'tab';\nconst DATA_KEY = 'bs.tab';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`;\n\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst HOME_KEY = 'Home';\nconst END_KEY = 'End';\n\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_DROPDOWN = 'dropdown';\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\nconst SELECTOR_OUTER = '.nav-item, .list-group-item';\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-tab-initialized]'; // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-mdb-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-mdb-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-mdb-toggle=\"list\"]`;\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n  constructor(element) {\n    super(element);\n    this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n\n    if (!this._parent) {\n      return;\n      // TODO: should throw exception in v6\n      // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n    }\n\n    // Set up initial aria attributes\n    this._setInitialAttributes(this._parent, this._getChildren());\n\n    EventHandler.on(this._element, EVENT_KEYDOWN, (event) => this._keydown(event));\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  show() {\n    // Shows this elem and deactivate the active sibling if exists\n    const innerElem = this._element;\n    if (this._elemIsActive(innerElem)) {\n      return;\n    }\n\n    // Search for active tab on same parent to deactivate it\n    const active = this._getActiveElem();\n\n    const hideEvent = active\n      ? EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem })\n      : null;\n\n    const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active });\n\n    if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n      return;\n    }\n\n    this._deactivate(active, innerElem);\n    this._activate(innerElem, active);\n  }\n\n  // Private\n  _activate(element, relatedElem) {\n    if (!element) {\n      return;\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.add(CLASS_NAME_SHOW);\n        return;\n      }\n\n      element.removeAttribute('tabindex');\n      element.setAttribute('aria-selected', true);\n      this._toggleDropDown(element, true);\n      EventHandler.trigger(element, EVENT_SHOWN, {\n        relatedTarget: relatedElem,\n      });\n    };\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n  }\n\n  _deactivate(element, relatedElem) {\n    if (!element) {\n      return;\n    }\n\n    element.classList.remove(CLASS_NAME_ACTIVE);\n    element.blur();\n\n    this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.remove(CLASS_NAME_SHOW);\n        return;\n      }\n\n      element.setAttribute('aria-selected', false);\n      element.setAttribute('tabindex', '-1');\n      this._toggleDropDown(element, false);\n      EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem });\n    };\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n  }\n\n  _keydown(event) {\n    if (\n      ![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(\n        event.key\n      )\n    ) {\n      return;\n    }\n\n    event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n    event.preventDefault();\n\n    const children = this._getChildren().filter((element) => !isDisabled(element));\n    let nextActiveElement;\n\n    if ([HOME_KEY, END_KEY].includes(event.key)) {\n      nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];\n    } else {\n      const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n      nextActiveElement = getNextActiveElement(children, event.target, isNext, true);\n    }\n\n    if (nextActiveElement) {\n      nextActiveElement.focus({ preventScroll: true });\n      Tab.getOrCreateInstance(nextActiveElement).show();\n    }\n  }\n\n  _getChildren() {\n    // collection of inner elements\n    return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n  }\n\n  _getActiveElem() {\n    return this._getChildren().find((child) => this._elemIsActive(child)) || null;\n  }\n\n  _setInitialAttributes(parent, children) {\n    this._setAttributeIfNotExists(parent, 'role', 'tablist');\n\n    for (const child of children) {\n      this._setInitialAttributesOnChild(child);\n    }\n  }\n\n  _setInitialAttributesOnChild(child) {\n    child = this._getInnerElement(child);\n    const isActive = this._elemIsActive(child);\n    const outerElem = this._getOuterElement(child);\n    child.setAttribute('aria-selected', isActive);\n\n    if (outerElem !== child) {\n      this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n    }\n\n    if (!isActive) {\n      child.setAttribute('tabindex', '-1');\n    }\n\n    this._setAttributeIfNotExists(child, 'role', 'tab');\n\n    // set attributes to the related panel too\n    this._setInitialAttributesOnTargetPanel(child);\n  }\n\n  _setInitialAttributesOnTargetPanel(child) {\n    const target = SelectorEngine.getElementFromSelector(child);\n\n    if (!target) {\n      return;\n    }\n\n    this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n\n    if (child.id) {\n      this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);\n    }\n  }\n\n  _toggleDropDown(element, open) {\n    const outerElem = this._getOuterElement(element);\n    if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n      return;\n    }\n\n    const toggle = (selector, className) => {\n      const element = SelectorEngine.findOne(selector, outerElem);\n      if (element) {\n        element.classList.toggle(className, open);\n      }\n    };\n\n    toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n    toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW);\n    outerElem.setAttribute('aria-expanded', open);\n  }\n\n  _setAttributeIfNotExists(element, attribute, value) {\n    if (!element.hasAttribute(attribute)) {\n      element.setAttribute(attribute, value);\n    }\n  }\n\n  _elemIsActive(elem) {\n    return elem.classList.contains(CLASS_NAME_ACTIVE);\n  }\n\n  // Try to get the inner element (usually the .nav-link)\n  _getInnerElement(elem) {\n    return elem.matches(SELECTOR_INNER_ELEM)\n      ? elem\n      : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n  }\n\n  // Try to get the outer element (usually the .nav-item)\n  _getOuterElement(elem) {\n    return elem.closest(SELECTOR_OUTER) || elem;\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n//   if (['A', 'AREA'].includes(this.tagName)) {\n//     event.preventDefault();\n//   }\n\n//   if (isDisabled(this)) {\n//     return;\n//   }\n\n//   Tab.getOrCreateInstance(this).show();\n// });\n\n/**\n * Initialize on focus\n */\n// EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n//   for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n//     Tab.getOrCreateInstance(element);\n//   }\n// });\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Tab);\n\nexport default Tab;\n","import { getElementFromSelector } from '../mdb/util/index';\nimport EventHandler from '../mdb/dom/event-handler';\nimport BSTab from '../bootstrap/mdb-prefix/tab';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_SHOW_BS = 'show.bs.tab';\nconst EVENT_SHOWN_BS = 'shown.bs.tab';\nconst EVENT_HIDE_BS = 'hide.bs.tab';\nconst EVENT_HIDDEN_BS = 'hidden.bs.tab';\n\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\n\nclass Tab extends BSTab {\n  constructor(element) {\n    super(element);\n\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, EVENT_SHOW_BS);\n    EventHandler.off(this._element, EVENT_SHOWN_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Override\n  show() {\n    // Shows this elem and deactivate the active sibling if exists\n    const innerElem = this._element;\n    if (this._elemIsActive(innerElem)) {\n      return;\n    }\n\n    // Search for active tab on same parent to deactivate it\n    const active = this._getActiveElem();\n\n    let hideEvent = null;\n    let hideEventMdb = null;\n\n    if (active) {\n      hideEvent = EventHandler.trigger(active, EVENT_HIDE_BS, { relatedTarget: innerElem });\n      hideEventMdb = EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem });\n    }\n\n    const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW_BS, { relatedTarget: active });\n    const showEventMdb = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active });\n\n    if (\n      showEvent.defaultPrevented ||\n      showEventMdb.defaultPrevented ||\n      (hideEvent && hideEvent.defaultPrevented) ||\n      (hideEventMdb && hideEventMdb.defaultPrevented)\n    ) {\n      return;\n    }\n\n    this._deactivate(active, innerElem);\n    this._activate(innerElem, active);\n  }\n\n  _activate(element, relatedElem) {\n    if (!element) {\n      return;\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    this._activate(getElementFromSelector(element)); // Search and activate/show the proper section\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.add(CLASS_NAME_SHOW);\n        return;\n      }\n\n      element.focus();\n      element.removeAttribute('tabindex');\n      element.setAttribute('aria-selected', true);\n      this._toggleDropDown(element, true);\n      EventHandler.trigger(element, EVENT_SHOWN_BS, {\n        relatedTarget: relatedElem,\n      });\n      EventHandler.trigger(element, EVENT_SHOWN, {\n        relatedTarget: relatedElem,\n      });\n    };\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n  }\n\n  _deactivate(element, relatedElem) {\n    if (!element) {\n      return;\n    }\n\n    element.classList.remove(CLASS_NAME_ACTIVE);\n    element.blur();\n\n    this._deactivate(getElementFromSelector(element)); // Search and deactivate the shown section too\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.remove(CLASS_NAME_SHOW);\n        return;\n      }\n\n      element.setAttribute('aria-selected', false);\n      element.setAttribute('tabindex', '-1');\n      this._toggleDropDown(element, false);\n      EventHandler.trigger(element, EVENT_HIDDEN_BS, { relatedTarget: relatedElem });\n      EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem });\n    };\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n  }\n}\n\nexport default Tab;\n","import EventHandler from '../mdb/dom/event-handler';\nimport BSTooltip from '../bootstrap/mdb-prefix/tooltip';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip';\n\nconst EVENT_HIDE_BS = 'hide.bs.tooltip';\nconst EVENT_HIDDEN_BS = 'hidden.bs.tooltip';\nconst EVENT_SHOW_BS = 'show.bs.tooltip';\nconst EVENT_SHOWN_BS = 'shown.bs.tooltip';\nconst EVENT_INSERTED_BS = 'inserted.bs.tooltip';\n\nconst EXTENDED_EVENTS = [\n  { name: 'show' },\n  { name: 'shown' },\n  { name: 'hide' },\n  { name: 'hidden' },\n  { name: 'inserted' },\n];\n\nclass Tooltip extends BSTooltip {\n  constructor(element, data) {\n    super(element, data);\n\n    this._init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, EVENT_SHOW_BS);\n    EventHandler.off(this._element, EVENT_SHOWN_BS);\n    EventHandler.off(this._element, EVENT_HIDE_BS);\n    EventHandler.off(this._element, EVENT_HIDDEN_BS);\n    EventHandler.off(this._element, EVENT_INSERTED_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Private\n  _init() {\n    this._bindMdbEvents();\n  }\n\n  _bindMdbEvents() {\n    EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n  }\n}\n\nexport default Tooltip;\n","(()=>{var e={454:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>a});var r=n(645),o=n.n(r)()((function(e){return e[1]}));o.push([e.id,\"INPUT:-webkit-autofill,SELECT:-webkit-autofill,TEXTAREA:-webkit-autofill{animation-name:onautofillstart}INPUT:not(:-webkit-autofill),SELECT:not(:-webkit-autofill),TEXTAREA:not(:-webkit-autofill){animation-name:onautofillcancel}@keyframes onautofillstart{}@keyframes onautofillcancel{}\",\"\"]);const a=o},645:e=>{\"use strict\";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?\"@media \".concat(t[2],\" {\").concat(n,\"}\"):n})).join(\"\")},t.i=function(e,n,r){\"string\"==typeof e&&(e=[[null,e,\"\"]]);var o={};if(r)for(var a=0;a<this.length;a++){var i=this[a][0];null!=i&&(o[i]=!0)}for(var u=0;u<e.length;u++){var c=[].concat(e[u]);r&&o[c[0]]||(n&&(c[2]?c[2]=\"\".concat(n,\" and \").concat(c[2]):c[2]=n),t.push(c))}},t}},810:()=>{!function(){if(\"undefined\"!=typeof window)try{var e=new window.CustomEvent(\"test\",{cancelable:!0});if(e.preventDefault(),!0!==e.defaultPrevented)throw new Error(\"Could not prevent default\")}catch(e){var t=function(e,t){var n,r;return(t=t||{}).bubbles=!!t.bubbles,t.cancelable=!!t.cancelable,(n=document.createEvent(\"CustomEvent\")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),r=n.preventDefault,n.preventDefault=function(){r.call(this);try{Object.defineProperty(this,\"defaultPrevented\",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};t.prototype=window.Event.prototype,window.CustomEvent=t}}()},379:(e,t,n)=>{\"use strict\";var r,o=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),a=[];function i(e){for(var t=-1,n=0;n<a.length;n++)if(a[n].identifier===e){t=n;break}return t}function u(e,t){for(var n={},r=[],o=0;o<e.length;o++){var u=e[o],c=t.base?u[0]+t.base:u[0],l=n[c]||0,s=\"\".concat(c,\" \").concat(l);n[c]=l+1;var d=i(s),f={css:u[1],media:u[2],sourceMap:u[3]};-1!==d?(a[d].references++,a[d].updater(f)):a.push({identifier:s,updater:m(f,t),references:1}),r.push(s)}return r}function c(e){var t=document.createElement(\"style\"),r=e.attributes||{};if(void 0===r.nonce){var a=n.nc;a&&(r.nonce=a)}if(Object.keys(r).forEach((function(e){t.setAttribute(e,r[e])})),\"function\"==typeof e.insert)e.insert(t);else{var i=o(e.insert||\"head\");if(!i)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");i.appendChild(t)}return t}var l,s=(l=[],function(e,t){return l[e]=t,l.filter(Boolean).join(\"\\n\")});function d(e,t,n,r){var o=n?\"\":r.media?\"@media \".concat(r.media,\" {\").concat(r.css,\"}\"):r.css;if(e.styleSheet)e.styleSheet.cssText=s(t,o);else{var a=document.createTextNode(o),i=e.childNodes;i[t]&&e.removeChild(i[t]),i.length?e.insertBefore(a,i[t]):e.appendChild(a)}}function f(e,t,n){var r=n.css,o=n.media,a=n.sourceMap;if(o?e.setAttribute(\"media\",o):e.removeAttribute(\"media\"),a&&\"undefined\"!=typeof btoa&&(r+=\"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a)))),\" */\")),e.styleSheet)e.styleSheet.cssText=r;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(r))}}var v=null,p=0;function m(e,t){var n,r,o;if(t.singleton){var a=p++;n=v||(v=c(t)),r=d.bind(null,n,a,!1),o=d.bind(null,n,a,!0)}else n=c(t),r=f.bind(null,n,t),o=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)};return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){(t=t||{}).singleton||\"boolean\"==typeof t.singleton||(t.singleton=(void 0===r&&(r=Boolean(window&&document&&document.all&&!window.atob)),r));var n=u(e=e||[],t);return function(e){if(e=e||[],\"[object Array]\"===Object.prototype.toString.call(e)){for(var r=0;r<n.length;r++){var o=i(n[r]);a[o].references--}for(var c=u(e,t),l=0;l<n.length;l++){var s=i(n[l]);0===a[s].references&&(a[s].updater(),a.splice(s,1))}n=c}}}}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={id:r,exports:{}};return e[r](a,a.exports,n),a.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{\"use strict\";var e=n(379),t=n.n(e),r=n(454);function o(e){if(!e.hasAttribute(\"autocompleted\")){e.setAttribute(\"autocompleted\",\"\");var t=new window.CustomEvent(\"onautocomplete\",{bubbles:!0,cancelable:!0,detail:null});e.dispatchEvent(t)||(e.value=\"\")}}function a(e){e.hasAttribute(\"autocompleted\")&&(e.removeAttribute(\"autocompleted\"),e.dispatchEvent(new window.CustomEvent(\"onautocomplete\",{bubbles:!0,cancelable:!1,detail:null})))}t()(r.Z,{insert:\"head\",singleton:!1}),r.Z.locals,n(810),document.addEventListener(\"animationstart\",(function(e){\"onautofillstart\"===e.animationName?o(e.target):a(e.target)}),!0),document.addEventListener(\"input\",(function(e){\"insertReplacementText\"!==e.inputType&&\"data\"in e?a(e.target):o(e.target)}),!0)})()})();","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from '../mdb/dom/data';\nimport { getElement } from '../mdb/util/index';\nimport EventHandler from '../mdb/dom/event-handler';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n// const VERSION = '5.1.3';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.setData(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.removeData(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n\n    Object.getOwnPropertyNames(this).forEach((propertyName) => {\n      this[propertyName] = null;\n    });\n  }\n\n  /** Static */\n\n  static getInstance(element) {\n    return Data.getData(getElement(element), this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return (\n      this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n    );\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `mdb.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n}\n\nexport default BaseComponent;\n","import { element, onDOMContentLoaded } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport 'detect-autofill';\nimport BaseComponent from './base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'input';\nconst DATA_KEY = 'mdb.input';\nconst CLASSNAME_ACTIVE = 'active';\nconst CLASSNAME_NOTCH = 'form-notch';\nconst CLASSNAME_NOTCH_LEADING = 'form-notch-leading';\nconst CLASSNAME_NOTCH_MIDDLE = 'form-notch-middle';\nconst CLASSNAME_NOTCH_TRAILING = 'form-notch-trailing';\nconst CLASSNAME_PLACEHOLDER_ACTIVE = 'placeholder-active';\nconst CLASSNAME_HELPER = 'form-helper';\nconst CLASSNAME_COUNTER = 'form-counter';\n\nconst SELECTOR_NOTCH = `.${CLASSNAME_NOTCH}`;\nconst SELECTOR_NOTCH_LEADING = `.${CLASSNAME_NOTCH_LEADING}`;\nconst SELECTOR_NOTCH_MIDDLE = `.${CLASSNAME_NOTCH_MIDDLE}`;\nconst SELECTOR_HELPER = `.${CLASSNAME_HELPER}`;\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Input extends BaseComponent {\n  constructor(element) {\n    super(element);\n\n    this._label = null;\n    this._labelWidth = 0;\n    this._labelMarginLeft = 0;\n    this._notchLeading = null;\n    this._notchMiddle = null;\n    this._notchTrailing = null;\n    this._initiated = false;\n    this._helper = null;\n    this._counter = false;\n    this._counterElement = null;\n    this._maxLength = 0;\n    this._leadingIcon = null;\n    if (this._element) {\n      this.init();\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  get input() {\n    const inputElement =\n      SelectorEngine.findOne('input', this._element) ||\n      SelectorEngine.findOne('textarea', this._element);\n    return inputElement;\n  }\n\n  // Public\n  init() {\n    if (this._initiated) {\n      return;\n    }\n    this._getLabelData();\n    this._applyDivs();\n    this._applyNotch();\n    this._activate();\n    this._getHelper();\n    this._getCounter();\n    this._initiated = true;\n  }\n\n  update() {\n    this._getLabelData();\n    this._getNotchData();\n    this._applyNotch();\n    this._activate();\n    this._getHelper();\n    this._getCounter();\n  }\n\n  forceActive() {\n    Manipulator.addClass(this.input, CLASSNAME_ACTIVE);\n  }\n\n  forceInactive() {\n    Manipulator.removeClass(this.input, CLASSNAME_ACTIVE);\n  }\n\n  dispose() {\n    this._removeBorder();\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n\n  /*\n  _getIcons() {\n    this._leadingIcon = SelectorEngine.findOne('i.leading', this._element);\n\n    if (this._leadingIcon !== null) {\n      this._applyLeadingIcon();\n    }\n  }\n\n  _applyLeadingIcon() {\n    this._label.innerHTML = ` ${this._label.innerHTML}`;\n    this._label.insertBefore(this._leadingIcon, this._label.firstChild);\n  }\n  */\n\n  _getLabelData() {\n    this._label = SelectorEngine.findOne('label', this._element);\n    if (this._label === null) {\n      this._showPlaceholder();\n    } else {\n      this._getLabelWidth();\n      this._getLabelPositionInInputGroup();\n      this._toggleDefaultDatePlaceholder();\n    }\n  }\n\n  _getHelper() {\n    this._helper = SelectorEngine.findOne(SELECTOR_HELPER, this._element);\n  }\n\n  _getCounter() {\n    this._counter = Manipulator.getDataAttribute(this.input, 'showcounter');\n    if (this._counter) {\n      this._maxLength = this.input.maxLength;\n      this._showCounter();\n    }\n  }\n\n  _showCounter() {\n    const counters = SelectorEngine.find('.form-counter', this._element);\n    if (counters.length > 0) {\n      return;\n    }\n    this._counterElement = document.createElement('div');\n    Manipulator.addClass(this._counterElement, CLASSNAME_COUNTER);\n    const actualLength = this.input.value.length;\n    this._counterElement.innerHTML = `${actualLength} / ${this._maxLength}`;\n    this._helper.appendChild(this._counterElement);\n    this._bindCounter();\n  }\n\n  _bindCounter() {\n    EventHandler.on(this.input, 'input', () => {\n      const actualLength = this.input.value.length;\n      this._counterElement.innerHTML = `${actualLength} / ${this._maxLength}`;\n    });\n  }\n\n  _toggleDefaultDatePlaceholder(input = this.input) {\n    const isTypeDate = input.getAttribute('type') === 'date';\n\n    if (!isTypeDate) {\n      return;\n    }\n\n    const isInputFocused = document.activeElement === input;\n\n    if (!isInputFocused && !input.value) {\n      input.style.opacity = 0;\n    } else {\n      input.style.opacity = 1;\n    }\n  }\n\n  _showPlaceholder() {\n    Manipulator.addClass(this.input, CLASSNAME_PLACEHOLDER_ACTIVE);\n  }\n\n  _getNotchData() {\n    this._notchMiddle = SelectorEngine.findOne(SELECTOR_NOTCH_MIDDLE, this._element);\n    this._notchLeading = SelectorEngine.findOne(SELECTOR_NOTCH_LEADING, this._element);\n  }\n\n  _getLabelWidth() {\n    this._labelWidth = this._label.clientWidth * 0.8 + 8;\n  }\n\n  _getLabelPositionInInputGroup() {\n    this._labelMarginLeft = 0;\n\n    if (!this._element.classList.contains('input-group')) return;\n    const input = this.input;\n    const prefix = SelectorEngine.prev(input, '.input-group-text')[0];\n    if (prefix === undefined) {\n      this._labelMarginLeft = 0;\n    } else {\n      this._labelMarginLeft = prefix.offsetWidth - 1;\n    }\n  }\n\n  _applyDivs() {\n    const allNotchWrappers = SelectorEngine.find(SELECTOR_NOTCH, this._element);\n    const notchWrapper = element('div');\n    Manipulator.addClass(notchWrapper, CLASSNAME_NOTCH);\n    this._notchLeading = element('div');\n    Manipulator.addClass(this._notchLeading, CLASSNAME_NOTCH_LEADING);\n    this._notchMiddle = element('div');\n    Manipulator.addClass(this._notchMiddle, CLASSNAME_NOTCH_MIDDLE);\n    this._notchTrailing = element('div');\n    Manipulator.addClass(this._notchTrailing, CLASSNAME_NOTCH_TRAILING);\n    if (allNotchWrappers.length >= 1) {\n      return;\n    }\n    notchWrapper.append(this._notchLeading);\n    notchWrapper.append(this._notchMiddle);\n    notchWrapper.append(this._notchTrailing);\n    this._element.append(notchWrapper);\n  }\n\n  _applyNotch() {\n    this._notchMiddle.style.width = `${this._labelWidth}px`;\n    this._notchLeading.style.width = `${this._labelMarginLeft + 9}px`;\n\n    if (this._label === null) return;\n    this._label.style.marginLeft = `${this._labelMarginLeft}px`;\n  }\n\n  _removeBorder() {\n    const border = SelectorEngine.findOne(SELECTOR_NOTCH, this._element);\n    if (border) border.remove();\n  }\n\n  _activate(event) {\n    onDOMContentLoaded(() => {\n      this._getElements(event);\n      const input = event ? event.target : this.input;\n\n      if (input.value !== '') {\n        Manipulator.addClass(input, CLASSNAME_ACTIVE);\n      }\n      this._toggleDefaultDatePlaceholder(input);\n    });\n  }\n\n  _getElements(event) {\n    if (event) {\n      this._element = event.target.parentNode;\n      this._label = SelectorEngine.findOne('label', this._element);\n    }\n\n    if (event && this._label) {\n      const prevLabelWidth = this._labelWidth;\n      this._getLabelData();\n\n      if (prevLabelWidth !== this._labelWidth) {\n        this._notchMiddle = SelectorEngine.findOne('.form-notch-middle', event.target.parentNode);\n        this._notchLeading = SelectorEngine.findOne(\n          SELECTOR_NOTCH_LEADING,\n          event.target.parentNode\n        );\n        this._applyNotch();\n      }\n    }\n  }\n\n  _deactivate(event) {\n    const input = event ? event.target : this.input;\n\n    if (input.value === '') {\n      input.classList.remove(CLASSNAME_ACTIVE);\n    }\n    this._toggleDefaultDatePlaceholder(input);\n  }\n\n  static activate(instance) {\n    return function (event) {\n      instance._activate(event);\n    };\n  }\n\n  static deactivate(instance) {\n    return function (event) {\n      instance._deactivate(event);\n    };\n  }\n\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n      if (!data && /dispose/.test(config)) {\n        return;\n      }\n      if (!data) {\n        data = new Input(this, _config);\n      }\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](options);\n      }\n    });\n  }\n}\n\nexport default Input;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport { defineJQueryPlugin, getElement, reflow } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse';\nconst DATA_KEY = 'bs.collapse';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\n\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-collapse-init]';\n\nconst Default = {\n  parent: null,\n  toggle: true,\n};\n\nconst DefaultType = {\n  parent: '(null|element)',\n  toggle: 'boolean',\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._isTransitioning = false;\n    this._triggerArray = [];\n\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE);\n\n    for (const elem of toggleList) {\n      const selector = SelectorEngine.getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(\n        (foundElement) => foundElement === this._element\n      );\n\n      if (selector !== null && filterElement.length) {\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._initializeChildren();\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  toggle() {\n    if (this._isShown()) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._isShown()) {\n      return;\n    }\n\n    let activeChildren = [];\n\n    // find active children\n    if (this._config.parent) {\n      activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n        .filter((element) => element !== this._element)\n        .map((element) => Collapse.getOrCreateInstance(element, { toggle: false }));\n    }\n\n    if (activeChildren.length && activeChildren[0]._isTransitioning) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    for (const activeInstance of activeChildren) {\n      activeInstance.hide();\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    this._addAriaAndCollapsedClass(this._triggerArray, true);\n    this._isTransitioning = true;\n\n    const complete = () => {\n      this._isTransitioning = false;\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);\n\n      this._element.style[dimension] = '';\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._isShown()) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);\n\n    for (const trigger of this._triggerArray) {\n      const element = SelectorEngine.getElementFromSelector(trigger);\n\n      if (element && !this._isShown(element)) {\n        this._addAriaAndCollapsedClass([trigger], false);\n      }\n    }\n\n    this._isTransitioning = true;\n\n    const complete = () => {\n      this._isTransitioning = false;\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW);\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    config.toggle = Boolean(config.toggle); // Coerce string values\n    config.parent = getElement(config.parent);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n  }\n\n  _initializeChildren() {\n    if (!this._config.parent) {\n      return;\n    }\n\n    const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE);\n\n    for (const element of children) {\n      const selected = SelectorEngine.getElementFromSelector(element);\n\n      if (selected) {\n        this._addAriaAndCollapsedClass([element], this._isShown(selected));\n      }\n    }\n  }\n\n  _getFirstLevelChildren(selector) {\n    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n    // remove children if greater depth\n    return SelectorEngine.find(selector, this._config.parent).filter(\n      (element) => !children.includes(element)\n    );\n  }\n\n  _addAriaAndCollapsedClass(triggerArray, isOpen) {\n    if (!triggerArray.length) {\n      return;\n    }\n\n    for (const element of triggerArray) {\n      element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n      element.setAttribute('aria-expanded', isOpen);\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    const _config = {};\n    if (typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    return this.each(function () {\n      const data = Collapse.getOrCreateInstance(this, _config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n//   // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n//   if (\n//     event.target.tagName === 'A' ||\n//     (event.delegateTarget && event.delegateTarget.tagName === 'A')\n//   ) {\n//     event.preventDefault();\n//   }\n\n//   for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n//     Collapse.getOrCreateInstance(element, { toggle: false }).toggle();\n//   }\n// });\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Collapse);\n\nexport default Collapse;\n","import EventHandler from '../mdb/dom/event-handler';\nimport BSCollapse from '../bootstrap/mdb-prefix/collapse';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse';\n\nconst EVENT_SHOW_BS = 'show.bs.collapse';\nconst EVENT_SHOWN_BS = 'shown.bs.collapse';\nconst EVENT_HIDE_BS = 'hide.bs.collapse';\nconst EVENT_HIDDEN_BS = 'hidden.bs.collapse';\n\nconst EXTENDED_EVENTS = [{ name: 'show' }, { name: 'shown' }, { name: 'hide' }, { name: 'hidden' }];\n\nclass Collapse extends BSCollapse {\n  constructor(element, data = {}) {\n    super(element, data);\n\n    this._init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, EVENT_SHOW_BS);\n    EventHandler.off(this._element, EVENT_SHOWN_BS);\n    EventHandler.off(this._element, EVENT_HIDE_BS);\n    EventHandler.off(this._element, EVENT_HIDDEN_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Private\n  _init() {\n    this._bindMdbEvents();\n  }\n\n  _bindMdbEvents() {\n    EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n  }\n}\n\nexport default Collapse;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core';\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport Manipulator from './dom/manipulator.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport {\n  defineJQueryPlugin,\n  execute,\n  getElement,\n  getNextActiveElement,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop,\n} from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown';\nconst DATA_KEY = 'bs.dropdown';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst ESCAPE_KEY = 'Escape';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\n\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-dropdown-initialized]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\n\nconst Default = {\n  autoClose: true,\n  boundary: 'clippingParents',\n  display: 'dynamic',\n  offset: [0, 2],\n  popperConfig: null,\n  reference: 'toggle',\n};\n\nconst DefaultType = {\n  autoClose: '(boolean|string)',\n  boundary: '(string|element)',\n  display: 'string',\n  offset: '(array|string|function)',\n  popperConfig: '(null|object|function)',\n  reference: '(string|element|object)',\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._popper = null;\n    this._parent = this._element.parentNode; // dropdown wrapper\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    this._menu =\n      SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n    this._inNavbar = this._detectNavbar();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  toggle() {\n    return this._isShown() ? this.hide() : this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._isShown()) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element,\n    };\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._createPopper();\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop);\n      }\n    }\n\n    this._element.focus();\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.add(CLASS_NAME_SHOW);\n    this._element.classList.add(CLASS_NAME_SHOW);\n    EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._isShown()) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element,\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n    if (this._popper) {\n      this._popper.update();\n    }\n  }\n\n  // Private\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget);\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop);\n      }\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW);\n    this._element.classList.remove(CLASS_NAME_SHOW);\n    this._element.setAttribute('aria-expanded', 'false');\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = super._getConfig(config);\n\n    if (\n      typeof config.reference === 'object' &&\n      !isElement(config.reference) &&\n      typeof config.reference.getBoundingClientRect !== 'function'\n    ) {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(\n        `${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`\n      );\n    }\n\n    return config;\n  }\n\n  _createPopper() {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError(\"Bootstrap's dropdowns require Popper (https://popper.js.org)\");\n    }\n\n    let referenceElement = this._element;\n\n    if (this._config.reference === 'parent') {\n      referenceElement = this._parent;\n    } else if (isElement(this._config.reference)) {\n      referenceElement = getElement(this._config.reference);\n    } else if (typeof this._config.reference === 'object') {\n      referenceElement = this._config.reference;\n    }\n\n    const popperConfig = this._getPopperConfig();\n    this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n  }\n\n  _isShown() {\n    return this._menu.classList.contains(CLASS_NAME_SHOW);\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._parent;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n      return PLACEMENT_TOPCENTER;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n      return PLACEMENT_BOTTOMCENTER;\n    }\n\n    // We need to trim the value because custom properties can also include spaces\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--mdb-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(SELECTOR_NAVBAR) !== null;\n  }\n\n  _getOffset() {\n    const { offset } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map((value) => Number.parseInt(value, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return (popperData) => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [\n        {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary,\n          },\n        },\n        {\n          name: 'offset',\n          options: {\n            offset: this._getOffset(),\n          },\n        },\n      ],\n    };\n\n    // Disable Popper if we have a static display or Dropdown is in Navbar\n    if (this._inNavbar || this._config.display === 'static') {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n      defaultBsPopperConfig.modifiers = [\n        {\n          name: 'applyStyles',\n          enabled: false,\n        },\n      ];\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [defaultBsPopperConfig]),\n    };\n  }\n\n  _selectMenuItem({ key, target }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter((element) =>\n      isVisible(element)\n    );\n\n    if (!items.length) {\n      return;\n    }\n\n    // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Dropdown.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n  static clearMenus(event) {\n    if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n\n    for (const toggle of openToggles) {\n      const context = Dropdown.getInstance(toggle);\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      const composedPath = event.composedPath();\n      const isMenuTarget = composedPath.includes(context._menu);\n      if (\n        composedPath.includes(context._element) ||\n        (context._config.autoClose === 'inside' && !isMenuTarget) ||\n        (context._config.autoClose === 'outside' && isMenuTarget)\n      ) {\n        continue;\n      }\n\n      // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n      if (\n        context._menu.contains(event.target) &&\n        ((event.type === 'keyup' && event.key === TAB_KEY) ||\n          /input|select|option|textarea|form/i.test(event.target.tagName))\n      ) {\n        continue;\n      }\n\n      const relatedTarget = { relatedTarget: context._element };\n\n      if (event.type === 'click') {\n        relatedTarget.clickEvent = event;\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not an UP | DOWN | ESCAPE key => not a dropdown command\n    // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n    const isInput = /input|textarea/i.test(event.target.tagName);\n    const isEscapeEvent = event.key === ESCAPE_KEY;\n    const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key);\n\n    if (!isUpOrDownEvent && !isEscapeEvent) {\n      return;\n    }\n\n    if (isInput && !isEscapeEvent) {\n      return;\n    }\n\n    event.preventDefault();\n\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE)\n      ? this\n      : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode);\n\n    const instance = Dropdown.getOrCreateInstance(getToggleButton);\n\n    if (isUpOrDownEvent) {\n      event.stopPropagation();\n      instance.show();\n      instance._selectMenuItem(event);\n      return;\n    }\n\n    if (instance._isShown()) {\n      // else is escape and we check if it is shown\n      event.stopPropagation();\n      instance.hide();\n      getToggleButton.focus();\n    }\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(\n//   document,\n//   EVENT_KEYDOWN_DATA_API,\n//   SELECTOR_DATA_TOGGLE,\n//   Dropdown.dataApiKeydownHandler\n// );\n// EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n// EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);\n// EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n//   event.preventDefault();\n//   Dropdown.getOrCreateInstance(this).toggle();\n// });\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Dropdown);\n\nexport default Dropdown;\n","import { typeCheckConfig } from '../mdb/util/index';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport BSDropdown from '../bootstrap/mdb-prefix/dropdown';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst Default = {\n  offset: [0, 2],\n  flip: true,\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  dropdownAnimation: 'on',\n};\n\nconst DefaultType = {\n  offset: '(array|string|function)',\n  flip: 'boolean',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  dropdownAnimation: 'string',\n};\n\nconst EVENT_HIDE = 'hide.bs.dropdown';\nconst EVENT_HIDDEN = 'hidden.bs.dropdown';\nconst EVENT_SHOW = 'show.bs.dropdown';\nconst EVENT_SHOWN = 'shown.bs.dropdown';\n\nconst EVENT_HIDE_MDB = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN_MDB = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW_MDB = `show${EVENT_KEY}`;\nconst EVENT_SHOWN_MDB = `shown${EVENT_KEY}`;\n\nconst ANIMATION_CLASS = 'animation';\nconst ANIMATION_SHOW_CLASS = 'fade-in';\nconst ANIMATION_HIDE_CLASS = 'fade-out';\n\nclass Dropdown extends BSDropdown {\n  constructor(element, data) {\n    super(element, data);\n    this._config = this._getConfig(data);\n    this._menuStyle = '';\n    this._popperPlacement = '';\n    this._mdbPopperConfig = '';\n\n    //* prevents dropdown close issue when system animation is turned off\n    const isPrefersReducedMotionSet = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n    if (this._config.dropdownAnimation === 'on' && !isPrefersReducedMotionSet) {\n      this._init();\n    }\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, EVENT_SHOW);\n    EventHandler.off(this._parent, EVENT_SHOWN);\n    EventHandler.off(this._parent, EVENT_HIDE);\n    EventHandler.off(this._parent, EVENT_HIDDEN);\n\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Private\n  _init() {\n    this._bindShowEvent();\n    this._bindShownEvent();\n    this._bindHideEvent();\n    this._bindHiddenEvent();\n  }\n\n  _getConfig(options) {\n    const config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...options,\n    };\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n\n  _getOffset() {\n    const { offset } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map((val) => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return (popperData) => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const popperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [\n        {\n          name: 'preventOverflow',\n          options: {\n            altBoundary: this._config.flip,\n            boundary: this._config.boundary,\n          },\n        },\n        {\n          name: 'offset',\n          options: {\n            offset: this._getOffset(),\n          },\n        },\n      ],\n    };\n\n    // Disable Popper if we have a static display\n    if (this._config.display === 'static') {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      popperConfig.modifiers = [\n        {\n          name: 'applyStyles',\n          enabled: false,\n        },\n      ];\n    }\n\n    return {\n      ...popperConfig,\n      /* eslint no-extra-parens: \"off\" */\n      ...(typeof this._config.popperConfig === 'function'\n        ? this._config.popperConfig(popperConfig)\n        : this._config.popperConfig),\n    };\n  }\n\n  _bindShowEvent() {\n    EventHandler.on(this._element, EVENT_SHOW, (e) => {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW_MDB, {\n        relatedTarget: e.relatedTarget,\n      });\n\n      if (showEvent.defaultPrevented) {\n        e.preventDefault();\n        return;\n      }\n\n      this._dropdownAnimationStart('show');\n    });\n  }\n\n  _bindShownEvent() {\n    EventHandler.on(this._parent, EVENT_SHOWN, (e) => {\n      const shownEvent = EventHandler.trigger(this._parent, EVENT_SHOWN_MDB, {\n        relatedTarget: e.relatedTarget,\n      });\n\n      if (shownEvent.defaultPrevented) {\n        e.preventDefault();\n        return;\n      }\n    });\n  }\n\n  _bindHideEvent() {\n    EventHandler.on(this._parent, EVENT_HIDE, (e) => {\n      const hideEvent = EventHandler.trigger(this._parent, EVENT_HIDE_MDB, {\n        relatedTarget: e.relatedTarget,\n      });\n\n      if (hideEvent.defaultPrevented) {\n        e.preventDefault();\n        return;\n      }\n\n      this._menuStyle = this._menu.style.cssText;\n      this._popperPlacement = this._menu.getAttribute('data-popper-placement');\n      this._mdbPopperConfig = this._menu.getAttribute('data-mdb-popper');\n    });\n  }\n\n  _bindHiddenEvent() {\n    EventHandler.on(this._parent, EVENT_HIDDEN, (e) => {\n      const hiddenEvent = EventHandler.trigger(this._parent, EVENT_HIDDEN_MDB, {\n        relatedTarget: e.relatedTarget,\n      });\n\n      if (hiddenEvent.defaultPrevented) {\n        e.preventDefault();\n        return;\n      }\n\n      if (this._config.display !== 'static' && this._menuStyle !== '') {\n        this._menu.style.cssText = this._menuStyle;\n      }\n\n      this._menu.setAttribute('data-popper-placement', this._popperPlacement);\n      this._menu.setAttribute('data-mdb-popper', this._mdbPopperConfig);\n\n      this._dropdownAnimationStart('hide');\n    });\n  }\n\n  _dropdownAnimationStart(action) {\n    switch (action) {\n      case 'show':\n        this._menu.classList.add(ANIMATION_CLASS, ANIMATION_SHOW_CLASS);\n        this._menu.classList.remove(ANIMATION_HIDE_CLASS);\n        break;\n      default:\n        // hide\n        this._menu.classList.add(ANIMATION_CLASS, ANIMATION_HIDE_CLASS);\n        this._menu.classList.remove(ANIMATION_SHOW_CLASS);\n        break;\n    }\n\n    this._bindAnimationEnd();\n  }\n\n  _bindAnimationEnd() {\n    EventHandler.one(this._menu, 'animationend', () => {\n      this._menu.classList.remove(ANIMATION_CLASS, ANIMATION_HIDE_CLASS, ANIMATION_SHOW_CLASS);\n    });\n  }\n}\n\nexport default Dropdown;\n","import { element, typeCheckConfig } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BaseComponent from './base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'ripple';\nconst DATA_KEY = 'mdb.ripple';\nconst CLASSNAME_RIPPLE = 'ripple-surface';\nconst CLASSNAME_RIPPLE_WAVE = 'ripple-wave';\nconst CLASSNAME_RIPPLE_WRAPPER = 'input-wrapper';\nconst SELECTOR_BTN = '.btn';\nconst SELECTOR_COMPONENT = [SELECTOR_BTN, `[data-mdb-${NAME}-init]`];\n\nconst CLASSNAME_UNBOUND = 'ripple-surface-unbound';\nconst GRADIENT =\n  'rgba({{color}}, 0.2) 0, rgba({{color}}, 0.3) 40%, rgba({{color}}, 0.4) 50%, rgba({{color}}, 0.5) 60%, rgba({{color}}, 0) 70%';\nconst DEFAULT_RIPPLE_COLOR = [0, 0, 0];\nconst BOOTSTRAP_COLORS = [\n  'primary',\n  'secondary',\n  'success',\n  'danger',\n  'warning',\n  'info',\n  'light',\n  'dark',\n];\n\n// Sets value when run opacity transition\n// Hide element after 50% (0.5) time of animation and finish on 100%\nconst TRANSITION_BREAK_OPACITY = 0.5;\n\nconst Default = {\n  rippleCentered: false,\n  rippleColor: '',\n  rippleDuration: '500ms',\n  rippleRadius: 0,\n  rippleUnbound: false,\n};\n\nconst DefaultType = {\n  rippleCentered: 'boolean',\n  rippleColor: 'string',\n  rippleDuration: 'string',\n  rippleRadius: 'number',\n  rippleUnbound: 'boolean',\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Ripple extends BaseComponent {\n  constructor(element, options) {\n    super(element);\n    this._options = this._getConfig(options);\n\n    if (this._element) {\n      Manipulator.addClass(this._element, CLASSNAME_RIPPLE);\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n\n    this._clickHandler = this._createRipple.bind(this);\n    this._rippleTimer = null;\n    this._isMinWidthSet = false;\n    this._rippleInSpan = false;\n\n    this.init();\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n\n  init() {\n    this._addClickEvent(this._element);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, 'mousedown', this._clickHandler);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n\n  _autoInit(event) {\n    SELECTOR_COMPONENT.forEach((selector) => {\n      const target = SelectorEngine.closest(event.target, selector);\n      if (target) {\n        this._element = SelectorEngine.closest(event.target, selector);\n      }\n    });\n\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    if (this._element.classList.contains('btn') && dataAttributes.rippleInit === false) {\n      return;\n    }\n\n    this._options = this._getConfig();\n\n    if (this._element.tagName.toLowerCase() === 'input') {\n      const parent = this._element.parentNode;\n\n      this._rippleInSpan = true;\n\n      if (parent.tagName.toLowerCase() === 'span' && parent.classList.contains(CLASSNAME_RIPPLE)) {\n        this._element = parent;\n      } else {\n        const shadow = getComputedStyle(this._element).boxShadow;\n        const btn = this._element;\n        const wrapper = document.createElement('span');\n\n        if (btn.classList.contains('btn-block')) {\n          wrapper.style.display = 'block';\n        }\n\n        EventHandler.one(wrapper, 'mouseup', (e) => {\n          // prevent submit on click other than LMB, ripple still triggered, but submit is blocked\n          if (e.button === 0) {\n            btn.click();\n          }\n        });\n\n        wrapper.classList.add(CLASSNAME_RIPPLE, CLASSNAME_RIPPLE_WRAPPER);\n\n        Manipulator.addStyle(wrapper, {\n          border: 0,\n          'box-shadow': shadow,\n        });\n\n        // Put element as child\n        parent.replaceChild(wrapper, this._element);\n        wrapper.appendChild(this._element);\n        this._element = wrapper;\n      }\n      this._element.focus();\n    }\n\n    if (!this._element.style.minWidth) {\n      Manipulator.style(this._element, { 'min-width': `${getComputedStyle(this._element).width}` });\n      this._isMinWidthSet = true;\n    }\n\n    Manipulator.addClass(this._element, CLASSNAME_RIPPLE);\n    this._createRipple(event);\n  }\n\n  _addClickEvent(target) {\n    EventHandler.on(target, 'mousedown', this._clickHandler);\n  }\n\n  _getEventLayer(event) {\n    const x = Math.round(event.clientX - event.target.getBoundingClientRect().x);\n    const y = Math.round(event.clientY - event.target.getBoundingClientRect().y);\n    return { layerX: x, layerY: y };\n  }\n\n  _createRipple(event) {\n    if (this._element === null) {\n      return;\n    }\n\n    if (!Manipulator.hasClass(this._element, CLASSNAME_RIPPLE)) {\n      Manipulator.addClass(this._element, CLASSNAME_RIPPLE);\n    }\n\n    const { layerX, layerY } = this._getEventLayer(event);\n    const offsetX = layerX;\n    const offsetY = layerY;\n    const height = this._element.offsetHeight;\n    const width = this._element.offsetWidth;\n    const duration = this._durationToMsNumber(this._options.rippleDuration);\n    const diameterOptions = {\n      offsetX: this._options.rippleCentered ? height / 2 : offsetX,\n      offsetY: this._options.rippleCentered ? width / 2 : offsetY,\n      height,\n      width,\n    };\n    const diameter = this._getDiameter(diameterOptions);\n    const radiusValue = this._options.rippleRadius || diameter / 2;\n\n    const opacity = {\n      delay: duration * TRANSITION_BREAK_OPACITY,\n      duration: duration - duration * TRANSITION_BREAK_OPACITY,\n    };\n\n    const styles = {\n      left: this._options.rippleCentered\n        ? `${width / 2 - radiusValue}px`\n        : `${offsetX - radiusValue}px`,\n      top: this._options.rippleCentered\n        ? `${height / 2 - radiusValue}px`\n        : `${offsetY - radiusValue}px`,\n      height: `${this._options.rippleRadius * 2 || diameter}px`,\n      width: `${this._options.rippleRadius * 2 || diameter}px`,\n      transitionDelay: `0s, ${opacity.delay}ms`,\n      transitionDuration: `${duration}ms, ${opacity.duration}ms`,\n    };\n\n    const rippleHTML = element('div');\n\n    this._createHTMLRipple({ wrapper: this._element, ripple: rippleHTML, styles });\n    this._removeHTMLRipple({ ripple: rippleHTML, duration });\n  }\n\n  _createHTMLRipple({ wrapper, ripple, styles }) {\n    Object.keys(styles).forEach((property) => (ripple.style[property] = styles[property]));\n    ripple.classList.add(CLASSNAME_RIPPLE_WAVE);\n    if (this._options.rippleColor !== '') {\n      this._removeOldColorClasses(wrapper);\n      this._addColor(ripple, wrapper);\n    }\n\n    this._toggleUnbound(wrapper);\n    this._appendRipple(ripple, wrapper);\n  }\n\n  _removeHTMLRipple({ ripple, duration }) {\n    if (this._rippleTimer) {\n      clearTimeout(this._rippleTimer);\n      this._rippleTimer = null;\n    }\n    this._rippleTimer = setTimeout(() => {\n      if (ripple) {\n        ripple.remove();\n        if (this._element) {\n          SelectorEngine.find(`.${CLASSNAME_RIPPLE_WAVE}`, this._element).forEach((rippleEl) => {\n            rippleEl.remove();\n          });\n          if (this._isMinWidthSet) {\n            Manipulator.style(this._element, { 'min-width': '' });\n            this._isMinWidthSet = false;\n          }\n          if (this._rippleInSpan && this._element.classList.contains(CLASSNAME_RIPPLE_WRAPPER)) {\n            this._removeWrapperSpan();\n          } else {\n            Manipulator.removeClass(this._element, CLASSNAME_RIPPLE);\n          }\n        }\n      }\n    }, duration);\n  }\n\n  _removeWrapperSpan() {\n    const child = this._element.firstChild;\n\n    this._element.replaceWith(child);\n    this._element = child;\n    this._element.focus();\n    this._rippleInSpan = false;\n  }\n\n  _durationToMsNumber(time) {\n    return Number(time.replace('ms', '').replace('s', '000'));\n  }\n\n  _getConfig(config = {}) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n    config = {\n      ...Default,\n      ...dataAttributes,\n      ...config,\n    };\n\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n\n  _getDiameter({ offsetX, offsetY, height, width }) {\n    const top = offsetY <= height / 2;\n    const left = offsetX <= width / 2;\n    const pythagorean = (sideA, sideB) => Math.sqrt(sideA ** 2 + sideB ** 2);\n\n    const positionCenter = offsetY === height / 2 && offsetX === width / 2;\n    // mouse position on the quadrants of the coordinate system\n    const quadrant = {\n      first: top === true && left === false,\n      second: top === true && left === true,\n      third: top === false && left === true,\n      fourth: top === false && left === false,\n    };\n\n    const getCorner = {\n      topLeft: pythagorean(offsetX, offsetY),\n      topRight: pythagorean(width - offsetX, offsetY),\n      bottomLeft: pythagorean(offsetX, height - offsetY),\n      bottomRight: pythagorean(width - offsetX, height - offsetY),\n    };\n\n    let diameter = 0;\n\n    if (positionCenter || quadrant.fourth) {\n      diameter = getCorner.topLeft;\n    } else if (quadrant.third) {\n      diameter = getCorner.topRight;\n    } else if (quadrant.second) {\n      diameter = getCorner.bottomRight;\n    } else if (quadrant.first) {\n      diameter = getCorner.bottomLeft;\n    }\n    return diameter * 2;\n  }\n\n  _appendRipple(target, parent) {\n    const FIX_ADD_RIPPLE_EFFECT = 50; // delay for active animations\n    parent.appendChild(target);\n    setTimeout(() => {\n      Manipulator.addClass(target, 'active');\n    }, FIX_ADD_RIPPLE_EFFECT);\n  }\n\n  _toggleUnbound(target) {\n    if (this._options.rippleUnbound === true) {\n      Manipulator.addClass(target, CLASSNAME_UNBOUND);\n    } else {\n      target.classList.remove(CLASSNAME_UNBOUND);\n    }\n  }\n\n  _addColor(target, parent) {\n    const IS_BOOTSTRAP_COLOR = BOOTSTRAP_COLORS.find(\n      (color) => color === this._options.rippleColor.toLowerCase()\n    );\n\n    if (IS_BOOTSTRAP_COLOR) {\n      Manipulator.addClass(\n        parent,\n        `${CLASSNAME_RIPPLE}-${this._options.rippleColor.toLowerCase()}`\n      );\n    } else {\n      const rgbValue = this._colorToRGB(this._options.rippleColor).join(',');\n      const gradientImage = GRADIENT.split('{{color}}').join(`${rgbValue}`);\n      target.style.backgroundImage = `radial-gradient(circle, ${gradientImage})`;\n    }\n  }\n\n  _removeOldColorClasses(target) {\n    const REGEXP_CLASS_COLOR = new RegExp(`${CLASSNAME_RIPPLE}-[a-z]+`, 'gi');\n    const PARENT_CLASSS_COLOR = target.classList.value.match(REGEXP_CLASS_COLOR) || [];\n    PARENT_CLASSS_COLOR.forEach((className) => {\n      target.classList.remove(className);\n    });\n  }\n\n  _colorToRGB(color) {\n    function hexToRgb(color) {\n      const HEX_COLOR_LENGTH = 7;\n      const IS_SHORT_HEX = color.length < HEX_COLOR_LENGTH;\n      if (IS_SHORT_HEX) {\n        color = `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}`;\n      }\n      return [\n        parseInt(color.substr(1, 2), 16),\n        parseInt(color.substr(3, 2), 16),\n        parseInt(color.substr(5, 2), 16),\n      ];\n    }\n\n    function namedColorsToRgba(color) {\n      const tempElem = document.body.appendChild(document.createElement('fictum'));\n      const flag = 'rgb(1, 2, 3)';\n      tempElem.style.color = flag;\n      if (tempElem.style.color !== flag) {\n        return DEFAULT_RIPPLE_COLOR;\n      }\n      tempElem.style.color = color;\n      if (tempElem.style.color === flag || tempElem.style.color === '') {\n        return DEFAULT_RIPPLE_COLOR;\n      } // color parse failed\n      color = getComputedStyle(tempElem).color;\n      document.body.removeChild(tempElem);\n      return color;\n    }\n\n    function rgbaToRgb(color) {\n      color = color.match(/[.\\d]+/g).map((a) => +Number(a));\n      color.length = 3;\n      return color;\n    }\n\n    if (color.toLowerCase() === 'transparent') {\n      return DEFAULT_RIPPLE_COLOR;\n    }\n    if (color[0] === '#') {\n      return hexToRgb(color);\n    }\n    if (color.indexOf('rgb') === -1) {\n      color = namedColorsToRgba(color);\n    }\n    if (color.indexOf('rgb') === 0) {\n      return rgbaToRgb(color);\n    }\n\n    return DEFAULT_RIPPLE_COLOR;\n  }\n\n  // Static\n  static autoInitial(instance) {\n    return function (event) {\n      instance._autoInit(event);\n    };\n  }\n\n  static jQueryInterface(options) {\n    return this.each(function () {\n      const data = Data.getData(this, DATA_KEY);\n      if (!data) {\n        return new Ripple(this, options);\n      }\n\n      return null;\n    });\n  }\n}\n\nexport default Ripple;\n","import { element } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BaseComponent from './base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'range';\nconst DATA_KEY = 'mdb.range';\nconst CLASSNAME_THUMB = 'thumb';\nconst CLASSNAME_ACTIVE = 'thumb-active';\nconst CLASSNAME_THUMB_VALUE = 'thumb-value';\n\nconst SELECTOR_THUMB_VALUE = `.${CLASSNAME_THUMB_VALUE}`;\nconst SELECTOR_THUMB = `.${CLASSNAME_THUMB}`;\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Range extends BaseComponent {\n  constructor(element) {\n    super(element);\n\n    this._initiated = false;\n    this._thumb = null;\n\n    if (this._element) {\n      this.init();\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  get rangeInput() {\n    return SelectorEngine.findOne('input[type=range]', this._element);\n  }\n\n  // Public\n  init() {\n    if (this._initiated) {\n      return;\n    }\n    this._addThumb();\n    this._thumbUpdate();\n    this._handleEvents();\n    this._initiated = true;\n  }\n\n  dispose() {\n    this._disposeEvents();\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n  _addThumb() {\n    const RANGE_THUMB = element('span');\n    Manipulator.addClass(RANGE_THUMB, CLASSNAME_THUMB);\n    RANGE_THUMB.innerHTML = '<span class=\"thumb-value\"></span>';\n    this._element.append(RANGE_THUMB);\n    this._thumb = SelectorEngine.findOne(SELECTOR_THUMB, this._element);\n  }\n\n  _handleEvents() {\n    EventHandler.on(this.rangeInput, 'mousedown', () => this._showThumb());\n    EventHandler.on(this.rangeInput, 'mouseup', () => this._hideThumb());\n    EventHandler.on(this.rangeInput, 'touchstart', () => this._showThumb());\n    EventHandler.on(this.rangeInput, 'touchend', () => this._hideThumb());\n    EventHandler.on(this.rangeInput, 'input', () => this._thumbUpdate());\n  }\n\n  _disposeEvents() {\n    EventHandler.off(this.rangeInput, 'mousedown');\n    EventHandler.off(this.rangeInput, 'mouseup');\n    EventHandler.off(this.rangeInput, 'touchstart');\n    EventHandler.off(this.rangeInput, 'touchend');\n    EventHandler.off(this.rangeInput, 'input');\n  }\n\n  _showThumb() {\n    Manipulator.addClass(this._thumb, CLASSNAME_ACTIVE);\n  }\n\n  _hideThumb() {\n    Manipulator.removeClass(this._thumb, CLASSNAME_ACTIVE);\n  }\n\n  _thumbUpdate() {\n    const rangeInput = this.rangeInput;\n    const inputValue = rangeInput.value;\n    const minValue = rangeInput.min ? rangeInput.min : 0;\n    const maxValue = rangeInput.max ? rangeInput.max : 100;\n    const thumbValue = SelectorEngine.findOne(SELECTOR_THUMB_VALUE, this._thumb);\n    thumbValue.textContent = inputValue;\n    const newValue = Number(((inputValue - minValue) * 100) / (maxValue - minValue));\n    Manipulator.style(this._thumb, { left: `calc(${newValue}% + (${8 - newValue * 0.15}px))` });\n  }\n  // Static\n\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n      if (!data && /dispose/.test(config)) {\n        return;\n      }\n      if (!data) {\n        data = new Range(this, _config);\n      }\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](options);\n      }\n    });\n  }\n}\n\nexport default Range;\n","import { typeCheckConfig } from '../mdb/util/index';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport EventHandler from '../mdb/dom/event-handler';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'animation';\n\nconst DefaultType = {\n  animation: 'string',\n  animationStart: 'string',\n  animationShowOnLoad: 'boolean',\n  onStart: '(null|function)',\n  onEnd: '(null|function)',\n  onHide: '(null|function)',\n  onShow: '(null|function)',\n  animationOnScroll: '(string)',\n  animationWindowHeight: 'number',\n  animationOffset: '(number|string)',\n  animationDelay: '(number|string)',\n  animationDuration: '(number|string)',\n  animationReverse: 'boolean',\n  animationInterval: '(number|string)',\n  animationRepeat: '(number|boolean)',\n  animationReset: 'boolean',\n};\n\nconst Default = {\n  animation: 'fade',\n  animationStart: 'onClick',\n  animationShowOnLoad: true,\n  onStart: null,\n  onEnd: null,\n  onHide: null,\n  onShow: null,\n  animationOnScroll: 'once',\n  animationWindowHeight: 0,\n  animationOffset: 0,\n  animationDelay: 0,\n  animationDuration: 500,\n  animationReverse: false,\n  animationInterval: 0,\n  animationRepeat: false,\n  animationReset: false,\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Animate extends BaseComponent {\n  constructor(element, options) {\n    super(element);\n\n    this._animateElement = this._getAnimateElement();\n    this._isFirstScroll = true;\n    this._repeatAnimateOnScroll = true;\n    this._options = this._getConfig(options);\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  init() {\n    this._init();\n  }\n\n  startAnimation() {\n    this._startAnimation();\n  }\n\n  stopAnimation() {\n    this._clearAnimationClass();\n  }\n\n  changeAnimationType(animation) {\n    this._options.animation = animation;\n  }\n\n  dispose() {\n    EventHandler.off(this._element, 'mousedown');\n    EventHandler.off(this._animateElement, 'animationend');\n    EventHandler.off(window, 'scroll');\n    EventHandler.off(this._element, 'mouseover');\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n  _init() {\n    switch (this._options.animationStart) {\n      case 'onHover':\n        this._bindHoverEvents();\n        break;\n      case 'onLoad':\n        this._startAnimation();\n        break;\n      case 'onScroll':\n        this._bindScrollEvents();\n        break;\n      case 'onClick':\n        this._bindClickEvents();\n        break;\n      default:\n        break;\n    }\n\n    this._bindTriggerOnEndCallback();\n\n    if (this._options.animationReset) {\n      this._bindResetAnimationAfterFinish();\n    }\n  }\n\n  _getAnimateElement() {\n    const targetId = Manipulator.getDataAttribute(this._element, 'animation-target');\n    return targetId ? SelectorEngine.find(targetId)[0] : this._element;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._animateElement);\n\n    config = {\n      ...Default,\n      ...dataAttributes,\n      ...config,\n    };\n\n    typeCheckConfig(NAME, config, DefaultType);\n\n    return config;\n  }\n\n  _animateOnScroll() {\n    const elementOffsetTop = Manipulator.offset(this._animateElement).top;\n    const elementHeight = this._animateElement.offsetHeight;\n    const windowHeight = window.innerHeight;\n    const shouldBeVisible =\n      elementOffsetTop + this._options.animationOffset <= windowHeight &&\n      elementOffsetTop + this._options.animationOffset + elementHeight >= 0;\n    const isElementVisible = this._animateElement.style.visibility === 'visible';\n\n    switch (true) {\n      case shouldBeVisible && this._isFirstScroll:\n        this._isFirstScroll = false;\n        this._startAnimation();\n        break;\n      case !shouldBeVisible && this._isFirstScroll:\n        this._isFirstScroll = false;\n        this._hideAnimateElement();\n        break;\n      case shouldBeVisible && !isElementVisible && this._repeatAnimateOnScroll:\n        if (this._options.animationOnScroll !== 'repeat') {\n          this._repeatAnimateOnScroll = false;\n        }\n        this._callback(this._options.onShow);\n        this._showAnimateElement();\n        this._startAnimation();\n        break;\n      case !shouldBeVisible && isElementVisible && this._repeatAnimateOnScroll:\n        this._hideAnimateElement();\n        this._clearAnimationClass();\n        this._callback(this._options.onHide);\n        break;\n      default:\n        break;\n    }\n  }\n\n  _addAnimatedClass() {\n    Manipulator.addClass(this._animateElement, 'animation');\n    Manipulator.addClass(this._animateElement, this._options.animation);\n  }\n\n  _clearAnimationClass() {\n    this._animateElement.classList.remove(this._options.animation, 'animation');\n  }\n\n  _removeInvisibleClass() {\n    Manipulator.removeClass(this._animateElement, 'invisible');\n  }\n\n  _startAnimation() {\n    this._callback(this._options.onStart);\n\n    this._removeInvisibleClass();\n    this._addAnimatedClass();\n\n    if (this._options.animationRepeat && !this._options.animationInterval) {\n      this._setAnimationRepeat();\n    }\n\n    if (this._options.animationReverse) {\n      this._setAnimationReverse();\n    }\n\n    if (this._options.animationDelay) {\n      this._setAnimationDelay();\n    }\n\n    if (this._options.animationDuration) {\n      this._setAnimationDuration();\n    }\n\n    if (this._options.animationInterval) {\n      this._setAnimationInterval();\n    }\n  }\n\n  _setAnimationReverse() {\n    Manipulator.style(this._animateElement, {\n      animationIterationCount: this._options.animationRepeat === true ? 'infinite' : '2',\n      animationDirection: 'alternate',\n    });\n  }\n\n  _setAnimationDuration() {\n    Manipulator.style(this._animateElement, {\n      animationDuration: `${this._options.animationDuration}ms`,\n    });\n  }\n\n  _setAnimationDelay() {\n    Manipulator.style(this._animateElement, {\n      animationDelay: `${this._options.animationDelay}ms`,\n    });\n  }\n\n  _setAnimationRepeat() {\n    Manipulator.style(this._animateElement, {\n      animationIterationCount:\n        this._options.animationRepeat === true ? 'infinite' : this._options.animationRepeat,\n    });\n  }\n\n  _setAnimationInterval() {\n    EventHandler.on(this._animateElement, 'animationend', () => {\n      this._clearAnimationClass();\n      setTimeout(() => {\n        this._addAnimatedClass();\n      }, this._options.animationInterval);\n    });\n  }\n\n  _hideAnimateElement() {\n    Manipulator.style(this._animateElement, { visibility: 'hidden' });\n  }\n\n  _showAnimateElement() {\n    Manipulator.style(this._animateElement, { visibility: 'visible' });\n  }\n\n  _bindResetAnimationAfterFinish() {\n    EventHandler.on(this._animateElement, 'animationend', () => {\n      this._clearAnimationClass();\n    });\n  }\n\n  _bindTriggerOnEndCallback() {\n    EventHandler.on(this._animateElement, 'animationend', () => {\n      this._callback(this._options.onEnd);\n    });\n  }\n\n  _bindScrollEvents() {\n    if (!this._options.animationShowOnLoad) {\n      this._animateOnScroll();\n    }\n\n    EventHandler.on(window, 'scroll', () => {\n      this._animateOnScroll();\n    });\n  }\n\n  _bindClickEvents() {\n    EventHandler.on(this._element, 'mousedown', () => {\n      this._startAnimation();\n    });\n  }\n\n  _bindHoverEvents() {\n    EventHandler.one(this._element, 'mouseover', () => {\n      this._startAnimation();\n    });\n    EventHandler.one(this._animateElement, 'animationend', () => {\n      // wait after bind hoverEvents to prevent animation looping\n      setTimeout(() => {\n        this._bindHoverEvents();\n      }, 100);\n    });\n  }\n\n  _callback(fn) {\n    if (fn instanceof Function) {\n      fn();\n    }\n  }\n\n  // Static\n  static autoInit(instance) {\n    instance._init();\n  }\n\n  static jQueryInterface(options) {\n    const animate = new Animate(this[0], options);\n    animate.init();\n  }\n}\n\nexport default Animate;\n","/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction noop() {}\nconst uid = (function() {\n  let id = 0;\n  return function() {\n    return id++;\n  };\n}());\nfunction isNullOrUndef(value) {\n  return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\nfunction isObject(value) {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : value / dimension;\nconst toDimension = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\nfunction callback(fn, args, thisArg) {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n  let i, len, keys;\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\nfunction _elementsEqual(a0, a1) {\n  let i, ilen, v0, v1;\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction clone$1(source) {\n  if (isArray(source)) {\n    return source.map(clone$1);\n  }\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone$1(source[keys[k]]);\n    }\n    return target;\n  }\n  return source;\n}\nfunction isValidKey(key) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone$1(sval);\n  }\n}\nfunction merge(target, source, options) {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n  if (!isObject(target)) {\n    return target;\n  }\n  options = options || {};\n  const merger = options.merger || _merger;\n  for (let i = 0; i < ilen; ++i) {\n    source = sources[i];\n    if (!isObject(source)) {\n      continue;\n    }\n    const keys = Object.keys(source);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, source, options);\n    }\n  }\n  return target;\n}\nfunction mergeIf(target, source) {\n  return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone$1(sval);\n  }\n}\nfunction _deprecated(scope, value, previous, current) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\nconst keyResolvers = {\n  '': v => v,\n  x: o => o.x,\n  y: o => o.y\n};\nfunction resolveObjectKey(obj, key) {\n  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n  return resolver(obj);\n}\nfunction _getKeyResolver(key) {\n  const keys = _splitKey(key);\n  return obj => {\n    for (const k of keys) {\n      if (k === '') {\n        break;\n      }\n      obj = obj && obj[k];\n    }\n    return obj;\n  };\n}\nfunction _splitKey(key) {\n  const parts = key.split('.');\n  const keys = [];\n  let tmp = '';\n  for (const part of parts) {\n    tmp += part;\n    if (tmp.endsWith('\\\\')) {\n      tmp = tmp.slice(0, -1) + '.';\n    } else {\n      keys.push(tmp);\n      tmp = '';\n    }\n  }\n  return keys;\n}\nfunction _capitalize(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n  return true;\n};\nfunction _isClickEvent(e) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n  const result = [];\n  const sqrt = Math.sqrt(value);\n  let i;\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) {\n    result.push(sqrt);\n  }\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\nfunction isNumber(n) {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n  return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n  let i, ilen, value;\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\nfunction toRadians(degrees) {\n  return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n  return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n  if (!isNumberFinite(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n  if (angle < (-0.5 * PI)) {\n    angle += TAU;\n  }\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n  return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n  return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || (sameAngleIsFullCircle && s === e)\n    || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\nfunction _limitValue(value, min, max) {\n  return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n  return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid;\n  while (hi - lo > 1) {\n    mid = (lo + hi) >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n  return {lo, hi};\n}\nconst _lookupByKey = (table, key, value, last) =>\n  _lookup(table, value, last\n    ? index => table[index][key] <= value\n    : index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n  _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n  let start = 0;\n  let end = values.length;\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n        return res;\n      }\n    });\n  });\n}\nfunction unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n  if (listeners.length > 0) {\n    return;\n  }\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n  delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n  const set = new Set();\n  let i, ilen;\n  for (i = 0, ilen = items.length; i < ilen; ++i) {\n    set.add(items[i]);\n  }\n  if (set.size === ilen) {\n    return items;\n  }\n  return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n  const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n  let ticking = false;\n  let args = [];\n  return function(...rest) {\n    args = updateArgs(rest);\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, args);\n      });\n    }\n  };\n}\nfunction debounce(fn, delay) {\n  let timeout;\n  return function(...args) {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\nfunction _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n  const pointCount = points.length;\n  let start = 0;\n  let count = pointCount;\n  if (meta._sorted) {\n    const {iScale, _parsed} = meta;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n    if (minDefined) {\n      start = _limitValue(Math.min(\n        _lookupByKey(_parsed, iScale.axis, min).lo,\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n      0, pointCount - 1);\n    }\n    if (maxDefined) {\n      count = _limitValue(Math.max(\n        _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1),\n      start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n  return {start, count};\n}\nfunction _scaleRangesChanged(meta) {\n  const {xScale, yScale, _scaleRanges} = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n  linear: t => t,\n  easeInQuad: t => t * t,\n  easeOutQuad: t => -t * (t - 2),\n  easeInOutQuad: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n  easeInCubic: t => t * t * t,\n  easeOutCubic: t => (t -= 1) * t * t + 1,\n  easeInOutCubic: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n  easeInQuart: t => t * t * t * t,\n  easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n  easeInOutQuart: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n  easeInQuint: t => t * t * t * t * t,\n  easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n  easeInOutQuint: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n  easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n  easeOutSine: t => Math.sin(t * HALF_PI),\n  easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n  easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n  easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n  easeInOutExpo: t => atEdge(t) ? t : t < 0.5\n    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n  easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n  easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n  easeInOutCirc: t => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n  easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n  easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n  easeInOutElastic(t) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t :\n      t < 0.5\n        ? 0.5 * elasticIn(t * 2, s, p)\n        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n  easeInBack(t) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n  easeOutBack(t) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n  easeInOutBack(t) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n  },\n  easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n  easeOutBounce(t) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < (1 / d)) {\n      return m * t * t;\n    }\n    if (t < (2 / d)) {\n      return m * (t -= (1.5 / d)) * t + 0.75;\n    }\n    if (t < (2.5 / d)) {\n      return m * (t -= (2.25 / d)) * t + 0.9375;\n    }\n    return m * (t -= (2.625 / d)) * t + 0.984375;\n  },\n  easeInOutBounce: t => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.2.1\n * https://github.com/kurkle/color#readme\n * (c) 2022 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map = {\n  x: 'dark',\n  Z: 'light',\n  Y: 're',\n  X: 'blu',\n  W: 'gr',\n  V: 'medium',\n  U: 'slate',\n  A: 'ee',\n  T: 'ol',\n  S: 'or',\n  B: 'ra',\n  C: 'lateg',\n  D: 'ights',\n  R: 'in',\n  Q: 'turquois',\n  E: 'hi',\n  P: 'ro',\n  O: 'al',\n  N: 'le',\n  M: 'de',\n  L: 'yello',\n  F: 'en',\n  K: 'ch',\n  G: 'arks',\n  H: 'ea',\n  I: 'ightg',\n  J: 'wh'\n};\nconst names$1 = {\n  OiceXe: 'f0f8ff',\n  antiquewEte: 'faebd7',\n  aqua: 'ffff',\n  aquamarRe: '7fffd4',\n  azuY: 'f0ffff',\n  beige: 'f5f5dc',\n  bisque: 'ffe4c4',\n  black: '0',\n  blanKedOmond: 'ffebcd',\n  Xe: 'ff',\n  XeviTet: '8a2be2',\n  bPwn: 'a52a2a',\n  burlywood: 'deb887',\n  caMtXe: '5f9ea0',\n  KartYuse: '7fff00',\n  KocTate: 'd2691e',\n  cSO: 'ff7f50',\n  cSnflowerXe: '6495ed',\n  cSnsilk: 'fff8dc',\n  crimson: 'dc143c',\n  cyan: 'ffff',\n  xXe: '8b',\n  xcyan: '8b8b',\n  xgTMnPd: 'b8860b',\n  xWay: 'a9a9a9',\n  xgYF: '6400',\n  xgYy: 'a9a9a9',\n  xkhaki: 'bdb76b',\n  xmagFta: '8b008b',\n  xTivegYF: '556b2f',\n  xSange: 'ff8c00',\n  xScEd: '9932cc',\n  xYd: '8b0000',\n  xsOmon: 'e9967a',\n  xsHgYF: '8fbc8f',\n  xUXe: '483d8b',\n  xUWay: '2f4f4f',\n  xUgYy: '2f4f4f',\n  xQe: 'ced1',\n  xviTet: '9400d3',\n  dAppRk: 'ff1493',\n  dApskyXe: 'bfff',\n  dimWay: '696969',\n  dimgYy: '696969',\n  dodgerXe: '1e90ff',\n  fiYbrick: 'b22222',\n  flSOwEte: 'fffaf0',\n  foYstWAn: '228b22',\n  fuKsia: 'ff00ff',\n  gaRsbSo: 'dcdcdc',\n  ghostwEte: 'f8f8ff',\n  gTd: 'ffd700',\n  gTMnPd: 'daa520',\n  Way: '808080',\n  gYF: '8000',\n  gYFLw: 'adff2f',\n  gYy: '808080',\n  honeyMw: 'f0fff0',\n  hotpRk: 'ff69b4',\n  RdianYd: 'cd5c5c',\n  Rdigo: '4b0082',\n  ivSy: 'fffff0',\n  khaki: 'f0e68c',\n  lavFMr: 'e6e6fa',\n  lavFMrXsh: 'fff0f5',\n  lawngYF: '7cfc00',\n  NmoncEffon: 'fffacd',\n  ZXe: 'add8e6',\n  ZcSO: 'f08080',\n  Zcyan: 'e0ffff',\n  ZgTMnPdLw: 'fafad2',\n  ZWay: 'd3d3d3',\n  ZgYF: '90ee90',\n  ZgYy: 'd3d3d3',\n  ZpRk: 'ffb6c1',\n  ZsOmon: 'ffa07a',\n  ZsHgYF: '20b2aa',\n  ZskyXe: '87cefa',\n  ZUWay: '778899',\n  ZUgYy: '778899',\n  ZstAlXe: 'b0c4de',\n  ZLw: 'ffffe0',\n  lime: 'ff00',\n  limegYF: '32cd32',\n  lRF: 'faf0e6',\n  magFta: 'ff00ff',\n  maPon: '800000',\n  VaquamarRe: '66cdaa',\n  VXe: 'cd',\n  VScEd: 'ba55d3',\n  VpurpN: '9370db',\n  VsHgYF: '3cb371',\n  VUXe: '7b68ee',\n  VsprRggYF: 'fa9a',\n  VQe: '48d1cc',\n  VviTetYd: 'c71585',\n  midnightXe: '191970',\n  mRtcYam: 'f5fffa',\n  mistyPse: 'ffe4e1',\n  moccasR: 'ffe4b5',\n  navajowEte: 'ffdead',\n  navy: '80',\n  Tdlace: 'fdf5e6',\n  Tive: '808000',\n  TivedBb: '6b8e23',\n  Sange: 'ffa500',\n  SangeYd: 'ff4500',\n  ScEd: 'da70d6',\n  pOegTMnPd: 'eee8aa',\n  pOegYF: '98fb98',\n  pOeQe: 'afeeee',\n  pOeviTetYd: 'db7093',\n  papayawEp: 'ffefd5',\n  pHKpuff: 'ffdab9',\n  peru: 'cd853f',\n  pRk: 'ffc0cb',\n  plum: 'dda0dd',\n  powMrXe: 'b0e0e6',\n  purpN: '800080',\n  YbeccapurpN: '663399',\n  Yd: 'ff0000',\n  Psybrown: 'bc8f8f',\n  PyOXe: '4169e1',\n  saddNbPwn: '8b4513',\n  sOmon: 'fa8072',\n  sandybPwn: 'f4a460',\n  sHgYF: '2e8b57',\n  sHshell: 'fff5ee',\n  siFna: 'a0522d',\n  silver: 'c0c0c0',\n  skyXe: '87ceeb',\n  UXe: '6a5acd',\n  UWay: '708090',\n  UgYy: '708090',\n  snow: 'fffafa',\n  sprRggYF: 'ff7f',\n  stAlXe: '4682b4',\n  tan: 'd2b48c',\n  teO: '8080',\n  tEstN: 'd8bfd8',\n  tomato: 'ff6347',\n  Qe: '40e0d0',\n  viTet: 'ee82ee',\n  JHt: 'f5deb3',\n  wEte: 'ffffff',\n  wEtesmoke: 'f5f5f5',\n  Lw: 'ffff00',\n  LwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nfunction isPatternOrGradient(value) {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n  return false;\n}\nfunction color(value) {\n  return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope$1(root, scope), values);\n  }\n  return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n  constructor(_descriptors) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      'mousemove',\n      'mouseout',\n      'click',\n      'touchstart',\n      'touchmove'\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n    this.describe(_descriptors);\n  }\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n  get(scope) {\n    return getScope$1(this, scope);\n  }\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope$1(this, scope);\n    const targetScopeObject = getScope$1(this, targetScope);\n    const privateName = '_' + name;\n    Object.defineProperties(scopeObject, {\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n}\nvar defaults = new Defaults({\n  _scriptable: (name) => !name.startsWith('on'),\n  _indexable: (name) => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false,\n  }\n});\n\nfunction toFontString(font) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n  return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n  ctx.save();\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i, j, jlen, thing, nestedThing;\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n    if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n  ctx.restore();\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n  ctx = ctx || canvas.getContext('2d');\n  ctx.save();\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n  drawPointLegend(ctx, options, x, y, null);\n}\nfunction drawPointLegend(ctx, options, x, y, w) {\n  let type, xOffset, yOffset, size, cornerRadius, width;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n  ctx.beginPath();\n  switch (style) {\n  default:\n    if (w) {\n      ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n    } else {\n      ctx.arc(x, y, radius, 0, TAU);\n    }\n    ctx.closePath();\n    break;\n  case 'triangle':\n    ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    ctx.closePath();\n    break;\n  case 'rectRounded':\n    cornerRadius = radius * 0.516;\n    size = radius - cornerRadius;\n    xOffset = Math.cos(rad + QUARTER_PI) * size;\n    yOffset = Math.sin(rad + QUARTER_PI) * size;\n    ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n    ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n    ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n    ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n    ctx.closePath();\n    break;\n  case 'rect':\n    if (!rotation) {\n      size = Math.SQRT1_2 * radius;\n      width = w ? w / 2 : size;\n      ctx.rect(x - width, y - size, 2 * width, 2 * size);\n      break;\n    }\n    rad += QUARTER_PI;\n  case 'rectRot':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    ctx.closePath();\n    break;\n  case 'crossRot':\n    rad += QUARTER_PI;\n  case 'cross':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'star':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    rad += QUARTER_PI;\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'line':\n    xOffset = w ? w / 2 : Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    break;\n  case 'dash':\n    ctx.moveTo(x, y);\n    ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n    break;\n  }\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\nfunction _isPointInArea(point, area, margin) {\n  margin = margin || 0.5;\n  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\nfunction clipArea(ctx, area) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\nfunction unclipArea(ctx) {\n  ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y);\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i, line;\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n    y += font.lineHeight;\n  }\n  ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n  if (opts.strikethrough || opts.underline) {\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\nfunction addRoundedRectPath(ctx, rect) {\n  const {x, y, w, h, radius} = rect;\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n  ctx.lineTo(x + w, y + radius.topRight);\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n  ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n  value = +matches[2];\n  switch (matches[3]) {\n  case 'px':\n    return value;\n  case '%':\n    value /= 100;\n    break;\n  }\n  return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value)\n    ? objProps\n      ? prop => valueOrDefault(value[prop], value[props[prop]])\n      : prop => value[prop]\n    : () => value;\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\nfunction toTRBL(value) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n  const obj = toTRBL(value);\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n  return obj;\n}\nfunction toFont(options, fallback) {\n  options = options || {};\n  fallback = fallback || defaults.font;\n  let size = valueOrDefault(options.size, fallback.size);\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = '';\n  }\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n  font.string = toFontString(font);\n  return font;\n}\nfunction resolve(inputs, context, index, info) {\n  let cacheable = true;\n  let i, ilen, value;\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\nfunction _addGrace(minmax, grace, beginAtZero) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\nfunction createContext(parentContext, context) {\n  return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n  if (!defined(fallback)) {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: rootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete target._keys;\n      delete scopes[0][prop];\n      return true;\n    },\n    get(target, prop) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n    has(target, prop) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n    set(target, prop, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value;\n      delete target._keys;\n      return true;\n    }\n  });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n  const cache = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete proxy[prop];\n      return true;\n    },\n    get(target, prop, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys\n        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n        : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n    set(target, prop, value) {\n      proxy[prop] = value;\n      delete target[prop];\n      return true;\n    }\n  });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n  if (Object.prototype.hasOwnProperty.call(target, prop)) {\n    return target[prop];\n  }\n  const value = resolve();\n  target[prop] = value;\n  return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop];\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n  const {_proxy, _context, _subProxy, _stack} = target;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  value = value(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  if (defined(_context.index) && isIndexable(prop)) {\n    value = value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n        return fallback;\n      }\n    } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n      return null;\n    }\n  }\n  return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (defined(fallback) && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback,\n    () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    return value;\n  }\n  return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n  let value;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (defined(value)) {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\nfunction _resolve(key, scopes) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (defined(value)) {\n      return value;\n    }\n  }\n}\nfunction getKeysFromAllScopes(target) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n  const set = new Set();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n  const {iScale} = meta;\n  const {key = 'r'} = this._parsing;\n  const parsed = new Array(count);\n  let i, ilen, index, item;\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index = i + start;\n    item = data[index];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n  return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n  const fa = t * s01;\n  const fb = t * s12;\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n  const pointsLen = points.length;\n  let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK = Array(pointsLen).fill(0);\n  const mK = Array(pointsLen);\n  let i, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i]\n      : !pointAfter ? deltaK[i - 1]\n      : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n      : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n  monotoneAdjust(points, deltaK, mK);\n  monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n  return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n  let i, ilen, point, controlPoints;\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n\nfunction _isDomSupported() {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = parent.host;\n  }\n  return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n  let valueInPixels;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n    if (styleValue.indexOf('%') !== -1) {\n      valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n  return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n  return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n  const result = {};\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(e, canvas) {\n  const touches = e.touches;\n  const source = touches && touches.length ? touches[0] : e;\n  const {offsetX, offsetY} = source;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {x, y, box};\n}\nfunction getRelativePosition(evt, chart) {\n  if ('native' in evt) {\n    return evt;\n  }\n  const {canvas, currentDevicePixelRatio} = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const {x, y, box} = getCanvasPosition(evt, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n  let {width, height} = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\nfunction getContainerSize(canvas, width, height) {\n  let maxWidth, maxHeight;\n  if (width === undefined || height === undefined) {\n    const container = _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect();\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let {width, height} = containerSize;\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    height = round1(width / 2);\n  }\n  return {\n    width,\n    height\n  };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n  chart.height = deviceHeight / pixelRatio;\n  chart.width = deviceWidth / pixelRatio;\n  const canvas = chart.canvas;\n  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n  if (chart.currentDevicePixelRatio !== pixelRatio\n      || canvas.height !== deviceHeight\n      || canvas.width !== deviceWidth) {\n    chart.currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\nconst supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() {\n        passiveSupported = true;\n        return false;\n      }\n    };\n    window.addEventListener('test', null, options);\n    window.removeEventListener('test', null, options);\n  } catch (e) {\n  }\n  return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n    : mode === 'after' ? t < 1 ? p1.y : p2.y\n    : t > 0 ? p2.y : p1.y\n  };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n  const cp1 = {x: p1.cp2x, y: p1.cp2y};\n  const cp2 = {x: p2.cp1x, y: p2.cp1y};\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\nfunction formatNumber(num, locale, options) {\n  return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    },\n  };\n};\nconst getLeftToRightAdapter = function() {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) {\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) {\n      return x;\n    },\n  };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n  let style, original;\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n    style.setProperty('direction', direction, 'important');\n    ctx.prevTextDirection = original;\n  }\n}\nfunction restoreTextDirection(ctx, original) {\n  if (original !== undefined) {\n    delete ctx.prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle,\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\nfunction normalizeSegment({start, end, count, loop, style}) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\nfunction getSegment(segment, points, bounds) {\n  const {property, start: startBound, end: endBound} = bounds;\n  const {between, normalize} = propertyFn(property);\n  const count = points.length;\n  let {start, end, loop} = segment;\n  let i, ilen;\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n  const {property, start: startBound, end: endBound} = bounds;\n  const count = points.length;\n  const {compare, between, normalize} = propertyFn(property);\n  const {start, end, loop, style} = getSegment(segment, points, bounds);\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n    if (point.skip) {\n      continue;\n    }\n    value = normalize(point[property]);\n    if (value === prevValue) {\n      continue;\n    }\n    inside = between(value, startBound, endBound);\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n  return result;\n}\nfunction _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n  if (loop && !spanGaps) {\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n  while (start < count && points[start].skip) {\n    start++;\n  }\n  start %= count;\n  if (loop) {\n    end += start;\n  }\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n  end %= count;\n  return {start, end};\n}\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({start: start % count, end: (end - 1) % count, loop});\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n  return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n  if (!count) {\n    return [];\n  }\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n  }\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({start: s % count, end: e % count, loop: l, style: st});\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n  return result;\n}\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\nfunction styleChanged(style, prevStyle) {\n  return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { _isPointInArea as $, _factorize as A, finiteOrDefault as B, callback as C, _addGrace as D, _limitValue as E, toDegrees as F, _measureText as G, HALF_PI as H, _int16Range as I, _alignPixel as J, toPadding as K, clipArea as L, renderText as M, unclipArea as N, toFont as O, PI as P, each as Q, _toLeftRightCenter as R, _alignStartEnd as S, TAU as T, overrides as U, merge as V, _capitalize as W, getRelativePosition as X, _rlookupByKey as Y, _lookupByKey as Z, _arrayUnique as _, resolve as a, toLineHeight as a$, getAngleFromPoint as a0, getMaximumSize as a1, _getParentNode as a2, readUsedSize as a3, throttled as a4, supportsEventListenerOptions as a5, _isDomSupported as a6, descriptors as a7, isFunction as a8, _attachContext as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, noop as aF, distanceBetweenPoints as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, _longestText as aM, _filterBetween as aN, _lookup as aO, isPatternOrGradient as aP, getHoverColor as aQ, clone$1 as aR, _merger as aS, _mergerIf as aT, _deprecated as aU, _splitKey as aV, toFontString as aW, splineCurve as aX, splineCurveMonotone as aY, getStyle as aZ, fontString as a_, _createResolver as aa, _descriptors as ab, mergeIf as ac, uid as ad, debounce as ae, retinaScale as af, clearCanvas as ag, setsEqual as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _readValueToProps as al, _updateBezierControlPoints as am, _computeSegments as an, _boundSegments as ao, _steppedInterpolation as ap, _bezierInterpolation as aq, _pointInLine as ar, _steppedLineTo as as, _bezierCurveTo as at, drawPoint as au, addRoundedRectPath as av, toTRBL as aw, toTRBLCorners as ax, _boundSegment as ay, _normalizeAngle as az, isArray as b, PITAU as b0, INFINITY as b1, RAD_PER_DEG as b2, QUARTER_PI as b3, TWO_THIRDS_PI as b4, _angleDiff as b5, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, log10 as z };\n","/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as log10, A as _factorize, B as finiteOrDefault, C as callback, D as _addGrace, E as _limitValue, F as toDegrees, G as _measureText, I as _int16Range, J as _alignPixel, K as toPadding, L as clipArea, M as renderText, N as unclipArea, O as toFont, Q as each, R as _toLeftRightCenter, S as _alignStartEnd, U as overrides, V as merge, W as _capitalize, X as getRelativePosition, Y as _rlookupByKey, Z as _lookupByKey, $ as _isPointInArea, a0 as getAngleFromPoint, a1 as getMaximumSize, a2 as _getParentNode, a3 as readUsedSize, a4 as throttled, a5 as supportsEventListenerOptions, a6 as _isDomSupported, a7 as descriptors, a8 as isFunction, a9 as _attachContext, aa as _createResolver, ab as _descriptors, ac as mergeIf, ad as uid, ae as debounce, af as retinaScale, ag as clearCanvas, ah as setsEqual, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _readValueToProps, am as _updateBezierControlPoints, an as _computeSegments, ao as _boundSegments, ap as _steppedInterpolation, aq as _bezierInterpolation, ar as _pointInLine, as as _steppedLineTo, at as _bezierCurveTo, au as drawPoint, av as addRoundedRectPath, aw as toTRBL, ax as toTRBLCorners, ay as _boundSegment, az as _normalizeAngle, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as noop, aG as distanceBetweenPoints, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as _longestText, aN as _filterBetween, aO as _lookup } from './chunks/helpers.segment.mjs';\nexport { d as defaults } from './chunks/helpers.segment.mjs';\n\nclass Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n  _update(date = Date.now()) {\n    let remaining = 0;\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n      for (; i >= 0; --i) {\n        item = items[i];\n        if (item._active) {\n          if (item._total > anims.duration) {\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n      remaining += items.length;\n    });\n    this._lastDate = date;\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  color(from, to, factor) {\n    const c0 = color(from || transparent);\n    const c1 = c0.valid && color(to || transparent);\n    return c1 && c1.valid\n      ? c1.mix(c0, factor).hexString()\n      : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\nclass Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n  active() {\n    return this._active;\n  }\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n  cancel() {\n    if (this._active) {\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from = this._from;\n    const loop = this._loop;\n    const to = this._to;\n    let factor;\n    this._active = from !== to && (loop || (elapsed < duration));\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\n    }\n    factor = (elapsed / duration) % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n    this._target[prop] = this._fn(from, to, factor);\n  }\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\n    });\n  }\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\n\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n  delay: undefined,\n  duration: 1000,\n  easing: 'easeOutQuart',\n  fn: undefined,\n  from: undefined,\n  loop: undefined,\n  to: undefined,\n  type: undefined,\n});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n  _fallback: false,\n  _indexable: false,\n  _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n  colors: {\n    type: 'color',\n    properties: colors\n  },\n  numbers: {\n    type: 'number',\n    properties: numbers\n  },\n});\ndefaults.describe('animations', {\n  _fallback: 'animation',\n});\ndefaults.set('transitions', {\n  active: {\n    animation: {\n      duration: 400\n    }\n  },\n  resize: {\n    animation: {\n      duration: 0\n    }\n  },\n  show: {\n    animations: {\n      colors: {\n        from: 'transparent'\n      },\n      visible: {\n        type: 'boolean',\n        duration: 0\n      },\n    }\n  },\n  hide: {\n    animations: {\n      colors: {\n        to: 'transparent'\n      },\n      visible: {\n        type: 'boolean',\n        easing: 'linear',\n        fn: v => v | 0\n      },\n    }\n  }\n});\nclass Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n    const animatedProps = this._properties;\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n      });\n    }\n    return animations;\n  }\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n      if (animation) {\n        if (cfg && animation.active()) {\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        target[prop] = value;\n        continue;\n      }\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n  update(target, values) {\n    if (this._properties.size === 0) {\n      Object.assign(target, values);\n      return;\n    }\n    const animations = this._createAnimations(target, values);\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\nfunction toClip(value) {\n  let t, r, b, l;\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n  if (value === null) {\n    return;\n  }\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n  return value;\n}\nfunction convertObjectDataToArray(data) {\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      x: key,\n      y: data[key]\n    };\n  }\n  return adata;\n}\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n  const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if ((positive && value > 0) || (!positive && value < 0)) {\n      return meta.index;\n    }\n  }\n  return null;\n}\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {});\n  const {iScale, vScale, index: datasetIndex} = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const {[iAxis]: index, [vAxis]: value} = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n  }\n}\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n  return createContext(parent,\n    {\n      active: false,\n      dataset: undefined,\n      datasetIndex: index,\n      index,\n      mode: 'default',\n      type: 'dataset'\n    }\n  );\n}\nfunction createDataContext(parent, index, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\nfunction clearStacks(meta, items) {\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n  }\n}\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n  && {keys: getSortedDatasetIndices(chart, true), values: null};\nclass DatasetController {\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.initialize();\n  }\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n  }\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n  reset() {\n    this._update('reset');\n  }\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n    if (isObject(data)) {\n      this._data = convertObjectDataToArray(data);\n    } else if (_data !== data) {\n      if (_data) {\n        unlistenArrayEvents(_data, this);\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n  addElements() {\n    const meta = this._cachedMeta;\n    this._dataCheck();\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n    this._dataCheck();\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n    this._resyncElements(resetNewElements);\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n    }\n  }\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n    let i, parsed;\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        break;\n      }\n    }\n    if (sorted) {\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isNumberFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n  getMaxOverflow() {\n    return false;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n  update(mode) {}\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || (elements.length - start);\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset\n      ? this.resolveDatasetElementOptions(mode)\n      : this.resolveDataElementOptions(index || 0, mode);\n  }\n  getContext(index, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index >= 0 && index < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index];\n      context = element.$context ||\n        (element.$context = createDataContext(this.getContext(), index, element));\n      context.parsed = this.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = this.$context ||\n        (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n  _resolveElementOptions(elementType, mode = 'default', index) {\n    const active = mode === 'active';\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    const context = () => this.getContext(index, active);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n    if (values.$shared) {\n      values.$shared = sharing;\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n    return values;\n  }\n  _resolveAnimations(index, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n  _getSharedOptions(start, mode) {\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const previouslySharedOptions = this._sharedOptions;\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    return {sharedOptions, includeOptions};\n  }\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n    if (count) {\n      this.parse(0, count);\n    }\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n  updateElements(element, start, count, mode) {}\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync(['_removeElements', start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync(['_insertElements', start, newCount]);\n    }\n  }\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      return;\n    }\n    if (defined(prev)) {\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n  return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n  if (prev === null) {\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n  if (next === null) {\n    next = curr + curr - prev;\n  }\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n  item[vScale.axis] = barEnd;\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {start, end, reverse, top, bottom};\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n  if (edge === true) {\n    properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n    return;\n  }\n  const {start, end, reverse, top, bottom} = borderProps(properties);\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\nclass BarController extends DatasetController {\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseObjectData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n  getMaxOverflow() {\n    return 0;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {iScale, vScale} = meta;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom)\n      ? '[' + custom.start + ', ' + custom.end + ']'\n      : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n  updateElements(bars, start, count, mode) {\n    const reset = mode === 'reset';\n    const {index, _cachedMeta: {vScale}} = this;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n  _getStacks(last, dataIndex) {\n    const {iScale} = this._cachedMeta;\n    const metasets = iScale.getMatchingVisibleMetas(this._type)\n      .filter(meta => meta.controller.options.grouped);\n    const stacked = iScale.options.stacked;\n    const stacks = [];\n    const skipNull = (meta) => {\n      const parsed = meta.controller.getParsed(dataIndex);\n      const val = parsed && parsed[meta.vScale.axis];\n      if (isNullOrUndef(val) || isNaN(val)) {\n        return true;\n      }\n    };\n    for (const meta of metasets) {\n      if (dataIndex !== undefined && skipNull(meta)) {\n        continue;\n      }\n      if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n        stacks.push(meta.stack);\n      }\n      if (meta.index === last) {\n        break;\n      }\n    }\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n    return stacks;\n  }\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1;\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      head = base;\n    }\n    size = head - base;\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n    }\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n  _calculateBarIndexPixels(index, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex'\n        ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n        : computeFitCategoryTraits(index, ruler, options, stackCount);\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'bar',\n  categoryPercentage: 0.8,\n  barPercentage: 0.9,\n  grouped: true,\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'base', 'width', 'height']\n    }\n  }\n};\nBarController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n      offset: true,\n      grid: {\n        offset: true\n      }\n    },\n    _value_: {\n      type: 'linear',\n      beginAtZero: true,\n    }\n  }\n};\n\nclass BubbleController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n    return {\n      label: meta.label,\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n  update(mode) {\n    const points = this._cachedMeta.data;\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n    return values;\n  }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'borderWidth', 'radius']\n    }\n  }\n};\nBubbleController.overrides = {\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        }\n      }\n    }\n  }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {ratioX, ratioY, offsetX, offsetY};\n}\nclass DoughnutController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n  linkScales() {}\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\n      }\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\n  update(mode) {\n    const chart = this.chart;\n    const {chartArea} = chart;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n    const {circumference, rotation} = this._getRotationExtents();\n    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n    meta.total = this.calculateTotal();\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    let startAngle = this._getRotation();\n    let i;\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n    return total;\n  }\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n    if (!arcs) {\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n    if (!arcs) {\n      return 0;\n    }\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n  getMaxOffset(arcs) {\n    let max = 0;\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n    return ringWeightOffset;\n  }\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\n    animateScale: false\n  },\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n    },\n  },\n  cutout: '50%',\n  rotation: 0,\n  circumference: 360,\n  radius: '100%',\n  spacing: 0,\n  indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n  _scriptable: (name) => name !== 'spacing',\n  _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const {labels: {pointStyle}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(tooltipItem) {\n          let dataLabel = tooltipItem.label;\n          const value = ': ' + tooltipItem.formattedValue;\n          if (isArray(dataLabel)) {\n            dataLabel = dataLabel.slice();\n            dataLabel[0] += value;\n          } else {\n            dataLabel += value;\n          }\n          return dataLabel;\n        }\n      }\n    }\n  }\n};\n\nclass LineController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n    this._drawStart = start;\n    this._drawCount = count;\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n    this.updateElements(points, start, count, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n  }\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\nLineController.id = 'line';\nLineController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  showLine: true,\n  spanGaps: false,\n};\nLineController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n    },\n    _value_: {\n      type: 'linear',\n    },\n  }\n};\n\nclass PolarAreaController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n    return range;\n  }\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n    const defaultAngle = 360 / this.countVisibleElements();\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n    return count;\n  }\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\n    animateScale: true\n  },\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n    },\n  },\n  indexAxis: 'r',\n  startAngle: 0,\n};\nPolarAreaController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const {labels: {pointStyle}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(context) {\n          return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n        }\n      }\n    }\n  },\n  scales: {\n    r: {\n      type: 'radialLinear',\n      angleLines: {\n        display: false\n      },\n      beginAtZero: true,\n      grid: {\n        circular: true\n      },\n      pointLabels: {\n        display: false\n      },\n      startAngle: 0\n    }\n  }\n};\n\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n  cutout: 0,\n  rotation: 0,\n  circumference: 360,\n  radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n    line.points = points;\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n      this.updateElement(line, undefined, properties, mode);\n    }\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  indexAxis: 'r',\n  showLine: true,\n  elements: {\n    line: {\n      fill: 'start'\n    }\n  },\n};\nRadarController.overrides = {\n  aspectRatio: 1,\n  scales: {\n    r: {\n      type: 'radialLinear',\n    }\n  }\n};\n\nclass Element {\n  constructor() {\n    this.x = undefined;\n    this.y = undefined;\n    this.active = false;\n    this.options = undefined;\n    this.$animations = undefined;\n  }\n  tooltipPosition(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n  getProps(props, final) {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      return this;\n    }\n    const ret = {};\n    props.forEach(prop => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n    });\n    return ret;\n  }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n  values(value) {\n    return isArray(value) ? value : '' + value;\n  },\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue;\n    if (ticks.length > 1) {\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n      delta = calculateDelta(tickValue, ticks);\n    }\n    const logDelta = log10(Math.abs(delta));\n    const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n    return formatNumber(tickValue, locale, options);\n  },\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n    if (remain === 1 || remain === 2 || remain === 5) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n};\nfunction calculateDelta(tickValue, ticks) {\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n  display: true,\n  offset: false,\n  reverse: false,\n  beginAtZero: false,\n  bounds: 'ticks',\n  grace: 0,\n  grid: {\n    display: true,\n    lineWidth: 1,\n    drawBorder: true,\n    drawOnChartArea: true,\n    drawTicks: true,\n    tickLength: 8,\n    tickWidth: (_ctx, options) => options.lineWidth,\n    tickColor: (_ctx, options) => options.color,\n    offset: false,\n    borderDash: [],\n    borderDashOffset: 0.0,\n    borderWidth: 1\n  },\n  title: {\n    display: false,\n    text: '',\n    padding: {\n      top: 4,\n      bottom: 4\n    }\n  },\n  ticks: {\n    minRotation: 0,\n    maxRotation: 50,\n    mirror: false,\n    textStrokeWidth: 0,\n    textStrokeColor: '',\n    padding: 3,\n    display: true,\n    autoSkip: true,\n    autoSkipPadding: 3,\n    labelOffset: 0,\n    callback: Ticks.formatters.values,\n    minor: {},\n    major: {},\n    align: 'center',\n    crossAlign: 'near',\n    showLabelBackdrop: false,\n    backdropColor: 'rgba(255, 255, 255, 0.75)',\n    backdropPadding: 2,\n  }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n  _fallback: false,\n  _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n  _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',\n});\ndefaults.describe('scales', {\n  _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n  _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n  _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n  next = start;\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n  if (len < 2) {\n    return false;\n  }\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6;\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n  return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\nfunction titleAlign(align, position, reverse) {\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n  const {top, left, bottom, right, chart} = scale;\n  const {chartArea, scales} = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {titleX, titleY, maxWidth, rotation};\n}\nclass Scale extends Element {\n  constructor(cfg) {\n    super();\n    this.id = cfg.id;\n    this.type = cfg.type;\n    this.options = undefined;\n    this.ctx = cfg.ctx;\n    this.chart = cfg.chart;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    this.maxWidth = undefined;\n    this.maxHeight = undefined;\n    this.paddingTop = undefined;\n    this.paddingBottom = undefined;\n    this.paddingLeft = undefined;\n    this.paddingRight = undefined;\n    this.axis = undefined;\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    this.ticks = [];\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    this._startPixel = undefined;\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n  init(options) {\n    this.options = options.setContext(this.getContext());\n    this.axis = options.axis;\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n  parse(raw, index) {\n    return raw;\n  }\n  getUserBounds() {\n    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isNumberFinite(_userMin),\n      maxDefined: isNumberFinite(_userMax)\n    };\n  }\n  getMinMax(canStack) {\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n    if (minDefined && maxDefined) {\n      return {min, max};\n    }\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n  getTicks() {\n    return this.ticks;\n  }\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n  beforeUpdate() {\n    callback(this.options.beforeUpdate, [this]);\n  }\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n    this.beforeUpdate();\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n    this.beforeBuildTicks();\n    this.ticks = this.buildTicks() || [];\n    this.afterBuildTicks();\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n    this.configure();\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation();\n    this.afterCalculateLabelRotation();\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n    if (samplingEnabled) {\n      this._convertTicksToLabels(this.ticks);\n    }\n    this.beforeFit();\n    this.fit();\n    this.afterFit();\n    this.afterUpdate();\n  }\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n  afterUpdate() {\n    callback(this.options.afterUpdate, [this]);\n  }\n  beforeSetDimensions() {\n    callback(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = 0;\n      this.bottom = this.height;\n    }\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    callback(this.options.afterSetDimensions, [this]);\n  }\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    callback(this.options[name], [this]);\n  }\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n  beforeTickToLabelConversion() {\n    callback(this.options.beforeTickToLabelConversion, [this]);\n  }\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    callback(this.options.afterTickToLabelConversion, [this]);\n  }\n  beforeCalculateLabelRotation() {\n    callback(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = this.ticks.length;\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    callback(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n  beforeFit() {\n    callback(this.options.beforeFit, [this]);\n  }\n  fit() {\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight;\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n      if (tickOpts.display && this.ticks.length) {\n        const {first, last, widest, highest} = this._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n        if (isHorizontal) {\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n    this._handleMargins();\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n  _calculatePadding(first, last, sin, cos) {\n    const {ticks: {align, padding}, position} = this.options;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else if (align !== 'inner') {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n  afterFit() {\n    callback(this.options.afterFit, [this]);\n  }\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  isFullSize() {\n    return this.options.fullSize;\n  }\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n    this.generateTickLabels(ticks);\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n    this.afterTickToLabelConversion();\n  }\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n    }\n    return labelSizes;\n  }\n  _computeLabelSizes(ticks, length) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n    for (i = 0; i < length; ++i) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = label[j];\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights,\n    };\n  }\n  getLabelForValue(value) {\n    return value;\n  }\n  getPixelForValue(value, index) {\n    return NaN;\n  }\n  getValueForPixel(pixel) {}\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n  getBaseValue() {\n    const {min, max} = this;\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n  getContext(index) {\n    const ticks = this.ticks || [];\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n    }\n    return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n  _isVisible() {\n    const display = this.options.display;\n    if (display !== 'auto') {\n      return !!display;\n    }\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position} = options;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n    if (position === 'top') {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const optsAtIndex = grid.setContext(this.getContext(i));\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = optsAtIndex.borderDash || [];\n      const borderDashOffset = optsAtIndex.borderDashOffset;\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n      lineValue = getPixelForGridLine(this, i, offset);\n      if (lineValue === undefined) {\n        continue;\n      }\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset,\n      });\n    }\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n    return items;\n  }\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const {position, ticks: optionTicks} = options;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const {align, crossAlign, padding, mirror} = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n    if (position === 'top') {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n      if (isHorizontal) {\n        x = pixel;\n        if (textAlign === 'inner') {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? 'right' : 'left';\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? 'left' : 'right';\n          } else {\n            tickTextAlign = 'center';\n          }\n        }\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n      let backdrop;\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n        let top = y + textOffset - labelPadding.top;\n        let left = x - labelPadding.left;\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        }\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        }\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n          color: optsAtIndex.backdropColor,\n        };\n      }\n      items.push({\n        rotation,\n        label,\n        font,\n        color,\n        strokeColor,\n        strokeWidth,\n        textOffset,\n        textAlign: tickTextAlign,\n        textBaseline,\n        translation: [x, y],\n        backdrop,\n      });\n    }\n    return items;\n  }\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n    let align = 'center';\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    } else if (ticks.align === 'inner') {\n      align = 'inner';\n    }\n    return align;\n  }\n  _getYAxisLabelAlignment(tl) {\n    const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n    let textAlign;\n    let x;\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += (widest / 2);\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x = this.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = this.left + padding;\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n    return {textAlign, x};\n  }\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n    const chart = this.chart;\n    const position = this.options.position;\n    if (position === 'left' || position === 'right') {\n      return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n    } if (position === 'top' || position === 'bottom') {\n      return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n    }\n  }\n  drawBackground() {\n    const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(this.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n        if (grid.drawOnChartArea) {\n          drawLine(\n            {x: item.x1, y: item.y1},\n            {x: item.x2, y: item.y2},\n            item\n          );\n        }\n        if (grid.drawTicks) {\n          drawLine(\n            {x: item.tx1, y: item.ty1},\n            {x: item.tx2, y: item.ty2},\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n  drawBorder() {\n    const {chart, ctx, options: {grid}} = this;\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.borderWidth;\n    ctx.strokeStyle = borderOpts.borderColor;\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n    ctx.restore();\n  }\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n    if (!optionTicks.display) {\n      return;\n    }\n    const ctx = this.ctx;\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    let i, ilen;\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      const item = items[i];\n      const tickFont = item.font;\n      const label = item.label;\n      if (item.backdrop) {\n        ctx.fillStyle = item.backdrop.color;\n        ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n      }\n      let y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, item);\n    }\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n    if (!title.display) {\n      return;\n    }\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n    return [{\n      z: gz,\n      draw: (chartArea) => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: gz + 1,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n\nclass TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n    if (isIChartComponent(proto)) {\n      parentScope = this.register(proto);\n    }\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n    if (id in items) {\n      return scope;\n    }\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n    return scope;\n  }\n  get(id) {\n    return this.items[id];\n  }\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n    if (id in items) {\n      delete items[id];\n    }\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\nfunction registerDefaults(item, scope, parentScope) {\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n  defaults.set(scope, itemDefaults);\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n  add(...args) {\n    this._each('register', args);\n  }\n  remove(...args) {\n    this._each('unregister', args);\n  }\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\n  _each(method, args, typedRegistry) {\n    [...args].forEach(arg => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n        this._exec(method, reg, arg);\n      } else {\n        each(arg, item => {\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    callback(component['before' + camelMethod], [], component);\n    registry[method](component);\n    callback(component['after' + camelMethod], [], component);\n  }\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    return this.plugins;\n  }\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n}\nvar registry = new Registry();\n\nclass ScatterController extends DatasetController {\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {data: points = []} = meta;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n    this._drawStart = start;\n    this._drawCount = count;\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    if (this.options.showLine) {\n      const {dataset: line, _dataset} = meta;\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\n      const options = this.resolveDatasetElementOptions(mode);\n      options.segment = this.options.segment;\n      this.updateElement(line, undefined, {\n        animated: !animationsDisabled,\n        options\n      }, mode);\n    }\n    this.updateElements(points, start, count, mode);\n  }\n  addElements() {\n    const {showLine} = this.options;\n    if (!this.datasetElementType && showLine) {\n      this.datasetElementType = registry.getElement('line');\n    }\n    super.addElements();\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const data = meta.data || [];\n    if (!this.options.showLine) {\n      let max = 0;\n      for (let i = data.length - 1; i >= 0; --i) {\n        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n      }\n      return max > 0 && max;\n    }\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  showLine: false,\n  fill: false\n};\nScatterController.overrides = {\n  interaction: {\n    mode: 'point'\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(item) {\n          return '(' + item.label + ', ' + item.formattedValue + ')';\n        }\n      }\n    }\n  },\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n  constructor(options) {\n    this.options = options || {};\n  }\n  init(chartOptions) {}\n  formats() {\n    return abstract();\n  }\n  parse(value, format) {\n    return abstract();\n  }\n  format(timestamp, format) {\n    return abstract();\n  }\n  add(timestamp, amount, unit) {\n    return abstract();\n  }\n  diff(a, b, unit) {\n    return abstract();\n  }\n  startOf(timestamp, unit, weekday) {\n    return abstract();\n  }\n  endOf(timestamp, unit) {\n    return abstract();\n  }\n}\nDateAdapter.override = function(members) {\n  Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n  _date: DateAdapter\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n  const {controller, data, _sorted} = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      return lookupMethod(data, axis, value);\n    } else if (controller._sharedOptions) {\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {lo: start.lo, hi: end.hi};\n      }\n    }\n  }\n  return {lo: 0, hi: data.length - 1};\n}\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const {index, data} = metasets[i];\n    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n  function evaluationFunc(element, datasetIndex, index) {\n    const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n    const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\n    }\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{element, datasetIndex, index}];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n    if (element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\nvar Interaction = {\n  evaluateInteractionItems,\n  modes: {\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'x';\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n        : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements = [];\n      if (!items.length) {\n        return [];\n      }\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n      return elements;\n    },\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({element: data[i], datasetIndex, index: i});\n        }\n      }\n      return items;\n    },\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ?\n      v0.index - v1.index :\n      v0.weight - v1.weight;\n  });\n}\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({position: pos, options: {stack, stackWeight = 1}} = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && (pos + stack),\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const {stack, pos, stackWeight} = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const {vBoxMaxWidth, hBoxMaxHeight} = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const {fullSize} = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n  if (!isObject(pos)) {\n    if (layout.size) {\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {size: 0, count: 1};\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function marginForPositions(positions) {\n    const margin = {left: 0, top: 0, right: 0, bottom: 0};\n    positions.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const {same, other} = updateDims(chartArea, params, layout, stacks);\n    refit |= same && refitBoxes.length;\n    changed = changed || other;\n    if (!box.fullSize) {\n      refitBoxes.push(layout);\n    }\n  }\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n    const weight = (layout.stackWeight / stack.weight) || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n  chartArea.x = x;\n  chartArea.y = y;\n}\ndefaults.set('layout', {\n  autoPadding: true,\n  padding: {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  }\n});\nvar layouts = {\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n    chart.boxes.push(item);\n  },\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n    handleMaxPadding(chartArea);\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w,\n    };\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n    });\n  }\n};\n\nclass BasePlatform {\n  acquireContext(canvas, aspectRatio) {}\n  releaseContext(context) {\n    return false;\n  }\n  addEventListener(chart, type, listener) {}\n  removeEventListener(chart, type, listener) {}\n  getDevicePixelRatio() {\n    return 1;\n  }\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n  isAttached(canvas) {\n    return true;\n  }\n  updateConfig(config) {\n  }\n}\n\nclass BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n  style.display = style.display || 'block';\n  style.boxSizing = style.boxSizing || 'border-box';\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n  return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n  node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n  chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null,\n  };\n}\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      listener();\n    }\n  }, window);\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n  return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart, (args) => {\n    const event = args[0];\n    return [event, event.offsetX, event.offsetY];\n  });\n  addListener(canvas, type, proxy);\n  return proxy;\n}\nclass DomPlatform extends BasePlatform {\n  acquireContext(canvas, aspectRatio) {\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n    if (context && context.canvas === canvas) {\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n    return null;\n  }\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n    canvas.width = canvas.width;\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n  addEventListener(chart, type, listener) {\n    this.removeEventListener(chart, type);\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n    if (!proxy) {\n      return;\n    }\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n  isAttached(canvas) {\n    const container = _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n\nfunction _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nclass PluginService {\n  constructor() {\n    this._init = [];\n  }\n  notify(chart, hook, args, filter) {\n    if (hook === 'beforeInit') {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, 'install');\n    }\n    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n    }\n    return result;\n  }\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n    return true;\n  }\n  invalidate() {\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n    const descriptors = this._cache = this._createDescriptors(chart);\n    this._notifyStateChanges(chart);\n    return descriptors;\n  }\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\nfunction allPlugins(config) {\n  const localIds = {};\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n  return {plugins, localIds};\n}\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n  const result = [];\n  const context = chart.getContext();\n  for (const plugin of plugins) {\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n    });\n  }\n  return result;\n}\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  if (local && plugin.defaults) {\n    scopes.push(plugin.defaults);\n  }\n  return config.createResolver(scopes, context, [''], {\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\n\nfunction getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\nfunction determineAxis(id, scaleOptions) {\n  if (id === 'x' || id === 'y') {\n    return id;\n  }\n  return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {scales: {}};\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const firstIDs = Object.create(null);\n  const scales = Object.create(null);\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    firstIDs[axis] = firstIDs[axis] || id;\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n  return scales;\n}\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n  initOptions(config);\n  return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\nclass Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n  get platform() {\n    return this._config.platform;\n  }\n  get type() {\n    return this._config.type;\n  }\n  set type(type) {\n    this._config.type = type;\n  }\n  get data() {\n    return this._config.data;\n  }\n  set data(data) {\n    this._config.data = initData(data);\n  }\n  get options() {\n    return this._config.options;\n  }\n  set options(options) {\n    this._config.options = options;\n  }\n  get plugins() {\n    return this._config.plugins;\n  }\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\n  }\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        ''\n      ]]);\n  }\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || [],\n      ]]);\n  }\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const {options, type} = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n    const scopes = new Set();\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n  chartOptionScopes() {\n    const {options, type} = this;\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {},\n      {type},\n      defaults,\n      descriptors\n    ];\n  }\n  resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n    const result = {$shared: true};\n    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context)\n      ? _attachContext(resolver, context, undefined, descriptorDefaults)\n      : resolver;\n  }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\n  for (const prop of names) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if ((scriptable && (isFunction(value) || hasFunction(value)))\n      || (indexable && isArray(value))) {\n      return true;\n    }\n  }\n  return false;\n}\n\nvar version = \"3.9.1\";\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1]\n      ? a[l2] - b[l2]\n      : a[l1] - b[l1];\n  };\n}\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  chart.notifyPlugins('afterRender');\n  callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    item = item[0];\n  }\n  if (item && item.canvas) {\n    item = item.canvas;\n  }\n  return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\nclass Chart {\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n      );\n    }\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n    instances[this.id] = this;\n    if (!context || !canvas) {\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      return aspectRatio;\n    }\n    if (maintainAspectRatio && _aspectRatio) {\n      return _aspectRatio;\n    }\n    return height ? width / height : null;\n  }\n  get data() {\n    return this.config.data;\n  }\n  set data(data) {\n    this.config.data = data;\n  }\n  get options() {\n    return this._options;\n  }\n  set options(options) {\n    this.config.options = options;\n  }\n  _initialize() {\n    this.notifyPlugins('beforeInit');\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n    this.bindEvents();\n    this.notifyPlugins('afterInit');\n    return this;\n  }\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\n    }\n  }\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? 'resize' : 'attach';\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n    this.notifyPlugins('resize', {size: newSize});\n    callback(options.onResize, [this, newSize], this);\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        this.render();\n      }\n    }\n  }\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales = this.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === 'r';\n          const isHorizontal = axis === 'x';\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n          };\n        })\n      );\n    }\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales[scale.id] = scale;\n      }\n      scale.init(scaleOptions, options);\n    });\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n  _removeUnreferencedMetasets() {\n    const {_metasets: metasets, data: {datasets}} = this;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index);\n      }\n    });\n  }\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n    this._removeUnreferencedMetasets();\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const {datasetElementType, dataElementType} = defaults.datasets[type];\n        Object.assign(ControllerClass.prototype, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n    this._updateMetasets();\n    return newControllers;\n  }\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n  update(mode) {\n    const config = this.config;\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n    this._plugins.invalidate();\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    const newControllers = this.buildOrUpdateControllers();\n    this.notifyPlugins('beforeElementsUpdate');\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const {controller} = this.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n    if (!animsDisabled) {\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n    this._updateDatasets(mode);\n    this.notifyPlugins('afterUpdate', {mode});\n    this._layers.sort(compare2Level('z', '_idx'));\n    const {_active, _lastEvent} = this;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n    this.render();\n  }\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n  _updateHiddenIndices() {\n    const {_hiddenIndices} = this;\n    const changes = this._getUniformDataChanges() || [];\n    for (const {method, start, count} of changes) {\n      const move = method === '_removeElements' ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = (idx) => new Set(\n      _dataChanges\n        .filter(c => c[0] === idx)\n        .map((c, i) => i + ',' + c.splice(1).join(','))\n    );\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet)\n      .map(c => c.split(','))\n      .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n  }\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n    layouts.update(this, this.width, this.height, minPadding);\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        return;\n      }\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n    this.notifyPlugins('afterLayout');\n  }\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n    }\n    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n    meta.controller._update(mode);\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\n    }\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({chart: this});\n    }\n  }\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const {width, height} = this._resizeBeforeDraw;\n      this._resize(width, height);\n      this._resizeBeforeDraw = null;\n    }\n    this.clear();\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this._drawDatasets();\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this.notifyPlugins('afterDraw');\n  }\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const clip = meta._clip;\n    const useClip = !clip.disabled;\n    const area = this.chartArea;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n    if (useClip) {\n      clipArea(ctx, {\n        left: clip.left === false ? 0 : area.left - clip.left,\n        right: clip.right === false ? this.width : area.right + clip.right,\n        top: clip.top === false ? 0 : area.top - clip.top,\n        bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n      });\n    }\n    meta.controller.draw();\n    if (useClip) {\n      unclipArea(ctx);\n    }\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n    return [];\n  }\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n    return meta;\n  }\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n    const meta = this.getDatasetMeta(datasetIndex);\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? 'show' : 'hide';\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n    this._stop();\n    this.config.clearCache();\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n    this.notifyPlugins('destroy');\n    delete instances[this.id];\n    this.notifyPlugins('afterDestroy');\n  }\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n    each(this.options.events, (type) => _add(type, listener));\n  }\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener);\n        delete listeners[type];\n      }\n    };\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n    let detached;\n    const attached = () => {\n      _remove('attach', attached);\n      this.attached = true;\n      this.resize();\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n    detached = () => {\n      this.attached = false;\n      _remove('resize', listener);\n      this._stop();\n      this._resize(0, 0);\n      _add('attach', attached);\n    };\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed) {\n      this._active = active;\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n    if (changed || args.changed) {\n      this.render();\n    }\n    return this;\n  }\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n    if (inChartArea) {\n      this._lastEvent = null;\n      callback(options.onHover, [e, active, this], this);\n      if (isClick) {\n        callback(options.onClick, [e, active, this], this);\n      }\n    }\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n    this._lastEvent = lastEvent;\n    return changed;\n  }\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n  defaults: {\n    enumerable,\n    value: defaults\n  },\n  instances: {\n    enumerable,\n    value: instances\n  },\n  overrides: {\n    enumerable,\n    value: overrides\n  },\n  registry: {\n    enumerable,\n    value: registry\n  },\n  version: {\n    enumerable,\n    value: version\n  },\n  getChart: {\n    enumerable,\n    value: getChart\n  },\n  register: {\n    enumerable,\n    value: (...items) => {\n      registry.add(...items);\n      invalidatePlugins();\n    }\n  },\n  unregister: {\n    enumerable,\n    value: (...items) => {\n      registry.remove(...items);\n      invalidatePlugins();\n    }\n  }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n  };\n}\nfunction rThetaToXY(r, theta, x, y) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\nfunction pathArc(ctx, element, offset, spacing, end, circular) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n  let spacingOffset = 0;\n  const alpha = end - start;\n  if (spacing) {\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n  ctx.beginPath();\n  if (circular) {\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n    if (outerEnd > 0) {\n      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n    }\n    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y);\n    if (innerEnd > 0) {\n      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n    }\n    ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\n    if (innerStart > 0) {\n      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n    }\n    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y);\n    if (outerStart > 0) {\n      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n    }\n  } else {\n    ctx.moveTo(x, y);\n    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n  ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, startAngle + TAU, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + circumference % TAU;\n      if (circumference % TAU === 0) {\n        endAngle += TAU;\n      }\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n  const {x, y, startAngle, pixelMargin, fullCircles} = element;\n  const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n  const innerRadius = element.innerRadius + pixelMargin;\n  let i;\n  if (inner) {\n    clipArc(ctx, element, startAngle + TAU);\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle, circular) {\n  const {options} = element;\n  const {borderWidth, borderJoinStyle} = options;\n  const inner = options.borderAlign === 'inner';\n  if (!borderWidth) {\n    return;\n  }\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || 'round';\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || 'bevel';\n  }\n  if (element.fullCircles) {\n    drawFullCircleBorders(ctx, element, inner);\n  }\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.stroke();\n}\nclass ArcElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(chartX, chartY, useFinalPosition) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference'\n    ], useFinalPosition);\n    const rAdjust = this.options.spacing / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n    return (betweenAngles && withinRadius);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference',\n    ], useFinalPosition);\n    const {offset, spacing} = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n  tooltipPosition(useFinalPosition) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n  draw(ctx) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 2;\n    const spacing = (options.spacing || 0) / 2;\n    const circular = options.circular;\n    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n    ctx.save();\n    let radiusOffset = 0;\n    if (offset) {\n      radiusOffset = offset / 2;\n      const halfAngle = (this.startAngle + this.endAngle) / 2;\n      ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n      if (this.circumference >= PI) {\n        radiusOffset = offset;\n      }\n    }\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    const endAngle = drawArc(ctx, this, radiusOffset, spacing, circular);\n    drawBorder(ctx, this, radiusOffset, spacing, endAngle, circular);\n    ctx.restore();\n  }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n  borderAlign: 'center',\n  borderColor: '#fff',\n  borderJoinStyle: undefined,\n  borderRadius: 0,\n  borderWidth: 2,\n  offset: 0,\n  spacing: 0,\n  angle: undefined,\n  circular: true,\n};\nArcElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n  return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n  const {start: segmentStart, end: segmentEnd} = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\nfunction pathSegment(ctx, line, segment, params) {\n  const {points, options} = line;\n  const {count, start, loop, ilen} = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  let {move = true, reverse} = params || {};\n  let i, point, prev;\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n    if (point.skip) {\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n    prev = point;\n  }\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n  return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const {count, start, ilen} = pathVars(points, segment, params);\n  const {move = true, reverse} = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n    if (point.skip) {\n      continue;\n    }\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      ctx.lineTo(x, y);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    lastY = y;\n  }\n  drawX();\n}\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n  return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\nclass LineElement extends Element {\n  constructor(cfg) {\n    super();\n    this.animated = true;\n    this.options = undefined;\n    this._chart = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n  get points() {\n    return this._points;\n  }\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, {property, start: value, end: value});\n    if (!segments.length) {\n      return;\n    }\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const {start, end} = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n    start = start || 0;\n    count = count || (this.points.length - start);\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n    if (points.length && options.borderWidth) {\n      ctx.save();\n      draw(ctx, this, start, count);\n      ctx.restore();\n    }\n    if (this.animated) {\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n  borderCapStyle: 'butt',\n  borderDash: [],\n  borderDashOffset: 0,\n  borderJoinStyle: 'miter',\n  borderWidth: 3,\n  capBezierPoints: true,\n  cubicInterpolationMode: 'default',\n  fill: false,\n  spanGaps: false,\n  stepped: false,\n  tension: 0,\n};\nLineElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n  _scriptable: true,\n  _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    const options = this.options;\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange$1(this, mouseX, 'x', useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange$1(this, mouseY, 'y', useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  size(options) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n  draw(ctx, area) {\n    const options = this.options;\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n  getRange() {\n    const options = this.options || {};\n    return options.radius + options.hitRadius;\n  }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n  borderWidth: 1,\n  hitRadius: 1,\n  hoverBorderWidth: 1,\n  hoverRadius: 4,\n  pointStyle: 'circle',\n  radius: 3,\n  rotation: 0\n};\nPointElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n  let left, right, top, bottom, half;\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n  return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n  const enableBorder = enableBorderRadius || isObject(value);\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n      }\n    }\n  };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\nclass BarElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.inflateAmount = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  draw(ctx) {\n    const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n    const {inner, outer} = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n    ctx.save();\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill('evenodd');\n    }\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n    ctx.restore();\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n  borderSkipped: 'start',\n  borderWidth: 0,\n  borderRadius: 0,\n  inflateAmount: 'auto',\n  pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  const samples = options.samples || availableWidth;\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n  const decimated = [];\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n  decimated[sampledIndex++] = data[a];\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const {x: pointAx, y: pointAy} = data[a];\n    maxArea = area = -1;\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) -\n        (pointAx - data[j].x) * (avgY - pointAy)\n      );\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n  decimated[sampledIndex++] = data[endIndex];\n  return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      const lastIndex = i - 1;\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX,\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n      if (i > 0 && lastIndex !== startIndex) {\n        decimated.push(data[lastIndex]);\n      }\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n  return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {value: data});\n  }\n}\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n  let start = 0;\n  let count;\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n  return {start, count};\n}\nvar plugin_decimation = {\n  id: 'decimation',\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      cleanDecimatedData(chart);\n      return;\n    }\n    const availableWidth = chart.width;\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const {_data, indexAxis} = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        return;\n      }\n      if (!meta.controller.supportsDecimation) {\n        return;\n      }\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        return;\n      }\n      if (chart.options.parsing) {\n        return;\n      }\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n      if (isNullOrUndef(_data)) {\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n      let decimated;\n      switch (options.algorithm) {\n      case 'lttb':\n        decimated = lttbDecimation(data, start, count, availableWidth, options);\n        break;\n      case 'min-max':\n        decimated = minMaxDecimation(data, start, count, availableWidth);\n        break;\n      default:\n        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n      dataset._decimated = decimated;\n    });\n  },\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n\nfunction _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = _findSegmentEnd(start, end, points);\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n    if (!target.segments) {\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n    const targetSegments = _boundSegments(target, bounds);\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\nfunction _pointsFromSegments(boundary, line) {\n  const {x = null, y = null} = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({start, end}) => {\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({x: first.x, y});\n      points.push({x: last.x, y});\n    } else if (x !== null) {\n      points.push({x, y: first.y});\n      points.push({x, y: last.y});\n    }\n  });\n  return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n  for (;end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n  if (isArray(boundary)) {\n    _loop = true;\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\nfunction _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n  if (!propagate) {\n    return fill;\n  }\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isNumberFinite(fill)) {\n      return fill;\n    }\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n    if (target.visible) {\n      return fill;\n    }\n    visited.push(fill);\n    fill = target.fill;\n  }\n  return false;\n}\nfunction _decodeFill(line, index, count) {\n  const fill = parseFillOption(line);\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n  let target = parseFloat(fill);\n  if (isNumberFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n  return target;\n}\nfunction _getTargetPixel(fill, scale) {\n  let pixel = null;\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\nfunction _getTargetValue(fill, scale, startValue) {\n  let value;\n  if (fill === 'start') {\n    value = startValue;\n  } else if (fill === 'end') {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill)) {\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n  if (fill === false || fill === null) {\n    return false;\n  }\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\n\nfunction _buildStackLine(source) {\n  const {scale, index, line} = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({points, options: {}});\n}\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const {first, last, point} = findPoint(line, sourcePoint, 'x');\n    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {first, last, point};\n}\n\nclass simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n  pathSegment(ctx, bounds, opts) {\n    const {x, y, radius} = this;\n    bounds = bounds || {start: 0, end: TAU};\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n  interpolate(point) {\n    const {x, y, radius} = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\n\nfunction _getTarget(source) {\n  const {chart, fill, line} = source;\n  if (isNumberFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n  if (fill === 'shape') {\n    return true;\n  }\n  const boundary = computeBoundary(source);\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n  return _createBoundaryLine(boundary, line);\n}\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  const pixel = _getTargetPixel(fill, scale);\n  if (isNumberFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n  return null;\n}\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill, scale, start);\n  const target = [];\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const {line, scale, axis} = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const {above = color, below = color} = fillOption || {};\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {line, target, above, below, area, scale, axis});\n    unclipArea(ctx);\n  }\n}\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n  ctx.save();\n  if (property === 'x' && below !== above) {\n    clipVertical(ctx, target, area.top);\n    fill(ctx, {line, target, color: above, scale, property});\n    ctx.restore();\n    ctx.save();\n    clipVertical(ctx, target, area.bottom);\n  }\n  fill(ctx, {line, target, color: below, scale, property});\n  ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\nfunction fill(ctx, cfg) {\n  const {line, target, property, color, scale} = cfg;\n  const segments = _segments(line, target, property);\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n    clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n    ctx.beginPath();\n    const lineLoop = !!line.pathSegment(ctx, src);\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n    ctx.restore();\n  }\n}\nfunction clipBounds(ctx, scale, bounds) {\n  const {top, bottom} = scale.chart.chartArea;\n  const {property, start, end} = bounds || {};\n  if (property === 'x') {\n    ctx.beginPath();\n    ctx.rect(start, top, end - start, bottom - top);\n    ctx.clip();\n  }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\n\nvar index = {\n  id: 'filler',\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line,\n        };\n      }\n      meta.$filler = source;\n      sources.push(source);\n    }\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n      source.line.updateControlPoints(area, source.axis);\n      if (draw && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n    if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n  }\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n  constructor(config) {\n    super();\n    this._added = false;\n    this.legendHitBoxes = [];\n    this._hoveredItem = null;\n    this.doughnutMode = false;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n    this.legendItems = legendItems;\n  }\n  fit() {\n    const {options, ctx} = this;\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n    let width, height;\n    ctx.font = labelFont.string;\n    if (this.isHorizontal()) {\n      width = this.maxWidth;\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight;\n      width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    }\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n    return totalHeight;\n  }\n  _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxHeight, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n    let left = 0;\n    let col = 0;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight});\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight});\n    return totalWidth;\n  }\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n      this._draw();\n      unclipArea(ctx);\n    }\n  }\n  _draw() {\n    const {options: opts, columnSizes, lineWidths, ctx} = this;\n    const {align, labels: labelOpts} = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const {color: fontColor, padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n    this.drawTitle();\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n      ctx.save();\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n      if (labelOpts.usePointStyle) {\n        const drawOptions = {\n          radius: boxHeight * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n      } else {\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n        ctx.beginPath();\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius,\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n      ctx.restore();\n    };\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n    overrideTextDirection(this.ctx, opts.textDirection);\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor || fontColor;\n      ctx.fillStyle = legendItem.fontColor || fontColor;\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n      rtlHelper.setWidth(this.width);\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n      const realX = rtlHelper.x(x);\n      drawLegendBox(realX, y, legendItem);\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n      fillText(rtlHelper.x(x), y, legendItem);\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    if (!titleOpts.display) {\n      return;\n    }\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n    let left = this.left;\n    let maxWidth = this.width;\n    if (this.isHorizontal()) {\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n    const x = _alignStartEnd(position, left, left + maxWidth);\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          return this.legendItems[i];\n        }\n      }\n    }\n    return null;\n  }\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        callback(opts.onLeave, [e, previous, this], this);\n      }\n      this._hoveredItem = hoveredItem;\n      if (hoveredItem && !sameItem) {\n        callback(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      callback(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\nfunction isListened(type, opts) {\n  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\nvar plugin_legend = {\n  id: 'legend',\n  _element: Legend,\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n    onHover: null,\n    onLeave: null,\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: 0,\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n\nclass Title extends Element {\n  constructor(config) {\n    super();\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n    this.left = 0;\n    this.top = 0;\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n  _drawArgs(offset) {\n    const {top, left, bottom, right, options} = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {titleX, titleY, maxWidth, rotation};\n  }\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    if (!opts.display) {\n      return;\n    }\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n}\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\nvar plugin_title = {\n  id: 'title',\n  _element: Title,\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold',\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n  id: 'subtitle',\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal',\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst positioners = {\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n    let i, len;\n    let x = 0;\n    let y = 0;\n    let count = 0;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        x += pos.x;\n        y += pos.y;\n        ++count;\n      }\n    }\n    return {\n      x: x / count,\n      y: y / count\n    };\n  },\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n    return {\n      x,\n      y\n    };\n  }\n};\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n  return base;\n}\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\nfunction createTooltipItem(chart, item) {\n  const {element, datasetIndex, index} = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const {label, value} = controller.getLabelAndValue(index);\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const {body, footer, title} = tooltip;\n  const {boxWidth, boxHeight} = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n  }\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n  ctx.save();\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n  widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n  widthPadding = 0;\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n  ctx.restore();\n  width += padding.width;\n  return {width, height};\n}\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const {x, width} = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n  const {x, width} = size;\n  const {width: chartWidth, chartArea: {left, right}} = chart;\n  let xAlign = 'center';\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n  return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\nfunction alignX(size, xAlign) {\n  let {x, width} = size;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= (width / 2);\n  }\n  return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n  let {y, height} = size;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= (height / 2);\n  }\n  return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const {caretSize, caretPadding, cornerRadius} = options;\n  const {xAlign, yAlign} = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === 'right') {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n  return align === 'center'\n    ? tooltip.x + tooltip.width / 2\n    : align === 'right'\n      ? tooltip.x + tooltip.width - padding.right\n      : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n  constructor(config) {\n    super();\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.chart = config.chart || config._chart;\n    this._chart = this.chart;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n    if (cached) {\n      return cached;\n    }\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n  getTitle(context, options) {\n    const {callbacks} = options;\n    const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n    const title = callbacks.title.apply(this, [context]);\n    const afterTitle = callbacks.afterTitle.apply(this, [context]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n    return lines;\n  }\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n  }\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));\n      pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n      bodyItems.push(bodyItem);\n    });\n    return bodyItems;\n  }\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n  }\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n    const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n    const footer = callbacks.footer.apply(this, [tooltipItems]);\n    const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n    return lines;\n  }\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(scoped.labelColor.call(this, context));\n      labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n      labelTextColors.push(scoped.labelTextColor.call(this, context));\n    });\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n  getCaretPosition(tooltipPoint, size, options) {\n    const {xAlign, yAlign} = this;\n    const {caretSize, cornerRadius} = options;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n    const {x: ptX, y: ptY} = tooltipPoint;\n    const {width, height} = size;\n    let x1, x2, x3, y1, y2, y3;\n    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.titleAlign, options);\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing;\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing;\n        }\n      }\n    }\n  }\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColors = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2,\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.fillStyle = labelColors.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      ctx.lineWidth = isObject(labelColors.borderWidth) ? Math.max(...Object.values(labelColors.borderWidth)) : (labelColors.borderWidth || 1);\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.setLineDash(labelColors.borderDash || []);\n      ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n      const borderRadius = toTRBLCorners(labelColors.borderRadius);\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n        ctx.stroke();\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n  drawBody(pt, ctx, options) {\n    const {body} = this;\n    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n      lines = bodyItem.lines;\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n      each(bodyItem.after, fillLineOfText);\n    }\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing;\n  }\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n      footerFont = toFont(options.footerFont);\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const {xAlign, yAlign} = this;\n    const {x, y} = pt;\n    const {width, height} = tooltipSize;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n    ctx.fill();\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n  _willRender() {\n    return !!this.opacity;\n  }\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n    if (!opacity) {\n      return;\n    }\n    this._updateAnimationTarget(options);\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n    const padding = toPadding(options.padding);\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n      this.drawBackground(pt, ctx, tooltipSize, options);\n      overrideTextDirection(ctx, options.textDirection);\n      pt.y += padding.top;\n      this.drawTitle(pt, ctx, options);\n      this.drawBody(pt, ctx, options);\n      this.drawFooter(pt, ctx, options);\n      restoreTextDirection(ctx, options.textDirection);\n      ctx.restore();\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n    const positionChanged = this._positionChanged(active, e);\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n    if (changed) {\n      this._active = active;\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n        this.update(true, replay);\n      }\n    }\n    return changed;\n  }\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n    if (options.reverse) {\n      active.reverse();\n    }\n    return active;\n  }\n  _positionChanged(active, e) {\n    const {caretX, caretY, options} = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n      if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n        return;\n      }\n      tooltip.draw(chart.ctx);\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        args.changed = true;\n      }\n    }\n  },\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold',\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {\n    },\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold',\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart',\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: {\n      beforeTitle: noop,\n      title(tooltipItems) {\n        if (tooltipItems.length > 0) {\n          const item = tooltipItems[0];\n          const labels = item.chart.data.labels;\n          const labelCount = labels ? labels.length : 0;\n          if (this && this.options && this.options.mode === 'dataset') {\n            return item.dataset.label || '';\n          } else if (item.label) {\n            return item.label;\n          } else if (labelCount > 0 && item.dataIndex < labelCount) {\n            return labels[item.dataIndex];\n          }\n        }\n        return '';\n      },\n      afterTitle: noop,\n      beforeBody: noop,\n      beforeLabel: noop,\n      label(tooltipItem) {\n        if (this && this.options && this.options.mode === 'dataset') {\n          return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n        }\n        let label = tooltipItem.dataset.label || '';\n        if (label) {\n          label += ': ';\n        }\n        const value = tooltipItem.formattedValue;\n        if (!isNullOrUndef(value)) {\n          label += value;\n        }\n        return label;\n      },\n      labelColor(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          borderColor: options.borderColor,\n          backgroundColor: options.backgroundColor,\n          borderWidth: options.borderWidth,\n          borderDash: options.borderDash,\n          borderDashOffset: options.borderDashOffset,\n          borderRadius: 0,\n        };\n      },\n      labelTextColor() {\n        return this.options.bodyColor;\n      },\n      labelPointStyle(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          pointStyle: options.pointStyle,\n          rotation: options.rotation,\n        };\n      },\n      afterLabel: noop,\n      afterBody: noop,\n      beforeFooter: noop,\n      footer: noop,\n      afterFooter: noop\n    }\n  },\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n  descriptors: {\n    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false,\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n  additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({index, label: raw});\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n  return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const {index, label} of added) {\n        if (labels[index] === label) {\n          labels.splice(index, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index\n      : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n    return validIndex(index, labels.length - 1);\n  }\n  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\n    if (this.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    const labels = this.getLabels();\n    if (value >= 0 && value < labels.length) {\n      return labels[value];\n    }\n    return value;\n  }\n  configure() {\n    super.configure();\n    if (!this.isHorizontal()) {\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n  getBasePixel() {\n    return this.bottom;\n  }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n  ticks: {\n    callback: CategoryScale.prototype.getLabelForValue\n  }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n  const ticks = [];\n  const MIN_SPACING = 1e-14;\n  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const {min: rmin, max: rmax} = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n  if (!isNullOrUndef(precision)) {\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    numSpaces = (niceMax - niceMin) / spacing;\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n      if (niceMin < min) {\n        j++;\n      }\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n  for (; j < numSpaces; ++j) {\n    ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n  }\n  if (maxDefined && includeBounds && niceMax !== max) {\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({value: max});\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({value: niceMax});\n  }\n  return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n    return +raw;\n  }\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n    if (min === max) {\n      let offset = 1;\n      if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n        offset = Math.abs(max * 0.05);\n      }\n      setMax(max + offset);\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1000) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1000;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n    return maxTicks;\n  }\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n    super.configure();\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n\nclass LinearScale extends LinearScaleBase {\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? min : 0;\n    this.max = isNumberFinite(max) ? max : 1;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.numeric\n  }\n};\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n  return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n  const endExp = Math.floor(log10(dataRange.max));\n  const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n  const ticks = [];\n  let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n  let exp = Math.floor(log10(tickVal));\n  let significand = Math.floor(tickVal / Math.pow(10, exp));\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  do {\n    ticks.push({value: tickVal, major: isMajor(tickVal)});\n    ++significand;\n    if (significand === 10) {\n      significand = 1;\n      ++exp;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n  } while (exp < endExp || (exp === endExp && significand < endSignificand));\n  const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n  ticks.push({value: lastTick, major: isMajor(tickVal)});\n  return ticks;\n}\nclass LogarithmicScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isNumberFinite(value) && value > 0 ? value : null;\n  }\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n    this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n    this.handleTickRangeOptions();\n  }\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n    if (min === max) {\n      if (min <= 0) {\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(exp(min, -1));\n        setMax(exp(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(exp(max, -1));\n    }\n    if (max <= 0) {\n      setMax(exp(min, +1));\n    }\n    if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n      setMin(exp(min, -1));\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n  configure() {\n    const start = this.min;\n    super.configure();\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n  getPixelForValue(value) {\n    if (value === undefined || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min\n      ? 0\n      : (log10(value) - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.logarithmic,\n    major: {\n      enabled: true\n    }\n  }\n};\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - (size / 2),\n      end: pos + (size / 2)\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\nfunction fitWithPointLabels(scale) {\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const extra = getTickBackdropHeight(opts) / 2;\n  const outerDistance = scale.drawingArea;\n  const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n    const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n    const size = labelSizes[i];\n    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n    const textAlign = getTextAlignForAngle(angle);\n    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n    items.push({\n      x: pointLabelPosition.x,\n      y,\n      textAlign,\n      left,\n      top: y,\n      right: left + size.w,\n      bottom: y + size.h\n    });\n  }\n  return items;\n}\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n  return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= (w / 2);\n  }\n  return x;\n}\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= (h / 2);\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n    const {backdropColor} = optsAtIndex;\n    if (!isNullOrUndef(backdropColor)) {\n      const borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n      const padding = toPadding(optsAtIndex.backdropPadding);\n      ctx.fillStyle = backdropColor;\n      const backdropLeft = left - padding.left;\n      const backdropTop = top - padding.top;\n      const backdropWidth = right - left + padding.width;\n      const backdropHeight = bottom - top + padding.height;\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: backdropLeft,\n          y: backdropTop,\n          w: backdropWidth,\n          h: backdropHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n      }\n    }\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + (plFont.lineHeight / 2),\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign: textAlign,\n        textBaseline: 'middle'\n      }\n    );\n  }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n  const {color, lineWidth} = gridLineOpts;\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(gridLineOpts.borderDash);\n  ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\nclass RadialLinearScale extends LinearScaleBase {\n  constructor(cfg) {\n    super(cfg);\n    this.xCenter = undefined;\n    this.yCenter = undefined;\n    this.drawingArea = undefined;\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n  setDimensions() {\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n    this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n  fit() {\n    const opts = this.options;\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\n    }\n  }\n  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n  getPointLabelPosition(index) {\n    const {left, top, right, bottom} = this._pointLabelItems[index];\n    return {\n      left,\n      top,\n      right,\n      bottom,\n    };\n  }\n  drawBackground() {\n    const {backgroundColor, grid: {circular}} = this.options;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid} = opts;\n    const labelCount = this._pointLabels.length;\n    let i, offset, position;\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const optsAtIndex = grid.setContext(this.getContext(index - 1));\n          drawRadiusLine(this, optsAtIndex, offset, labelCount);\n        }\n      });\n    }\n    if (angleLines.display) {\n      ctx.save();\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n        if (!lineWidth || !color) {\n          continue;\n        }\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n        offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n      ctx.restore();\n    }\n  }\n  drawBorder() {}\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    if (!tickOpts.display) {\n      return;\n    }\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n    this.ticks.forEach((tick, index) => {\n      if (index === 0 && !opts.reverse) {\n        return;\n      }\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n      });\n    });\n    ctx.restore();\n  }\n  drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n  display: true,\n  animate: true,\n  position: 'chartArea',\n  angleLines: {\n    display: true,\n    lineWidth: 1,\n    borderDash: [],\n    borderDashOffset: 0.0\n  },\n  grid: {\n    circular: false\n  },\n  startAngle: 0,\n  ticks: {\n    showLabelBackdrop: true,\n    callback: Ticks.formatters.numeric\n  },\n  pointLabels: {\n    backdropColor: undefined,\n    backdropPadding: 2,\n    display: true,\n    font: {\n      size: 10\n    },\n    callback(label) {\n      return label;\n    },\n    padding: 5,\n    centerPointLabels: false\n  }\n};\nRadialLinearScale.defaultRoutes = {\n  'angleLines.color': 'borderColor',\n  'pointLabels.color': 'color',\n  'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n  angleLines: {\n    _fallback: 'grid'\n  }\n};\n\nconst INTERVALS = {\n  millisecond: {common: true, size: 1, steps: 1000},\n  second: {common: true, size: 1000, steps: 60},\n  minute: {common: true, size: 60000, steps: 60},\n  hour: {common: true, size: 3600000, steps: 24},\n  day: {common: true, size: 86400000, steps: 30},\n  week: {common: false, size: 604800000, steps: 4},\n  month: {common: true, size: 2.628e9, steps: 12},\n  quarter: {common: false, size: 7.884e9, steps: 4},\n  year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n  return a - b;\n}\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n  if (!isNumberFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, parser)\n      : adapter.parse(value);\n  }\n  if (value === null) {\n    return null;\n  }\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n      ? adapter.startOf(value, 'isoWeek', isoWeekday)\n      : adapter.startOf(value, round);\n  }\n  return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n  return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const {lo, hi} = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n  constructor(props) {\n    super(props);\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n    this._unit = 'day';\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n  init(scaleOpts, opts) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n    adapter.init(opts);\n    mergeIf(time.displayFormats, adapter.formats());\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n    super.init(scaleOpts);\n    this._normalized = opts.normalized;\n  }\n  parse(raw, index) {\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n    if (!minDefined || !maxDefined) {\n      _applyBounds(this._getLabelBounds());\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n    min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n    const min = this.min;\n    const max = this.max;\n    const ticks = _filterBetween(timestamps, min, max);\n    this._unit = timeOpts.unit || (tickOpts.autoSkip\n      ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n      : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n      : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n    if (options.reverse) {\n      ticks.reverse();\n    }\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n  afterAutoSkip() {\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n  initOffsets(timestamps) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n    return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n  }\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n    const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    const formatter = options.ticks.callback;\n    return formatter ? callback(formatter, [label, index, ticks], this) : label;\n  }\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const metas = this.getMatchingVisibleMetas();\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n    return (this._cache.data = this.normalize(timestamps));\n  }\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n  normalize(values) {\n    return _arrayUnique(values.sort(sorter));\n  }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n  bounds: 'data',\n  adapters: {},\n  time: {\n    parser: false,\n    unit: false,\n    round: false,\n    isoWeekday: false,\n    minUnit: 'millisecond',\n    displayFormats: {}\n  },\n  ticks: {\n    source: 'auto',\n    major: {\n      enabled: false\n    }\n  }\n};\n\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({lo, hi} = _lookupByKey(table, 'pos', val));\n    }\n    ({pos: prevSource, time: prevTarget} = table[lo]);\n    ({pos: nextSource, time: nextTarget} = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({lo, hi} = _lookupByKey(table, 'time', val));\n    }\n    ({time: prevSource, pos: prevTarget} = table[lo]);\n    ({time: nextSource, pos: nextTarget} = table[hi]);\n  }\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n  constructor(props) {\n    super(props);\n    this._table = [];\n    this._minPos = undefined;\n    this._tableRange = undefined;\n  }\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate(table, this.min);\n    this._tableRange = interpolate(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n    if (items.length < 2) {\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\n      ];\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n    return timestamps;\n  }\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","const DEFAULT_LEGEND_COLOR = {\n  plugins: {\n    legend: {\n      labels: {\n        color: 'rgb(102,102,102)',\n      },\n    },\n  },\n};\n\n// Default options\nconst DEFAULT_OPTIONS = {\n  line: {\n    options: {\n      ...DEFAULT_LEGEND_COLOR,\n      elements: {\n        line: {\n          backgroundColor: 'rgba(59, 112, 202, 0.0)',\n          borderColor: 'rgb(59, 112, 202)',\n          borderWidth: 2,\n          tension: 0.0,\n        },\n        point: {\n          borderColor: 'rgb(59, 112, 202)',\n          backgroundColor: 'rgb(59, 112, 202)',\n        },\n      },\n      responsive: true,\n      legend: {\n        display: true,\n      },\n      tooltips: {\n        intersect: false,\n        mode: 'index',\n      },\n      datasets: {\n        borderColor: 'red',\n      },\n      scales: {\n        x: {\n          stacked: true,\n          grid: {\n            display: false,\n          },\n          ticks: {\n            fontColor: 'rgba(0,0,0, 0.5)',\n          },\n        },\n        y: {\n          stacked: false,\n          grid: {\n            borderDash: [2],\n            drawBorder: false,\n            zeroLineColor: 'rgba(0,0,0,0)',\n            zeroLineBorderDash: [2],\n            zeroLineBorderDashOffset: [2],\n          },\n          ticks: {\n            fontColor: 'rgba(0,0,0, 0.5)',\n          },\n        },\n      },\n    },\n  },\n  bar: {\n    options: {\n      ...DEFAULT_LEGEND_COLOR,\n      backgroundColor: 'rgb(59, 112, 202)',\n      borderWidth: 0,\n      responsive: true,\n      legend: {\n        display: true,\n      },\n      tooltips: {\n        intersect: false,\n        mode: 'index',\n      },\n      scales: {\n        x: {\n          stacked: true,\n          grid: {\n            display: false,\n          },\n          ticks: {\n            fontColor: 'rgba(0,0,0, 0.5)',\n          },\n        },\n        y: {\n          stacked: true,\n          grid: {\n            borderDash: [2],\n            drawBorder: false,\n            zeroLineColor: 'rgba(0,0,0,0)',\n            zeroLineBorderDash: [2],\n            zeroLineBorderDashOffset: [2],\n          },\n          ticks: {\n            fontColor: 'rgba(0,0,0, 0.5)',\n          },\n        },\n      },\n    },\n  },\n  pie: {\n    options: {\n      ...DEFAULT_LEGEND_COLOR,\n      elements: {\n        arc: { backgroundColor: 'rgb(59, 112, 202)' },\n      },\n      responsive: true,\n      legend: {\n        display: true,\n      },\n    },\n  },\n  doughnut: {\n    options: {\n      ...DEFAULT_LEGEND_COLOR,\n      elements: {\n        arc: { backgroundColor: 'rgb(59, 112, 202)' },\n      },\n      responsive: true,\n      legend: {\n        display: true,\n      },\n    },\n  },\n  polarArea: {\n    options: {\n      ...DEFAULT_LEGEND_COLOR,\n      elements: {\n        arc: { backgroundColor: 'rgba(59, 112, 202, 0.5)' },\n      },\n      responsive: true,\n      legend: {\n        display: true,\n      },\n    },\n  },\n  radar: {\n    options: {\n      ...DEFAULT_LEGEND_COLOR,\n      elements: {\n        line: {\n          backgroundColor: 'rgba(59, 112, 202, 0.5)',\n          borderColor: 'rgb(59, 112, 202)',\n          borderWidth: 2,\n        },\n        point: {\n          borderColor: 'rgb(59, 112, 202)',\n          backgroundColor: 'rgb(59, 112, 202)',\n        },\n      },\n      responsive: true,\n      legend: {\n        display: true,\n      },\n    },\n  },\n  scatter: {\n    options: {\n      ...DEFAULT_LEGEND_COLOR,\n      elements: {\n        line: {\n          backgroundColor: 'rgba(59, 112, 202, 0.5)',\n          borderColor: 'rgb(59, 112, 202)',\n          borderWidth: 2,\n          tension: 0.0,\n        },\n        point: {\n          borderColor: 'rgb(59, 112, 202)',\n          backgroundColor: 'rgba(59, 112, 202, 0.5)',\n        },\n      },\n      responsive: true,\n      legend: {\n        display: true,\n      },\n      tooltips: {\n        intersect: false,\n        mode: 'index',\n      },\n      datasets: {\n        borderColor: 'red',\n      },\n      scales: {\n        x: {\n          stacked: true,\n          grid: {\n            display: false,\n          },\n          ticks: {\n            fontColor: 'rgba(0,0,0, 0.5)',\n          },\n        },\n        y: {\n          stacked: false,\n          grid: {\n            borderDash: [2],\n            drawBorder: false,\n            zeroLineColor: 'rgba(0,0,0,0)',\n            zeroLineBorderDash: [2],\n            zeroLineBorderDashOffset: [2],\n          },\n          ticks: {\n            fontColor: 'rgba(0,0,0, 0.5)',\n          },\n        },\n      },\n    },\n  },\n  bubble: {\n    options: {\n      ...DEFAULT_LEGEND_COLOR,\n      elements: {\n        point: {\n          borderColor: 'rgb(59, 112, 202)',\n          backgroundColor: 'rgba(59, 112, 202, 0.5)',\n        },\n      },\n      responsive: true,\n      legend: {\n        display: true,\n      },\n      scales: {\n        x: {\n          grid: {\n            display: false,\n          },\n          ticks: {\n            fontColor: 'rgba(0,0,0, 0.5)',\n          },\n        },\n        y: {\n          grid: {\n            borderDash: [2],\n            drawBorder: false,\n            zeroLineColor: 'rgba(0,0,0,0)',\n            zeroLineBorderDash: [2],\n            zeroLineBorderDashOffset: [2],\n          },\n          ticks: {\n            fontColor: 'rgba(0,0,0, 0.5)',\n          },\n        },\n      },\n    },\n  },\n};\n\nexport default DEFAULT_OPTIONS;\n","import {\n  Chart as Chartjs,\n  ArcElement,\n  LineElement,\n  BarElement,\n  PointElement,\n  BarController,\n  BubbleController,\n  DoughnutController,\n  LineController,\n  PieController,\n  PolarAreaController,\n  RadarController,\n  ScatterController,\n  CategoryScale,\n  LinearScale,\n  LogarithmicScale,\n  RadialLinearScale,\n  TimeScale,\n  TimeSeriesScale,\n  Decimation,\n  Filler,\n  Legend,\n  Title,\n  Tooltip,\n  SubTitle,\n} from 'chart.js';\nimport merge from 'deepmerge';\nimport { element, typeCheckConfig } from '../../mdb/util/index';\nimport Data from '../../mdb/dom/data';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\nimport DEFAULT_OPTIONS from './chartsDefaults';\n\nChartjs.register(\n  ArcElement,\n  LineElement,\n  BarElement,\n  PointElement,\n  BarController,\n  BubbleController,\n  DoughnutController,\n  LineController,\n  PieController,\n  PolarAreaController,\n  RadarController,\n  ScatterController,\n  CategoryScale,\n  LinearScale,\n  LogarithmicScale,\n  RadialLinearScale,\n  TimeScale,\n  TimeSeriesScale,\n  Decimation,\n  Filler,\n  Legend,\n  Title,\n  Tooltip,\n  SubTitle\n);\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'chart';\nconst DATA_KEY = 'mdb.chart';\nconst CLASSNAME_CHARTS = 'chart';\n\nconst GENERATE_DATA = (options, type, defaultType) => {\n  const mergeObjects = (target, source, options) => {\n    const destination = target.slice();\n    source.forEach((item, index) => {\n      if (typeof destination[index] === 'undefined') {\n        destination[index] = options.cloneUnlessOtherwiseSpecified(item, options);\n      } else if (options.isMergeableObject(item)) {\n        destination[index] = merge(target[index], item, options);\n      } else if (target.indexOf(item) === -1) {\n        destination.push(item);\n      }\n    });\n    return destination;\n  };\n  return merge(defaultType[type], options, {\n    arrayMerge: mergeObjects,\n  });\n};\n\nconst DEFAULT_DARK_OPTIONS = {\n  darkTicksColor: '#fff',\n  darkLabelColor: '#fff',\n  darkGridLinesColor: '#555',\n  darkmodeOff: 'undefined',\n  darkMode: null,\n  darkBgColor: '#262626',\n  darkBgColorLight: '#fff',\n  options: null,\n};\n\nconst DARK_OPTIONS_TYPE = {\n  darkTicksColor: 'string',\n  darkLabelColor: 'string',\n  darkGridLinesColor: 'string',\n  darkmodeOff: '(string|null)',\n  darkMode: '(string|null)',\n  darkBgColor: 'string',\n  darkBgColorLight: 'string',\n  options: '(object|null)',\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n//\nclass Chart extends BaseComponent {\n  constructor(element, data, options = {}, darkOptions = {}) {\n    super(element);\n    this._data = data;\n    this._options = options;\n    this._type = data.type;\n    this._canvas = null;\n    this._chart = null;\n    this._darkOptions = this._getDarkConfig(darkOptions);\n    this._darkModeClassContainer = document.querySelector('html');\n    this._prevConfig = null;\n    this._observer = null;\n\n    if (this._element) {\n      Manipulator.addClass(this._element, CLASSNAME_CHARTS);\n      this._chartConstructor();\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n\n    if (this._element && this._darkOptions.darkmodeOff !== null) {\n      // check mode on start\n      let mode;\n\n      switch (this._darkOptions.darkMode) {\n        case 'dark':\n          mode = 'dark';\n          break;\n        case 'light':\n          mode = 'light';\n          break;\n        default:\n          mode = this.systemColorMode;\n          break;\n      }\n\n      this._handleMode(mode);\n      // observe darkmode class container change\n      this._observer = new MutationObserver(this._observerCallback.bind(this));\n      this._observer.observe(this._darkModeClassContainer, {\n        attributes: true,\n      });\n    }\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  get systemColorMode() {\n    return (\n      localStorage.theme ||\n      Manipulator.getDataAttribute(this._darkModeClassContainer, 'theme') ||\n      'light'\n    );\n  }\n\n  static get BarController() {\n    return BarController;\n  }\n\n  static get BubbleController() {\n    return BubbleController;\n  }\n\n  static get DoughnutController() {\n    return DoughnutController;\n  }\n\n  static get LineController() {\n    return LineController;\n  }\n\n  static get PieController() {\n    return PieController;\n  }\n\n  static get PolarAreaController() {\n    return PolarAreaController;\n  }\n\n  static get RadarController() {\n    return RadarController;\n  }\n\n  static get ScatterController() {\n    return ScatterController;\n  }\n\n  // Public\n  dispose() {\n    this._observer.disconnect();\n    Data.removeData(this._element, DATA_KEY);\n\n    this._chart.destroy();\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  update(data, config) {\n    if (data) {\n      this._data = { ...this._data, ...data };\n      this._chart.data = this._data;\n    }\n\n    const configOptions = Object.prototype.hasOwnProperty.call(config, 'options')\n      ? config\n      : { options: { ...config } };\n\n    this._options = merge(this._options, configOptions);\n\n    this._chart.options = GENERATE_DATA(this._options, this._type, DEFAULT_OPTIONS).options;\n\n    this._chart.update();\n  }\n\n  static register(MyType) {\n    Chartjs.register(MyType);\n  }\n\n  setTheme(theme) {\n    if ((theme !== 'dark' && theme !== 'light') || !this._data) {\n      return;\n    }\n    this._handleMode(theme);\n  }\n\n  // Private\n  _getDarkConfig(config) {\n    let dataAttributes = {};\n    const dataAttr = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttr).forEach(\n      (key) => key.startsWith('dark') && (dataAttributes[key] = dataAttr[key])\n    );\n\n    dataAttributes = {\n      ...DEFAULT_DARK_OPTIONS,\n      ...dataAttributes,\n    };\n\n    const xyScale = {\n      y: {\n        ticks: {\n          color: dataAttributes.darkTicksColor,\n        },\n        grid: {\n          color: dataAttributes.darkGridLinesColor,\n        },\n      },\n      x: {\n        ticks: {\n          color: dataAttributes.darkTicksColor,\n        },\n        grid: {\n          color: dataAttributes.darkGridLinesColor,\n        },\n      },\n    };\n\n    const rScale = {\n      r: {\n        ticks: {\n          color: dataAttributes.darkTicksColor,\n          backdropColor: dataAttributes.darkBgColor,\n        },\n        grid: {\n          color: dataAttributes.darkGridLinesColor,\n        },\n        pointLabels: {\n          color: dataAttributes.darkTicksColor,\n        },\n      },\n    };\n\n    const radials = ['pie', 'doughnut', 'polarArea', 'radar'];\n\n    let scales = {};\n\n    if (!radials.includes(this._type)) {\n      scales = xyScale;\n    } else if (['polarArea', 'radar'].includes(this._type)) {\n      scales = rScale;\n    }\n\n    const opt = {\n      scales,\n      plugins: {\n        legend: {\n          labels: {\n            color: dataAttributes.darkLabelColor,\n          },\n        },\n      },\n    };\n\n    // combine config\n    config = {\n      ...dataAttributes,\n      options: {\n        ...opt,\n      },\n      ...config,\n    };\n\n    typeCheckConfig(NAME, config, DARK_OPTIONS_TYPE);\n\n    return config;\n  }\n\n  _chartConstructor() {\n    if (this._data) {\n      this._createCanvas();\n\n      const options = GENERATE_DATA(this._options, this._type, DEFAULT_OPTIONS);\n\n      this._chart = new Chartjs(this._canvas, {\n        ...this._data,\n        ...options,\n      });\n    }\n  }\n\n  _createCanvas() {\n    if (this._canvas) return;\n    if (this._element.nodeName === 'CANVAS') {\n      this._canvas = this._element;\n    } else {\n      this._canvas = element('canvas');\n      this._element.appendChild(this._canvas);\n    }\n  }\n\n  _handleMode(systemColor) {\n    if (systemColor === 'dark') {\n      this._changeDatasetBorderColor();\n      this.update(null, this._darkOptions.options);\n    } else {\n      this._changeDatasetBorderColor(false);\n      this._prevConfig && this.update(null, this._prevConfig);\n    }\n  }\n\n  _observerCallback(mutationList) {\n    mutationList.forEach((mutation) => {\n      if (mutation.type === 'attributes') {\n        this._handleMode(this.systemColorMode);\n      }\n    });\n  }\n\n  _changeDatasetBorderColor(dark = true) {\n    if (!this._data.data) {\n      return;\n    }\n\n    [...this._data.data.datasets].forEach(\n      (set) =>\n        ['pie', 'doughnut', 'polarArea'].includes(this._type) &&\n        (set.borderColor = dark\n          ? this._darkOptions.darkBgColor\n          : this._darkOptions.darkBgColorLight)\n    );\n  }\n\n  static jQueryInterface(data, options, type) {\n    return this.each(function () {\n      let chartData = Data.getData(this, DATA_KEY);\n\n      if (!chartData && /dispose/.test(data)) {\n        return;\n      }\n\n      if (!chartData) {\n        const chartOptions = options\n          ? GENERATE_DATA(options, type, DEFAULT_OPTIONS)\n          : DEFAULT_OPTIONS[type];\n\n        chartData = new Chart(this, data, chartOptions);\n      }\n\n      if (typeof data === 'string') {\n        if (typeof chartData[data] === 'undefined') {\n          throw new TypeError(`No method named \"${data}\"`);\n        }\n\n        chartData[data](options, type);\n      }\n    });\n  }\n\n  static getInstance(element) {\n    return Data.getData(element, DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return (\n      this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n    );\n  }\n}\n\nexport default Chart;\n","import { element, typeCheckConfig, isRTL } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'lightbox';\nconst DATA_KEY = 'mdb.lightbox';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASSNAME_LIGHTBOX = 'lightbox';\nconst CLASSNAME_GALLERY = 'lightbox-gallery';\n\nconst CLASSNAME_TOOLBAR = 'lightbox-gallery-toolbar';\nconst CLASSNAME_GALLERY_CONTENT = 'lightbox-gallery-content';\nconst CLASSNAME_COUNTER = 'lightbox-gallery-counter';\nconst CLASSNAME_FULLSCREEN_BTN = 'lightbox-gallery-fullscreen-btn';\nconst CLASSNAME_ZOOM_BTN = 'lightbox-gallery-zoom-btn';\nconst CLASSNAME_LEFT_TOOLS = 'lightbox-gallery-left-tools';\nconst CLASSNAME_RIGHT_TOOLS = 'lightbox-gallery-right-tools';\nconst CLASSNAME_CLOSE_BTN = 'lightbox-gallery-close-btn';\nconst CLASSNAME_LOADER = 'lightbox-gallery-loader';\nconst CLASSNAME_ARROW_LEFT = 'lightbox-gallery-arrow-left';\nconst CLASSNAME_ARROW_RIGHT = 'lightbox-gallery-arrow-right';\nconst CLASSNAME_CAPTION_WRAPPER = 'lightbox-gallery-caption-wrapper';\nconst CLASSNAME_CAPTION = 'lightbox-gallery-caption';\nconst CLASSNAME_IMG = 'lightbox-gallery-image';\n\nconst SELECTOR_TOGGLE = `[data-mdb-${NAME}-init] img:not(.lightbox-disabled)`;\n\nconst OPTIONS_TYPE = {\n  container: 'string',\n  zoomLevel: '(number|string)',\n};\n\nconst DEFAULT_OPTIONS = {\n  container: 'body',\n  zoomLevel: 1,\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Lightbox extends BaseComponent {\n  constructor(element, options = {}) {\n    super(element);\n\n    this._options = options;\n    this._getContainer();\n\n    this._id = `lightbox-${Math.random().toString(36).substr(2, 9)}`;\n    this._activeImg = 0;\n    this._images = [];\n    this._zoom = 1;\n    this._gallery = null;\n    this._galleryToolbar = null;\n    this._galleryContent = null;\n    this._loader = null;\n    this._imgCounter = null;\n    this._animating = false;\n    this._fullscreen = false;\n    this._zoomBtn = null;\n    this._fullscreenBtn = null;\n    this._toolsToggleTimer = 0;\n    this._mousedown = false;\n    this._mousedownPositionX = 0;\n    this._mousedownPositionY = 0;\n    this._originalPositionX = 0;\n    this._originalPositionY = 0;\n    this._positionX = 0;\n    this._positionY = 0;\n    this._zoomTimer = 0;\n    this._tapCounter = 0;\n    this._tapTime = 0;\n    this._rightArrow = null;\n    this._leftArrowWrapper = null;\n    this._rightArrowWrapper = null;\n    this._initiated = false;\n    this._multitouch = false;\n    this._touchZoomPosition = [];\n\n    if (this._element) {\n      this.init();\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  get activeImg() {\n    return this._activeImg;\n  }\n\n  get currentImg() {\n    return SelectorEngine.findOne('.active', this._galleryContent);\n  }\n\n  get options() {\n    const config = {\n      ...DEFAULT_OPTIONS,\n      ...Manipulator.getDataAttributes(this._element),\n      ...this._options,\n    };\n\n    typeCheckConfig(NAME, config, OPTIONS_TYPE);\n\n    return config;\n  }\n\n  // Public\n  init() {\n    if (this._initiated) {\n      return;\n    }\n\n    this._appendTemplate();\n    this._initiated = true;\n  }\n\n  open(target = 0) {\n    this._getImages();\n    this._setActiveImg(target);\n    this._sortImages();\n    this._triggerEvents('open', 'opened');\n\n    this._loadImages().then((images) => {\n      this._resizeImages(images);\n      this._toggleTemplate();\n      this._addEvents();\n      this._focusFullscreenBtn();\n    });\n  }\n\n  close() {\n    this.reset();\n    this._removeEvents();\n    this._toggleTemplate();\n    this._triggerEvents('close', 'closed');\n  }\n\n  slide(target = 'right') {\n    if (this._animating === true || this._images.length <= 1) return;\n    this._triggerEvents('slide', 'slid');\n\n    this._beforeSlideEvents();\n    if (target === 'right') this._slideHorizontally(target);\n    if (target === 'left') this._slideHorizontally(target);\n    if (target === 'first') this._slideToTarget(target);\n    if (target === 'last') this._slideToTarget(target);\n    this._afterSlideEvents();\n  }\n\n  zoomIn() {\n    if (this._zoom >= 3) return;\n    this._triggerEvents('zoomIn', 'zoomedIn');\n    this._zoom += parseFloat(this.options.zoomLevel);\n    Manipulator.style(this.currentImg.parentNode, { transform: `scale(${this._zoom})` });\n\n    this._updateZoomBtn();\n  }\n\n  zoomOut() {\n    if (this._zoom <= 1) return;\n    this._triggerEvents('zoomOut', 'zoomedOut');\n    this._zoom -= parseFloat(this.options.zoomLevel);\n    Manipulator.style(this.currentImg.parentNode, { transform: `scale(${this._zoom})` });\n\n    this._updateZoomBtn();\n    this._updateImgPosition();\n  }\n\n  toggleFullscreen() {\n    if (this._fullscreen === false) {\n      Manipulator.addClass(this._fullscreenBtn, 'active');\n      if (this._gallery.requestFullscreen) {\n        this._gallery.requestFullscreen();\n      }\n\n      this._fullscreen = true;\n    } else {\n      Manipulator.removeClass(this._fullscreenBtn, 'active');\n      if (document.exitFullscreen) {\n        document.exitFullscreen();\n      }\n\n      this._fullscreen = false;\n    }\n  }\n\n  reset() {\n    this._restoreDefaultFullscreen();\n    this._restoreDefaultPosition();\n    this._restoreDefaultZoom();\n    clearTimeout(this._toolsToggleTimer);\n    clearTimeout(this._doubleTapTimer);\n  }\n\n  dispose() {\n    EventHandler.off(document, EVENT_CLICK_DATA_API, SELECTOR_TOGGLE, this.toggle);\n    if (this._galleryContent) this._removeEvents();\n    if (this._gallery) this._gallery.remove();\n\n    Data.removeData(this._element, DATA_KEY);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n    this._element = null;\n  }\n\n  // Private\n  _getImages() {\n    const allImages = SelectorEngine.find('img', this._element);\n    const lightboxImages = allImages.filter((image) => {\n      return !image.classList.contains('lightbox-disabled');\n    });\n    this._images = lightboxImages;\n  }\n\n  _getContainer() {\n    this._container = SelectorEngine.findOne(this.options.container);\n  }\n\n  _setActiveImg(target) {\n    this._activeImg = typeof target === 'number' ? target : this._images.indexOf(target.target);\n  }\n\n  _appendTemplate() {\n    this._gallery = element('div');\n    Manipulator.addClass(this._gallery, CLASSNAME_GALLERY);\n    this._element.dataset.id = this._id;\n    this._gallery.id = this._id;\n\n    this._appendLoader();\n    this._appendToolbar();\n    this._appendContent();\n    this._appendArrows();\n    this._appendCaption();\n    this._container.append(this._gallery);\n  }\n\n  _appendToolbar() {\n    this._galleryToolbar = element('div');\n    this._imgCounter = element('p');\n    this._fullscreenBtn = element('button');\n    this._zoomBtn = element('button');\n    const leftTools = element('div');\n    const rightTools = element('div');\n    const closeBtn = element('button');\n\n    Manipulator.addClass(this._galleryToolbar, CLASSNAME_TOOLBAR);\n    Manipulator.addClass(this._imgCounter, CLASSNAME_COUNTER);\n    Manipulator.addClass(this._fullscreenBtn, CLASSNAME_FULLSCREEN_BTN);\n    Manipulator.addClass(this._zoomBtn, CLASSNAME_ZOOM_BTN);\n    Manipulator.addClass(leftTools, CLASSNAME_LEFT_TOOLS);\n    Manipulator.addClass(rightTools, CLASSNAME_RIGHT_TOOLS);\n    Manipulator.addClass(closeBtn, CLASSNAME_CLOSE_BTN);\n\n    this._fullscreenBtn.setAttribute('aria-label', 'Toggle fullscreen');\n    this._zoomBtn.setAttribute('aria-label', 'Zoom in');\n    closeBtn.setAttribute('aria-label', 'Close');\n\n    EventHandler.on(this._fullscreenBtn, EVENT_CLICK_DATA_API, () => this.toggleFullscreen());\n    EventHandler.on(this._zoomBtn, EVENT_CLICK_DATA_API, () => this._toggleZoom());\n    EventHandler.on(closeBtn, EVENT_CLICK_DATA_API, () => this.close());\n\n    leftTools.append(this._imgCounter);\n    rightTools.append(this._fullscreenBtn);\n    rightTools.append(this._zoomBtn);\n    rightTools.append(closeBtn);\n\n    this._galleryToolbar.append(leftTools);\n    this._galleryToolbar.append(rightTools);\n    this._gallery.append(this._galleryToolbar);\n  }\n\n  _appendContent() {\n    this._galleryContent = element('div');\n    Manipulator.addClass(this._galleryContent, CLASSNAME_GALLERY_CONTENT);\n    this._gallery.append(this._galleryContent);\n  }\n\n  _appendLoader() {\n    this._loader = element('div');\n    const spinner = element('div');\n    const spinnerContent = element('span');\n\n    Manipulator.addClass(this._loader, CLASSNAME_LOADER);\n    Manipulator.addClass(spinner, 'spinner-grow');\n    Manipulator.addClass(spinner, 'text-light');\n    Manipulator.addClass(spinnerContent, 'sr-only');\n\n    spinner.setAttribute('role', 'status');\n    spinnerContent.innerHTML = 'Loading...';\n\n    spinner.append(spinnerContent);\n    this._loader.append(spinner);\n    this._gallery.append(this._loader);\n  }\n\n  _appendArrows() {\n    this._leftArrowWrapper = element('div');\n    Manipulator.addClass(this._leftArrowWrapper, CLASSNAME_ARROW_LEFT);\n    const leftArrow = element('button');\n    leftArrow.setAttribute('aria-label', 'Previous');\n    EventHandler.on(leftArrow, EVENT_CLICK_DATA_API, () => this.slide('left'));\n    this._leftArrowWrapper.append(leftArrow);\n\n    this._rightArrowWrapper = element('div');\n    Manipulator.addClass(this._rightArrowWrapper, CLASSNAME_ARROW_RIGHT);\n    this._rightArrow = element('button');\n    this._rightArrow.setAttribute('aria-label', 'Next');\n    EventHandler.on(this._rightArrow, EVENT_CLICK_DATA_API, () => this.slide());\n    this._rightArrowWrapper.append(this._rightArrow);\n\n    this._getImages();\n    if (this._images.length <= 1) return;\n    this._gallery.append(this._leftArrowWrapper);\n    this._gallery.append(this._rightArrowWrapper);\n  }\n\n  _appendCaption() {\n    const captionWrapper = element('div');\n    const caption = element('p');\n\n    Manipulator.addClass(captionWrapper, CLASSNAME_CAPTION_WRAPPER);\n    Manipulator.addClass(caption, CLASSNAME_CAPTION);\n\n    captionWrapper.append(caption);\n    this._gallery.append(captionWrapper);\n  }\n\n  _sortImages() {\n    for (let i = 0; i < this._activeImg; i++) {\n      this._images.push(this._images.shift());\n    }\n  }\n\n  async _loadImages() {\n    const promiseArray = [];\n    const imageArray = [];\n\n    this._galleryContent.innerHTML = '';\n    let positionLeft = 0;\n\n    this._images.forEach((img, key) => {\n      promiseArray.push(\n        new Promise((resolve) => {\n          const newImg = new Image();\n          const newImgWrapper = element('div');\n          Manipulator.addClass(newImgWrapper, CLASSNAME_IMG);\n\n          this._addImgStyles(newImg, newImgWrapper, positionLeft, key, img);\n\n          newImgWrapper.append(newImg);\n          this._galleryContent.append(newImgWrapper);\n\n          newImg.onload = resolve;\n          newImg.src = img.dataset.mdbImg || img.src;\n          imageArray.push(newImg);\n\n          positionLeft += 100;\n        })\n      );\n    });\n\n    await Promise.all(promiseArray);\n    return imageArray;\n  }\n\n  _addImgStyles(newImg, newImgWrapper, positionLeft, key, img) {\n    newImg.alt = img.alt;\n    newImg.draggable = false;\n\n    Manipulator.style(newImgWrapper, { position: 'absolute', left: `${positionLeft}%`, top: 0 });\n    if (img.dataset.mdbCaption || img.dataset.mdbCaption === '') {\n      newImg.dataset.caption = img.dataset.mdbCaption;\n    }\n\n    if (positionLeft === 0) {\n      if (newImg.width < newImg.height) Manipulator.addClass(newImg, 'vertical');\n      Manipulator.style(newImgWrapper, { opacity: 1 });\n      Manipulator.addClass(newImg, 'active');\n    } else {\n      Manipulator.removeClass(newImg, 'active');\n    }\n\n    if (key === this._images.length - 1 && this._images.length > 1) {\n      Manipulator.style(newImgWrapper, { left: '-100%' });\n    }\n  }\n\n  _resizeImages(images) {\n    images.forEach((img) => {\n      this._calculateImgSize(img);\n    });\n  }\n\n  _calculateImgSize(img) {\n    if (img.width >= img.height) {\n      img.style.width = '100%';\n      img.style.maxWidth = '100%';\n      img.style.height = 'auto';\n      img.style.top = `${(img.parentNode.offsetHeight - img.height) / 2}px`;\n      img.style.left = 0;\n    } else {\n      img.style.height = '100%';\n      img.style.maxHeight = '100%';\n      img.style.width = 'auto';\n      img.style.left = `${(img.parentNode.offsetWidth - img.width) / 2}px`;\n      img.style.top = 0;\n    }\n\n    if (img.width >= img.parentNode.offsetWidth) {\n      img.style.width = `${img.parentNode.offsetWidth}px`;\n      img.style.height = 'auto';\n      img.style.left = 0;\n      img.style.top = `${(img.parentNode.offsetHeight - img.height) / 2}px`;\n    }\n    if (img.height >= img.parentNode.offsetHeight) {\n      img.style.height = `${img.parentNode.offsetHeight}px`;\n      img.style.width = 'auto';\n      img.style.top = 0;\n      img.style.left = `${(img.parentNode.offsetWidth - img.width) / 2}px`;\n    }\n\n    this._positionX = parseFloat(img.style.left) || 0;\n    this._positionY = parseFloat(img.style.top) || 0;\n  }\n\n  _onResize() {\n    this._images = SelectorEngine.find('img', this._galleryContent);\n    this._images.forEach((img) => {\n      this._calculateImgSize(img);\n    });\n  }\n\n  _onFullscreenChange() {\n    const isFullscreenEnabled =\n      document.webkitIsFullScreen || document.mozFullScreen || document.msFullscreenElement;\n    if (isFullscreenEnabled === undefined) {\n      this._fullscreen = false;\n      Manipulator.removeClass(this._fullscreenBtn, 'active');\n    }\n  }\n\n  _beforeSlideEvents() {\n    this._animationStart();\n    this._restoreDefaultZoom();\n    this._restoreDefaultPosition();\n    this._resetDoubleTap();\n  }\n\n  _slideHorizontally(direction) {\n    this._images = SelectorEngine.find('img', this._galleryContent);\n    this._images.forEach((img) => {\n      let newPositionLeft;\n\n      if (direction === 'right') {\n        newPositionLeft = parseInt(img.parentNode.style.left, 10) - 100;\n        if (newPositionLeft < -100) newPositionLeft = (this._images.length - 2) * 100;\n      } else {\n        newPositionLeft = parseInt(img.parentNode.style.left, 10) + 100;\n        if (newPositionLeft === (this._images.length - 1) * 100) newPositionLeft = -100;\n      }\n\n      this._slideImg(img, newPositionLeft);\n    });\n\n    this._updateActiveImg(direction);\n  }\n\n  _slideImg(img, position) {\n    if (position === 0) {\n      Manipulator.addClass(img, 'active');\n      Manipulator.style(img.parentNode, { opacity: 1, transform: 'scale(1)' });\n    } else {\n      Manipulator.removeClass(img, 'active');\n      Manipulator.style(img.parentNode, { opacity: 0, transform: 'scale(0.25)' });\n    }\n    img.parentNode.style.left = `${position}%`;\n  }\n\n  _slideToTarget(target) {\n    if (target === 'first' && this._activeImg === 0) return;\n    if (target === 'last' && this._activeImg === this._images.length - 1) return;\n\n    this.reset();\n    this._removeEvents();\n    this._showLoader();\n\n    this._getImages();\n    this._activeImg = target === 'first' ? 0 : this._images.length - 1;\n    this._sortImages();\n\n    Manipulator.style(this.currentImg.parentNode, { transform: 'scale(0.25)', opacity: 0 });\n\n    setTimeout(() => {\n      this._loadImages().then((images) => {\n        this._resizeImages(images);\n        this._addEvents();\n        this._updateCaption();\n        this._hideLoader();\n        setTimeout(() => {\n          Manipulator.style(this.currentImg.parentNode, { transform: 'scale(1)', opacity: 1 });\n        }, 10);\n      });\n    }, 400);\n  }\n\n  _updateActiveImg(direction) {\n    if (direction === 'right') {\n      if (this._activeImg === this._images.length - 1) {\n        this._activeImg = 0;\n      } else {\n        this._activeImg++;\n      }\n    }\n\n    if (direction === 'left') {\n      if (this._activeImg === 0) {\n        this._activeImg = this._images.length - 1;\n      } else {\n        this._activeImg--;\n      }\n    }\n  }\n\n  _afterSlideEvents() {\n    this._updateCounter();\n    this._updateCaption();\n  }\n\n  _updateCounter() {\n    if (this._images.length <= 1) return;\n    setTimeout(() => {\n      this._imgCounter.innerHTML = `${this._activeImg + 1} / ${this._images.length}`;\n    }, 200);\n  }\n\n  _updateCaption() {\n    setTimeout(() => {\n      let caption = this.currentImg.alt;\n      if (this.currentImg.dataset.caption || this.currentImg.dataset.caption === '') {\n        caption = this.currentImg.dataset.caption;\n      }\n      SelectorEngine.findOne(`.${CLASSNAME_CAPTION}`, this._gallery).innerHTML = caption;\n    }, 200);\n  }\n\n  _toggleTemplate() {\n    if (this._gallery.style.visibility === 'visible') {\n      Manipulator.style(this.currentImg.parentNode, { transform: 'scale(0.25)' });\n\n      setTimeout(() => {\n        this._hideGallery();\n        this._enableScroll();\n        this._showLoader();\n      }, 100);\n    } else {\n      this._showGallery();\n      this._disableScroll();\n      this._updateCounter();\n      this._updateCaption();\n      this._setToolsToggleTimout();\n      this._hideLoader();\n    }\n  }\n\n  _showLoader() {\n    Manipulator.style(this._loader, { opacity: 1 });\n  }\n\n  _hideLoader() {\n    Manipulator.style(this._loader, { opacity: 0 });\n  }\n\n  _hideGallery() {\n    Manipulator.style(this._gallery, { opacity: 0, pointerEvents: 'none', visibility: 'hidden' });\n  }\n\n  _showGallery() {\n    Manipulator.style(this._gallery, {\n      opacity: 1,\n      pointerEvents: 'initial',\n      visibility: 'visible',\n    });\n    setTimeout(() => {\n      Manipulator.style(this.currentImg.parentNode, { transform: 'scale(1)' });\n    }, 50);\n  }\n\n  _toggleZoom() {\n    if (this._zoom !== 1) {\n      this._restoreDefaultZoom();\n    } else {\n      this.zoomIn();\n    }\n  }\n\n  _updateZoomBtn() {\n    if (this._zoom > 1) {\n      Manipulator.addClass(this._zoomBtn, 'active');\n      this._zoomBtn.setAttribute('aria-label', 'Zoom out');\n    } else {\n      Manipulator.removeClass(this._zoomBtn, 'active');\n      this._zoomBtn.setAttribute('aria-label', 'Zoom in');\n    }\n  }\n\n  _updateImgPosition() {\n    if (this._zoom === 1) {\n      this._restoreDefaultPosition();\n    }\n  }\n\n  _addEvents() {\n    const images = SelectorEngine.find('img', this._galleryContent);\n\n    this._onWindowTouchmove = this._onWindowTouchmove.bind(this);\n    this._onWindowTouchstart = this._onWindowTouchstart.bind(this);\n    this._onImgMousedown = this._onMousedown.bind(this);\n    this._onImgMousemove = this._onMousemove.bind(this);\n    this._onImgWheel = this._onZoom.bind(this);\n    this._onImgMouseup = this._onMouseup.bind(this);\n    this._onImgTouchend = this._onTouchend.bind(this);\n    this._onImgDoubleClick = this._onDoubleClick.bind(this);\n    this._onWindowResize = this._onResize.bind(this);\n    this._onWindowFullscreenChange = this._onFullscreenChange.bind(this);\n    this._onAnyImgAction = this._resetToolsToggler.bind(this);\n    this._onGalleryClick = this._onBackdropClick.bind(this);\n    this._onKeyupEvent = this._onKeyup.bind(this);\n    this._onRightArrowKeydownEvent = this._onRightArrowKeydown.bind(this);\n    this._onFullscreenBtnKeydownEvent = this._onFullscreenBtnKeydown.bind(this);\n\n    images.forEach((img) => {\n      EventHandler.on(img, 'mousedown', this._onImgMousedown, { passive: true });\n      EventHandler.on(img, 'touchstart', this._onImgMousedown, { passive: true });\n      EventHandler.on(img, 'mousemove', this._onImgMousemove, { passive: true });\n      EventHandler.on(img, 'touchmove', this._onImgMousemove, { passive: true });\n      EventHandler.on(img, 'wheel', this._onImgWheel, { passive: true });\n      EventHandler.on(img, 'dblclick', this._onImgDoubleClick, { passive: true });\n    });\n\n    document.addEventListener('touchmove', this._onWindowTouchmove, { passive: false });\n    EventHandler.on(window, 'touchstart', this._onWindowTouchstart);\n    EventHandler.on(window, 'mouseup', this._onImgMouseup);\n    EventHandler.on(window, 'touchend', this._onImgTouchend);\n    EventHandler.on(window, 'resize', this._onWindowResize);\n    EventHandler.on(window, 'orientationchange', this._onWindowResize);\n    EventHandler.on(window, 'keyup', this._onKeyupEvent);\n    EventHandler.on(window, 'fullscreenchange', this._onWindowFullscreenChange);\n    EventHandler.on(this._gallery, 'mousemove', this._onAnyImgAction);\n    EventHandler.on(this._gallery, 'click', this._onGalleryClick);\n    EventHandler.on(this._rightArrow, 'keydown', this._onRightArrowKeydownEvent);\n    EventHandler.on(this._fullscreenBtn, 'keydown', this._onFullscreenBtnKeydownEvent);\n  }\n\n  _removeEvents() {\n    const images = SelectorEngine.find('img', this._galleryContent);\n\n    images.forEach((img) => {\n      EventHandler.off(img, 'mousedown', this._onImgMousedown);\n      EventHandler.off(img, 'touchstart', this._onImgMousedown);\n      EventHandler.off(img, 'mousemove', this._onImgMousemove);\n      EventHandler.off(img, 'touchmove', this._onImgMousemove);\n      EventHandler.off(img, 'wheel', this._onImgWheel);\n      EventHandler.off(img, 'dblclick', this._onImgDoubleClick);\n    });\n\n    document.removeEventListener('touchmove', this._onWindowTouchmove, { passive: false });\n    EventHandler.off(window, 'touchstart', this._onWindowTouchstart);\n    EventHandler.off(window, 'mouseup', this._onImgMouseup);\n    EventHandler.off(window, 'touchend', this._onImgTouchend);\n    EventHandler.off(window, 'resize', this._onWindowResize);\n    EventHandler.off(window, 'orientationchange', this._onWindowResize);\n    EventHandler.off(window, 'keyup', this._onKeyupEvent);\n    EventHandler.off(window, 'fullscreenchange', this._onWindowFullscreenChange);\n    EventHandler.off(this._gallery, 'mousemove', this._onAnyImgAction);\n    EventHandler.off(this._gallery, 'click', this._onGalleryClick);\n    EventHandler.off(this._rightArrow, 'keydown', this._onRightArrowKeydownEvent);\n    EventHandler.off(this._fullscreenBtn, 'keydown', this._onFullscreenBtnKeydownEvent);\n  }\n\n  _onMousedown(e) {\n    const touch = e.touches;\n    const x = touch ? touch[0].clientX : e.clientX;\n    const y = touch ? touch[0].clientY : e.clientY;\n\n    this._originalPositionX = parseFloat(this.currentImg.style.left) || 0;\n    this._originalPositionY = parseFloat(this.currentImg.style.top) || 0;\n    this._positionX = this._originalPositionX;\n    this._positionY = this._originalPositionY;\n    this._mousedownPositionX = x * (1 / this._zoom) - this._positionX;\n    this._mousedownPositionY = y * (1 / this._zoom) - this._positionY;\n    this._mousedown = true;\n\n    if (e.type === 'touchstart') {\n      if (e.touches.length > 1) {\n        this._multitouch = true;\n        this._touchZoomPosition = e.touches;\n      }\n    }\n  }\n\n  _onMousemove(e) {\n    if (!this._mousedown) return;\n\n    const touch = e.touches;\n    const x = touch ? touch[0].clientX : e.clientX;\n    const y = touch ? touch[0].clientY : e.clientY;\n\n    if (touch) this._resetToolsToggler();\n\n    if (!this._multitouch) {\n      if (this._zoom !== 1) {\n        this._positionX = x * (1 / this._zoom) - this._mousedownPositionX;\n        this._positionY = y * (1 / this._zoom) - this._mousedownPositionY;\n        Manipulator.style(this.currentImg, {\n          left: `${this._positionX}px`,\n          top: `${this._positionY}px`,\n        });\n      } else {\n        if (this._images.length <= 1) return;\n        this._positionX = x * (1 / this._zoom) - this._mousedownPositionX;\n        Manipulator.style(this.currentImg, { left: `${this._positionX}px` });\n      }\n    }\n  }\n\n  _onMouseup(e) {\n    this._mousedown = false;\n    this._moveImg(e.target);\n  }\n\n  _onTouchend(e) {\n    this._mousedown = false;\n\n    if (this._multitouch) {\n      if (e.targetTouches.length === 0) {\n        this._multitouch = false;\n        this._touchZoomPosition = [];\n      }\n    } else if (!this._multitouch) {\n      this._checkDoubleTap(e);\n      this._moveImg(e.target);\n    }\n  }\n\n  _calculateTouchZoom(e) {\n    const initialDistance = Math.hypot(\n      this._touchZoomPosition[1].pageX - this._touchZoomPosition[0].pageX,\n      this._touchZoomPosition[1].pageY - this._touchZoomPosition[0].pageY\n    );\n    const finalDistance = Math.hypot(\n      e.touches[1].pageX - e.touches[0].pageX,\n      e.touches[1].pageY - e.touches[0].pageY\n    );\n    const distanceChange = Math.abs(initialDistance - finalDistance);\n    const screenWidth = e.view.screen.width;\n    if (distanceChange > screenWidth * 0.03) {\n      if (initialDistance <= finalDistance) {\n        this.zoomIn();\n      } else {\n        this.zoomOut();\n      }\n      this._touchZoomPosition = e.touches;\n    }\n  }\n\n  _onWindowTouchstart(e) {\n    if (e.touches.length > 1) {\n      this._multitouch = true;\n      this._touchZoomPosition = e.touches;\n    }\n  }\n\n  _onWindowTouchmove(e) {\n    e.preventDefault();\n    if (e.type === 'touchmove' && e.targetTouches.length > 1) {\n      this._calculateTouchZoom(e);\n    }\n  }\n\n  _onRightArrowKeydown(e) {\n    switch (e.keyCode) {\n      case 9:\n        if (e.shiftKey) break;\n        e.preventDefault();\n        this._focusFullscreenBtn();\n        break;\n      default:\n        break;\n    }\n  }\n\n  _onFullscreenBtnKeydown(e) {\n    switch (e.keyCode) {\n      case 9:\n        if (!e.shiftKey) break;\n        e.preventDefault();\n        this._focusRightArrow();\n        break;\n      default:\n        break;\n    }\n  }\n\n  _onKeyup(e) {\n    this._resetToolsToggler();\n    switch (e.keyCode) {\n      case 39:\n        if (isRTL) {\n          this.slide('left');\n        } else {\n          this.slide();\n        }\n\n        break;\n      case 37:\n        if (isRTL) {\n          this.slide();\n        } else {\n          this.slide('left');\n        }\n\n        break;\n      case 27:\n        this.close();\n        break;\n      case 36:\n        this.slide('first');\n        break;\n      case 35:\n        this.slide('last');\n        break;\n      case 38:\n        this.zoomIn();\n        break;\n      case 40:\n        this.zoomOut();\n        break;\n      default:\n        break;\n    }\n  }\n\n  _focusFullscreenBtn() {\n    setTimeout(() => {\n      this._fullscreenBtn.focus();\n    }, 100);\n  }\n\n  _focusRightArrow() {\n    this._rightArrow.focus();\n  }\n\n  _moveImg(target) {\n    if (this._multitouch) return;\n    if (this._zoom !== 1 || target !== this.currentImg || this._images.length <= 1) return;\n\n    const movement = this._positionX - this._originalPositionX;\n    if (movement > 0) {\n      if (isRTL) {\n        this.slide();\n      } else {\n        this.slide('left');\n      }\n    } else if (movement < 0) {\n      if (isRTL) {\n        this.slide('left');\n      } else {\n        this.slide();\n      }\n    }\n  }\n\n  _checkDoubleTap(e) {\n    clearTimeout(this._doubleTapTimer);\n    const currentTime = new Date().getTime();\n    const tapLength = currentTime - this._tapTime;\n\n    if (this._tapCounter > 0 && tapLength < 500) {\n      this._onDoubleClick(e);\n      this._doubleTapTimer = setTimeout(() => {\n        this._tapTime = new Date().getTime();\n        this._tapCounter = 0;\n      }, 300);\n    } else {\n      this._tapCounter++;\n      this._tapTime = new Date().getTime();\n    }\n  }\n\n  _resetDoubleTap() {\n    this._tapTime = 0;\n    this._tapCounter = 0;\n    clearTimeout(this._doubleTapTimer);\n  }\n\n  _onDoubleClick(e) {\n    if (this._multitouch) return;\n\n    if (!e.touches) this._setNewPositionOnZoomIn(e);\n    if (this._zoom !== 1) {\n      this._restoreDefaultZoom();\n    } else {\n      this.zoomIn();\n    }\n  }\n\n  _onZoom(e) {\n    if (e.deltaY > 0) {\n      this.zoomOut();\n    } else {\n      if (this._zoom >= 3) return;\n      this._setNewPositionOnZoomIn(e);\n      this.zoomIn();\n    }\n  }\n\n  _onBackdropClick(e) {\n    this._resetToolsToggler();\n\n    if (e.target.tagName !== 'DIV') return;\n    this.close();\n  }\n\n  _setNewPositionOnZoomIn(e) {\n    clearTimeout(this._zoomTimer);\n    this._positionX = window.innerWidth / 2 - e.offsetX - 50;\n    this._positionY = window.innerHeight / 2 - e.offsetY - 50;\n    this.currentImg.style.transition = 'all 0.5s ease-out';\n    this.currentImg.style.left = `${this._positionX}px`;\n    this.currentImg.style.top = `${this._positionY}px`;\n\n    this._zoomTimer = setTimeout(() => {\n      this.currentImg.style.transition = 'none';\n    }, 500);\n  }\n\n  _resetToolsToggler() {\n    this._showTools();\n    clearTimeout(this._toolsToggleTimer);\n    this._setToolsToggleTimout();\n  }\n\n  _setToolsToggleTimout() {\n    this._toolsToggleTimer = setTimeout(() => {\n      this._hideTools();\n      clearTimeout(this._toolsToggleTimer);\n    }, 4000);\n  }\n\n  _hideTools() {\n    Manipulator.style(this._galleryToolbar, { opacity: 0 });\n    Manipulator.style(this._leftArrowWrapper, { opacity: 0 });\n    Manipulator.style(this._rightArrowWrapper, { opacity: 0 });\n  }\n\n  _showTools() {\n    Manipulator.style(this._galleryToolbar, { opacity: 1 });\n    Manipulator.style(this._leftArrowWrapper, { opacity: 1 });\n    Manipulator.style(this._rightArrowWrapper, { opacity: 1 });\n  }\n\n  _disableScroll() {\n    Manipulator.addClass(document.body, 'disabled-scroll');\n\n    if (document.documentElement.scrollHeight > document.documentElement.clientHeight) {\n      Manipulator.addClass(document.body, 'replace-scrollbar');\n    }\n  }\n\n  _enableScroll() {\n    setTimeout(() => {\n      Manipulator.removeClass(document.body, 'disabled-scroll');\n      Manipulator.removeClass(document.body, 'replace-scrollbar');\n    }, 300);\n  }\n\n  _animationStart() {\n    this._animating = true;\n    setTimeout(() => {\n      this._animating = false;\n    }, 400);\n  }\n\n  _restoreDefaultZoom() {\n    if (this._zoom !== 1) {\n      this._zoom = 1;\n      Manipulator.style(this.currentImg.parentNode, { transform: `scale(${this._zoom})` });\n\n      this._updateZoomBtn();\n      this._updateImgPosition();\n    }\n  }\n\n  _restoreDefaultFullscreen() {\n    if (this._fullscreen) this.toggleFullscreen();\n  }\n\n  _restoreDefaultPosition() {\n    clearTimeout(this._zoomTimer);\n    const currentImg = this.currentImg;\n\n    Manipulator.style(this.currentImg.parentNode, { left: 0, top: 0 });\n    Manipulator.style(this.currentImg, { transition: 'all 0.5s ease-out', left: 0, top: 0 });\n\n    this._calculateImgSize(currentImg);\n\n    setTimeout(() => {\n      Manipulator.style(this.currentImg, { transition: 'none' });\n    }, 500);\n  }\n\n  async _triggerEvents(startEvent, completeEvent) {\n    EventHandler.trigger(this._element, `${startEvent}.mdb.lightbox`);\n\n    if (completeEvent) {\n      await setTimeout(() => {\n        EventHandler.trigger(this._element, `${completeEvent}.mdb.lightbox`);\n      }, 505);\n    }\n  }\n\n  static toggle() {\n    return function (event) {\n      const lightbox = SelectorEngine.closest(event.target, `.${CLASSNAME_LIGHTBOX}`);\n      const instance = Lightbox.getInstance(lightbox) || new Lightbox(lightbox);\n      instance.open(event);\n    };\n  }\n\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n      if (!data && /dispose/.test(config)) {\n        return;\n      }\n      if (!data) {\n        data = new Lightbox(this, _config);\n      }\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](options);\n      }\n    });\n  }\n}\n\nexport default Lightbox;\n","import { typeCheckConfig } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport Tooltip from '../free/tooltip';\nimport Manipulator from '../mdb/dom/manipulator';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'rating';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\n\nconst DefaultType = {\n  tooltip: 'string',\n  value: '(string|number)',\n  readonly: 'boolean',\n  after: 'string',\n  before: 'string',\n  dynamic: 'boolean',\n};\n\nconst Default = {\n  tooltip: 'top',\n  value: '',\n  readonly: false,\n  after: '',\n  before: '',\n  dynamic: false,\n};\n\nconst EVENT_SELECT = `scoreSelect${EVENT_KEY}`;\nconst EVENT_HOVER = `scoreHover${EVENT_KEY}`;\nconst EVENT_KEYUP = `keyup${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`;\nconst EVENT_MOUSEDOWN = `mousedown${EVENT_KEY}`;\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Rating extends BaseComponent {\n  constructor(element, options) {\n    super(element);\n\n    this._icons = SelectorEngine.find('i', this._element);\n    this._options = this._getConfig(options);\n    this._index = -1;\n    this._savedIndex = null;\n    this._originalClassList = [];\n    this._fn = {};\n    this._tooltips = [];\n\n    if (this._element) {\n      this._init();\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  dispose() {\n    if (!this._options.readonly) {\n      EventHandler.off(this._element, EVENT_KEYUP);\n      EventHandler.off(this._element, EVENT_FOCUSOUT);\n      EventHandler.off(this._element, EVENT_KEYDOWN);\n      this._element.removeEventListener('mouseleave', this._fn.mouseleave);\n\n      this._icons.forEach((el, i) => {\n        EventHandler.off(el, EVENT_MOUSEDOWN);\n        el.removeEventListener('mouseenter', this._fn.mouseenter[i]);\n      });\n\n      this._tooltips.forEach((el) => {\n        el._element.removeAttribute('data-mdb-toggle');\n        el.dispose();\n      });\n\n      this._element.removeAttribute('tabIndex');\n    }\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n  _init() {\n    if (!this._options.readonly) {\n      this._bindMouseEnter();\n      this._bindMouseLeave();\n      this._bindMouseDown();\n      this._bindKeyDown();\n      this._bindKeyUp();\n      this._bindFocusLost();\n    }\n\n    if (this._options.dynamic) {\n      this._saveOriginalClassList();\n    }\n\n    this._setCustomText();\n    this._setCustomColor();\n    this._setToolTips();\n\n    if (this._options.value) {\n      this._index = this._options.value - 1;\n      this._updateRating(this._index);\n    }\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n    config = {\n      ...Default,\n      ...dataAttributes,\n      ...config,\n    };\n\n    typeCheckConfig(NAME, config, DefaultType);\n\n    return config;\n  }\n\n  _bindMouseEnter() {\n    this._fn.mouseenter = [];\n    this._icons.forEach((el, i) => {\n      // EventHandler.on changes mouseenter to mouseover - use addEventListener\n      el.addEventListener(\n        'mouseenter',\n        // this._fn.mouseenter[i] is needed to create reference and unpin events after call dispose\n        // prettier-ignore\n        this._fn.mouseenter[i] = (e) => {\n          this._index = this._icons.indexOf(e.target);\n          this._updateRating(this._index);\n          this._triggerEvents(el, EVENT_HOVER);\n          // prettier-ignore\n        }\n      );\n    });\n  }\n\n  _bindMouseLeave() {\n    // EventHandler.on changes mouseleave to mouseout - use addEventListener\n    this._element.addEventListener(\n      'mouseleave',\n      // this._fn.mouseleave is needed to create reference and unpin events after call dispose\n      // prettier-ignore\n      this._fn.mouseleave = () => {\n        if (this._savedIndex !== null) {\n          this._updateRating(this._savedIndex);\n          this._index = this._savedIndex;\n        } else if (this._options.value) {\n          this._updateRating(this._options.value - 1);\n          this._index = this._options.value - 1\n        } else {\n          this._index = -1;\n          this._clearRating();\n        }\n        // prettier-ignore\n      }\n    );\n  }\n\n  _bindMouseDown() {\n    this._icons.forEach((el) => {\n      EventHandler.on(el, EVENT_MOUSEDOWN, () => {\n        this._setElementOutline('none');\n        this._savedIndex = this._index;\n        this._triggerEvents(el, EVENT_SELECT);\n      });\n    });\n  }\n\n  _bindKeyDown() {\n    this._element.tabIndex = 0;\n    EventHandler.on(this._element, EVENT_KEYDOWN, (e) => this._updateAfterKeyDown(e));\n  }\n\n  _bindKeyUp() {\n    EventHandler.on(this._element, EVENT_KEYUP, () => this._setElementOutline('auto'));\n  }\n\n  _bindFocusLost() {\n    EventHandler.on(this._element, EVENT_FOCUSOUT, () => this._setElementOutline('none'));\n  }\n\n  _setElementOutline(value) {\n    this._element.style.outline = value;\n  }\n\n  _triggerEvents(el, event) {\n    EventHandler.trigger(el, event, {\n      value: this._index + 1,\n    });\n  }\n\n  _updateAfterKeyDown(e) {\n    const maxIndex = this._icons.length - 1;\n    const indexBeforeChange = this._index;\n\n    if (e.key === ARROW_RIGHT_KEY && this._index < maxIndex) {\n      this._index += 1;\n    }\n\n    if (e.key === ARROW_LEFT_KEY && this._index > -1) {\n      this._index -= 1;\n    }\n\n    if (indexBeforeChange !== this._index) {\n      this._savedIndex = this._index;\n      this._updateRating(this._savedIndex);\n      this._triggerEvents(this._icons[this._savedIndex], EVENT_SELECT);\n    }\n  }\n\n  _updateRating(index) {\n    this._clearRating();\n\n    if (this._options.dynamic) {\n      this._restoreOriginalIcon(index);\n    }\n\n    this._icons.forEach((el, i) => {\n      if (i <= index) {\n        el.classList.add('fas', 'active');\n        el.classList.remove('far');\n      }\n    });\n  }\n\n  _clearRating() {\n    this._icons.forEach((el, i) => {\n      if (this._options.dynamic) {\n        el.classList = this._originalClassList[i];\n      } else {\n        el.classList.remove('fas', 'active');\n        el.classList.add('far');\n      }\n    });\n  }\n\n  _setToolTips() {\n    this._icons.forEach((el, i) => {\n      const hasOwnTooltips = Manipulator.getDataAttribute(el, 'toggle');\n\n      if (el.title && !hasOwnTooltips) {\n        Manipulator.setDataAttribute(el, 'toggle', 'tooltip');\n        this._tooltips[i] = new Tooltip(el, { placement: this._options.tooltip });\n      }\n    });\n  }\n\n  _setCustomText() {\n    this._icons.forEach((el) => {\n      const after = Manipulator.getDataAttribute(el, 'after');\n      const before = Manipulator.getDataAttribute(el, 'before');\n\n      if (after) {\n        el.insertAdjacentHTML('afterEnd', after);\n      }\n\n      if (before) {\n        el.insertAdjacentHTML('beforeBegin', before);\n      }\n    });\n  }\n\n  _setCustomColor() {\n    this._icons.forEach((el) => {\n      const color = Manipulator.getDataAttribute(el, 'color');\n\n      if (color) {\n        el.style.color = color;\n      }\n    });\n  }\n\n  _saveOriginalClassList() {\n    this._icons.forEach((el) => {\n      const classList = el.classList.value;\n      this._originalClassList.push(classList);\n    });\n  }\n\n  _restoreOriginalIcon(index) {\n    const classList = this._originalClassList[index];\n    const color = Manipulator.getDataAttribute(this._icons[index], 'color');\n\n    this._icons.forEach((el, i) => {\n      if (i <= index) {\n        el.classList = classList;\n        el.style.color = color;\n      }\n    });\n  }\n\n  // Static\n\n  static autoInit(el) {\n    return new Rating(el);\n  }\n\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data && /dispose|hide/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new Rating(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](options);\n      }\n    });\n  }\n}\n\nexport default Rating;\n","/* eslint-disable */\n\nexport function get(element) {\n  return getComputedStyle(element);\n}\n\nexport function set(element, obj) {\n  for (const key in obj) {\n    let val = obj[key];\n    if (typeof val === 'number') {\n      val = `${val}px`;\n    }\n    element.style[key] = val;\n  }\n  return element;\n}\n","/* eslint-disable */\n\nexport function div(className) {\n  const div = document.createElement('div');\n  div.className = className;\n  return div;\n}\n\nconst elMatches =\n  typeof Element !== 'undefined' &&\n  (Element.prototype.matches ||\n    Element.prototype.webkitMatchesSelector ||\n    Element.prototype.mozMatchesSelector ||\n    Element.prototype.msMatchesSelector);\n\nexport function matches(element, query) {\n  if (!elMatches) {\n    throw new Error('No element matching method supported');\n  }\n\n  return elMatches.call(element, query);\n}\n\nexport function remove(element) {\n  if (element.remove) {\n    element.remove();\n  } else {\n    if (element.parentNode) {\n      element.parentNode.removeChild(element);\n    }\n  }\n}\n\nexport function queryChildren(element, selector) {\n  return Array.prototype.filter.call(element.children, (child) => matches(child, selector));\n}\n","/* eslint-disable */\n\nconst cls = {\n  main: 'ps',\n  rtl: 'ps__rtl',\n  element: {\n    thumb: (x) => `ps__thumb-${x}`,\n    rail: (x) => `ps__rail-${x}`,\n    consuming: 'ps__child--consume',\n  },\n  state: {\n    focus: 'ps--focus',\n    clicking: 'ps--clicking',\n    active: (x) => `ps--active-${x}`,\n    scrolling: (x) => `ps--scrolling-${x}`,\n  },\n};\n\nexport default cls;\n\n/*\n * Helper methods\n */\nconst scrollingClassTimeout = { x: null, y: null };\n\nexport function addScrollingClass(i, x) {\n  const classList = i.element.classList;\n  const className = cls.state.scrolling(x);\n\n  if (classList.contains(className)) {\n    clearTimeout(scrollingClassTimeout[x]);\n  } else {\n    classList.add(className);\n  }\n}\n\nexport function removeScrollingClass(i, x) {\n  scrollingClassTimeout[x] = setTimeout(\n    () => i.isAlive && i.element.classList.remove(cls.state.scrolling(x)),\n    i.settings.scrollingThreshold\n  );\n}\n\nexport function setScrollingClassInstantly(i, x) {\n  addScrollingClass(i, x);\n  removeScrollingClass(i, x);\n}\n","/* eslint-disable */\nclass EventElement {\n  constructor(element) {\n    this.element = element;\n    this.handlers = {};\n  }\n\n  bind(eventName, handler) {\n    if (typeof this.handlers[eventName] === 'undefined') {\n      this.handlers[eventName] = [];\n    }\n    this.handlers[eventName].push(handler);\n    this.element.addEventListener(eventName, handler, false);\n  }\n\n  unbind(eventName, target) {\n    this.handlers[eventName] = this.handlers[eventName].filter((handler) => {\n      if (target && handler !== target) {\n        return true;\n      }\n      this.element.removeEventListener(eventName, handler, false);\n      return false;\n    });\n  }\n\n  unbindAll() {\n    for (const name in this.handlers) {\n      this.unbind(name);\n    }\n  }\n\n  get isEmpty() {\n    return Object.keys(this.handlers).every((key) => this.handlers[key].length === 0);\n  }\n}\n\nexport default class EventManager {\n  constructor() {\n    this.eventElements = [];\n  }\n\n  eventElement(element) {\n    let ee = this.eventElements.filter((ee) => ee.element === element)[0];\n    if (!ee) {\n      ee = new EventElement(element);\n      this.eventElements.push(ee);\n    }\n    return ee;\n  }\n\n  bind(element, eventName, handler) {\n    this.eventElement(element).bind(eventName, handler);\n  }\n\n  unbind(element, eventName, handler) {\n    const ee = this.eventElement(element);\n    ee.unbind(eventName, handler);\n\n    if (ee.isEmpty) {\n      // remove\n      this.eventElements.splice(this.eventElements.indexOf(ee), 1);\n    }\n  }\n\n  unbindAll() {\n    this.eventElements.forEach((e) => e.unbindAll());\n    this.eventElements = [];\n  }\n\n  once(element, eventName, handler) {\n    const ee = this.eventElement(element);\n    const onceHandler = (evt) => {\n      ee.unbind(eventName, onceHandler);\n      handler(evt);\n    };\n    ee.bind(eventName, onceHandler);\n  }\n}\n","import { setScrollingClassInstantly } from './lib/class-names';\n\nfunction createEvent(name) {\n  if (typeof window.CustomEvent === 'function') {\n    return new CustomEvent(name);\n  }\n\n  const evt = document.createEvent('CustomEvent');\n  evt.initCustomEvent(name, false, false, undefined);\n  return evt;\n}\n\nexport default function (i, axis, diff, useScrollingClass = true, forceFireReachEvent = false) {\n  let fields;\n  if (axis === 'top') {\n    fields = ['contentHeight', 'containerHeight', 'scrollTop', 'y', 'up', 'down'];\n  } else if (axis === 'left') {\n    fields = ['contentWidth', 'containerWidth', 'scrollLeft', 'x', 'left', 'right'];\n  } else {\n    throw new Error('A proper axis should be provided');\n  }\n\n  processScrollDiff(i, diff, fields, useScrollingClass, forceFireReachEvent);\n}\n\nfunction processScrollDiff(\n  i,\n  diff,\n  [contentHeight, containerHeight, scrollTop, y, up, down],\n  useScrollingClass = true,\n  forceFireReachEvent = false\n) {\n  const element = i.element;\n\n  // reset reach\n  i.reach[y] = null;\n\n  // 1 for subpixel rounding\n  if (element[scrollTop] < 1) {\n    i.reach[y] = 'start';\n  }\n\n  // 1 for subpixel rounding\n  if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) {\n    i.reach[y] = 'end';\n  }\n\n  if (diff) {\n    element.dispatchEvent(createEvent(`ps-scroll-${y}`));\n\n    if (diff < 0) {\n      element.dispatchEvent(createEvent(`ps-scroll-${up}`));\n    } else if (diff > 0) {\n      element.dispatchEvent(createEvent(`ps-scroll-${down}`));\n    }\n\n    if (useScrollingClass) {\n      setScrollingClassInstantly(i, y);\n    }\n  }\n\n  if (i.reach[y] && (diff || forceFireReachEvent)) {\n    element.dispatchEvent(createEvent(`ps-${y}-reach-${i.reach[y]}`));\n  }\n}\n","/* eslint-disable */\n\nimport * as CSS from './css';\nimport * as DOM from './dom';\n\nexport function toInt(x) {\n  return parseInt(x, 10) || 0;\n}\n\nexport function isEditable(el) {\n  return (\n    DOM.matches(el, 'input,[contenteditable]') ||\n    DOM.matches(el, 'select,[contenteditable]') ||\n    DOM.matches(el, 'textarea,[contenteditable]') ||\n    DOM.matches(el, 'button,[contenteditable]')\n  );\n}\n\nexport function outerWidth(element) {\n  const styles = CSS.get(element);\n  return (\n    toInt(styles.width) +\n    toInt(styles.paddingLeft) +\n    toInt(styles.paddingRight) +\n    toInt(styles.borderLeftWidth) +\n    toInt(styles.borderRightWidth)\n  );\n}\n\nexport const env = {\n  isWebKit: typeof document !== 'undefined' && 'WebkitAppearance' in document.documentElement.style,\n  supportsTouch:\n    typeof window !== 'undefined' &&\n    ('ontouchstart' in window ||\n      ('maxTouchPoints' in window.navigator && window.navigator.maxTouchPoints > 0) ||\n      (window.DocumentTouch && document instanceof window.DocumentTouch)),\n  supportsIePointer: typeof navigator !== 'undefined' && navigator.msMaxTouchPoints,\n  isChrome: typeof navigator !== 'undefined' && /Chrome/i.test(navigator && navigator.userAgent),\n};\n","import * as CSS from './lib/css';\nimport * as DOM from './lib/dom';\nimport cls from './lib/class-names';\nimport { toInt } from './lib/util';\n\n/* eslint-disable no-lonely-if */\n\nexport default function (i) {\n  const element = i.element;\n  const roundedScrollTop = Math.floor(element.scrollTop);\n  const rect = element.getBoundingClientRect();\n\n  i.containerWidth = Math.floor(rect.width);\n  i.containerHeight = Math.floor(rect.height);\n\n  i.contentWidth = element.scrollWidth;\n  i.contentHeight = element.scrollHeight;\n\n  if (!element.contains(i.scrollbarXRail)) {\n    // clean up and append\n    DOM.queryChildren(element, cls.element.rail('x')).forEach((el) => DOM.remove(el));\n    element.appendChild(i.scrollbarXRail);\n  }\n  if (!element.contains(i.scrollbarYRail)) {\n    // clean up and append\n    DOM.queryChildren(element, cls.element.rail('y')).forEach((el) => DOM.remove(el));\n    element.appendChild(i.scrollbarYRail);\n  }\n\n  if (\n    !i.settings.suppressScrollX &&\n    i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth\n  ) {\n    i.scrollbarXActive = true;\n    i.railXWidth = i.containerWidth - i.railXMarginWidth;\n    i.railXRatio = i.containerWidth / i.railXWidth;\n    i.scrollbarXWidth = getThumbSize(i, toInt((i.railXWidth * i.containerWidth) / i.contentWidth));\n    i.scrollbarXLeft = toInt(\n      ((i.negativeScrollAdjustment + element.scrollLeft) * (i.railXWidth - i.scrollbarXWidth)) /\n        (i.contentWidth - i.containerWidth)\n    );\n  } else {\n    i.scrollbarXActive = false;\n  }\n\n  if (\n    !i.settings.suppressScrollY &&\n    i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight\n  ) {\n    i.scrollbarYActive = true;\n    i.railYHeight = i.containerHeight - i.railYMarginHeight;\n    i.railYRatio = i.containerHeight / i.railYHeight;\n    i.scrollbarYHeight = getThumbSize(\n      i,\n      toInt((i.railYHeight * i.containerHeight) / i.contentHeight)\n    );\n    i.scrollbarYTop = toInt(\n      (roundedScrollTop * (i.railYHeight - i.scrollbarYHeight)) /\n        (i.contentHeight - i.containerHeight)\n    );\n  } else {\n    i.scrollbarYActive = false;\n  }\n\n  if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {\n    i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;\n  }\n  if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {\n    i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;\n  }\n\n  updateCss(element, i);\n\n  if (i.scrollbarXActive) {\n    element.classList.add(cls.state.active('x'));\n  } else {\n    element.classList.remove(cls.state.active('x'));\n    i.scrollbarXWidth = 0;\n    i.scrollbarXLeft = 0;\n    element.scrollLeft = i.isRtl === true ? i.contentWidth : 0;\n  }\n  if (i.scrollbarYActive) {\n    element.classList.add(cls.state.active('y'));\n  } else {\n    element.classList.remove(cls.state.active('y'));\n    i.scrollbarYHeight = 0;\n    i.scrollbarYTop = 0;\n    element.scrollTop = 0;\n  }\n}\n\nfunction getThumbSize(i, thumbSize) {\n  if (i.settings.minScrollbarLength) {\n    thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);\n  }\n  if (i.settings.maxScrollbarLength) {\n    thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);\n  }\n  return thumbSize;\n}\n\nfunction updateCss(element, i) {\n  const xRailOffset = { width: i.railXWidth };\n  const roundedScrollTop = Math.floor(element.scrollTop);\n\n  if (i.isRtl) {\n    xRailOffset.left =\n      i.negativeScrollAdjustment + element.scrollLeft + i.containerWidth - i.contentWidth;\n  } else {\n    xRailOffset.left = element.scrollLeft;\n  }\n  if (i.isScrollbarXUsingBottom) {\n    xRailOffset.bottom = i.scrollbarXBottom - roundedScrollTop;\n  } else {\n    xRailOffset.top = i.scrollbarXTop + roundedScrollTop;\n  }\n  CSS.set(i.scrollbarXRail, xRailOffset);\n\n  const yRailOffset = { top: roundedScrollTop, height: i.railYHeight };\n  if (i.isScrollbarYUsingRight) {\n    if (i.isRtl) {\n      yRailOffset.right =\n        i.contentWidth -\n        (i.negativeScrollAdjustment + element.scrollLeft) -\n        i.scrollbarYRight -\n        i.scrollbarYOuterWidth -\n        9;\n    } else {\n      yRailOffset.right = i.scrollbarYRight - element.scrollLeft;\n    }\n  } else {\n    if (i.isRtl) {\n      yRailOffset.left =\n        i.negativeScrollAdjustment +\n        element.scrollLeft +\n        i.containerWidth * 2 -\n        i.contentWidth -\n        i.scrollbarYLeft -\n        i.scrollbarYOuterWidth;\n    } else {\n      yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;\n    }\n  }\n  CSS.set(i.scrollbarYRail, yRailOffset);\n\n  CSS.set(i.scrollbarX, {\n    left: i.scrollbarXLeft,\n    width: i.scrollbarXWidth - i.railBorderXWidth,\n  });\n  CSS.set(i.scrollbarY, {\n    top: i.scrollbarYTop,\n    height: i.scrollbarYHeight - i.railBorderYWidth,\n  });\n}\n","/* eslint-disable */\n\nimport updateGeometry from '../update-geometry';\n\nexport default function (i) {\n  // const element = i.element;\n\n  i.event.bind(i.scrollbarY, 'mousedown', (e) => e.stopPropagation());\n  i.event.bind(i.scrollbarYRail, 'mousedown', (e) => {\n    const positionTop = e.pageY - window.pageYOffset - i.scrollbarYRail.getBoundingClientRect().top;\n    const direction = positionTop > i.scrollbarYTop ? 1 : -1;\n\n    i.element.scrollTop += direction * i.containerHeight;\n    updateGeometry(i);\n\n    e.stopPropagation();\n  });\n\n  i.event.bind(i.scrollbarX, 'mousedown', (e) => e.stopPropagation());\n  i.event.bind(i.scrollbarXRail, 'mousedown', (e) => {\n    const positionLeft =\n      e.pageX - window.pageXOffset - i.scrollbarXRail.getBoundingClientRect().left;\n    const direction = positionLeft > i.scrollbarXLeft ? 1 : -1;\n\n    i.element.scrollLeft += direction * i.containerWidth;\n    updateGeometry(i);\n\n    e.stopPropagation();\n  });\n}\n","/* eslint-disable */\n\nimport * as CSS from '../lib/css';\nimport * as DOM from '../lib/dom';\nimport cls, { addScrollingClass, removeScrollingClass } from '../lib/class-names';\nimport updateGeometry from '../update-geometry';\nimport { toInt } from '../lib/util';\n\nexport default function (i) {\n  bindMouseScrollHandler(i, [\n    'containerWidth',\n    'contentWidth',\n    'pageX',\n    'railXWidth',\n    'scrollbarX',\n    'scrollbarXWidth',\n    'scrollLeft',\n    'x',\n    'scrollbarXRail',\n  ]);\n  bindMouseScrollHandler(i, [\n    'containerHeight',\n    'contentHeight',\n    'pageY',\n    'railYHeight',\n    'scrollbarY',\n    'scrollbarYHeight',\n    'scrollTop',\n    'y',\n    'scrollbarYRail',\n  ]);\n}\n\nfunction bindMouseScrollHandler(\n  i,\n  [\n    containerHeight,\n    contentHeight,\n    pageY,\n    railYHeight,\n    scrollbarY,\n    scrollbarYHeight,\n    scrollTop,\n    y,\n    scrollbarYRail,\n  ]\n) {\n  const element = i.element;\n\n  let startingScrollTop = null;\n  let startingMousePageY = null;\n  let scrollBy = null;\n\n  function mouseMoveHandler(e) {\n    if (e.touches && e.touches[0]) {\n      e[pageY] = e.touches[0].pageY;\n    }\n    element[scrollTop] = startingScrollTop + scrollBy * (e[pageY] - startingMousePageY);\n    addScrollingClass(i, y);\n    updateGeometry(i);\n\n    e.stopPropagation();\n    e.preventDefault();\n  }\n\n  function mouseUpHandler() {\n    removeScrollingClass(i, y);\n    i[scrollbarYRail].classList.remove(cls.state.clicking);\n    i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n  }\n\n  function bindMoves(e, touchMode) {\n    startingScrollTop = element[scrollTop];\n    if (touchMode && e.touches) {\n      e[pageY] = e.touches[0].pageY;\n    }\n    startingMousePageY = e[pageY];\n    scrollBy = (i[contentHeight] - i[containerHeight]) / (i[railYHeight] - i[scrollbarYHeight]);\n    if (!touchMode) {\n      i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n      i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);\n      e.preventDefault();\n    } else {\n      i.event.bind(i.ownerDocument, 'touchmove', mouseMoveHandler);\n    }\n\n    i[scrollbarYRail].classList.add(cls.state.clicking);\n\n    e.stopPropagation();\n  }\n\n  i.event.bind(i[scrollbarY], 'mousedown', (e) => {\n    bindMoves(e);\n  });\n  i.event.bind(i[scrollbarY], 'touchstart', (e) => {\n    bindMoves(e, true);\n  });\n}\n","/* eslint-disable */\n\nimport * as DOM from '../lib/dom';\nimport updateGeometry from '../update-geometry';\nimport { isEditable } from '../lib/util';\n\nexport default function (i) {\n  const element = i.element;\n\n  const elementHovered = () => DOM.matches(element, ':hover');\n  const scrollbarFocused = () =>\n    DOM.matches(i.scrollbarX, ':focus') || DOM.matches(i.scrollbarY, ':focus');\n\n  function shouldPreventDefault(deltaX, deltaY) {\n    const scrollTop = Math.floor(element.scrollTop);\n    if (deltaX === 0) {\n      if (!i.scrollbarYActive) {\n        return false;\n      }\n      if (\n        (scrollTop === 0 && deltaY > 0) ||\n        (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)\n      ) {\n        return !i.settings.wheelPropagation;\n      }\n    }\n\n    const scrollLeft = element.scrollLeft;\n    if (deltaY === 0) {\n      if (!i.scrollbarXActive) {\n        return false;\n      }\n      if (\n        (scrollLeft === 0 && deltaX < 0) ||\n        (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)\n      ) {\n        return !i.settings.wheelPropagation;\n      }\n    }\n    return true;\n  }\n\n  i.event.bind(i.ownerDocument, 'keydown', (e) => {\n    if ((e.isDefaultPrevented && e.isDefaultPrevented()) || e.defaultPrevented) {\n      return;\n    }\n\n    if (!elementHovered() && !scrollbarFocused()) {\n      return;\n    }\n\n    let activeElement = document.activeElement\n      ? document.activeElement\n      : i.ownerDocument.activeElement;\n    if (activeElement) {\n      if (activeElement.tagName === 'IFRAME') {\n        activeElement = activeElement.contentDocument.activeElement;\n      } else {\n        // go deeper if element is a webcomponent\n        while (activeElement.shadowRoot) {\n          activeElement = activeElement.shadowRoot.activeElement;\n        }\n      }\n      if (isEditable(activeElement)) {\n        return;\n      }\n    }\n\n    let deltaX = 0;\n    let deltaY = 0;\n\n    switch (e.which) {\n      case 37: // left\n        if (e.metaKey) {\n          deltaX = -i.contentWidth;\n        } else if (e.altKey) {\n          deltaX = -i.containerWidth;\n        } else {\n          deltaX = -30;\n        }\n        break;\n      case 38: // up\n        if (e.metaKey) {\n          deltaY = i.contentHeight;\n        } else if (e.altKey) {\n          deltaY = i.containerHeight;\n        } else {\n          deltaY = 30;\n        }\n        break;\n      case 39: // right\n        if (e.metaKey) {\n          deltaX = i.contentWidth;\n        } else if (e.altKey) {\n          deltaX = i.containerWidth;\n        } else {\n          deltaX = 30;\n        }\n        break;\n      case 40: // down\n        if (e.metaKey) {\n          deltaY = -i.contentHeight;\n        } else if (e.altKey) {\n          deltaY = -i.containerHeight;\n        } else {\n          deltaY = -30;\n        }\n        break;\n      case 32: // space bar\n        if (e.shiftKey) {\n          deltaY = i.containerHeight;\n        } else {\n          deltaY = -i.containerHeight;\n        }\n        break;\n      case 33: // page up\n        deltaY = i.containerHeight;\n        break;\n      case 34: // page down\n        deltaY = -i.containerHeight;\n        break;\n      case 36: // home\n        deltaY = i.contentHeight;\n        break;\n      case 35: // end\n        deltaY = -i.contentHeight;\n        break;\n      default:\n        return;\n    }\n\n    if (i.settings.suppressScrollX && deltaX !== 0) {\n      return;\n    }\n    if (i.settings.suppressScrollY && deltaY !== 0) {\n      return;\n    }\n\n    element.scrollTop -= deltaY;\n    element.scrollLeft += deltaX;\n    updateGeometry(i);\n\n    if (shouldPreventDefault(deltaX, deltaY)) {\n      e.preventDefault();\n    }\n  });\n}\n","/* eslint-disable */\n\nimport * as CSS from '../lib/css';\nimport cls from '../lib/class-names';\nimport updateGeometry from '../update-geometry';\nimport { env } from '../lib/util';\n\nexport default function (i) {\n  const element = i.element;\n\n  let shouldPrevent = false;\n\n  function shouldPreventDefault(deltaX, deltaY) {\n    const roundedScrollTop = Math.floor(element.scrollTop);\n    const isTop = element.scrollTop === 0;\n    const isBottom = roundedScrollTop + element.offsetHeight === element.scrollHeight;\n    const isLeft = element.scrollLeft === 0;\n    const isRight = element.scrollLeft + element.offsetWidth === element.scrollWidth;\n\n    let hitsBound;\n\n    // pick axis with primary direction\n    if (Math.abs(deltaY) > Math.abs(deltaX)) {\n      hitsBound = isTop || isBottom;\n    } else {\n      hitsBound = isLeft || isRight;\n    }\n\n    return hitsBound ? !i.settings.wheelPropagation : true;\n  }\n\n  function getDeltaFromEvent(e) {\n    let deltaX = e.deltaX;\n    let deltaY = -1 * e.deltaY;\n\n    if (typeof deltaX === 'undefined' || typeof deltaY === 'undefined') {\n      // OS X Safari\n      deltaX = (-1 * e.wheelDeltaX) / 6;\n      deltaY = e.wheelDeltaY / 6;\n    }\n\n    if (e.deltaMode && e.deltaMode === 1) {\n      // Firefox in deltaMode 1: Line scrolling\n      deltaX *= 10;\n      deltaY *= 10;\n    }\n\n    if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) {\n      // IE in some mouse drivers\n      deltaX = 0;\n      deltaY = e.wheelDelta;\n    }\n\n    if (e.shiftKey) {\n      // reverse axis with shift key\n      return [-deltaY, -deltaX];\n    }\n    return [deltaX, deltaY];\n  }\n\n  function shouldBeConsumedByChild(target, deltaX, deltaY) {\n    // FIXME: this is a workaround for <select> issue in FF and IE #571\n    if (!env.isWebKit && element.querySelector('select:focus')) {\n      return true;\n    }\n\n    if (!element.contains(target)) {\n      return false;\n    }\n\n    let cursor = target;\n\n    while (cursor && cursor !== element) {\n      if (cursor.classList.contains(cls.element.consuming)) {\n        return true;\n      }\n\n      const style = CSS.get(cursor);\n\n      // if deltaY && vertical scrollable\n      if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n        const maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n        if (maxScrollTop > 0) {\n          if (\n            (cursor.scrollTop > 0 && deltaY < 0) ||\n            (cursor.scrollTop < maxScrollTop && deltaY > 0)\n          ) {\n            return true;\n          }\n        }\n      }\n      // if deltaX && horizontal scrollable\n      if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n        const maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n        if (maxScrollLeft > 0) {\n          if (\n            (cursor.scrollLeft > 0 && deltaX < 0) ||\n            (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n          ) {\n            return true;\n          }\n        }\n      }\n\n      cursor = cursor.parentNode;\n    }\n\n    return false;\n  }\n\n  function mousewheelHandler(e) {\n    const [deltaX, deltaY] = getDeltaFromEvent(e);\n\n    if (shouldBeConsumedByChild(e.target, deltaX, deltaY)) {\n      return;\n    }\n\n    let shouldPrevent = false;\n    if (!i.settings.useBothWheelAxes) {\n      // deltaX will only be used for horizontal scrolling and deltaY will\n      // only be used for vertical scrolling - this is the default\n      element.scrollTop -= deltaY * i.settings.wheelSpeed;\n      element.scrollLeft += deltaX * i.settings.wheelSpeed;\n    } else if (i.scrollbarYActive && !i.scrollbarXActive) {\n      // only vertical scrollbar is active and useBothWheelAxes option is\n      // active, so let's scroll vertical bar using both mouse wheel axes\n      if (deltaY) {\n        element.scrollTop -= deltaY * i.settings.wheelSpeed;\n      } else {\n        element.scrollTop += deltaX * i.settings.wheelSpeed;\n      }\n      shouldPrevent = true;\n    } else if (i.scrollbarXActive && !i.scrollbarYActive) {\n      // useBothWheelAxes and only horizontal bar is active, so use both\n      // wheel axes for horizontal bar\n      if (deltaX) {\n        element.scrollLeft += deltaX * i.settings.wheelSpeed;\n      } else {\n        element.scrollLeft -= deltaY * i.settings.wheelSpeed;\n      }\n      shouldPrevent = true;\n    }\n\n    updateGeometry(i);\n\n    shouldPrevent = shouldPrevent || shouldPreventDefault(deltaX, deltaY);\n    if (shouldPrevent && !e.ctrlKey) {\n      e.stopPropagation();\n      e.preventDefault();\n    }\n  }\n\n  if (typeof window.onwheel !== 'undefined') {\n    i.event.bind(element, 'wheel', mousewheelHandler);\n  } else if (typeof window.onmousewheel !== 'undefined') {\n    i.event.bind(element, 'mousewheel', mousewheelHandler);\n  }\n}\n","/* eslint-disable */\nimport updateGeometry from '../update-geometry';\nimport cls from '../lib/class-names';\nimport * as CSS from '../lib/css';\nimport { env } from '../lib/util';\n\nexport default function (i) {\n  if (!env.supportsTouch && !env.supportsIePointer) {\n    return;\n  }\n\n  const element = i.element;\n\n  function shouldPrevent(deltaX, deltaY) {\n    const scrollTop = Math.floor(element.scrollTop);\n    const scrollLeft = element.scrollLeft;\n    const magnitudeX = Math.abs(deltaX);\n    const magnitudeY = Math.abs(deltaY);\n\n    if (magnitudeY > magnitudeX) {\n      // user is perhaps trying to swipe up/down the page\n\n      if (\n        (deltaY < 0 && scrollTop === i.contentHeight - i.containerHeight) ||\n        (deltaY > 0 && scrollTop === 0)\n      ) {\n        // set prevent for mobile Chrome refresh\n        return window.scrollY === 0 && deltaY > 0 && env.isChrome;\n      }\n    } else if (magnitudeX > magnitudeY) {\n      // user is perhaps trying to swipe left/right across the page\n\n      if (\n        (deltaX < 0 && scrollLeft === i.contentWidth - i.containerWidth) ||\n        (deltaX > 0 && scrollLeft === 0)\n      ) {\n        return true;\n      }\n    }\n\n    return true;\n  }\n\n  function applyTouchMove(differenceX, differenceY) {\n    element.scrollTop -= differenceY;\n    element.scrollLeft -= differenceX;\n\n    updateGeometry(i);\n  }\n\n  let startOffset = {};\n  let startTime = 0;\n  let speed = {};\n  let easingLoop = null;\n\n  function getTouch(e) {\n    if (e.targetTouches) {\n      return e.targetTouches[0];\n    } else {\n      // Maybe IE pointer\n      return e;\n    }\n  }\n\n  function shouldHandle(e) {\n    if (e.pointerType && e.pointerType === 'pen' && e.buttons === 0) {\n      return false;\n    }\n    if (e.targetTouches && e.targetTouches.length === 1) {\n      return true;\n    }\n    if (e.pointerType && e.pointerType !== 'mouse' && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) {\n      return true;\n    }\n    return false;\n  }\n\n  function touchStart(e) {\n    if (!shouldHandle(e)) {\n      return;\n    }\n\n    const touch = getTouch(e);\n\n    startOffset.pageX = touch.pageX;\n    startOffset.pageY = touch.pageY;\n\n    startTime = new Date().getTime();\n\n    if (easingLoop !== null) {\n      clearInterval(easingLoop);\n    }\n  }\n\n  function shouldBeConsumedByChild(target, deltaX, deltaY) {\n    if (!element.contains(target)) {\n      return false;\n    }\n\n    let cursor = target;\n\n    while (cursor && cursor !== element) {\n      if (cursor.classList.contains(cls.element.consuming)) {\n        return true;\n      }\n\n      const style = CSS.get(cursor);\n\n      // if deltaY && vertical scrollable\n      if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n        const maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n        if (maxScrollTop > 0) {\n          if (\n            (cursor.scrollTop > 0 && deltaY < 0) ||\n            (cursor.scrollTop < maxScrollTop && deltaY > 0)\n          ) {\n            return true;\n          }\n        }\n      }\n      // if deltaX && horizontal scrollable\n      if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n        const maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n        if (maxScrollLeft > 0) {\n          if (\n            (cursor.scrollLeft > 0 && deltaX < 0) ||\n            (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n          ) {\n            return true;\n          }\n        }\n      }\n\n      cursor = cursor.parentNode;\n    }\n\n    return false;\n  }\n\n  function touchMove(e) {\n    if (shouldHandle(e)) {\n      const touch = getTouch(e);\n\n      const currentOffset = { pageX: touch.pageX, pageY: touch.pageY };\n\n      const differenceX = currentOffset.pageX - startOffset.pageX;\n      const differenceY = currentOffset.pageY - startOffset.pageY;\n\n      if (shouldBeConsumedByChild(e.target, differenceX, differenceY)) {\n        return;\n      }\n\n      applyTouchMove(differenceX, differenceY);\n      startOffset = currentOffset;\n\n      const currentTime = new Date().getTime();\n\n      const timeGap = currentTime - startTime;\n      if (timeGap > 0) {\n        speed.x = differenceX / timeGap;\n        speed.y = differenceY / timeGap;\n        startTime = currentTime;\n      }\n\n      if (shouldPrevent(differenceX, differenceY)) {\n        e.preventDefault();\n      }\n    }\n  }\n  function touchEnd() {\n    if (i.settings.swipeEasing) {\n      clearInterval(easingLoop);\n      easingLoop = setInterval(function () {\n        if (i.isInitialized) {\n          clearInterval(easingLoop);\n          return;\n        }\n\n        if (!speed.x && !speed.y) {\n          clearInterval(easingLoop);\n          return;\n        }\n\n        if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {\n          clearInterval(easingLoop);\n          return;\n        }\n\n        applyTouchMove(speed.x * 30, speed.y * 30);\n\n        speed.x *= 0.8;\n        speed.y *= 0.8;\n      }, 10);\n    }\n  }\n\n  if (env.supportsTouch) {\n    i.event.bind(element, 'touchstart', touchStart);\n    i.event.bind(element, 'touchmove', touchMove);\n    i.event.bind(element, 'touchend', touchEnd);\n  } else if (env.supportsIePointer) {\n    if (window.PointerEvent) {\n      i.event.bind(element, 'pointerdown', touchStart);\n      i.event.bind(element, 'pointermove', touchMove);\n      i.event.bind(element, 'pointerup', touchEnd);\n    } else if (window.MSPointerEvent) {\n      i.event.bind(element, 'MSPointerDown', touchStart);\n      i.event.bind(element, 'MSPointerMove', touchMove);\n      i.event.bind(element, 'MSPointerUp', touchEnd);\n    }\n  }\n}\n","/* eslint-disable */\n\nimport * as CSS from './lib/css';\nimport * as DOM from './lib/dom';\nimport cls from './lib/class-names';\nimport EventManager from './lib/event-manager';\nimport processScrollDiff from './process-scroll-diff';\nimport updateGeometry from './update-geometry';\nimport { toInt, outerWidth } from './lib/util';\n\nimport clickRail from './handlers/click-rail';\nimport dragThumb from './handlers/drag-thumb';\nimport keyboard from './handlers/keyboard';\nimport wheel from './handlers/mouse-wheel';\nimport touch from './handlers/touch';\n\nconst defaultSettings = () => ({\n  handlers: ['click-rail', 'drag-thumb', 'keyboard', 'wheel', 'touch'],\n  maxScrollbarLength: null,\n  minScrollbarLength: null,\n  scrollingThreshold: 1000,\n  scrollXMarginOffset: 0,\n  scrollYMarginOffset: 0,\n  suppressScrollX: false,\n  suppressScrollY: false,\n  swipeEasing: true,\n  useBothWheelAxes: false,\n  wheelPropagation: true,\n  wheelSpeed: 1,\n});\n\nconst handlers = {\n  'click-rail': clickRail,\n  'drag-thumb': dragThumb,\n  keyboard,\n  wheel,\n  touch,\n};\n\nexport default class PerfectScrollbar {\n  constructor(element, userSettings = {}) {\n    if (typeof element === 'string') {\n      element = document.querySelector(element);\n    }\n\n    if (!element || !element.nodeName) {\n      throw new Error('no element is specified to initialize PerfectScrollbar');\n    }\n\n    this.element = element;\n\n    element.classList.add(cls.main);\n\n    this.settings = defaultSettings();\n    for (const key in userSettings) {\n      this.settings[key] = userSettings[key];\n    }\n\n    this.containerWidth = null;\n    this.containerHeight = null;\n    this.contentWidth = null;\n    this.contentHeight = null;\n\n    const focus = () => element.classList.add(cls.state.focus);\n    const blur = () => element.classList.remove(cls.state.focus);\n\n    this.isRtl = CSS.get(element).direction === 'rtl';\n    if (this.isRtl === true) {\n      element.classList.add(cls.rtl);\n    }\n    this.isNegativeScroll = (() => {\n      const originalScrollLeft = element.scrollLeft;\n      let result = null;\n      element.scrollLeft = -1;\n      result = element.scrollLeft < 0;\n      element.scrollLeft = originalScrollLeft;\n      return result;\n    })();\n    this.negativeScrollAdjustment = this.isNegativeScroll\n      ? element.scrollWidth - element.clientWidth\n      : 0;\n    this.event = new EventManager();\n    this.ownerDocument = element.ownerDocument || document;\n\n    this.scrollbarXRail = DOM.div(cls.element.rail('x'));\n    element.appendChild(this.scrollbarXRail);\n    this.scrollbarX = DOM.div(cls.element.thumb('x'));\n    this.scrollbarXRail.appendChild(this.scrollbarX);\n    this.scrollbarX.setAttribute('tabindex', 0);\n    this.event.bind(this.scrollbarX, 'focus', focus);\n    this.event.bind(this.scrollbarX, 'blur', blur);\n    this.scrollbarXActive = null;\n    this.scrollbarXWidth = null;\n    this.scrollbarXLeft = null;\n    const railXStyle = CSS.get(this.scrollbarXRail);\n    this.scrollbarXBottom = parseInt(railXStyle.bottom, 10);\n    if (isNaN(this.scrollbarXBottom)) {\n      this.isScrollbarXUsingBottom = false;\n      this.scrollbarXTop = toInt(railXStyle.top);\n    } else {\n      this.isScrollbarXUsingBottom = true;\n    }\n    this.railBorderXWidth = toInt(railXStyle.borderLeftWidth) + toInt(railXStyle.borderRightWidth);\n    // Set rail to display:block to calculate margins\n    CSS.set(this.scrollbarXRail, { display: 'block' });\n    this.railXMarginWidth = toInt(railXStyle.marginLeft) + toInt(railXStyle.marginRight);\n    CSS.set(this.scrollbarXRail, { display: '' });\n    this.railXWidth = null;\n    this.railXRatio = null;\n\n    this.scrollbarYRail = DOM.div(cls.element.rail('y'));\n    element.appendChild(this.scrollbarYRail);\n    this.scrollbarY = DOM.div(cls.element.thumb('y'));\n    this.scrollbarYRail.appendChild(this.scrollbarY);\n    this.scrollbarY.setAttribute('tabindex', 0);\n    this.event.bind(this.scrollbarY, 'focus', focus);\n    this.event.bind(this.scrollbarY, 'blur', blur);\n    this.scrollbarYActive = null;\n    this.scrollbarYHeight = null;\n    this.scrollbarYTop = null;\n    const railYStyle = CSS.get(this.scrollbarYRail);\n    this.scrollbarYRight = parseInt(railYStyle.right, 10);\n    if (isNaN(this.scrollbarYRight)) {\n      this.isScrollbarYUsingRight = false;\n      this.scrollbarYLeft = toInt(railYStyle.left);\n    } else {\n      this.isScrollbarYUsingRight = true;\n    }\n    this.scrollbarYOuterWidth = this.isRtl ? outerWidth(this.scrollbarY) : null;\n    this.railBorderYWidth = toInt(railYStyle.borderTopWidth) + toInt(railYStyle.borderBottomWidth);\n    CSS.set(this.scrollbarYRail, { display: 'block' });\n    this.railYMarginHeight = toInt(railYStyle.marginTop) + toInt(railYStyle.marginBottom);\n    CSS.set(this.scrollbarYRail, { display: '' });\n    this.railYHeight = null;\n    this.railYRatio = null;\n\n    this.reach = {\n      x:\n        element.scrollLeft <= 0\n          ? 'start'\n          : element.scrollLeft >= this.contentWidth - this.containerWidth\n          ? 'end'\n          : null,\n      y:\n        element.scrollTop <= 0\n          ? 'start'\n          : element.scrollTop >= this.contentHeight - this.containerHeight\n          ? 'end'\n          : null,\n    };\n\n    this.isAlive = true;\n\n    this.settings.handlers.forEach((handlerName) => handlers[handlerName](this));\n\n    this.lastScrollTop = Math.floor(element.scrollTop); // for onScroll only\n    this.lastScrollLeft = element.scrollLeft; // for onScroll only\n    this.event.bind(this.element, 'scroll', (e) => this.onScroll(e));\n    updateGeometry(this);\n  }\n\n  update() {\n    if (!this.isAlive) {\n      return;\n    }\n\n    // Recalcuate negative scrollLeft adjustment\n    this.negativeScrollAdjustment = this.isNegativeScroll\n      ? this.element.scrollWidth - this.element.clientWidth\n      : 0;\n\n    // Recalculate rail margins\n    CSS.set(this.scrollbarXRail, { display: 'block' });\n    CSS.set(this.scrollbarYRail, { display: 'block' });\n    this.railXMarginWidth =\n      toInt(CSS.get(this.scrollbarXRail).marginLeft) +\n      toInt(CSS.get(this.scrollbarXRail).marginRight);\n    this.railYMarginHeight =\n      toInt(CSS.get(this.scrollbarYRail).marginTop) +\n      toInt(CSS.get(this.scrollbarYRail).marginBottom);\n\n    // Hide scrollbars not to affect scrollWidth and scrollHeight\n    CSS.set(this.scrollbarXRail, { display: 'none' });\n    CSS.set(this.scrollbarYRail, { display: 'none' });\n\n    updateGeometry(this);\n\n    processScrollDiff(this, 'top', 0, false, true);\n    processScrollDiff(this, 'left', 0, false, true);\n\n    CSS.set(this.scrollbarXRail, { display: '' });\n    CSS.set(this.scrollbarYRail, { display: '' });\n  }\n\n  onScroll(e) {\n    if (!this.isAlive) {\n      return;\n    }\n\n    updateGeometry(this);\n    processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop);\n    processScrollDiff(this, 'left', this.element.scrollLeft - this.lastScrollLeft);\n\n    this.lastScrollTop = Math.floor(this.element.scrollTop);\n    this.lastScrollLeft = this.element.scrollLeft;\n  }\n\n  destroy() {\n    if (!this.isAlive) {\n      return;\n    }\n\n    this.event.unbindAll();\n    DOM.remove(this.scrollbarX);\n    DOM.remove(this.scrollbarY);\n    DOM.remove(this.scrollbarXRail);\n    DOM.remove(this.scrollbarYRail);\n    this.removePsClasses();\n\n    // unset elements\n    this.element = null;\n    this.scrollbarX = null;\n    this.scrollbarY = null;\n    this.scrollbarXRail = null;\n    this.scrollbarYRail = null;\n\n    this.isAlive = false;\n  }\n\n  removePsClasses() {\n    this.element.className = this.element.className\n      .split(' ')\n      .filter((name) => !name.match(/^ps([-_].+|)$/))\n      .join(' ');\n  }\n}\n","import SelectorEngine from '../dom/selector-engine';\nimport { isVisible } from './index';\n\nclass FocusTrap {\n  constructor(element, options = {}, toggler) {\n    this._element = element;\n    this._toggler = toggler;\n    this._event = options.event || 'blur';\n    this._condition = options.condition || (() => true);\n    this._selector =\n      options.selector || 'button, a, input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n    this._onlyVisible = options.onlyVisible || false;\n    this._focusableElements = [];\n    this._firstElement = null;\n    this._lastElement = null;\n\n    this.handler = (e) => {\n      if (this._condition(e) && e.target === this._lastElement) {\n        e.preventDefault();\n        this._firstElement.focus();\n      }\n    };\n  }\n\n  trap() {\n    this._setElements();\n    this._init();\n    this._setFocusTrap();\n  }\n\n  disable() {\n    this._focusableElements.forEach((element) => {\n      element.removeEventListener(this._event, this.handler);\n    });\n\n    if (this._toggler) {\n      this._toggler.focus();\n    }\n  }\n\n  update() {\n    this._setElements();\n    this._setFocusTrap();\n  }\n\n  _init() {\n    const handler = (e) => {\n      if (!this._firstElement || e.key !== 'Tab' || this._focusableElements.includes(e.target)) {\n        return;\n      }\n\n      e.preventDefault();\n      this._firstElement.focus();\n\n      window.removeEventListener('keydown', handler);\n    };\n\n    window.addEventListener('keydown', handler);\n  }\n\n  _filterVisible(elements) {\n    return elements.filter((el) => {\n      if (!isVisible(el)) return false;\n\n      const ancestors = SelectorEngine.parents(el, '*');\n\n      for (let i = 0; i < ancestors.length; i++) {\n        const style = window.getComputedStyle(ancestors[i]);\n        if (style && (style.display === 'none' || style.visibility === 'hidden')) return false;\n      }\n      return true;\n    });\n  }\n\n  _setElements() {\n    const allElements = SelectorEngine.find(this._selector, this._element);\n\n    // filter out elements that are not focusable\n    this._focusableElements = allElements.filter((el) => {\n      const hasDisabledAttribute =\n        el.getAttribute('data-mdb-disabled') === 'true' || el.hasAttribute('disabled');\n      const isDisabled = el.disabled || hasDisabledAttribute;\n\n      if (!isDisabled) {\n        return el;\n      }\n      return null;\n    });\n\n    if (this._onlyVisible) {\n      this._focusableElements = this._filterVisible(this._focusableElements);\n    }\n\n    this._firstElement = this._focusableElements[0];\n    this._lastElement = this._focusableElements[this._focusableElements.length - 1];\n  }\n\n  _setFocusTrap() {\n    this._focusableElements.forEach((element, i) => {\n      if (i === this._focusableElements.length - 1) {\n        element.addEventListener(this._event, this.handler);\n      } else {\n        element.removeEventListener(this._event, this.handler);\n      }\n    });\n  }\n}\n\nexport default FocusTrap;\n","export const LEFT_ARROW = 37;\nexport const UP_ARROW = 38;\nexport const RIGHT_ARROW = 39;\nexport const DOWN_ARROW = 40;\nexport const HOME = 36;\nexport const END = 35;\nexport const PAGE_UP = 33;\nexport const PAGE_DOWN = 34;\nexport const ENTER = 13;\nexport const SPACE = 32;\nexport const ESCAPE = 27;\nexport const TAB = 9;\nexport const BACKSPACE = 8;\nexport const DELETE = 46;\nexport const A = 65;\nexport const B = 66;\nexport const C = 67;\nexport const D = 68;\nexport const E = 69;\nexport const F = 70;\nexport const G = 71;\nexport const H = 72;\nexport const I = 73;\nexport const J = 74;\nexport const K = 75;\nexport const L = 76;\nexport const M = 77;\nexport const N = 78;\nexport const O = 79;\nexport const P = 80;\nexport const Q = 81;\nexport const R = 82;\nexport const S = 83;\nexport const T = 84;\nexport const U = 85;\nexport const V = 86;\nexport const W = 87;\nexport const X = 88;\nexport const Y = 89;\nexport const Z = 90;\n","import EventHandler from '../../dom/event-handler';\n\nconst DEFAULT_OPTIONS = {\n  threshold: 10,\n  direction: 'all',\n};\n\nclass Swipe {\n  constructor(element, options) {\n    this._element = element;\n    this._startPosition = null;\n    this._options = {\n      ...DEFAULT_OPTIONS,\n      ...options,\n    };\n  }\n\n  handleTouchStart(e) {\n    this._startPosition = this._getCoordinates(e);\n  }\n\n  handleTouchMove(e) {\n    if (!this._startPosition) return;\n\n    const position = this._getCoordinates(e);\n    const displacement = {\n      x: position.x - this._startPosition.x,\n      y: position.y - this._startPosition.y,\n    };\n\n    const swipe = this._getDirection(displacement);\n\n    if (this._options.direction === 'all') {\n      if (swipe.y.value < this._options.threshold && swipe.x.value < this._options.threshold) {\n        return;\n      }\n      const direction = swipe.y.value > swipe.x.value ? swipe.y.direction : swipe.x.direction;\n      EventHandler.trigger(this._element, `swipe${direction}`);\n      EventHandler.trigger(this._element, 'swipe', { direction });\n      this._startPosition = null;\n      return;\n    }\n\n    const axis = this._options.direction === 'left' || this._options === 'right' ? 'x' : 'y';\n\n    if (\n      swipe[axis].direction === this._options.direction &&\n      swipe[axis].value > this._options.threshold\n    ) {\n      EventHandler.trigger(this._element, `swipe${swipe[axis].direction}`);\n      this._startPosition = null;\n    }\n  }\n\n  handleTouchEnd() {\n    this._startPosition = null;\n  }\n\n  _getCoordinates(e) {\n    const [touch] = e.touches;\n    return {\n      x: touch.clientX,\n      y: touch.clientY,\n    };\n  }\n\n  _getDirection(displacement) {\n    return {\n      x: {\n        direction: displacement.x < 0 ? 'left' : 'right',\n        value: Math.abs(displacement.x),\n      },\n      y: {\n        direction: displacement.y < 0 ? 'up' : 'down',\n        value: Math.abs(displacement.y),\n      },\n    };\n  }\n}\n\nexport default Swipe;\n","import Swipe from './swipe';\n\nclass Touch {\n  constructor(element, event = 'swipe', options = {}) {\n    this._element = element;\n    this._event = event;\n\n    // events\n\n    this.swipe = new Swipe(element, options);\n\n    // handlers\n\n    this._touchStartHandler = this._handleTouchStart.bind(this);\n    this._touchMoveHandler = this._handleTouchMove.bind(this);\n    this._touchEndHandler = this._handleTouchEnd.bind(this);\n  }\n\n  dispose() {\n    this._element.removeEventListener('touchstart', this._touchStartHandler);\n    this._element.removeEventListener('touchmove', this._touchMoveHandler);\n    window.removeEventListener('touchend', this._touchEndHandler);\n  }\n\n  init() {\n    // istanbul ignore next\n    this._element.addEventListener('touchstart', (e) => this._handleTouchStart(e));\n    // istanbul ignore next\n    this._element.addEventListener('touchmove', (e) => this._handleTouchMove(e));\n    // istanbul ignore next\n    window.addEventListener('touchend', (e) => this._handleTouchEnd(e));\n  }\n\n  _handleTouchStart(e) {\n    this[this._event].handleTouchStart(e);\n  }\n\n  _handleTouchMove(e) {\n    this[this._event].handleTouchMove(e);\n  }\n\n  _handleTouchEnd(e) {\n    this[this._event].handleTouchEnd(e);\n  }\n}\n\nexport default Touch;\n","import PerfectScrollbar from '../mdb/perfect-scrollbar';\nimport { array, element, isVisible, typeCheckConfig, isRTL } from '../mdb/util/index';\nimport FocusTrap from '../mdb/util/focusTrap';\nimport { ENTER, TAB, ESCAPE } from '../mdb/util/keycodes';\nimport Touch from '../mdb/util/touch';\nimport Collapse from '../bootstrap/mdb-prefix/collapse';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport Ripple from '../free/ripple';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'sidenav';\nconst DATA_KEY = 'mdb.sidenav';\nconst ARROW_CLASS = 'rotate-icon';\nconst BACKDROP_CLASS = 'sidenav-backdrop';\nconst SELECTOR_TOGGLE = '[data-mdb-toggle=\"sidenav\"]';\nconst SELECTOR_TOGGLE_COLLAPSE = '[data-mdb-collapse-init]';\nconst SELECTOR_SHOW_SLIM = '[data-mdb-slim=\"true\"]';\nconst SELECTOR_HIDE_SLIM = '[data-mdb-slim=\"false\"]';\nconst SELECTOR_NAVIGATION = '.sidenav-menu';\nconst SELECTOR_COLLAPSE = '.sidenav-collapse';\nconst SELECTOR_LINK = '.sidenav-link';\n\nconst TRANSLATION_LEFT = isRTL ? 100 : -100;\nconst TRANSLATION_RIGHT = isRTL ? -100 : 100;\n\nlet instanceCount = 0;\n\nconst OPTIONS_TYPE = {\n  accordion: '(boolean)',\n  backdrop: '(boolean)',\n  backdropClass: '(null|string)',\n  closeOnEsc: '(boolean)',\n  color: '(string)',\n  content: '(null|string)',\n  expandable: '(boolean)',\n  expandOnHover: '(boolean)',\n  focusTrap: '(boolean)',\n  hidden: '(boolean)',\n  mode: '(string)',\n  scrollContainer: '(null|string)',\n  slim: '(boolean)',\n  slimCollapsed: '(boolean)',\n  slimWidth: '(number)',\n  position: '(string)',\n  right: '(boolean)',\n  transitionDuration: '(number)',\n  width: '(number)',\n};\n\nconst DEFAULT_OPTIONS = {\n  accordion: false,\n  backdrop: true,\n  backdropClass: null,\n  closeOnEsc: true,\n  color: 'primary',\n  content: null,\n  expandable: true,\n  expandOnHover: false,\n  focusTrap: true,\n  hidden: true,\n  mode: 'over',\n  scrollContainer: null,\n  slim: false,\n  slimCollapsed: false,\n  slimWidth: 77,\n  position: 'fixed',\n  right: false,\n  transitionDuration: 300,\n  width: 240,\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Sidenav extends BaseComponent {\n  constructor(node, options = {}) {\n    super(node);\n\n    this._options = options;\n\n    instanceCount++;\n    this._ID = instanceCount;\n\n    this._backdrop = null;\n    this._content = null;\n    this._initialContentStyle = null;\n    this._slimCollapsed = false;\n\n    this._activeNode = null;\n\n    this._tempSlim = false;\n\n    this._focusTrap = null;\n    this._perfectScrollbar = null;\n    this._touch = null;\n\n    this.escHandler = (e) => {\n      if (e.keyCode === ESCAPE && this.toggler && isVisible(this.toggler)) {\n        this._update(false);\n\n        EventHandler.off(window, 'keydown', this.escHandler);\n      }\n    };\n\n    this.hashHandler = () => {\n      this._setActiveElements();\n    };\n\n    if (node) {\n      this._setup();\n    }\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  get container() {\n    if (this.options.position === 'fixed') {\n      return SelectorEngine.findOne('body');\n    }\n\n    const findContainer = (el) => {\n      if (!el.parentNode || el.parentNode === document) {\n        return el;\n      }\n      const isRelative =\n        el.parentNode.style.position === 'relative' ||\n        el.parentNode.classList.contains('position-relative');\n      if (isRelative) {\n        return el.parentNode;\n      }\n      return findContainer(el.parentNode);\n    };\n\n    return findContainer(this._element);\n  }\n\n  get isVisible() {\n    let containerStart = 0;\n    let containerEnd = window.innerWidth;\n\n    if (this.options.position !== 'fixed') {\n      const boundry = this.container.getBoundingClientRect();\n      containerStart = boundry.x;\n      containerEnd = boundry.x + boundry.width;\n    }\n\n    const { x } = this._element.getBoundingClientRect();\n\n    if ((this.options.right && !isRTL) || (!this.options.right && isRTL)) {\n      let scrollBarWidth = 0;\n      // check if there is scrollbar and account for it width if there is one\n      if (this.container.scrollHeight > this.container.clientHeight) {\n        scrollBarWidth = this.container.offsetWidth - this.container.clientWidth;\n      }\n\n      if (this.container.tagName === 'BODY') {\n        const documentWidth = document.documentElement.clientWidth;\n        scrollBarWidth = Math.abs(window.innerWidth - documentWidth);\n      }\n\n      return Math.abs(x + scrollBarWidth - containerEnd) > 10;\n    }\n    return Math.abs(x - containerStart) < 10;\n  }\n\n  get links() {\n    return SelectorEngine.find(SELECTOR_LINK, this._element);\n  }\n\n  get navigation() {\n    return SelectorEngine.find(SELECTOR_NAVIGATION, this._element);\n  }\n\n  get options() {\n    const config = {\n      ...DEFAULT_OPTIONS,\n      ...Manipulator.getDataAttributes(this._element),\n      ...this._options,\n    };\n\n    typeCheckConfig(NAME, config, OPTIONS_TYPE);\n\n    return config;\n  }\n\n  get sidenavStyle() {\n    return {\n      width: `${this.width}px`,\n      height: this.options.position === 'fixed' ? '100vh' : '100%',\n      position: this.options.position,\n      transitionDuration: this.transitionDuration,\n      transitionProperty: 'transform, width, padding, margin',\n      transitionTimingFunction: 'linear',\n    };\n  }\n\n  get toggler() {\n    const toggleElement = SelectorEngine.find(SELECTOR_TOGGLE).find((toggler) => {\n      const target = Manipulator.getDataAttribute(toggler, 'target');\n      return SelectorEngine.findOne(target) === this._element;\n    });\n    return toggleElement;\n  }\n\n  get transitionDuration() {\n    return `${this.options.transitionDuration / 1000}s`;\n  }\n\n  get translation() {\n    return this.options.right ? TRANSLATION_RIGHT : TRANSLATION_LEFT;\n  }\n\n  get width() {\n    return this._slimCollapsed ? this.options.slimWidth : this.options.width;\n  }\n\n  // Public\n\n  changeMode(mode) {\n    this._setMode(mode);\n  }\n\n  dispose() {\n    if (this._backdrop) {\n      this._removeBackdrop();\n    }\n\n    EventHandler.off(window, 'keydown', this.escHandler);\n\n    EventHandler.off(window, 'hashchange', this.hashHandler);\n\n    this._touch.dispose();\n\n    Data.removeData(this._element, DATA_KEY);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  hide() {\n    this._setVisibility(false);\n    this._update(false);\n  }\n\n  show() {\n    this._setVisibility(true);\n    this._update(true);\n  }\n\n  toggle() {\n    this._setVisibility(!this.isVisible);\n    this._update(!this.isVisible);\n  }\n\n  toggleSlim() {\n    this._setSlim(!this._slimCollapsed);\n  }\n\n  update(options) {\n    this._options = options;\n\n    this._setup();\n  }\n\n  // Private\n\n  _appendArrow(node) {\n    const arrow = element('i');\n\n    ['fas', 'fa-angle-down', ARROW_CLASS].forEach((className) => {\n      Manipulator.addClass(arrow, className);\n    });\n\n    if (SelectorEngine.find(`.${ARROW_CLASS}`, node).length === 0) {\n      node.appendChild(arrow);\n    }\n  }\n\n  _collapseItems() {\n    this.navigation.forEach((menu) => {\n      const collapseElements = SelectorEngine.find(SELECTOR_COLLAPSE, menu);\n      collapseElements.forEach((el) => {\n        Collapse.getInstance(el).hide();\n      });\n    });\n  }\n\n  _setupBackdrop() {\n    const classes = [];\n    if (this.options.backdropClass) {\n      classes.push(this.options.backdropClass);\n    }\n    const style = {\n      transition: `opacity ${this.transitionDuration} ease-out`,\n      position: this.options.position,\n      width: this.options.position === 'fixed' ? '100vw' : '100%',\n      height: this.options.position === 'fixed' ? '100vh' : '100%',\n    };\n\n    if (!this._backdrop) {\n      const backdrop = element('div');\n\n      classes.push(BACKDROP_CLASS);\n      style.opacity = 0;\n\n      EventHandler.on(backdrop, 'click', () => {\n        this._setVisibility(false);\n        this._update(false);\n      });\n\n      this._backdrop = backdrop;\n    }\n\n    this._backdrop.classList.add(...classes);\n\n    Manipulator.style(this._backdrop, style);\n  }\n\n  _getOffsetValue(show, { index, property, offsets }) {\n    const initialValue = this._getPxValue(\n      this._initialContentStyle[index][offsets[property].property]\n    );\n    const offset = show ? offsets[property].value : 0;\n    return initialValue + offset;\n  }\n\n  _getProperty(...args) {\n    return args\n      .map((arg, i) => {\n        if (i === 0) {\n          return arg;\n        }\n        return arg[0].toUpperCase().concat(arg.slice(1));\n      })\n      .join('');\n  }\n\n  _getPxValue(property) {\n    if (!property) {\n      return 0;\n    }\n    return parseFloat(property);\n  }\n\n  _handleSwipe(e, inverseDirecion) {\n    if (inverseDirecion && this._slimCollapsed && this.options.slim && this.options.expandable) {\n      this.toggleSlim();\n    } else if (!inverseDirecion) {\n      if (this._slimCollapsed || !this.options.slim || !this.options.expandable) {\n        if (this.toggler && isVisible(this.toggler)) {\n          this.toggle();\n        }\n      } else {\n        this.toggleSlim();\n      }\n    }\n  }\n\n  _isActive(link, reference) {\n    if (reference) {\n      return reference === link;\n    }\n\n    if (link.attributes.href) {\n      return new URL(link, window.location.href).href === window.location.href;\n    }\n\n    return false;\n  }\n\n  _isAllToBeCollapsed() {\n    const collapseElements = SelectorEngine.find(SELECTOR_TOGGLE_COLLAPSE, this._element);\n    const collapseElementsExpanded = collapseElements.filter(\n      (collapsible) => collapsible.getAttribute('aria-expanded') === 'true'\n    );\n    return collapseElementsExpanded.length === 0;\n  }\n\n  _isAllCollapsed() {\n    return (\n      SelectorEngine.find(SELECTOR_COLLAPSE, this._element).filter((el) => isVisible(el)).length ===\n      0\n    );\n  }\n\n  _setup() {\n    // Touch events\n    this._setupTouch();\n\n    // Focus trap\n\n    if (this.options.focusTrap) {\n      this._setupFocusTrap();\n    }\n\n    // Backdrop\n\n    if (this.options.backdrop) {\n      this._setupBackdrop();\n\n      if (!this.options.hidden && this.options.mode === 'over') {\n        this._appendBackdrop();\n      }\n    }\n\n    // Collapse\n\n    this._setupCollapse();\n\n    // Slim\n\n    if (this.options.slimCollapsed) {\n      Manipulator.addClass(this._element, 'sidenav-slim');\n    }\n\n    if (this.options.slim) {\n      this._setupSlim();\n    }\n\n    // Initial position\n\n    this._setupInitialStyling();\n\n    // Perfect Scrollbar\n\n    this._setupScrolling();\n\n    // Content\n\n    if (this.options.content) {\n      this._setupContent();\n    }\n\n    // Active link\n\n    this._setupActiveState();\n\n    // Ripple\n\n    this._setupRippleEffect();\n\n    // Shown on init\n\n    if (!this.options.hidden) {\n      if (this.options.right) {\n        this.show();\n      }\n      this._updateOffsets(true, true);\n    }\n  }\n\n  _setupActiveState() {\n    this._setActiveElements();\n\n    this.links.forEach((link) => {\n      EventHandler.on(link, 'click', () => this._setActiveElements(link));\n      EventHandler.on(link, 'keydown', (e) => {\n        if (e.keyCode === ENTER) {\n          this._setActiveElements(link);\n        }\n      });\n    });\n\n    EventHandler.on(window, 'hashchange', this.hashHandler);\n  }\n\n  _setupCollapse() {\n    this.navigation.forEach((menu, menuIndex) => {\n      const categories = SelectorEngine.find(SELECTOR_COLLAPSE, menu);\n      categories.forEach((list, index) =>\n        this._setupCollapseList({ list, index, menu, menuIndex })\n      );\n    });\n  }\n\n  _generateCollpaseID(index, menuIndex) {\n    return `sidenav-collapse-${this._ID}-${menuIndex}-${index}`;\n  }\n\n  _setupCollapseList({ list, index, menu, menuIndex }) {\n    const ID = this._generateCollpaseID(index, menuIndex);\n\n    list.classList.add('collapse');\n    list.setAttribute('id', ID);\n\n    const [toggler] = SelectorEngine.prev(list, SELECTOR_LINK);\n\n    Manipulator.setDataAttribute(toggler, 'collapse-init', '');\n    toggler.setAttribute('href', `#${ID}`);\n    toggler.setAttribute('role', 'button');\n\n    const instance =\n      Collapse.getInstance(list) ||\n      new Collapse(list, {\n        toggle: false,\n        parent: this.options.accordion ? menu : list,\n      });\n\n    // Arrow\n\n    this._appendArrow(toggler);\n\n    if (Manipulator.hasClass(list, 'show')) {\n      this._rotateArrow(toggler, 180);\n    }\n\n    // Event listeners\n\n    EventHandler.on(toggler, 'click', (e) => {\n      this._toggleCategory(e, instance, list);\n      if (this._tempSlim && this._isAllToBeCollapsed()) {\n        this._setSlim(true);\n\n        this._tempSlim = false;\n      }\n\n      if (this.options.mode === 'over' && this._focusTrap) {\n        this._focusTrap.update();\n      }\n    });\n\n    EventHandler.on(list, 'show.bs.collapse', () => this._rotateArrow(toggler, 180));\n\n    EventHandler.on(list, 'hide.bs.collapse', () => this._rotateArrow(toggler, 0));\n\n    EventHandler.on(list, 'shown.bs.collapse', () => {\n      if (this.options.mode === 'over' && this._focusTrap) {\n        this._focusTrap.update();\n      }\n    });\n\n    EventHandler.on(list, 'hidden.bs.collapse', () => {\n      if (this._tempSlim && this._isAllCollapsed()) {\n        this._setSlim(true);\n\n        this._tempSlim = false;\n      }\n      if (this.options.mode === 'over' && this._focusTrap) {\n        this._focusTrap.update();\n      }\n    });\n  }\n\n  _setupContent() {\n    this._content = SelectorEngine.find(this.options.content);\n    if (!this._initialContentStyle) {\n      this._initialContentStyle = this._content.map((el) => {\n        const { paddingLeft, paddingRight, marginLeft, marginRight, transition } =\n          window.getComputedStyle(el);\n        return { paddingLeft, paddingRight, marginLeft, marginRight, transition };\n      });\n    }\n  }\n\n  _setupFocusTrap() {\n    this._focusTrap = new FocusTrap(\n      this._element,\n      {\n        event: 'keydown',\n        condition: (e) => e.keyCode === TAB,\n        onlyVisible: true,\n      },\n      this.toggler\n    );\n  }\n\n  _setupInitialStyling() {\n    this._setColor();\n    Manipulator.style(this._element, this.sidenavStyle);\n  }\n\n  _setupScrolling() {\n    let container = this._element;\n\n    if (this.options.scrollContainer) {\n      container = SelectorEngine.findOne(this.options.scrollContainer, this._element);\n\n      const siblings = array(container.parentNode.children).filter((el) => el !== container);\n\n      const siblingsHeight = siblings.reduce((a, b) => {\n        return a + b.clientHeight;\n      }, 0);\n\n      Manipulator.style(container, {\n        maxHeight: `calc(100% - ${siblingsHeight}px)`,\n        position: 'relative',\n      });\n    }\n\n    this._perfectScrollbar = new PerfectScrollbar(container, {\n      suppressScrollX: true,\n      handlers: ['click-rail', 'drag-thumb', 'wheel', 'touch'],\n    });\n  }\n\n  _setupSlim() {\n    this._slimCollapsed = this.options.slimCollapsed;\n\n    this._toggleSlimDisplay(this._slimCollapsed);\n\n    if (this.options.expandOnHover) {\n      this._element.addEventListener('mouseenter', () => {\n        if (this._slimCollapsed) {\n          this._setSlim(false);\n        }\n      });\n\n      this._element.addEventListener('mouseleave', () => {\n        if (!this._slimCollapsed) {\n          this._setSlim(true);\n        }\n      });\n    }\n  }\n\n  _setupRippleEffect() {\n    this.links.forEach((link) => {\n      let wave = Ripple.getInstance(link);\n\n      if (wave && wave._options.color !== this.options.color) {\n        wave.dispose();\n      } else if (wave) {\n        return;\n      }\n\n      wave = new Ripple(link, { rippleColor: this.options.color });\n    });\n  }\n\n  _setupTouch() {\n    this._touch = new Touch(this._element, 'swipe', { threshold: 20 });\n    this._touch.init();\n\n    EventHandler.on(this._element, 'swipeleft', (e) => this._handleSwipe(e, this.options.right));\n\n    EventHandler.on(this._element, 'swiperight', (e) => this._handleSwipe(e, !this.options.right));\n  }\n\n  _setActive(link, reference) {\n    // Link\n    Manipulator.addClass(link, 'active');\n\n    if (this._activeNode) {\n      this._activeNode.classList.remove('active');\n    }\n    this._activeNode = link;\n\n    // Collapse\n\n    const [collapse] = SelectorEngine.parents(this._activeNode, SELECTOR_COLLAPSE);\n\n    if (!collapse) {\n      this._setActiveCategory();\n      return;\n    }\n\n    // Category\n\n    const [category] = SelectorEngine.prev(collapse, SELECTOR_LINK);\n    this._setActiveCategory(category);\n\n    // Expand active collapse\n\n    if (!reference && !this._slimCollapsed) {\n      Collapse.getInstance(collapse).show();\n    }\n  }\n\n  _setActiveCategory(el) {\n    this.navigation.forEach((menu) => {\n      const categories = SelectorEngine.find(SELECTOR_COLLAPSE, menu);\n\n      categories.forEach((collapse) => {\n        const [collapseToggler] = SelectorEngine.prev(collapse, SELECTOR_LINK);\n\n        if (collapseToggler !== el) {\n          collapseToggler.classList.remove('active');\n        } else {\n          Manipulator.addClass(collapseToggler, 'active');\n        }\n      });\n    });\n  }\n\n  _setActiveElements(reference) {\n    this.navigation.forEach((menu) => {\n      const links = SelectorEngine.find(SELECTOR_LINK, menu);\n      links\n        .filter((link) => {\n          return SelectorEngine.next(link, SELECTOR_COLLAPSE).length === 0;\n        })\n        .forEach((link) => {\n          if (this._isActive(link, reference) && link !== this._activeNode) {\n            this._setActive(link, reference);\n          }\n        });\n    });\n  }\n\n  _setColor() {\n    const colors = [\n      'primary',\n      'secondary',\n      'success',\n      'info',\n      'warning',\n      'danger',\n      'light',\n      'dark',\n    ];\n    const { color: optionColor } = this.options;\n    const color = colors.includes(optionColor) ? optionColor : 'primary';\n\n    colors.forEach((color) => {\n      this._element.classList.remove(`sidenav-${color}`);\n    });\n\n    Manipulator.addClass(this._element, `sidenav-${color}`);\n  }\n\n  _setContentOffsets(show, offsets, initial) {\n    this._content.forEach((el, i) => {\n      const padding = this._getOffsetValue(show, { index: i, property: 'padding', offsets });\n      const margin = this._getOffsetValue(show, { index: i, property: 'margin', offsets });\n\n      const style = {};\n\n      if (!initial) {\n        style.transition = `all ${this.transitionDuration} linear`;\n      }\n\n      style[offsets.padding.property] = `${padding}px`;\n\n      style[offsets.margin.property] = `${margin}px`;\n\n      Manipulator.style(el, style);\n\n      if (!show) {\n        return;\n      }\n\n      if (initial) {\n        Manipulator.style(el, { transition: this._initialContentStyle[i].transition });\n        return;\n      }\n\n      EventHandler.on(el, 'transitionend', () => {\n        Manipulator.style(el, { transition: this._initialContentStyle[i].transition });\n      });\n    });\n  }\n\n  _setMode(mode) {\n    if (this.options.mode === mode) {\n      return;\n    }\n\n    this._options.mode = mode;\n\n    this._update(this.isVisible);\n  }\n\n  _setSlim(value) {\n    const events = value ? ['collapse', 'collapsed'] : ['expand', 'expanded'];\n    this._triggerEvents(...events);\n\n    if (value) {\n      this._collapseItems();\n      Manipulator.addClass(this._element, 'sidenav-slim');\n    } else {\n      Manipulator.removeClass(this._element, 'sidenav-slim');\n    }\n\n    this._slimCollapsed = value;\n\n    this._toggleSlimDisplay(value);\n\n    Manipulator.style(this._element, { width: `${this.width}px` });\n\n    this._updateOffsets(this.isVisible);\n  }\n\n  _setTabindex(value) {\n    this.links.forEach((link) => {\n      link.tabIndex = value ? 1 : -1;\n    });\n  }\n\n  _setVisibility(show) {\n    const events = show ? ['show', 'shown'] : ['hide', 'hidden'];\n\n    this._triggerEvents(...events);\n  }\n\n  _rotateArrow(toggler, angle) {\n    const [arrow] = SelectorEngine.children(toggler, `.${ARROW_CLASS}`);\n    if (!arrow) {\n      return;\n    }\n    Manipulator.style(arrow, {\n      transform: `rotate(${angle}deg)`,\n    });\n  }\n\n  async _toggleBackdrop(value) {\n    if (value && this.options.mode === 'over') {\n      this._appendBackdrop();\n    } else {\n      Manipulator.style(this._backdrop, { opacity: 0 });\n\n      await setTimeout(() => {\n        this._removeBackdrop();\n      }, this.options.transitionDuration);\n    }\n  }\n\n  _removeBackdrop() {\n    if (this._backdrop.parentNode === this.container) {\n      this.container.removeChild(this._backdrop);\n    }\n  }\n\n  _appendBackdrop() {\n    this.container.appendChild(this._backdrop);\n\n    setTimeout(() => Manipulator.style(this._backdrop, { opacity: 1 }), 0);\n  }\n\n  _toggleCategory(e, instance) {\n    e.preventDefault();\n\n    instance.toggle();\n\n    if (this._slimCollapsed && this.options.expandable) {\n      this._tempSlim = true;\n\n      this._setSlim(false);\n    }\n  }\n\n  _toggleSlimDisplay(slim) {\n    const slimCollapsedElements = SelectorEngine.find(SELECTOR_SHOW_SLIM, this._element);\n    const fullWidthElements = SelectorEngine.find(SELECTOR_HIDE_SLIM, this._element);\n\n    const toggleElements = () => {\n      slimCollapsedElements.forEach((el) => {\n        Manipulator.style(el, { display: this._slimCollapsed ? 'unset' : 'none' });\n      });\n\n      fullWidthElements.forEach((el) => {\n        Manipulator.style(el, { display: this._slimCollapsed ? 'none' : 'unset' });\n      });\n    };\n\n    if (slim) {\n      setTimeout(() => toggleElements(true), this.options.transitionDuration);\n    } else {\n      toggleElements();\n    }\n  }\n\n  async _triggerEvents(startEvent, completeEvent) {\n    EventHandler.trigger(this._element, `${startEvent}.mdb.sidenav`);\n\n    if (completeEvent) {\n      await setTimeout(() => {\n        EventHandler.trigger(this._element, `${completeEvent}.mdb.sidenav`);\n      }, this.options.transitionDuration + 5);\n    }\n  }\n\n  _update(show) {\n    if (this.toggler) {\n      this._updateTogglerAria(show);\n    }\n\n    this._updateDisplay(show);\n\n    if (this.options.backdrop) {\n      this._toggleBackdrop(show);\n    }\n\n    this._updateOffsets(show);\n\n    if (show && this.options.closeOnEsc && this.options.mode !== 'side') {\n      EventHandler.on(window, 'keydown', this.escHandler);\n    }\n\n    if (this.options.focusTrap) {\n      this._updateFocus(show);\n    }\n  }\n\n  _updateDisplay(value) {\n    const translation = value ? 0 : this.translation;\n    Manipulator.style(this._element, { transform: `translateX(${translation}%)` });\n  }\n\n  _updateFocus(show) {\n    this._setTabindex(show);\n\n    if (this.options.mode === 'over' && this.options.focusTrap) {\n      if (show) {\n        this._focusTrap.trap();\n        return;\n      }\n\n      this._focusTrap.disable();\n    }\n\n    this._focusTrap.disable();\n  }\n\n  _updateOffsets(show, initial = false) {\n    const [paddingPosition, marginPosition] =\n      (this.options.right && !isRTL) || (!this.options.right && isRTL)\n        ? ['right', 'left']\n        : ['left', 'right'];\n\n    const padding = {\n      property: this._getProperty('padding', paddingPosition),\n      value: this.options.mode === 'over' ? 0 : this.width,\n    };\n\n    const margin = {\n      property: this._getProperty('margin', marginPosition),\n      value: this.options.mode === 'push' ? -1 * this.width : 0,\n    };\n\n    EventHandler.trigger(this._element, 'update.mdb.sidenav', { margin, padding });\n\n    if (!this._content) {\n      return;\n    }\n\n    this._setContentOffsets(show, { padding, margin }, initial);\n  }\n\n  _updateTogglerAria(value) {\n    this.toggler.setAttribute('aria-expanded', value);\n  }\n\n  // Static\n\n  static toggleSidenav() {\n    return function (e) {\n      const toggler = SelectorEngine.closest(e.target, SELECTOR_TOGGLE);\n\n      const elementSelector = Manipulator.getDataAttributes(toggler).target;\n\n      SelectorEngine.find(elementSelector).forEach((element) => {\n        const instance = Sidenav.getInstance(element) || new Sidenav(element);\n        instance.toggle();\n      });\n    };\n  }\n\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data && /dispose/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new Sidenav(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](options);\n      }\n    });\n  }\n}\n\nexport default Sidenav;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport { enableDismissTrigger } from './util/component-functions.js';\nimport { defineJQueryPlugin } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'alert';\nconst DATA_KEY = 'bs.alert';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n    if (closeEvent.defaultPrevented) {\n      return;\n    }\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE);\n    this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n  }\n\n  // Private\n  _destroyElement() {\n    this._element.remove();\n    EventHandler.trigger(this._element, EVENT_CLOSED);\n    this.dispose();\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// enableDismissTrigger(Alert, 'close');\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Alert);\n\nexport default Alert;\n","import SelectorEngine from '../dom/selector-engine';\nimport { isVisible, typeCheckConfig } from './index';\n\nconst NAME = 'Stack';\n\nconst DEFAULT_OPTIONS = {\n  position: 'top',\n  container: null,\n  refresh: 1000,\n  filter: (el) => {\n    return el;\n  },\n};\n\nconst TYPE_OPTIONS = {\n  position: 'string',\n  container: '(undefined|null|string)',\n  refresh: 'number',\n  filter: 'function',\n};\n\nclass Stack {\n  constructor(element, selector, options) {\n    this._element = element;\n    this._selector = selector;\n    this._options = this._getConfig(options);\n\n    this._offset = null;\n\n    if (this._options.container) {\n      this._parent = SelectorEngine.findOne(this._options.container);\n    }\n  }\n\n  get stackableElements() {\n    return SelectorEngine.find(this._selector)\n      .filter((el, i) => this._options.filter(el, i))\n      .map((el) => ({ el, rect: el.getBoundingClientRect() }))\n      .filter(({ el, rect }) => {\n        const basicCondition = el !== this._element && isVisible(el);\n        if (this._offset === null) {\n          return basicCondition;\n        }\n\n        return basicCondition && this._getBoundryOffset(rect) < this._offset;\n      })\n      .sort((a, b) => {\n        return this._getBoundryOffset(b.rect) - this._getBoundryOffset(a.rect);\n      });\n  }\n\n  get nextElements() {\n    return SelectorEngine.find(this._selector)\n      .filter((el) => el !== this._element)\n      .filter((el, i) => this._options.filter(el, i))\n      .filter((el) => {\n        this._offset = null;\n        return this._getBoundryOffset(el.getBoundingClientRect()) > this._offset;\n      });\n  }\n\n  _getConfig(options) {\n    const config = {\n      ...DEFAULT_OPTIONS,\n      ...options,\n    };\n\n    typeCheckConfig(NAME, config, TYPE_OPTIONS);\n\n    return config;\n  }\n\n  _getBoundryOffset(rect) {\n    const { position } = this._options;\n\n    let parentTopOffset = 0;\n    let parentBottomBoundry = window.innerHeight;\n\n    if (this._parent) {\n      const parentRect = this._parent.getBoundingClientRect();\n\n      parentTopOffset = parentRect.top;\n      parentBottomBoundry = parentRect.bottom;\n    }\n\n    if (position === 'top') {\n      return rect.top - parentTopOffset;\n    }\n    return parentBottomBoundry - rect.bottom;\n  }\n\n  calculateOffset() {\n    const [previousElement] = this.stackableElements;\n\n    if (!previousElement) {\n      this._offset = 0;\n    } else {\n      this._offset = this._getBoundryOffset(previousElement.rect) + previousElement.rect.height;\n    }\n\n    return this._offset;\n  }\n}\n\nexport default Stack;\n","import { typeCheckConfig, isVisible } from '../mdb/util/index';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BSAlert from '../bootstrap/mdb-prefix/alert';\nimport Stack from '../mdb/util/stack';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert';\nconst SELECTOR_ALERT = '.alert';\n\nconst DefaultType = {\n  position: '(string || null)',\n  delay: 'number',\n  autohide: 'boolean',\n  width: '(string || null)',\n  offset: 'number',\n  stacking: 'boolean',\n  hidden: 'boolean',\n  appendToBody: 'boolean',\n  color: '(string || null)',\n  container: '(string|null)',\n};\n\nconst Default = {\n  position: null,\n  delay: 1000,\n  autohide: false,\n  width: null,\n  offset: 10,\n  stacking: false,\n  hidden: false,\n  appendToBody: false,\n  color: null,\n  container: null,\n};\n\nconst EVENT_CLOSE_BS = 'close.bs.alert';\nconst EVENT_CLOSED_BS = 'closed.bs.alert';\n\nconst EXTENDED_EVENTS = [{ name: 'close' }, { name: 'closed' }];\n\nclass Alert extends BSAlert {\n  constructor(element, data = {}) {\n    super(element, data);\n    this._options = this._getConfig(data);\n\n    this._init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, EVENT_CLOSE_BS);\n    EventHandler.off(this._element, EVENT_CLOSED_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Getters\n\n  get verticalOffset() {\n    if (!this._options.stacking) return 0;\n\n    return this.stackUtil.calculateOffset();\n  }\n\n  get parent() {\n    const [parent] = SelectorEngine.parents(this._element, this._options.container);\n    return parent;\n  }\n\n  get position() {\n    const [y, x] = this._options.position.split('-');\n    return { y, x };\n  }\n\n  // Public\n\n  update(updatedData = {}) {\n    if (this._timeout !== null) {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    }\n    this._options = this._getConfig(updatedData);\n    this._setup();\n  }\n\n  hide() {\n    if (!this._element) {\n      return;\n    }\n\n    if (this._element.classList.contains('show')) {\n      Manipulator.toggleClass(this._element, 'show');\n      const handler = (e) => {\n        Manipulator.style(e.target, {\n          display: 'none',\n        });\n        if (this._timeout !== null) {\n          clearTimeout(this._timeout);\n          this._timeout = null;\n        }\n\n        if (this._options.stacking) {\n          this._updateAlertStack();\n        }\n\n        EventHandler.off(e.target, 'transitionend', handler);\n      };\n\n      EventHandler.on(this._element, 'transitionend', handler);\n    }\n  }\n\n  show() {\n    if (this._options.autohide) {\n      this._setupAutohide();\n    }\n    if (!this._element.classList.contains('show')) {\n      Manipulator.style(this._element, {\n        display: 'block',\n      });\n      if (isVisible(this._element)) {\n        const handler = (e) => {\n          Manipulator.style(e.target, {\n            display: 'block',\n          });\n          EventHandler.off(e.target, 'transitionend', handler);\n        };\n        Manipulator.toggleClass(this._element, 'show');\n        if (this._options.position) {\n          this._setupAlignment();\n        }\n        EventHandler.on(this._element, 'transitionend', handler);\n      }\n    }\n  }\n\n  // Private\n\n  _init() {\n    if (this._options.hidden) {\n      Manipulator.style(this._element, {\n        display: 'none',\n      });\n    }\n\n    this._bindMdbEvents();\n\n    this._setup();\n  }\n\n  _setup() {\n    if (this._options.color) {\n      this._setColor();\n    }\n\n    if (this._options.stacking) {\n      this._setupStacking();\n    }\n\n    if (this._options.autohide) {\n      this._setupAutohide();\n    }\n    if (this._options.width) {\n      this._setupWidth();\n    }\n    if (this._options.appendToBody) {\n      this._appendToBody();\n    }\n    if (!this._options.position) {\n      return;\n    }\n    this._setupAlignment();\n    this._setupPosition();\n  }\n\n  _setupStacking() {\n    this.stackUtil = new Stack(this._element, SELECTOR_ALERT, {\n      position: this.position.y,\n      offset: this._options.offset,\n      container: this._options.container,\n      filter: (el) => {\n        const instance = Alert.getInstance(el);\n\n        if (!instance) return false;\n\n        return (\n          instance._options.container === this._options.container &&\n          instance._options.position === this._options.position\n        );\n      },\n    });\n\n    EventHandler.on(this._element, 'closed.bs.alert', () => {\n      this._updateAlertStack();\n    });\n  }\n\n  _setColor() {\n    const colors = [\n      'primary',\n      'secondary',\n      'success',\n      'info',\n      'warning',\n      'danger',\n      'light',\n      'dark',\n    ];\n    const color = colors.includes(this._options.color) ? this._options.color : 'primary';\n    colors.forEach((color) => {\n      this._element.classList.remove(`alert-${color}`);\n    });\n    Manipulator.addClass(this._element, `alert-${color}`);\n  }\n\n  _setupWidth() {\n    Manipulator.style(this._element, {\n      width: this._options.width,\n    });\n  }\n\n  _setupAutohide() {\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._options.delay);\n  }\n\n  _setupAlignment() {\n    const oppositeY = this.position.y === 'top' ? 'bottom' : 'top';\n    const oppositeX = this.position.x === 'left' ? 'right' : 'left';\n\n    if (this.position.x === 'center') {\n      Manipulator.style(this._element, {\n        [this.position.y]: `${this.verticalOffset + this._options.offset}px`,\n        [oppositeY]: 'unset',\n        left: '50%',\n        transform: 'translate(-50%)',\n      });\n    } else {\n      Manipulator.style(this._element, {\n        [this.position.y]: `${this.verticalOffset + this._options.offset}px`,\n        [this.position.x]: `${this._options.offset}px`,\n        [oppositeY]: 'unset',\n        [oppositeX]: 'unset',\n        transform: 'unset',\n      });\n    }\n  }\n\n  _setupPosition() {\n    if (this._options.container) {\n      Manipulator.addClass(this.parent, 'parent-alert-relative');\n      Manipulator.addClass(this._element, 'alert-absolute');\n    } else {\n      Manipulator.addClass(this._element, 'alert-fixed');\n    }\n  }\n\n  _appendToBody() {\n    this._element.parentNode.removeChild(this._element);\n    document.body.appendChild(this._element);\n  }\n\n  _getConfig(options) {\n    const config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...options,\n    };\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n\n  _bindMdbEvents() {\n    EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n  }\n\n  _updatePosition() {\n    Manipulator.style(this._element, {\n      [this.position.y]: `${this.verticalOffset + this._options.offset}px`,\n    });\n  }\n\n  _updateAlertStack() {\n    this.stackUtil.nextElements.forEach((el) => {\n      const instance = Alert.getInstance(el);\n\n      if (!instance) {\n        return;\n      }\n\n      instance._updatePosition();\n    });\n  }\n}\n\nexport default Alert;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport { enableDismissTrigger } from './util/component-functions.js';\nimport { defineJQueryPlugin, reflow } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\n\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\n\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number',\n};\n\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000,\n};\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n    this._setListeners();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n    reflow(this._element);\n    this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this.isShown()) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n      this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this.isShown()) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  }\n\n  isShown() {\n    return this._element.classList.contains(CLASS_NAME_SHOW);\n  }\n\n  // Private\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout': {\n        this._hasMouseInteraction = isInteracting;\n        break;\n      }\n\n      case 'focusin':\n      case 'focusout': {\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n      }\n\n      default: {\n        break;\n      }\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_MOUSEOVER, (event) => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, (event) => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, (event) => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, (event) => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// enableDismissTrigger(Toast);\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Toast);\n\nexport default Toast;\n","import { typeCheckConfig } from '../mdb/util/index';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BSToast from '../bootstrap/mdb-prefix/toast';\nimport Stack from '../mdb/util/stack';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NAME = 'toast';\nconst SELECTOR_TOAST = '.toast';\nconst SELECTOR_HEADER = '.toast-header';\n\nconst EVENT_SHOW_BS = 'show.bs.toast';\nconst EVENT_SHOWN_BS = 'shown.bs.toast';\nconst EVENT_HIDE_BS = 'hide.bs.toast';\nconst EVENT_HIDDEN_BS = 'hidden.bs.toast';\n\nconst EVENT_SHOW = 'show.mdb.toast';\nconst EVENT_HIDDEN = 'hidden.mdb.toast';\n\nconst EXTENDED_EVENTS = [{ name: 'shown' }, { name: 'hide' }];\n\nconst DefaultType = {\n  position: '(string|null)',\n  animation: 'boolean',\n  autohide: 'boolean',\n  width: '(string || null)',\n  color: '(string|null)',\n  delay: '(boolean|number)',\n  offset: 'number',\n  appendToBody: 'boolean',\n  stacking: 'boolean',\n};\n\nconst Default = {\n  position: null,\n  animation: true,\n  autohide: true,\n  width: null,\n  color: null,\n  delay: 500,\n  offset: 10,\n  appendToBody: false,\n  stacking: true,\n};\n\nclass Toast extends BSToast {\n  constructor(element, data = {}) {\n    super(element, data);\n    this._config = this._getConfig(data);\n    this._setup();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  // Getters\n\n  get parent() {\n    const [parent] = SelectorEngine.parents(this._element, this._config.container);\n    return parent;\n  }\n\n  get position() {\n    if (!this._config.position) return null;\n    const [y, x] = this._config.position.split('-');\n    return { y, x };\n  }\n\n  get verticalOffset() {\n    if (!this._config.stacking || !this.position) return 0;\n\n    return this.stackUtil.calculateOffset();\n  }\n\n  // Public\n\n  update(updatedData = {}) {\n    this._config = this._getConfig(updatedData);\n    this._setupColor();\n\n    if (!this._config.position) {\n      return;\n    }\n\n    if (this._config.stacking) {\n      this._setupStacking();\n\n      EventHandler.on(this._element, 'hidden.bs.toast', () => {\n        setTimeout(() => this._updateToastStack(), 150);\n      });\n    }\n\n    this._setupPosition();\n    this._setupAlignment();\n  }\n\n  dispose() {\n    EventHandler.off(this._element, EVENT_SHOW_BS);\n    EventHandler.off(this._element, EVENT_SHOWN_BS);\n    EventHandler.off(this._element, EVENT_HIDE_BS);\n    EventHandler.off(this._element, EVENT_HIDDEN_BS);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n\n  _setup() {\n    this._setupColor();\n    if (this._config.width) {\n      this._setupWidth();\n    }\n    if (!this._config.position) {\n      return;\n    }\n\n    if (this._config.stacking) {\n      this._setupStacking();\n\n      EventHandler.on(this._element, 'hidden.bs.toast', () => {\n        setTimeout(() => this._updateToastStack(), 150);\n      });\n    }\n\n    this._setupPosition();\n    this._setupDisplay();\n    if (!this._config.container && this._config.appendToBody) {\n      this._appendToBody();\n    }\n\n    this._bindMdbEvents();\n  }\n\n  _setupStacking() {\n    this.stackUtil = new Stack(this._element, SELECTOR_TOAST, {\n      position: this.position.y,\n      offset: this._config.offset,\n      container: this._config.container,\n      filter: (el) => {\n        const instance = Toast.getInstance(el);\n\n        if (!instance) return false;\n\n        return (\n          instance._config.container === this._config.container &&\n          instance._config.position === this._config.position\n        );\n      },\n    });\n\n    EventHandler.on(this._element, 'closed.bs.alert', () => {\n      this._updateAlertStack();\n    });\n  }\n\n  _setupColor() {\n    if (!this._config.color) {\n      return;\n    }\n\n    const header = SelectorEngine.findOne(SELECTOR_HEADER, this._element);\n\n    const toasts = [\n      'primary',\n      'secondary',\n      'success',\n      'info',\n      'warning',\n      'danger',\n      'light',\n      'dark',\n    ];\n\n    const color = toasts.includes(this._config.color) ? this._config.color : 'primary';\n\n    toasts.forEach((color) => {\n      this._element.classList.remove(`toast-${color}`);\n      if (header) header.classList.remove(`toast-${color}`);\n    });\n\n    Manipulator.addClass(this._element, `toast-${color}`);\n    if (header) Manipulator.addClass(header, `toast-${color}`);\n  }\n\n  _setupWidth() {\n    Manipulator.style(this._element, {\n      width: this._config.width,\n    });\n  }\n\n  _setupPosition() {\n    if (this._config.container) {\n      Manipulator.addClass(this.parent, 'parent-toast-relative');\n      Manipulator.addClass(this._element, 'toast-absolute');\n    } else {\n      Manipulator.addClass(this._element, 'toast-fixed');\n    }\n  }\n\n  _setupAlignment() {\n    const oppositeY = this.position.y === 'top' ? 'bottom' : 'top';\n    const oppositeX = this.position.x === 'left' ? 'right' : 'left';\n    if (this.position.x === 'center') {\n      Manipulator.style(this._element, {\n        [this.position.y]: `${this.verticalOffset + this._config.offset}px`,\n        [oppositeY]: 'unset',\n        left: '50%',\n        transform: 'translate(-50%)',\n      });\n    } else {\n      Manipulator.style(this._element, {\n        [this.position.y]: `${this.verticalOffset + this._config.offset}px`,\n        [this.position.x]: `${this._config.offset}px`,\n        [oppositeY]: 'unset',\n        [oppositeX]: 'unset',\n        transform: 'unset',\n      });\n    }\n  }\n\n  _setupDisplay() {\n    if (!this._element.classList.contains('show')) {\n      Manipulator.style(this._element, {\n        display: 'none',\n      });\n    }\n\n    EventHandler.on(this._element, EVENT_HIDDEN_BS, () => {\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n\n      Manipulator.style(this._element, {\n        display: 'none',\n      });\n    });\n\n    EventHandler.on(this._element, EVENT_SHOW_BS, () => {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._setupAlignment();\n      Manipulator.style(this._element, {\n        display: 'block',\n      });\n    });\n  }\n\n  _bindMdbEvents() {\n    EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n  }\n\n  _getConfig(options) {\n    const config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...options,\n    };\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n\n  _appendToBody() {\n    this._element.parentNode.removeChild(this._element);\n    document.body.appendChild(this._element);\n  }\n\n  _updatePosition() {\n    Manipulator.style(this._element, {\n      [this.position.y]: `${this.verticalOffset + this._config.offset}px`,\n    });\n  }\n\n  _updateToastStack() {\n    this.stackUtil.nextElements.forEach((el) => {\n      const instance = Toast.getInstance(el);\n\n      if (!instance) {\n        return;\n      }\n\n      instance._updatePosition();\n    });\n  }\n\n  // Static\n\n  static jQueryInterface(config, options = {}) {\n    return this.each(function () {\n      let data;\n\n      if (typeof config === 'object') {\n        data = new Toast(this, config);\n      } else {\n        data = Toast.getOrCreateInstance(this, config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](options);\n      }\n    });\n  }\n}\n\nexport default Toast;\n","/* eslint-disable import/prefer-default-export */\n/* eslint-disable indent */\n\nexport const getTimepickerTemplate = ({\n  format24,\n  okLabel,\n  cancelLabel,\n  headId,\n  footerId,\n  bodyId,\n  pickerId,\n  clearLabel,\n  inline,\n  showClearBtn,\n  amLabel,\n  pmLabel,\n}) => {\n  const normalTemplate = `<div id='${pickerId}' class='timepicker-wrapper h-100 d-flex align-items-center justify-content-center flex-column position-fixed'>\n               <div class=\"d-flex align-items-center justify-content-center flex-column timepicker-container\">\n                  <div class=\"d-flex flex-column timepicker-elements justify-content-around\">\n                  <div id='${headId}' class='timepicker-head d-flex flex-row align-items-center justify-content-center'\n                  style='padding-right:${format24 ? 50 : 0}px'>\n                  <div class='timepicker-head-content d-flex w-100 justify-content-evenly'>\n                      <div class=\"timepicker-current-wrapper\">\n                        <span class=\"position-relative h-100\">\n                          <button type='button' class='timepicker-current timepicker-hour active ripple' tabindex=\"0\">21</button>\n                        </span>\n                        <button type='button' class='timepicker-dot' disabled>:</button>\n                      <span class=\"position-relative h-100\">\n                        <button type='button' class='timepicker-current timepicker-minute ripple' tabindex=\"0\">21</button>\n                      </span>\n                      </div>\n                      ${\n                        !format24\n                          ? `<div class=\"d-flex flex-column justify-content-center timepicker-mode-wrapper\">\n                              <button type='button' class=\"timepicker-hour-mode timepicker-am ripple\" tabindex=\"0\">${amLabel}</button>\n                              <button class=\"timepicker-hour-mode timepicker-pm ripple\" tabindex=\"0\">${pmLabel}</button>\n                            </div>`\n                          : ''\n                      }\n                  </div>\n                </div>\n                ${\n                  !inline\n                    ? `<div id='${bodyId}' class='timepicker-clock-wrapper d-flex justify-content-center flex-column align-items-center'>\n                        <div class='timepicker-clock'>\n                          <span class='timepicker-middle-dot position-absolute'></span>\n                          <div class='timepicker-hand-pointer position-absolute'>\n                            <div class='timepicker-circle position-absolute'></div>\n                          </div>\n                          ${format24 ? '<div class=\"timepicker-clock-inner\"></div>' : ''}\n                         </div>\n                      </div>`\n                    : ''\n                }\n\n              </div>\n                <div id='${footerId}' class='timepicker-footer'>\n                  <div class=\"w-100 d-flex justify-content-between\">\n                    ${\n                      showClearBtn\n                        ? `<button type='button' class='timepicker-button timepicker-clear ripple' tabindex=\"0\">${clearLabel}</button>`\n                        : ''\n                    }\n                    <button type='button' class='timepicker-button timepicker-cancel ripple' tabindex=\"0\">${cancelLabel}</button>\n                    <button type='button' class='timepicker-button timepicker-submit ripple' tabindex=\"0\">${okLabel}</button>\n                  </div>\n                </div>\n              </div>\n        </div>`;\n\n  const inlineTemplate = `<div id='${pickerId}' class='timepicker-wrapper h-100 d-flex align-items-center justify-content-center flex-column timepicker-wrapper-inline'>\n               <div class=\"d-flex align-items-center justify-content-center flex-column timepicker-container\">\n                  <div class=\"d-flex flex-column timepicker-elements justify-content-around timepicker-elements-inline\">\n                  <div id='${headId}' class='timepicker-head d-flex flex-row align-items-center justify-content-center timepicker-head-inline'\n                  style='padding-right:0px'>\n                  <div class='timepicker-head-content d-flex w-100 justify-content-evenly align-items-center'>\n                      <div class=\"timepicker-current-wrapper\">\n                        <span class=\"position-relative h-100 timepicker-inline-hour-icons\">\n                          <i class=\"fas fa-chevron-up position-absolute text-white timepicker-icon-up timepicker-icon-inline-hour\"></i>\n                          <button type='button' class='timepicker-current timepicker-hour active ripple timepicker-current-inline' tabindex=\"0\">21</button>\n                          <i class=\"fas fa-chevron-down position-absolute text-white timepicker-icon-down timepicker-icon-inline-hour\"></i>\n                        </span>\n                        <button type='button' class='timepicker-dot timepicker-current-inline' disabled>:</button>\n                      <span class=\"position-relative h-100  timepicker-inline-minutes-icons\">\n                        <i class=\"fas fa-chevron-up position-absolute text-white timepicker-icon-up timepicker-icon-inline-minute\"></i>\n                        <button type='button' class='timepicker-current timepicker-minute ripple timepicker-current-inline' tabindex=\"0\">21</button>\n                        <i class=\"fas fa-chevron-down position-absolute text-white timepicker-icon-down timepicker-icon-inline-minute\"></i>\n                      </span>\n                      </div>\n                      ${\n                        !format24\n                          ? `<div class=\"d-flex justify-content-center timepicker-mode-wrapper\">\n                              <button type='button' class=\"timepicker-hour-mode timepicker-am ripple me-2 ms-4\" tabindex=\"0\">${amLabel}</button>\n                              <button class=\"timepicker-hour-mode timepicker-pm ripple\" tabindex=\"0\">${pmLabel}</button>\n                              <button type='button' class='timepicker-button timepicker-submit timepicker-submit-inline ripple py-1 px-2 mb-0' tabindex=\"0\">${okLabel}</button>\n                            </div>`\n                          : ''\n                      }\n                      ${\n                        format24\n                          ? `<button class='timepicker-button timepicker-submit timepicker-submit-inline ripple py-1 px-2 mb-0' tabindex=\"0\">${okLabel}</button>`\n                          : ''\n                      }\n                  </div>\n                </div>\n              </div>\n           </div>\n        </div>\n  `;\n\n  return inline ? inlineTemplate : normalTemplate;\n};\n\nexport const getToggleButtonTemplate = (options, id) => {\n  const { iconClass } = options;\n\n  return `\n  <button id=\"${id}\" tabindex=\"0\" type=\"button\" class=\"timepicker-toggle-button\" data-mdb-toggle=\"timepicker\"  >\n    <i class=\"${iconClass}\"></i>\n  </button>\n`;\n};\n","/* eslint-disable consistent-return */\nimport EventHandler from '../../mdb/dom/event-handler';\nimport Manipulator from '../../mdb/dom/manipulator';\n\n// eslint-disable-next-line import/prefer-default-export\nconst formatToAmPm = (date) => {\n  if (date === '') return;\n  let hours;\n  let minutes;\n  let amOrPm;\n  let originalHours;\n\n  if (isValidDate(date)) {\n    hours = date.getHours();\n    originalHours = hours;\n    minutes = date.getMinutes();\n    hours %= 12;\n\n    if (hours === 0) {\n      amOrPm = 'AM';\n    } else if (hours > 12) {\n      amOrPm = 'PM';\n    }\n    hours = hours || 12;\n\n    if (amOrPm === undefined) {\n      amOrPm = hours >= 12 ? 'PM' : 'AM';\n    }\n    minutes = minutes < 10 ? `0${minutes}` : minutes;\n  } else {\n    [hours, minutes, amOrPm] = takeValue(date, false);\n    originalHours = hours;\n\n    hours %= 12;\n    if (hours === 0 && amOrPm === undefined) {\n      amOrPm = 'AM';\n    }\n    hours = hours || 12;\n\n    if (amOrPm === undefined) {\n      amOrPm = originalHours >= 12 ? 'PM' : 'AM';\n    }\n  }\n\n  return {\n    hours,\n    minutes,\n    amOrPm,\n  };\n};\n\nconst isValidDate = (date) => {\n  // eslint-disable-next-line no-restricted-globals\n  return date && Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date);\n};\n\nconst formatNormalHours = (date) => {\n  if (date === '') return;\n  let hours;\n  let minutes;\n\n  if (!isValidDate(date)) {\n    [hours, minutes] = takeValue(date, false);\n  } else {\n    hours = date.getHours();\n    minutes = date.getMinutes();\n  }\n\n  minutes = Number(minutes) < 10 ? `0${Number(minutes)}` : minutes;\n\n  return {\n    hours,\n    minutes,\n  };\n};\n\nconst toggleClassHandler = (event, classes) => {\n  return EventHandler.on(document, event, classes, ({ target }) => {\n    if (!Manipulator.hasClass(target, 'active')) {\n      const allElements = document.querySelectorAll(classes);\n\n      allElements.forEach((element) => {\n        if (Manipulator.hasClass(element, 'active')) {\n          Manipulator.removeClass(element, 'active');\n        }\n      });\n\n      Manipulator.addClass(target, 'active');\n    }\n  });\n};\n\nconst findMousePosition = ({ clientX, clientY, touches }, object, isMobile = false) => {\n  const { left, top } = object.getBoundingClientRect();\n  let obj = {};\n  if (!isMobile || !touches) {\n    obj = {\n      x: clientX - left,\n      y: clientY - top,\n    };\n  } else if (isMobile && Object.keys(touches).length > 0) {\n    obj = {\n      x: touches[0].clientX - left,\n      y: touches[0].clientY - top,\n    };\n  }\n\n  return obj;\n};\n\nconst checkBrowser = () => {\n  let result = false;\n  if (\n    (navigator.maxTouchPoints &&\n      navigator.maxTouchPoints > 2 &&\n      /MacIntel/.test(navigator.platform)) ||\n    /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)\n  ) {\n    result = true;\n  }\n  return result;\n};\n\nconst takeValue = (element, isInput = true) => {\n  let valueInput;\n  if (isInput) {\n    valueInput = element.value.replace(/:/gi, ' ');\n  } else {\n    valueInput = element.replace(/:/gi, ' ');\n  }\n\n  return valueInput.split(' ');\n};\n\nconst compareTimes = (time1, time2) => {\n  const [time1Hour, time1Minutes, time1maxTimeFormat] = takeValue(time1, false);\n  const [time2Hour, time2Minutes, time2maxTimeFormat] = takeValue(time2, false);\n  const bothFormatsEqual = time1maxTimeFormat == time2maxTimeFormat;\n\n  if (time1maxTimeFormat == 'PM' && time2maxTimeFormat == 'AM') {\n    return 1;\n  } else if (time1maxTimeFormat == 'AM' && time2maxTimeFormat == 'PM') {\n    return 2;\n  }\n\n  if (bothFormatsEqual && time1Hour > time2Hour) {\n    return 1;\n  } else if (time1Hour < time2Hour) {\n    return 2;\n  }\n  if (time1Minutes > time2Minutes) {\n    return 1;\n  } else if (time1Minutes < time2Minutes) {\n    return 2;\n  }\n};\nconst getCurrentTime = () => {\n  const date = new Date();\n  const currentHours = date.getHours();\n  let currentMinutes = String(date.getMinutes());\n  if (currentMinutes.length === 1) {\n    currentMinutes = `0${currentMinutes}`;\n  }\n\n  const currentTime = `${currentHours}:${currentMinutes}`;\n  return currentTime;\n};\n\nconst setMinTime = (minTime, disabledPast, format12) => {\n  if (!disabledPast) {\n    return minTime;\n  }\n  let currentTime = getCurrentTime();\n\n  if (format12) {\n    currentTime = `${formatToAmPm(currentTime).hours}:${formatToAmPm(currentTime).minutes} ${\n      formatToAmPm(currentTime).amOrPm\n    }`;\n  }\n  if ((minTime != '' && compareTimes(currentTime, minTime) == 1) || minTime === '') {\n    minTime = currentTime;\n  }\n  return minTime;\n};\n\nconst setMaxTime = (maxTime, disabledFuture, format12) => {\n  if (!disabledFuture) {\n    return maxTime;\n  }\n  let currentTime = getCurrentTime();\n\n  if (format12) {\n    currentTime = `${formatToAmPm(currentTime).hours}:${formatToAmPm(currentTime).minutes} ${\n      formatToAmPm(currentTime).amOrPm\n    }`;\n  }\n  if ((maxTime != '' && compareTimes(currentTime, maxTime) == 2) || maxTime === '') {\n    maxTime = currentTime;\n  }\n  return maxTime;\n};\n\nconst checkValueBeforeAccept = (\n  { format12, maxTime, minTime, disablePast, disableFuture },\n  input,\n  hourHeader,\n  minutesHeader\n) => {\n  const minute = takeValue(input)[1];\n\n  minTime = setMinTime(minTime, disablePast, format12);\n  maxTime = setMaxTime(maxTime, disableFuture, format12);\n\n  const [maxTimeHour, maxTimeMin, maxTimeFormat] = takeValue(maxTime, false);\n  const [minTimeHour, minTimeMin, minTimeFormat] = takeValue(minTime, false);\n\n  if (maxTimeFormat === undefined && minTimeFormat === undefined) {\n    if (maxTimeFormat === undefined) {\n      if (maxTimeHour !== '' && minTimeHour === '') {\n        if (Number(hourHeader) > Number(maxTimeHour)) {\n          return;\n        }\n\n        if (maxTimeMin !== '' && minTimeMin === undefined) {\n          if (Number(hourHeader) > Number(maxTimeHour)) {\n            return;\n          }\n        }\n      } else if (maxTimeHour === '' && minTimeHour !== '') {\n        if (maxTimeMin === undefined && minTimeMin !== '') {\n          if (\n            Number(hourHeader) < Number(minTimeHour) ||\n            (Number(hourHeader) < Number(minTimeHour) && minutesHeader < Number(minTimeMin))\n          ) {\n            return;\n          }\n        }\n      }\n    } else if (minTimeFormat === undefined) {\n      if (maxTimeHour !== '' && minTimeHour === '') {\n        if (Number(hourHeader) > Number(maxTimeHour)) {\n          return;\n        }\n\n        if (maxTimeMin !== '' && minTimeMin === undefined) {\n          if (Number(hourHeader) > Number(maxTimeHour) || minutesHeader > Number(maxTimeMin)) {\n            return;\n          }\n        }\n      } else if (maxTimeHour === '' && minTimeHour !== '') {\n        if (maxTimeMin === undefined && minTimeMin !== '') {\n          if (Number(hourHeader) < Number(minTimeHour) || minutesHeader < Number(minTimeMin)) {\n            return;\n          }\n        }\n      }\n    }\n  }\n\n  return [hourHeader, minute];\n};\n\nconst _verifyMaxTimeHourAndAddDisabledClass = (tips, maxTimeHour) => {\n  tips.forEach((tip) => {\n    if (tip.textContent === '00' || Number(tip.textContent) > maxTimeHour) {\n      {\n        Manipulator.addClass(tip, 'disabled');\n      }\n    }\n  });\n};\n\nconst _verifyMinTimeHourAndAddDisabledClass = (tips, minTimeHour) => {\n  tips.forEach((tip) => {\n    if (tip.textContent !== '00' && Number(tip.textContent) < minTimeHour) {\n      {\n        Manipulator.addClass(tip, 'disabled');\n      }\n    }\n  });\n};\n\nconst _verifyMaxTimeMinutesTipsAndAddDisabledClass = (tips, maxMinutes, maxHour, currHour) => {\n  tips.forEach((tip) => {\n    if (Number(tip.textContent) > maxMinutes && Number(currHour) == maxHour) {\n      Manipulator.addClass(tip, 'disabled');\n    }\n  });\n};\n\nconst _verifyMinTimeMinutesTipsAndAddDisabledClass = (tips, minMinutes, minHour, currHour) => {\n  tips.forEach((tip) => {\n    if (Number(tip.textContent) < minMinutes && Number(currHour) == minHour) {\n      Manipulator.addClass(tip, 'disabled');\n    }\n  });\n};\n\nconst _convertHourToNumber = (string) => {\n  let hour;\n  if (string.startsWith('0')) {\n    hour = Number(string.slice(1));\n  } else {\n    hour = Number(string);\n  }\n  return hour;\n};\n\nexport {\n  checkBrowser,\n  findMousePosition,\n  formatNormalHours,\n  formatToAmPm,\n  toggleClassHandler,\n  checkValueBeforeAccept,\n  takeValue,\n  compareTimes,\n  setMinTime,\n  setMaxTime,\n  _verifyMinTimeHourAndAddDisabledClass,\n  _verifyMaxTimeMinutesTipsAndAddDisabledClass,\n  _verifyMinTimeMinutesTipsAndAddDisabledClass,\n  _verifyMaxTimeHourAndAddDisabledClass,\n  _convertHourToNumber,\n};\n","/* eslint-disable consistent-return */\n/* eslint-disable no-else-return */\nimport { createPopper } from '@popperjs/core';\nimport ScrollBarHelper from '../../bootstrap/mdb-prefix/util/scrollbar';\nimport { typeCheckConfig, element, getUID } from '../../mdb/util/index';\nimport { getTimepickerTemplate, getToggleButtonTemplate } from './templates';\nimport Data from '../../mdb/dom/data';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport EventHandler, { EventHandlerMulti } from '../../mdb/dom/event-handler';\nimport {\n  formatToAmPm,\n  toggleClassHandler,\n  formatNormalHours,\n  checkBrowser,\n  findMousePosition,\n  checkValueBeforeAccept,\n  takeValue,\n  setMinTime,\n  setMaxTime,\n  _verifyMinTimeHourAndAddDisabledClass,\n  _verifyMaxTimeMinutesTipsAndAddDisabledClass,\n  _verifyMinTimeMinutesTipsAndAddDisabledClass,\n  _verifyMaxTimeHourAndAddDisabledClass,\n  _convertHourToNumber,\n} from './utils';\nimport FocusTrap from '../../mdb/util/focusTrap';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport {\n  UP_ARROW,\n  DOWN_ARROW,\n  LEFT_ARROW,\n  RIGHT_ARROW,\n  ESCAPE,\n  ENTER,\n} from '../../mdb/util/keycodes';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'timepicker';\n\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_MOUSEDOWN_DATA_API = `mousedown${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_MOUSEUP_DATA_API = `mouseup${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_MOUSEMOVE_DATA_API = `mousemove${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_MOUSELEAVE_DATA_API = `mouseleave${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_MOUSEOVER_DATA_API = `mouseover${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_TOUCHMOVE_DATA_API = `touchmove${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_TOUCHEND_DATA_API = `touchend${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_TOUCHSTART_DATA_API = `touchstart${EVENT_KEY}${DATA_API_KEY}`;\n\nconst EVENT_VALUE_CHANGED = `valueChanged${EVENT_KEY}`;\n\nconst ACTIVE_CLASS = 'active';\nconst AM_CLASS = `${NAME}-am`;\nconst BUTTON_CANCEL_CLASS = `${NAME}-cancel`;\nconst BUTTON_CLEAR_CLASS = `${NAME}-clear`;\nconst BUTTON_SUBMIT_CLASS = `${NAME}-submit`;\nconst CIRCLE_CLASS = `${NAME}-circle`;\nconst CLOCK_ANIMATION_CLASS = `${NAME}-clock-animation`;\nconst CLOCK_CLASS = `${NAME}-clock`;\nconst CLOCK_INNER_CLASS = `${NAME}-clock-inner`;\nconst CLOCK_WRAPPER_CLASS = `${NAME}-clock-wrapper`;\nconst CURRENT_CLASS = `.${NAME}-current`;\nconst CURRENT_INLINE_CLASS = `${NAME}-current-inline`;\nconst WRAPPER_OPEN_ANIMATION_CLASS = 'fade-in';\nconst WRAPPER_CLOSE_ANIMATION_CLASS = 'fade-out';\n\nconst HAND_CLASS = `${NAME}-hand-pointer`;\nconst HOUR_CLASS = `${NAME}-hour`;\nconst HOUR_MODE_CLASS = `${NAME}-hour-mode`;\nconst ICON_DOWN_CLASS = `${NAME}-icon-down`;\nconst ICON_INLINE_HOUR_CLASS = `${NAME}-icon-inline-hour`;\nconst ICON_INLINE_MINUTE_CLASS = `${NAME}-icon-inline-minute`;\nconst ICON_UP_CLASS = `${NAME}-icon-up`;\nconst ICONS_HOUR_INLINE = `${NAME}-inline-hour-icons`;\nconst MIDDLE_DOT_CLASS = `${NAME}-middle-dot`;\nconst MINUTE_CLASS = `${NAME}-minute`;\nconst MODAL_CLASS = `${NAME}-modal`;\nconst PM_CLASS = `${NAME}-pm`;\nconst TIPS_ELEMENT_CLASS = `${NAME}-tips-element`;\nconst TIPS_HOURS_CLASS = `${NAME}-time-tips-hours`;\nconst TIPS_INNER_ELEMENT_CLASS = `${NAME}-tips-inner-element`;\nconst TIPS_INNER_HOURS_CLASS = `${NAME}-time-tips-inner`;\nconst TIPS_MINUTES_CLASS = `${NAME}-time-tips-minutes`;\nconst TRANSFORM_CLASS = `${NAME}-transform`;\nconst WRAPPER_CLASS = `${NAME}-wrapper`;\nconst INPUT_CLASS = `${NAME}-input`;\n\nconst Default = {\n  bodyId: '',\n  cancelLabel: 'Cancel',\n  clearLabel: 'Clear',\n  closeModalOnBackdropClick: true,\n  closeModalOnMinutesClick: false,\n  container: 'body',\n  defaultTime: '',\n  disabled: false,\n  disablePast: false,\n  disableFuture: false,\n  focusInputAfterApprove: false,\n  footerId: '',\n  format12: true,\n  format24: false,\n  headId: '',\n  increment: false,\n  inline: false,\n  invalidLabel: 'Invalid Time Format',\n  maxTime: '',\n  minTime: '',\n  modalId: '',\n  okLabel: 'Ok',\n  overflowHidden: true,\n  pickerId: '',\n  readOnly: false,\n  showClearBtn: true,\n  switchHoursToMinutesOnClick: true,\n  iconClass: 'far fa-clock fa-sm timepicker-icon',\n  withIcon: true,\n  pmLabel: 'PM',\n  amLabel: 'AM',\n  animations: true,\n};\n\nconst DefaultType = {\n  bodyId: 'string',\n  cancelLabel: 'string',\n  clearLabel: 'string',\n  closeModalOnBackdropClick: 'boolean',\n  closeModalOnMinutesClick: 'boolean',\n  container: 'string',\n  disabled: 'boolean',\n  disablePast: 'boolean',\n  disableFuture: 'boolean',\n  footerId: 'string',\n  format12: 'boolean',\n  format24: 'boolean',\n  headId: 'string',\n  increment: 'boolean',\n  inline: 'boolean',\n  invalidLabel: 'string',\n  modalId: 'string',\n  okLabel: 'string',\n  overflowHidden: 'boolean',\n  pickerId: 'string',\n  readOnly: 'boolean',\n  showClearBtn: 'boolean',\n  switchHoursToMinutesOnClick: 'boolean',\n  defaultTime: '(string|date|number)',\n  iconClass: 'string',\n  withIcon: 'boolean',\n  pmLabel: 'string',\n  amLabel: 'string',\n  animations: 'boolean',\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Timepicker extends BaseComponent {\n  constructor(element, options = {}) {\n    super(element);\n\n    this._document = document;\n    this._options = this._getConfig(options);\n    this._currentTime = null;\n    this._toggleButtonId = this._element.id\n      ? `timepicker-toggle-${this._element.id}`\n      : getUID('timepicker-toggle-');\n\n    this.hoursArray = ['12', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'];\n    this.innerHours = ['00', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23'];\n    this.minutesArray = ['00', '05', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55'];\n\n    this.input = SelectorEngine.findOne('input', this._element);\n    this.dataWithIcon = element.dataset.withIcon;\n    this.dataToggle = element.dataset.toggle;\n    this.customIcon = SelectorEngine.findOne('.timepicker-toggle-button', this._element);\n\n    this._checkToggleButton();\n\n    this.inputFormatShow = SelectorEngine.findOne('[data-mdb-timepicker-format24]', this._element);\n\n    this.inputFormat =\n      this.inputFormatShow === null ? '' : Object.values(this.inputFormatShow.dataset)[0];\n    this.elementToggle = SelectorEngine.findOne('[data-mdb-toggle]', this._element);\n    this.toggleElement = Object.values(element.querySelector('[data-mdb-toggle]').dataset)[0];\n\n    this._hour = null;\n    this._minutes = null;\n    this._AM = null;\n    this._PM = null;\n    this._wrapper = null;\n    this._modal = null;\n    this._hand = null;\n    this._circle = null;\n    this._focusTrap = null;\n    this._popper = null;\n    this._interval = null;\n    this._timeoutInterval = null;\n\n    this._inputValue =\n      this._options.defaultTime !== '' ? this._options.defaultTime : this.input.value;\n\n    if (this._options.format24) {\n      this._options.format12 = false;\n\n      this._currentTime = formatNormalHours(this._inputValue);\n    }\n\n    if (this._options.format12) {\n      this._options.format24 = false;\n      this._currentTime = formatToAmPm(this._inputValue);\n    }\n\n    if (this._options.readOnly) {\n      this.input.setAttribute('readonly', true);\n    }\n\n    if (this.inputFormat === 'true' && this.inputFormat !== '') {\n      this._options.format12 = false;\n      this._options.format24 = true;\n      this._currentTime = formatNormalHours(this._inputValue);\n    }\n\n    this._scrollBar = new ScrollBarHelper();\n\n    this._animations =\n      !window.matchMedia('(prefers-reduced-motion: reduce)').matches && this._options.animations;\n\n    this.init();\n    this._isHours = true;\n    this._isMinutes = false;\n    this._isInvalidTimeFormat = false;\n    this._isMouseMove = false;\n    this._isInner = false;\n    this._isAmEnabled = false;\n    this._isPmEnabled = false;\n    if (this._options.format12 && !this._options.defaultTime) {\n      this._isPmEnabled = true;\n    }\n\n    this._objWithDataOnChange = { degrees: null };\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n\n  init() {\n    const { format12, format24 } = this._options;\n    let zero;\n    let hoursFormat;\n    let _amOrPm;\n    Manipulator.addClass(this.input, INPUT_CLASS);\n\n    if (this._currentTime !== undefined) {\n      const { hours, minutes, amOrPm } = this._currentTime;\n\n      zero = Number(hours) < 10 ? 0 : '';\n      hoursFormat = `${zero}${Number(hours)}:${minutes}`;\n      _amOrPm = amOrPm;\n\n      if (format12) {\n        this.input.value = `${hoursFormat} ${_amOrPm}`;\n      } else if (format24) {\n        this.input.value = `${hoursFormat}`;\n      }\n    } else {\n      zero = '';\n      hoursFormat = '';\n      _amOrPm = '';\n\n      this.input.value = '';\n    }\n\n    if (this.input.value.length > 0 && this.input.value !== '') {\n      Manipulator.addClass(this.input, 'active');\n    }\n\n    if (this._options !== null || this._element !== null) {\n      this._listenToUserInput();\n      this._handleOpen();\n      this._listenToToggleKeydown();\n    }\n  }\n\n  dispose() {\n    this._removeModal();\n\n    EventHandler.off(this._document, 'click', `[data-mdb-toggle='${this.toggleElement}']`);\n    EventHandler.off(this._element, 'keydown', `[data-mdb-toggle='${this.toggleElement}']`);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    setTimeout(() => {\n      super.dispose();\n    }, 350 + 5);\n  }\n\n  update(options = {}) {\n    this._options = this._getConfig({ ...this._options, ...options });\n  }\n\n  // private\n\n  _checkToggleButton() {\n    if (this.customIcon === null) {\n      if (this.dataWithIcon !== undefined) {\n        this._options.withIcon = null;\n\n        if (this.dataWithIcon === 'true') {\n          this._appendToggleButton(this._options);\n        }\n      }\n\n      if (this._options.withIcon) {\n        this._appendToggleButton(this._options);\n      }\n    }\n  }\n\n  _appendToggleButton() {\n    const toggleButton = getToggleButtonTemplate(this._options, this._toggleButtonId);\n\n    this.input.insertAdjacentHTML('afterend', toggleButton);\n  }\n\n  _getDomElements() {\n    this._hour = SelectorEngine.findOne(`.${HOUR_CLASS}`);\n    this._minutes = SelectorEngine.findOne(`.${MINUTE_CLASS}`);\n    this._AM = SelectorEngine.findOne(`.${AM_CLASS}`);\n    this._PM = SelectorEngine.findOne(`.${PM_CLASS}`);\n    this._wrapper = SelectorEngine.findOne(`.${WRAPPER_CLASS}`);\n    this._modal = SelectorEngine.findOne(`.${MODAL_CLASS}`);\n    this._hand = SelectorEngine.findOne(`.${HAND_CLASS}`);\n    this._circle = SelectorEngine.findOne(`.${CIRCLE_CLASS}`);\n    this._clock = SelectorEngine.findOne(`.${CLOCK_CLASS}`);\n    this._clockInner = SelectorEngine.findOne(`.${CLOCK_INNER_CLASS}`);\n  }\n\n  _handlerMaxMinHoursOptions(degrees, maxHour, minHour, maxFormat, minFormat, e) {\n    if (!maxHour && !minHour) {\n      return true;\n    }\n    const { format24, format12, disablePast, disableFuture } = this._options;\n    const { _isAmEnabled, _isPmEnabled } = this;\n    const key = e.keyCode;\n    const _isMouseOnInnerClock =\n      e.target.classList.contains('timepicker-clock-inner') ||\n      e.target.classList.contains('timepicker-time-tips-inner') ||\n      e.target.classList.contains('timepicker-tips-inner-element');\n\n    minHour = setMinTime(minHour, disablePast, format12);\n    maxHour = setMaxTime(maxHour, disableFuture, format12);\n\n    let maxHourDegrees = maxHour !== '' ? maxHour * 30 : '';\n    let minHourDegrees = minHour !== '' ? minHour * 30 : '';\n\n    if (degrees <= 0) {\n      degrees = 360 + degrees;\n    }\n    const _handleKeyboardEvents = () => {\n      const tips = document.querySelectorAll('.timepicker-tips-element');\n      const innerTips = document.querySelectorAll('.timepicker-tips-inner-element');\n      let currentHour = _convertHourToNumber(this._hour.innerText);\n      let nextHourTip;\n      let numberToAdd;\n      let nextHour;\n\n      if (key === UP_ARROW) {\n        numberToAdd = 1;\n      } else if (key === DOWN_ARROW) {\n        numberToAdd = -1;\n      }\n\n      if (currentHour === 12 && key === UP_ARROW) {\n        nextHour = 1;\n      } else if (currentHour === 0 && key === UP_ARROW) {\n        nextHour = 13;\n      } else if (currentHour === 0 && key === DOWN_ARROW) {\n        nextHour = 23;\n      } else if (currentHour === 13 && key === DOWN_ARROW) {\n        nextHour = 0;\n      } else if (currentHour === 1 && key === DOWN_ARROW) {\n        nextHour = 12;\n      } else {\n        nextHour = currentHour + numberToAdd;\n      }\n\n      tips.forEach((tip) => {\n        if (tip.textContent == nextHour) {\n          nextHourTip = tip;\n        }\n      });\n      innerTips.forEach((innerTip) => {\n        if (innerTip.textContent == nextHour) {\n          nextHourTip = innerTip;\n        }\n      });\n      return !nextHourTip.parentElement.classList.contains('disabled');\n    };\n\n    const _handle24FormatMouseEvents = (e) => {\n      let minInnerHourDegrees = minHour !== '' && minHour > 12 ? (minHour - 12) * 30 : '';\n      let maxInnerHourDegrees = maxHour !== '' && maxHour > 12 ? (maxHour - 12) * 30 : '';\n\n      if (\n        (minInnerHourDegrees && degrees < minInnerHourDegrees) ||\n        (maxInnerHourDegrees && degrees > maxInnerHourDegrees) ||\n        (maxHour && maxHour < 12)\n      ) {\n        return;\n      }\n      return true;\n    };\n\n    if (format24 && e.type !== 'keydown' && _isMouseOnInnerClock) {\n      return _handle24FormatMouseEvents(e);\n    }\n    if (e.type === 'keydown') {\n      return _handleKeyboardEvents(e);\n    }\n\n    const minFormatAndCurrentFormatEqual =\n      !minFormat ||\n      (minFormat === 'PM' && _isPmEnabled) ||\n      (minHour !== '' && minFormat === 'AM' && _isAmEnabled);\n\n    const maxFormatAndCurrentFormatEqual =\n      !maxFormat ||\n      (maxFormat === 'PM' && _isPmEnabled) ||\n      (maxHour !== '' && maxFormat === 'AM' && _isAmEnabled);\n\n    const isMinHourValid = () => {\n      if (!minHour) {\n        return true;\n      } else if (\n        (minFormat === 'PM' && _isAmEnabled) ||\n        (minFormatAndCurrentFormatEqual && degrees < minHourDegrees)\n      ) {\n        return;\n      }\n      return true;\n    };\n\n    const isMaxHourValid = () => {\n      if (!maxHour) {\n        return true;\n      } else if (\n        (maxFormat === 'AM' && _isPmEnabled) ||\n        (maxFormatAndCurrentFormatEqual && degrees > maxHourDegrees)\n      ) {\n        return;\n      }\n      return true;\n    };\n    if (isMinHourValid() && isMaxHourValid()) {\n      return true;\n    }\n  }\n\n  _handleKeyboard() {\n    EventHandler.on(this._document, EVENT_KEYDOWN_DATA_API, '', (e) => {\n      let hour;\n      let minute;\n      let innerHour;\n      let { increment, maxTime, minTime, format12, disablePast, disableFuture } = this._options;\n\n      let [minHour, minFormat] = takeValue(minTime, false);\n      let [maxHour, maxFormat] = takeValue(maxTime, false);\n\n      minHour = setMinTime(minHour, disablePast, format12);\n      maxHour = setMaxTime(maxHour, disableFuture, format12);\n\n      const hoursView = SelectorEngine.findOne(`.${TIPS_MINUTES_CLASS}`) === null;\n      const innerHoursExist = SelectorEngine.findOne(`.${TIPS_INNER_HOURS_CLASS}`) !== null;\n\n      const degrees = Number(this._hand.style.transform.replace(/[^\\d-]/g, ''));\n\n      const allTipsMinutes = SelectorEngine.find(`.${TIPS_MINUTES_CLASS}`, this._modal);\n      const allTipsHours = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`, this._modal);\n      const allInnerTips = SelectorEngine.find(`.${TIPS_INNER_HOURS_CLASS}`, this._modal);\n\n      let hourTime = this._makeHourDegrees(e.target, degrees, hour).hour;\n      const { degrees: hourObjDegrees, addDegrees } = this._makeHourDegrees(\n        e.target,\n        degrees,\n        hour\n      );\n\n      let { minute: minHourMinutes, degrees: minObjDegrees } = this._makeMinutesDegrees(\n        degrees,\n        minute\n      );\n      const addMinDegrees = this._makeMinutesDegrees(degrees, minute).addDegrees;\n\n      let { hour: innerHourDegrees } = this._makeInnerHoursDegrees(degrees, innerHour);\n\n      if (e.keyCode === ESCAPE) {\n        const cancelBtn = SelectorEngine.findOne(`.${BUTTON_CANCEL_CLASS}`, this._modal);\n        EventHandler.trigger(cancelBtn, 'click');\n      } else if (hoursView) {\n        if (innerHoursExist) {\n          if (e.keyCode === RIGHT_ARROW) {\n            this._isInner = false;\n            Manipulator.addStyle(this._hand, {\n              height: 'calc(40% + 1px)',\n            });\n            this._hour.textContent = this._setHourOrMinute(hourTime > 12 ? 1 : hourTime);\n            this._toggleClassActive(this.hoursArray, this._hour, allTipsHours);\n            this._toggleClassActive(this.innerHours, this._hour, allInnerTips);\n          }\n\n          if (e.keyCode === LEFT_ARROW) {\n            this._isInner = true;\n            Manipulator.addStyle(this._hand, {\n              height: '21.5%',\n            });\n\n            this._hour.textContent = this._setHourOrMinute(\n              innerHourDegrees >= 24 || innerHourDegrees === '00' ? 0 : innerHourDegrees\n            );\n            this._toggleClassActive(this.innerHours, this._hour, allInnerTips);\n            this._toggleClassActive(this.hoursArray, this._hour - 1, allTipsHours);\n          }\n        }\n\n        if (e.keyCode === UP_ARROW) {\n          const isNextHourValid = this._handlerMaxMinHoursOptions(\n            hourObjDegrees + 30,\n            maxHour,\n            minHour,\n            maxFormat,\n            minFormat,\n            e\n          );\n          if (!isNextHourValid) {\n            return;\n          }\n\n          const addRotate = () => {\n            return Manipulator.addStyle(this._hand, {\n              transform: `rotateZ(${hourObjDegrees + addDegrees}deg)`,\n            });\n          };\n\n          addRotate();\n\n          if (this._isInner) {\n            innerHourDegrees += 1;\n\n            if (innerHourDegrees === 24) {\n              innerHourDegrees = 0;\n            } else if (innerHourDegrees === 25 || innerHourDegrees === '001') {\n              innerHourDegrees = 13;\n            }\n\n            this._hour.textContent = this._setHourOrMinute(innerHourDegrees);\n            this._toggleClassActive(this.innerHours, this._hour, allInnerTips);\n          } else {\n            hourTime += 1;\n            this._hour.textContent = this._setHourOrMinute(hourTime > 12 ? 1 : hourTime);\n            this._toggleClassActive(this.hoursArray, this._hour, allTipsHours);\n          }\n        }\n        if (e.keyCode === DOWN_ARROW) {\n          const isNextHourValid = this._handlerMaxMinHoursOptions(\n            hourObjDegrees - 30,\n            maxHour,\n            minHour,\n            maxFormat,\n            minFormat,\n            e\n          );\n\n          if (!isNextHourValid) {\n            return;\n          }\n\n          const addRotate = () => {\n            return Manipulator.addStyle(this._hand, {\n              transform: `rotateZ(${hourObjDegrees - addDegrees}deg)`,\n            });\n          };\n\n          addRotate();\n          if (this._isInner) {\n            innerHourDegrees -= 1;\n\n            if (innerHourDegrees === 12) {\n              innerHourDegrees = 0;\n            } else if (innerHourDegrees === -1) {\n              innerHourDegrees = 23;\n            }\n\n            this._hour.textContent = this._setHourOrMinute(innerHourDegrees);\n            this._toggleClassActive(this.innerHours, this._hour, allInnerTips);\n          } else {\n            hourTime -= 1;\n\n            this._hour.textContent = this._setHourOrMinute(hourTime === 0 ? 12 : hourTime);\n            this._toggleClassActive(this.hoursArray, this._hour, allTipsHours);\n          }\n        }\n      } else {\n        if (e.keyCode === UP_ARROW) {\n          minObjDegrees += addMinDegrees;\n          Manipulator.addStyle(this._hand, {\n            transform: `rotateZ(${minObjDegrees}deg)`,\n          });\n          minHourMinutes += 1;\n          if (increment) {\n            minHourMinutes += 4;\n\n            if (minHourMinutes === '0014') {\n              minHourMinutes = 5;\n            }\n          }\n\n          this._minutes.textContent = this._setHourOrMinute(\n            minHourMinutes > 59 ? 0 : minHourMinutes\n          );\n          this._toggleClassActive(this.minutesArray, this._minutes, allTipsMinutes);\n          this._toggleBackgroundColorCircle(`${TIPS_MINUTES_CLASS}`);\n        }\n        if (e.keyCode === DOWN_ARROW) {\n          minObjDegrees -= addMinDegrees;\n          Manipulator.addStyle(this._hand, {\n            transform: `rotateZ(${minObjDegrees}deg)`,\n          });\n          if (increment) {\n            minHourMinutes -= 5;\n          } else {\n            minHourMinutes -= 1;\n          }\n\n          if (minHourMinutes === -1) {\n            minHourMinutes = 59;\n          } else if (minHourMinutes === -5) {\n            minHourMinutes = 55;\n          }\n\n          this._minutes.textContent = this._setHourOrMinute(minHourMinutes);\n          this._toggleClassActive(this.minutesArray, this._minutes, allTipsMinutes);\n          this._toggleBackgroundColorCircle(`${TIPS_MINUTES_CLASS}`);\n        }\n      }\n    });\n  }\n\n  _setActiveClassToTipsOnOpen(hour, ...rest) {\n    if (this._isInvalidTimeFormat) {\n      return;\n    }\n\n    if (!this._options.format24) {\n      [...rest].filter((e) => {\n        if (e.toLowerCase() === 'pm') {\n          Manipulator.addClass(this._PM, ACTIVE_CLASS);\n        } else if (e.toLowerCase() === 'am') {\n          Manipulator.addClass(this._AM, ACTIVE_CLASS);\n        } else {\n          Manipulator.removeClass(this._AM, ACTIVE_CLASS);\n          Manipulator.removeClass(this._PM, ACTIVE_CLASS);\n        }\n\n        return e;\n      });\n\n      const allTipsHours = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`, this._modal);\n      this._addActiveClassToTip(allTipsHours, hour);\n    } else {\n      const allTipsHours = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`, this._modal);\n      const allInnerTips = SelectorEngine.find(`.${TIPS_INNER_HOURS_CLASS}`, this._modal);\n\n      this._addActiveClassToTip(allTipsHours, hour);\n      this._addActiveClassToTip(allInnerTips, hour);\n    }\n  }\n\n  _setTipsAndTimesDependOnInputValue(hour, minute) {\n    const { inline, format12 } = this._options;\n\n    if (!this._isInvalidTimeFormat) {\n      const rotateDegrees = hour > 12 ? hour * 30 - 360 : hour * 30;\n      this._hour.textContent = hour;\n      this._minutes.textContent = minute;\n\n      if (!inline) {\n        Manipulator.addStyle(this._hand, {\n          transform: `rotateZ(${rotateDegrees}deg)`,\n        });\n        Manipulator.addClass(this._circle, 'active');\n\n        if (Number(hour) > 12 || hour === '00') {\n          Manipulator.addStyle(this._hand, {\n            height: '21.5%',\n          });\n        }\n      }\n    } else {\n      this._hour.textContent = '12';\n      this._minutes.textContent = '00';\n\n      if (!inline) {\n        Manipulator.addStyle(this._hand, {\n          transform: 'rotateZ(0deg)',\n        });\n      }\n      if (format12) {\n        Manipulator.addClass(this._PM, ACTIVE_CLASS);\n      }\n    }\n  }\n\n  _listenToToggleKeydown() {\n    EventHandler.on(this._element, 'keydown', `[data-mdb-toggle='${this.toggleElement}']`, (e) => {\n      if (e.keyCode === ENTER) {\n        e.preventDefault();\n        EventHandler.trigger(this.elementToggle, 'click');\n      }\n    });\n  }\n\n  _handleOpen() {\n    const container = this._getContainer();\n    EventHandlerMulti.on(\n      this._element,\n      'click',\n      `[data-mdb-toggle='${this.toggleElement}']`,\n      (e) => {\n        if (this._options === null) {\n          return;\n        }\n\n        // Fix for input with open, if is not for settimeout input has incorrent jumping label\n        const fixForInput = Manipulator.getDataAttribute(this.input, 'toggle') !== null ? 200 : 0;\n\n        setTimeout(() => {\n          Manipulator.addStyle(this.elementToggle, {\n            pointerEvents: 'none',\n          });\n\n          this.elementToggle.blur();\n\n          let checkInputValue;\n\n          if (takeValue(this.input)[0] === '' || this._isInvalidTimeFormat) {\n            checkInputValue = ['12', '00', 'PM'];\n          } else {\n            checkInputValue = takeValue(this.input);\n          }\n\n          const { modalId, inline, format12 } = this._options;\n          const [hour, minute, format] = checkInputValue;\n          const div = element('div');\n\n          if (Number(hour) > 12 || hour === '00') {\n            this._isInner = true;\n          }\n\n          this.input.blur();\n          e.target.blur();\n\n          div.innerHTML = getTimepickerTemplate(this._options);\n          Manipulator.addClass(div, MODAL_CLASS);\n\n          div.setAttribute('role', 'dialog');\n          div.setAttribute('tabIndex', '-1');\n          div.setAttribute('id', modalId);\n\n          if (!inline) {\n            container.appendChild(div);\n            this._scrollBar.hide();\n          } else {\n            this._popper = createPopper(this.input, div, {\n              placement: 'bottom-start',\n            });\n\n            container.appendChild(div);\n          }\n\n          this._getDomElements();\n          if (this._animations) {\n            this._toggleBackdropAnimation();\n          } else {\n            Manipulator.addClass(this._wrapper, 'opacity-100');\n          }\n          this._setActiveClassToTipsOnOpen(hour, minute, format);\n          this._appendTimes();\n          this._setActiveClassToTipsOnOpen(hour, minute, format);\n          this._setTipsAndTimesDependOnInputValue(hour, minute);\n\n          if (this.input.value === '') {\n            const allTipsHours = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`, this._modal);\n\n            if (format12) {\n              Manipulator.addClass(this._PM, ACTIVE_CLASS);\n            }\n\n            this._hour.textContent = '12';\n            this._minutes.textContent = '00';\n            this._addActiveClassToTip(allTipsHours, Number(this._hour.textContent));\n          }\n\n          this._handleSwitchTimeMode();\n          this._handleOkButton();\n          this._handleClose();\n\n          if (inline) {\n            this._handleHoverInlineBtn();\n            this._handleDocumentClickInline();\n            this._handleInlineClicks();\n          } else {\n            this._handleSwitchHourMinute();\n            this._handleClockClick();\n            this._handleKeyboard();\n\n            Manipulator.addStyle(this._hour, {\n              pointerEvents: 'none',\n            });\n            Manipulator.addStyle(this._minutes, {\n              pointerEvents: '',\n            });\n          }\n\n          this._focusTrap = new FocusTrap(this._wrapper, {\n            event: 'keydown',\n            condition: ({ key }) => key === 'Tab',\n          });\n          this._focusTrap.trap();\n        }, fixForInput);\n      }\n    );\n  }\n\n  _handleInlineClicks() {\n    let selectedHour;\n    let minuteNumber;\n    const countMinutes = (count) => {\n      let minutes = count;\n\n      if (minutes > 59) {\n        minutes = 0;\n      } else if (minutes < 0) {\n        minutes = 59;\n      }\n\n      return minutes;\n    };\n\n    const countHours = (count) => {\n      let hour = count;\n\n      if (this._options.format24) {\n        if (hour > 24) {\n          hour = 1;\n        } else if (hour < 0) {\n          hour = 23;\n        }\n\n        if (hour > 23) {\n          hour = 0;\n        }\n      } else {\n        if (hour > 12) {\n          hour = 1;\n        } else if (hour < 1) {\n          hour = 12;\n        }\n\n        if (hour > 12) {\n          hour = 1;\n        }\n      }\n\n      return hour;\n    };\n\n    const incrementHours = (hour) => {\n      const counteredNumber = countHours(hour);\n      this._hour.textContent = this._setHourOrMinute(counteredNumber);\n    };\n    const incrementMinutes = (minutes) => {\n      const counteredNumber = countMinutes(minutes);\n      this._minutes.textContent = this._setHourOrMinute(counteredNumber);\n    };\n\n    const addHours = () => {\n      selectedHour = countHours(selectedHour) + 1;\n      incrementHours(selectedHour);\n    };\n    const addMinutes = () => {\n      minuteNumber = countMinutes(minuteNumber) + 1;\n      incrementMinutes(minuteNumber);\n    };\n\n    const subHours = () => {\n      selectedHour = countHours(selectedHour) - 1;\n      incrementHours(selectedHour);\n    };\n\n    const subMinutes = () => {\n      minuteNumber = countMinutes(minuteNumber) - 1;\n      incrementMinutes(minuteNumber);\n    };\n\n    const _clearAsyncs = () => {\n      clearInterval(this._interval);\n      clearTimeout(this._timeoutInterval);\n    };\n\n    const _clearAndSetThisInterval = (addHoursOrAddMinutes) => {\n      _clearAsyncs();\n      this._timeoutInterval = setTimeout(() => {\n        this._interval = setInterval(addHoursOrAddMinutes, 100);\n      }, 500);\n    };\n    EventHandlerMulti.on(\n      this._modal,\n      'click mousedown mouseup touchstart touchend contextmenu',\n      `.${ICON_UP_CLASS}, .${ICON_DOWN_CLASS}`,\n      (e) => {\n        selectedHour = Number(this._hour.textContent);\n        minuteNumber = Number(this._minutes.textContent);\n        const { target, type } = e;\n        const isEventTypeMousedownOrTouchstart = type === 'mousedown' || type === 'touchstart';\n\n        if (Manipulator.hasClass(target, ICON_UP_CLASS)) {\n          if (Manipulator.hasClass(target.parentNode, ICONS_HOUR_INLINE)) {\n            if (isEventTypeMousedownOrTouchstart) {\n              _clearAndSetThisInterval(addHours);\n            } else if (type === 'mouseup' || type === 'touchend' || type === 'contextmenu') {\n              _clearAsyncs();\n            } else {\n              addHours();\n            }\n          } else {\n            // eslint-disable-next-line no-lonely-if\n            if (isEventTypeMousedownOrTouchstart) {\n              _clearAndSetThisInterval(addMinutes);\n            } else if (type === 'mouseup' || type === 'touchend' || type === 'contextmenu') {\n              _clearAsyncs();\n            } else {\n              addMinutes();\n            }\n          }\n        } else if (Manipulator.hasClass(target, ICON_DOWN_CLASS)) {\n          if (Manipulator.hasClass(target.parentNode, ICONS_HOUR_INLINE)) {\n            if (isEventTypeMousedownOrTouchstart) {\n              _clearAndSetThisInterval(subHours);\n            } else if (type === 'mouseup' || type === 'touchend') {\n              _clearAsyncs();\n            } else {\n              subHours();\n            }\n          } else {\n            // eslint-disable-next-line no-lonely-if\n            if (isEventTypeMousedownOrTouchstart) {\n              _clearAndSetThisInterval(subMinutes);\n            } else if (type === 'mouseup' || type === 'touchend') {\n              _clearAsyncs();\n            } else {\n              subMinutes();\n            }\n          }\n        }\n      }\n    );\n\n    EventHandlerMulti.on(\n      this._document,\n      `${EVENT_MOUSEUP_DATA_API} ${EVENT_TOUCHEND_DATA_API}`,\n      () => {\n        _clearAsyncs();\n      }\n    );\n\n    EventHandler.on(window, EVENT_KEYDOWN_DATA_API, (e) => {\n      const key = e.code;\n      const isHourBtnFocused = document.activeElement.classList.contains('timepicker-hour');\n      const isMinuteBtnFocused = document.activeElement.classList.contains('timepicker-minute');\n      const isBodyFocused = document.activeElement === document.body;\n      selectedHour = Number(this._hour.textContent);\n      minuteNumber = Number(this._minutes.textContent);\n\n      switch (key) {\n        case 'ArrowUp':\n          e.preventDefault();\n          if (isBodyFocused || isHourBtnFocused) {\n            this._hour.focus();\n            addHours();\n          } else if (isMinuteBtnFocused) {\n            addMinutes();\n          }\n          break;\n        case 'ArrowDown':\n          e.preventDefault();\n          if (isBodyFocused || isHourBtnFocused) {\n            this._hour.focus();\n            subHours();\n          } else if (isMinuteBtnFocused) {\n            subMinutes();\n          }\n          break;\n      }\n    });\n  }\n\n  _handleClose() {\n    EventHandler.on(\n      this._modal,\n      'click',\n      `.${WRAPPER_CLASS}, .${BUTTON_CANCEL_CLASS}, .${BUTTON_CLEAR_CLASS}`,\n      ({ target }) => {\n        const { closeModalOnBackdropClick } = this._options;\n\n        const runRemoveFunction = () => {\n          Manipulator.addStyle(this.elementToggle, {\n            pointerEvents: 'auto',\n          });\n\n          if (this._animations) {\n            this._toggleBackdropAnimation(true);\n          }\n\n          this._removeModal();\n          this._focusTrap.disable();\n          this._focusTrap = null;\n\n          if (this.elementToggle) {\n            this.elementToggle.focus();\n          } else if (this.input) {\n            this.input.focus();\n          }\n        };\n\n        if (Manipulator.hasClass(target, BUTTON_CLEAR_CLASS)) {\n          this._toggleAmPm('PM');\n          this.input.value = '';\n          Manipulator.removeClass(this.input, 'active');\n\n          let checkInputValue;\n\n          if (takeValue(this.input)[0] === '') {\n            checkInputValue = ['12', '00', 'PM'];\n          } else {\n            checkInputValue = takeValue(this.input);\n          }\n\n          const [hour, minute, format] = checkInputValue;\n          this._setTipsAndTimesDependOnInputValue('12', '00');\n          this._setActiveClassToTipsOnOpen(hour, minute, format);\n          this._hour.click();\n        } else if (Manipulator.hasClass(target, BUTTON_CANCEL_CLASS)) {\n          runRemoveFunction();\n        } else if (Manipulator.hasClass(target, WRAPPER_CLASS) && closeModalOnBackdropClick) {\n          runRemoveFunction();\n        }\n      }\n    );\n  }\n\n  showValueInput() {\n    return this.input.value;\n  }\n\n  _handleOkButton() {\n    EventHandlerMulti.on(this._modal, 'click', `.${BUTTON_SUBMIT_CLASS}`, () => {\n      let { maxTime, minTime } = this._options;\n      const { format12, format24, readOnly, focusInputAfterApprove, disablePast, disableFuture } =\n        this._options;\n      const hourModeActive = this._document.querySelector(`.${HOUR_MODE_CLASS}.${ACTIVE_CLASS}`);\n      const currentValue = `${this._hour.textContent}:${this._minutes.textContent}`;\n      const selectedHour = Number(this._hour.textContent);\n      const selectedMinutes = Number(this._minutes.textContent);\n\n      minTime = setMinTime(minTime, disablePast, format12);\n      maxTime = setMaxTime(maxTime, disableFuture, format12);\n\n      const [maxTimeHour, maxTimeMinutes, maxTimeFormat] = takeValue(maxTime, false);\n      const [minTimeHour, minTimeMinutes, minTimeFormat] = takeValue(minTime, false);\n      const isHourLessThanMinHour = selectedHour < Number(minTimeHour);\n      const isHourGreaterThanMaxHour = selectedHour > Number(maxTimeHour);\n      let maxFormatAndCurrentFormatEqual = true;\n      if (hourModeActive) {\n        maxFormatAndCurrentFormatEqual = maxTimeFormat === hourModeActive.textContent;\n      }\n\n      let minFormatAndCurrentFormatEqual = true;\n      if (hourModeActive) {\n        minFormatAndCurrentFormatEqual = minTimeFormat === hourModeActive.textContent;\n      }\n\n      const hourEqualToMaxAndMinutesGreaterThanMax =\n        selectedMinutes > maxTimeMinutes && selectedHour === Number(maxTimeHour);\n      const hourEqualToMinAndMinutesLessThanMin =\n        selectedMinutes < minTimeMinutes && selectedHour === Number(minTimeHour);\n\n      Manipulator.addClass(this.input, 'active');\n      Manipulator.addStyle(this.elementToggle, {\n        pointerEvents: 'auto',\n      });\n\n      if (maxTime !== '') {\n        if (\n          maxFormatAndCurrentFormatEqual &&\n          (isHourGreaterThanMaxHour || hourEqualToMaxAndMinutesGreaterThanMax)\n        ) {\n          return;\n        } else if (maxTimeFormat === 'AM' && hourModeActive.textContent === 'PM') {\n          return;\n        }\n      }\n      if (minTime !== '') {\n        if (\n          minFormatAndCurrentFormatEqual &&\n          (isHourLessThanMinHour || hourEqualToMinAndMinutesLessThanMin)\n        ) {\n          return;\n        }\n        if (minTimeFormat === 'PM' && hourModeActive.textContent === 'AM') {\n          return;\n        }\n      }\n\n      if (\n        checkValueBeforeAccept(\n          this._options,\n          this.input,\n          this._hour.textContent,\n          this._minutes.textContent\n        ) === undefined\n      ) {\n        return;\n      }\n\n      if (this._isInvalidTimeFormat) {\n        Manipulator.removeClass(this.input, 'is-invalid');\n      }\n\n      if (!readOnly && focusInputAfterApprove) {\n        this.input.focus();\n      }\n\n      Manipulator.addStyle(this.elementToggle, {\n        pointerEvents: 'auto',\n      });\n\n      if (format24) {\n        this.input.value = currentValue;\n      } else if (hourModeActive === null) {\n        this.input.value = `${currentValue} PM`;\n      } else {\n        this.input.value = `${currentValue} ${hourModeActive.textContent}`;\n      }\n\n      if (this._animations) {\n        this._toggleBackdropAnimation(true);\n      }\n\n      this._removeModal();\n\n      EventHandler.trigger(this.input, EVENT_VALUE_CHANGED);\n    });\n  }\n\n  _handleHoverInlineBtn() {\n    EventHandlerMulti.on(\n      this._modal,\n      'mouseover mouseleave',\n      `.${CURRENT_INLINE_CLASS}`,\n      ({ type, target }) => {\n        const allIconsInlineHour = SelectorEngine.find(`.${ICON_INLINE_HOUR_CLASS}`, this._modal);\n        const allIconsInlineMinute = SelectorEngine.find(\n          `.${ICON_INLINE_MINUTE_CLASS}`,\n          this._modal\n        );\n\n        if (type === 'mouseover') {\n          if (Manipulator.hasClass(target, HOUR_CLASS)) {\n            allIconsInlineHour.forEach((icon) => Manipulator.addClass(icon, ACTIVE_CLASS));\n          } else {\n            allIconsInlineMinute.forEach((icon) => Manipulator.addClass(icon, ACTIVE_CLASS));\n          }\n        } else {\n          // eslint-disable-next-line no-lonely-if\n          if (Manipulator.hasClass(target, HOUR_CLASS)) {\n            allIconsInlineHour.forEach((icon) => Manipulator.removeClass(icon, ACTIVE_CLASS));\n          } else {\n            allIconsInlineMinute.forEach((icon) => Manipulator.removeClass(icon, ACTIVE_CLASS));\n          }\n        }\n      }\n    );\n  }\n\n  _handleDocumentClickInline() {\n    EventHandler.on(document, EVENT_CLICK_DATA_API, ({ target }) => {\n      if (\n        this._modal &&\n        !this._modal.contains(target) &&\n        !Manipulator.hasClass(target, 'timepicker-icon')\n      ) {\n        clearInterval(this._interval);\n        Manipulator.addStyle(this.elementToggle, {\n          pointerEvents: 'auto',\n        });\n        this._removeModal();\n      }\n    });\n  }\n\n  _handleSwitchHourMinute() {\n    toggleClassHandler('click', CURRENT_CLASS);\n\n    EventHandler.on(this._modal, 'click', CURRENT_CLASS, () => {\n      const { format24 } = this._options;\n      const current = SelectorEngine.find(CURRENT_CLASS, this._modal);\n      const allTipsMinutes = SelectorEngine.find(`.${TIPS_MINUTES_CLASS}`, this._modal);\n      const allTipsHours = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`, this._modal);\n      const allInnerTips = SelectorEngine.find(`.${TIPS_INNER_HOURS_CLASS}`, this._modal);\n      const hourValue = Number(this._hour.textContent);\n      const minuteValue = Number(this._minutes.textContent);\n\n      const switchTips = (array, classes) => {\n        allTipsHours.forEach((tip) => tip.remove());\n        allTipsMinutes.forEach((tip) => tip.remove());\n        Manipulator.addClass(this._hand, TRANSFORM_CLASS);\n\n        setTimeout(() => {\n          Manipulator.removeClass(this._hand, TRANSFORM_CLASS);\n        }, 401);\n\n        this._getAppendClock(array, `.${CLOCK_CLASS}`, classes);\n\n        const toggleActiveClass = () => {\n          const allTipsHours = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`, this._modal);\n          const allTipsMinutes = SelectorEngine.find(`.${TIPS_MINUTES_CLASS}`, this._modal);\n\n          this._addActiveClassToTip(allTipsHours, hourValue);\n          this._addActiveClassToTip(allTipsMinutes, minuteValue);\n        };\n\n        if (!format24) {\n          setTimeout(() => {\n            toggleActiveClass();\n          }, 401);\n        } else {\n          const allTipsInnerHours = SelectorEngine.find(`.${TIPS_INNER_HOURS_CLASS}`, this._modal);\n\n          setTimeout(() => {\n            this._addActiveClassToTip(allTipsInnerHours, hourValue);\n            toggleActiveClass();\n          }, 401);\n        }\n      };\n\n      current.forEach((e) => {\n        if (Manipulator.hasClass(e, ACTIVE_CLASS)) {\n          if (Manipulator.hasClass(e, MINUTE_CLASS)) {\n            Manipulator.addClass(this._hand, TRANSFORM_CLASS);\n\n            Manipulator.addStyle(this._hand, {\n              transform: `rotateZ(${this._minutes.textContent * 6}deg)`,\n              height: 'calc(40% + 1px)',\n            });\n\n            if (format24 && allInnerTips.length > 0) {\n              allInnerTips.forEach((innerTip) => innerTip.remove());\n            }\n            switchTips(this.minutesArray, `${TIPS_MINUTES_CLASS}`, allTipsMinutes);\n            this._hour.style.pointerEvents = '';\n            this._minutes.style.pointerEvents = 'none';\n          } else if (Manipulator.hasClass(e, HOUR_CLASS)) {\n            Manipulator.addStyle(this._hand, {\n              transform: `rotateZ(${this._hour.textContent * 30}deg)`,\n            });\n\n            if (Number(this._hour.textContent) > 12) {\n              Manipulator.addStyle(this._hand, {\n                transform: `rotateZ(${this._hour.textContent * 30 - 360}deg)`,\n                height: '21.5%',\n              });\n\n              if (Number(this._hour.textContent) > 12) {\n                Manipulator.addStyle(this._hand, {\n                  height: '21.5%',\n                });\n              }\n            } else {\n              Manipulator.addStyle(this._hand, {\n                height: 'calc(40% + 1px)',\n              });\n            }\n\n            if (format24) {\n              this._getAppendClock(\n                this.innerHours,\n                `.${CLOCK_INNER_CLASS}`,\n                TIPS_INNER_HOURS_CLASS\n              );\n            }\n            if (allInnerTips.length > 0) {\n              allInnerTips.forEach((innerTip) => innerTip.remove());\n            }\n\n            switchTips(this.hoursArray, `${TIPS_HOURS_CLASS}`, allTipsHours);\n\n            Manipulator.addStyle(this._hour, {\n              pointerEvents: 'none',\n            });\n            Manipulator.addStyle(this._minutes, {\n              pointerEvents: '',\n            });\n          }\n        }\n      });\n    });\n  }\n\n  _handleDisablingTipsMaxTime(selectedFormat, maxTimeFormat, maxTimeMinutes, maxTimeHour) {\n    if (!this._options.maxTime && !this._options.disableFuture) {\n      return;\n    }\n\n    const outerHoursTips = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`);\n    const innerHoursTips = SelectorEngine.find(`.${TIPS_INNER_HOURS_CLASS}`);\n    const allTipsMinutes = SelectorEngine.find(`.${TIPS_MINUTES_CLASS}`);\n\n    if (!maxTimeFormat || maxTimeFormat === selectedFormat) {\n      _verifyMaxTimeHourAndAddDisabledClass(innerHoursTips, maxTimeHour);\n      _verifyMaxTimeHourAndAddDisabledClass(outerHoursTips, maxTimeHour);\n      _verifyMaxTimeMinutesTipsAndAddDisabledClass(\n        allTipsMinutes,\n        maxTimeMinutes,\n        maxTimeHour,\n        this._hour.textContent\n      );\n      return;\n    }\n    if (maxTimeFormat === 'AM' && selectedFormat === 'PM') {\n      outerHoursTips.forEach((tip) => {\n        Manipulator.addClass(tip, 'disabled');\n      });\n      allTipsMinutes.forEach((tip) => {\n        Manipulator.addClass(tip, 'disabled');\n      });\n    }\n  }\n\n  _handleDisablingTipsMinTime(selectedFormat, minTimeFormat, minTimeMinutes, minTimeHour) {\n    if (!this._options.minTime && !this._options.disablePast) {\n      return;\n    }\n\n    const outerHoursTips = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`);\n    const innerHoursTips = SelectorEngine.find(`.${TIPS_INNER_HOURS_CLASS}`);\n    const allTipsMinutes = SelectorEngine.find(`.${TIPS_MINUTES_CLASS}`);\n\n    if (!minTimeFormat || minTimeFormat === selectedFormat) {\n      _verifyMinTimeHourAndAddDisabledClass(outerHoursTips, minTimeHour);\n      _verifyMinTimeHourAndAddDisabledClass(innerHoursTips, minTimeHour);\n      _verifyMinTimeMinutesTipsAndAddDisabledClass(\n        allTipsMinutes,\n        minTimeMinutes,\n        minTimeHour,\n        this._hour.textContent\n      );\n    } else if (minTimeFormat === 'PM' && selectedFormat === 'AM') {\n      outerHoursTips.forEach((tip) => Manipulator.addClass(tip, 'disabled'));\n      allTipsMinutes.forEach((tip) => Manipulator.addClass(tip, 'disabled'));\n    }\n  }\n  _toggleAmPm = (enabled) => {\n    if (enabled == 'PM') {\n      this._isPmEnabled = true;\n      this._isAmEnabled = false;\n    } else if (enabled == 'AM') {\n      this._isPmEnabled = false;\n      this._isAmEnabled = true;\n    }\n  };\n\n  _handleSwitchTimeMode() {\n    EventHandler.on(document, 'click', `.${HOUR_MODE_CLASS}`, ({ target }) => {\n      let { maxTime, minTime } = this._options;\n      const { disablePast, disableFuture, format12 } = this._options;\n\n      minTime = setMinTime(minTime, disablePast, format12);\n      maxTime = setMaxTime(maxTime, disableFuture, format12);\n\n      let [maxTimeHour, maxTimeMinutes, maxTimeFormat] = takeValue(maxTime, false);\n      let [minTimeHour, minTimeMinutes, minTimeFormat] = takeValue(minTime, false);\n\n      const allTipsHour = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`);\n      const allTipsMinutes = SelectorEngine.find(`.${TIPS_MINUTES_CLASS}`);\n\n      const clearDisabledClassForAllTips = () => {\n        allTipsHour.forEach((tip) => {\n          Manipulator.removeClass(tip, 'disabled');\n        });\n\n        allTipsMinutes.forEach((tip) => {\n          Manipulator.removeClass(tip, 'disabled');\n        });\n      };\n\n      clearDisabledClassForAllTips();\n      this._handleDisablingTipsMinTime(\n        target.textContent,\n        minTimeFormat,\n        minTimeMinutes,\n        minTimeHour\n      );\n      this._handleDisablingTipsMaxTime(\n        target.textContent,\n        maxTimeFormat,\n        maxTimeMinutes,\n        maxTimeHour\n      );\n      this._toggleAmPm(target.textContent);\n\n      if (!Manipulator.hasClass(target, ACTIVE_CLASS)) {\n        const allHoursMode = SelectorEngine.find(`.${HOUR_MODE_CLASS}`);\n\n        allHoursMode.forEach((element) => {\n          if (Manipulator.hasClass(element, ACTIVE_CLASS)) {\n            Manipulator.removeClass(element, ACTIVE_CLASS);\n          }\n        });\n\n        Manipulator.addClass(target, ACTIVE_CLASS);\n      }\n    });\n  }\n\n  _handleClockClick() {\n    let { maxTime, minTime } = this._options;\n    const { disablePast, disableFuture, format12 } = this._options;\n    minTime = setMinTime(minTime, disablePast, format12);\n    maxTime = setMaxTime(maxTime, disableFuture, format12);\n\n    const maxTimeFormat = takeValue(maxTime, false)[2];\n    const minTimeFormat = takeValue(minTime, false)[2];\n\n    const maxTimeHour = takeValue(maxTime, false)[0];\n    const minTimeHour = takeValue(minTime, false)[0];\n\n    const clockWrapper = SelectorEngine.findOne(`.${CLOCK_WRAPPER_CLASS}`);\n    EventHandlerMulti.on(\n      document,\n      `${EVENT_MOUSEDOWN_DATA_API} ${EVENT_MOUSEUP_DATA_API} ${EVENT_MOUSEMOVE_DATA_API} ${EVENT_MOUSELEAVE_DATA_API} ${EVENT_MOUSEOVER_DATA_API} ${EVENT_TOUCHSTART_DATA_API} ${EVENT_TOUCHMOVE_DATA_API} ${EVENT_TOUCHEND_DATA_API}`,\n      '',\n      (e) => {\n        if (!checkBrowser()) {\n          e.preventDefault();\n        }\n\n        const { type, target } = e;\n        const { closeModalOnMinutesClick, switchHoursToMinutesOnClick } = this._options;\n        const minutes = SelectorEngine.findOne(`.${TIPS_MINUTES_CLASS}`, this._modal) !== null;\n        const hours = SelectorEngine.findOne(`.${TIPS_HOURS_CLASS}`, this._modal) !== null;\n        const innerHours =\n          SelectorEngine.findOne(`.${TIPS_INNER_HOURS_CLASS}`, this._modal) !== null;\n\n        const allTipsMinutes = SelectorEngine.find(`.${TIPS_MINUTES_CLASS}`, this._modal);\n\n        const mouseClick = findMousePosition(e, clockWrapper);\n        const radius = clockWrapper.offsetWidth / 2;\n\n        let rds = Math.atan2(mouseClick.y - radius, mouseClick.x - radius);\n        if (checkBrowser()) {\n          const touchClick = findMousePosition(e, clockWrapper, true);\n          rds = Math.atan2(touchClick.y - radius, touchClick.x - radius);\n        }\n\n        let xPos = null;\n        let yPos = null;\n        let elFromPoint = null;\n\n        if (\n          type === 'mousedown' ||\n          type === 'mousemove' ||\n          type === 'touchmove' ||\n          type === 'touchstart'\n        ) {\n          if (type === 'mousedown' || type === 'touchstart' || type === 'touchmove') {\n            if (\n              this._hasTargetInnerClass(target) ||\n              Manipulator.hasClass(target, CLOCK_WRAPPER_CLASS) ||\n              Manipulator.hasClass(target, CLOCK_CLASS) ||\n              Manipulator.hasClass(target, TIPS_MINUTES_CLASS) ||\n              Manipulator.hasClass(target, TIPS_HOURS_CLASS) ||\n              Manipulator.hasClass(target, CIRCLE_CLASS) ||\n              Manipulator.hasClass(target, HAND_CLASS) ||\n              Manipulator.hasClass(target, MIDDLE_DOT_CLASS) ||\n              Manipulator.hasClass(target, TIPS_ELEMENT_CLASS)\n            ) {\n              this._isMouseMove = true;\n\n              if (checkBrowser() && e.touches) {\n                xPos = e.touches[0].clientX;\n                yPos = e.touches[0].clientY;\n                elFromPoint = document.elementFromPoint(xPos, yPos);\n              }\n            }\n          }\n        } else if (type === 'mouseup' || type === 'touchend') {\n          this._isMouseMove = false;\n          if (\n            this._hasTargetInnerClass(target) ||\n            Manipulator.hasClass(target, CLOCK_CLASS) ||\n            Manipulator.hasClass(target, TIPS_HOURS_CLASS) ||\n            Manipulator.hasClass(target, CIRCLE_CLASS) ||\n            Manipulator.hasClass(target, HAND_CLASS) ||\n            Manipulator.hasClass(target, MIDDLE_DOT_CLASS) ||\n            Manipulator.hasClass(target, TIPS_ELEMENT_CLASS)\n          ) {\n            if ((hours || innerHours) && switchHoursToMinutesOnClick) {\n              const isHourLessThanMinOrGreaterThanMax =\n                Number(this._hour.textContent) > maxTimeHour ||\n                Number(this._hour.textContent) < minTimeHour;\n              if (\n                this._options.format24 &&\n                maxTimeHour != '' &&\n                minTimeHour != '' &&\n                isHourLessThanMinOrGreaterThanMax\n              ) {\n                return;\n              } else if (\n                this._options.format24 &&\n                maxTimeHour != '' &&\n                this._hour.textContent > maxTimeHour\n              ) {\n                return;\n              } else if (\n                this._options.format24 &&\n                minTimeHour != '' &&\n                this._hour.textContent < minTimeHour\n              ) {\n                return;\n              }\n            }\n            if (!Manipulator.hasClass(this._minutes, ACTIVE_CLASS)) {\n              EventHandler.trigger(this._minutes, 'click');\n            }\n          }\n\n          if (minutes && closeModalOnMinutesClick) {\n            const submitBtn = SelectorEngine.findOne(`.${BUTTON_SUBMIT_CLASS}`, this._modal);\n            EventHandler.trigger(submitBtn, 'click');\n          }\n        }\n\n        if (minutes) {\n          let minute;\n          const degrees = Math.trunc((rds * 180) / Math.PI) + 90;\n          const { degrees: minDegrees, minute: minTimeObj } = this._makeMinutesDegrees(\n            degrees,\n            minute\n          );\n\n          if (this._handlerMaxMinMinutesOptions(minDegrees, minTimeObj) === undefined) {\n            return;\n          }\n\n          const { degrees: _degrees, minute: minuteTimes } = this._handlerMaxMinMinutesOptions(\n            minDegrees,\n            minTimeObj\n          );\n\n          if (this._isMouseMove) {\n            Manipulator.addStyle(this._hand, {\n              transform: `rotateZ(${_degrees}deg)`,\n            });\n\n            if (minuteTimes === undefined) {\n              return;\n            }\n\n            const changeMinutes = () => {\n              return minuteTimes >= 10 || minuteTimes === '00' ? minuteTimes : `0${minuteTimes}`;\n            };\n\n            this._minutes.textContent = changeMinutes();\n\n            this._toggleClassActive(this.minutesArray, this._minutes, allTipsMinutes);\n            this._toggleBackgroundColorCircle(`${TIPS_MINUTES_CLASS}`);\n\n            this._objWithDataOnChange.degreesMinutes = _degrees;\n            this._objWithDataOnChange.minutes = minuteTimes;\n          }\n        }\n\n        if (hours || innerHours) {\n          let hour;\n\n          let degrees = Math.trunc((rds * 180) / Math.PI) + 90;\n          degrees = Math.round(degrees / 30) * 30;\n\n          Manipulator.addClass(this._circle, 'active');\n\n          if (this._makeHourDegrees(target, degrees, hour) === undefined) {\n            return;\n          }\n          const makeDegrees = () => {\n            if (checkBrowser() && degrees && elFromPoint) {\n              const { degrees: touchDegrees, hour: touchHours } = this._makeHourDegrees(\n                elFromPoint,\n                degrees,\n                hour\n              );\n              return this._handleMoveHand(elFromPoint, touchHours, touchDegrees);\n            } else {\n              const { degrees: movedDegrees, hour: movedHours } = this._makeHourDegrees(\n                target,\n                degrees,\n                hour\n              );\n              return this._handleMoveHand(target, movedHours, movedDegrees);\n            }\n          };\n\n          this._objWithDataOnChange.degreesHours = degrees;\n\n          if (\n            this._handlerMaxMinHoursOptions(\n              degrees,\n              maxTimeHour,\n              minTimeHour,\n              maxTimeFormat,\n              minTimeFormat,\n              e\n            )\n          ) {\n            makeDegrees();\n          }\n        }\n\n        e.stopPropagation();\n      }\n    );\n  }\n\n  _hasTargetInnerClass(target) {\n    return (\n      Manipulator.hasClass(target, CLOCK_INNER_CLASS) ||\n      Manipulator.hasClass(target, TIPS_INNER_HOURS_CLASS) ||\n      Manipulator.hasClass(target, TIPS_INNER_ELEMENT_CLASS)\n    );\n  }\n\n  _handleMoveHand(target, hour, degrees) {\n    const allTipsHours = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`, this._modal);\n    const allTipsInner = SelectorEngine.find(`.${TIPS_INNER_HOURS_CLASS}`, this._modal);\n\n    if (this._isMouseMove) {\n      if (this._hasTargetInnerClass(target)) {\n        Manipulator.addStyle(this._hand, {\n          height: '21.5%',\n        });\n      } else {\n        Manipulator.addStyle(this._hand, {\n          height: 'calc(40% + 1px)',\n        });\n      }\n\n      Manipulator.addStyle(this._hand, {\n        transform: `rotateZ(${degrees}deg)`,\n      });\n\n      this._hour.textContent = hour >= 10 || hour === '00' ? hour : `0${hour}`;\n\n      this._toggleClassActive(this.hoursArray, this._hour, allTipsHours);\n      this._toggleClassActive(this.innerHours, this._hour, allTipsInner);\n\n      this._objWithDataOnChange.hour = hour >= 10 || hour === '00' ? hour : `0${hour}`;\n    }\n  }\n\n  _handlerMaxMinMinutesOptions(degrees, minute) {\n    let { maxTime, minTime } = this._options;\n    const { format12, increment, disablePast, disableFuture } = this._options;\n\n    minTime = setMinTime(minTime, disablePast, format12);\n    maxTime = setMaxTime(maxTime, disableFuture, format12);\n\n    const maxMin = takeValue(maxTime, false)[1];\n    const minMin = takeValue(minTime, false)[1];\n    const maxHourTime = takeValue(maxTime, false)[0];\n    const minHourTime = takeValue(minTime, false)[0];\n\n    const maxTimeFormat = takeValue(maxTime, false)[2];\n    const minTimeFormat = takeValue(minTime, false)[2];\n\n    const maxMinDegrees = maxMin !== '' ? maxMin * 6 : '';\n    const minMinDegrees = minMin !== '' ? minMin * 6 : '';\n\n    const selectedHour = Number(this._hour.textContent);\n\n    if (!maxTimeFormat && !minTimeFormat) {\n      if (maxTime !== '' && minTime !== '') {\n        if (\n          (maxHourTime == selectedHour && degrees > maxMinDegrees) ||\n          (minHourTime == selectedHour && degrees < minMinDegrees)\n        ) {\n          return degrees;\n        }\n      } else if (minTime !== '' && selectedHour <= Number(minHourTime)) {\n        if (degrees <= minMinDegrees - 6) {\n          return degrees;\n        }\n      } else if (maxTime !== '' && selectedHour >= Number(maxHourTime)) {\n        if (degrees >= maxMinDegrees + 6) {\n          return degrees;\n        }\n      }\n    } else {\n      // eslint-disable-next-line no-lonely-if\n      if (minTime !== '') {\n        if (minTimeFormat === 'PM' && this._isAmEnabled) {\n          return;\n        }\n\n        if (minTimeFormat === 'PM' && this._isPmEnabled) {\n          if (selectedHour < Number(minHourTime)) {\n            return;\n          }\n\n          if (selectedHour <= Number(minHourTime)) {\n            if (degrees <= minMinDegrees - 6) {\n              return degrees;\n            }\n          }\n        } else if (minTimeFormat === 'AM' && this._isAmEnabled) {\n          if (selectedHour < Number(minHourTime)) {\n            return;\n          }\n\n          if (selectedHour <= Number(minHourTime)) {\n            if (degrees <= minMinDegrees - 6) {\n              return degrees;\n            }\n          }\n        }\n      }\n      if (maxTime !== '') {\n        if (maxTimeFormat === 'AM' && this._isPmEnabled) {\n          return;\n        }\n\n        if (maxTimeFormat === 'PM' && this._isPmEnabled) {\n          if (selectedHour >= Number(maxHourTime)) {\n            if (degrees >= maxMinDegrees + 6) {\n              return degrees;\n            }\n          }\n        } else if (maxTimeFormat === 'AM' && this._isAmEnabled) {\n          if (selectedHour >= Number(maxHourTime)) {\n            if (degrees >= maxMinDegrees + 6) {\n              return degrees;\n            }\n          }\n        }\n      }\n    }\n\n    if (increment) {\n      degrees = Math.round(degrees / 30) * 30;\n    }\n\n    if (degrees <= 0) {\n      degrees = 360 + degrees;\n    } else if (degrees >= 360) {\n      degrees = 0;\n    }\n\n    return {\n      degrees,\n      minute,\n    };\n  }\n\n  _removeModal() {\n    if (this._animations) {\n      setTimeout(() => {\n        this._removeModalElements();\n        this._scrollBar.reset();\n      }, 300);\n    } else {\n      this._removeModalElements();\n      this._scrollBar.reset();\n    }\n\n    EventHandlerMulti.off(\n      this._document,\n      `${EVENT_CLICK_DATA_API} ${EVENT_KEYDOWN_DATA_API} ${EVENT_MOUSEDOWN_DATA_API} ${EVENT_MOUSEUP_DATA_API} ${EVENT_MOUSEMOVE_DATA_API} ${EVENT_MOUSELEAVE_DATA_API} ${EVENT_MOUSEOVER_DATA_API} ${EVENT_TOUCHSTART_DATA_API} ${EVENT_TOUCHMOVE_DATA_API} ${EVENT_TOUCHEND_DATA_API}`\n    );\n    EventHandler.off(window, EVENT_KEYDOWN_DATA_API);\n  }\n\n  _removeModalElements() {\n    if (this._modal) {\n      this._modal.remove();\n    }\n  }\n\n  _toggleBackdropAnimation(isToRemove = false) {\n    if (isToRemove) {\n      Manipulator.addClass(this._wrapper, 'animation');\n      Manipulator.addClass(this._wrapper, WRAPPER_CLOSE_ANIMATION_CLASS);\n      this._wrapper.style.animationDuration = '300ms';\n    } else {\n      Manipulator.addClass(this._wrapper, 'animation');\n      Manipulator.addClass(this._wrapper, WRAPPER_OPEN_ANIMATION_CLASS);\n      this._wrapper.style.animationDuration = '300ms';\n\n      if (!this._options.inline) Manipulator.addClass(this._clock, CLOCK_ANIMATION_CLASS);\n    }\n  }\n\n  _toggleBackgroundColorCircle = (classes) => {\n    const tips = this._modal.querySelector(`.${classes}.${ACTIVE_CLASS}`) !== null;\n\n    if (tips) {\n      Manipulator.addClass(this._circle, 'active');\n      return;\n    }\n    Manipulator.removeClass(this._circle, 'active');\n  };\n\n  _toggleClassActive = (array, { textContent }, tips) => {\n    const findInArray = [...array].find((e) => Number(e) === Number(textContent));\n\n    return tips.forEach((e) => {\n      if (!Manipulator.hasClass(e, 'disabled')) {\n        if (e.textContent === findInArray) {\n          Manipulator.addClass(e, ACTIVE_CLASS);\n        } else {\n          Manipulator.removeClass(e, ACTIVE_CLASS);\n        }\n      }\n    });\n  };\n\n  _addActiveClassToTip(tips, value) {\n    tips.forEach((tip) => {\n      if (Number(tip.textContent) === Number(value)) {\n        Manipulator.addClass(tip, ACTIVE_CLASS);\n      }\n    });\n  }\n\n  _makeMinutesDegrees = (degrees, minute) => {\n    const { increment } = this._options;\n\n    if (degrees < 0) {\n      minute = Math.round(360 + degrees / 6) % 60;\n      degrees = 360 + Math.round(degrees / 6) * 6;\n    } else {\n      minute = Math.round(degrees / 6) % 60;\n      degrees = Math.round(degrees / 6) * 6;\n    }\n\n    if (increment) {\n      degrees = Math.round(degrees / 30) * 30;\n      minute = (Math.round(degrees / 6) * 6) / 6;\n\n      if (minute === 60) {\n        minute = '00';\n      }\n    }\n\n    if (degrees >= 360) {\n      degrees = 0;\n    }\n\n    return {\n      degrees,\n      minute,\n      addDegrees: increment ? 30 : 6,\n    };\n  };\n\n  _makeHourDegrees = (target, degrees, hour) => {\n    if (!target) {\n      return;\n    }\n\n    if (this._hasTargetInnerClass(target)) {\n      if (degrees < 0) {\n        hour = Math.round(360 + degrees / 30) % 24;\n        degrees = 360 + degrees;\n      } else {\n        hour = Math.round(degrees / 30) + 12;\n        if (hour === 12) {\n          hour = '00';\n        }\n      }\n    } else if (degrees < 0) {\n      hour = Math.round(360 + degrees / 30) % 12;\n      degrees = 360 + degrees;\n    } else {\n      hour = Math.round(degrees / 30) % 12;\n      if (hour === 0 || hour > 12) {\n        hour = 12;\n      }\n    }\n\n    if (degrees >= 360) {\n      degrees = 0;\n    }\n\n    return {\n      degrees,\n      hour,\n      addDegrees: 30,\n    };\n  };\n\n  _makeInnerHoursDegrees = (degrees, hour) => {\n    if (degrees < 0) {\n      hour = Math.round(360 + degrees / 30) % 24;\n      degrees = 360 + degrees;\n    } else {\n      hour = Math.round(degrees / 30) + 12;\n      if (hour === 12) {\n        hour = '00';\n      }\n    }\n\n    return {\n      degrees,\n      hour,\n      addDegrees: 30,\n    };\n  };\n\n  _setHourOrMinute(number) {\n    return number < 10 ? `0${number}` : number;\n  }\n\n  _appendTimes() {\n    const { format24 } = this._options;\n\n    if (format24) {\n      this._getAppendClock(this.hoursArray, `.${CLOCK_CLASS}`, `${TIPS_HOURS_CLASS}`);\n      this._getAppendClock(this.innerHours, `.${CLOCK_INNER_CLASS}`, TIPS_INNER_HOURS_CLASS);\n    } else {\n      this._getAppendClock(this.hoursArray, `.${CLOCK_CLASS}`, `${TIPS_HOURS_CLASS}`);\n    }\n  }\n\n  _getAppendClock = (array = [], clockClass = `.${CLOCK_CLASS}`, tipsClass) => {\n    let { minTime, maxTime } = this._options;\n    const { inline, format12, disablePast, disableFuture } = this._options;\n    minTime = setMinTime(minTime, disablePast, format12);\n    maxTime = setMaxTime(maxTime, disableFuture, format12);\n\n    const [maxTimeHour, maxTimeMinutes, maxTimeFormat] = takeValue(maxTime, false);\n    const [minTimeHour, minTimeMinutes, minTimeFormat] = takeValue(minTime, false);\n\n    // fix for append clock for max/min if input has invalid  value\n    if (!inline) {\n      if (format12) {\n        if (this._isInvalidTimeFormat && !Manipulator.hasClass(this._AM, 'active')) {\n          Manipulator.addClass(this._PM, 'active');\n        }\n      }\n    }\n\n    const clock = SelectorEngine.findOne(clockClass);\n\n    const elements = 360 / array.length;\n\n    function rad(el) {\n      return el * (Math.PI / 180);\n    }\n\n    if (clock === null) {\n      return;\n    }\n\n    const clockWidth = (clock.offsetWidth - 32) / 2;\n    const clockHeight = (clock.offsetHeight - 32) / 2;\n    const radius = clockWidth - 4;\n\n    setTimeout(() => {\n      let currentFormat;\n      if (format12) {\n        currentFormat = SelectorEngine.findOne(`.${HOUR_MODE_CLASS}.${ACTIVE_CLASS}`).textContent;\n      }\n      this._handleDisablingTipsMinTime(currentFormat, minTimeFormat, minTimeMinutes, minTimeHour);\n      this._handleDisablingTipsMaxTime(currentFormat, maxTimeFormat, maxTimeMinutes, maxTimeHour);\n    }, 0);\n\n    [...array].forEach((e, i) => {\n      const angle = rad(i * elements);\n\n      const span = element('span');\n      const spanToTips = element('span');\n\n      spanToTips.innerHTML = e;\n      Manipulator.addClass(span, tipsClass);\n\n      const itemWidth = span.offsetWidth;\n      const itemHeight = span.offsetHeight;\n\n      Manipulator.addStyle(span, {\n        left: `${clockWidth + Math.sin(angle) * radius - itemWidth}px`,\n        bottom: `${clockHeight + Math.cos(angle) * radius - itemHeight}px`,\n      });\n\n      if (array.includes('05')) {\n        Manipulator.addClass(span, `${TIPS_MINUTES_CLASS}`);\n      }\n\n      if (array.includes('13')) {\n        spanToTips.classList.add(TIPS_INNER_ELEMENT_CLASS);\n      } else {\n        spanToTips.classList.add(TIPS_ELEMENT_CLASS);\n      }\n\n      span.appendChild(spanToTips);\n      return clock.appendChild(span);\n    });\n  };\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n    config = {\n      ...Default,\n      ...dataAttributes,\n      ...config,\n    };\n\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n\n  _getContainer() {\n    return SelectorEngine.findOne(this._options.container);\n  }\n\n  _listenToUserInput() {\n    EventHandler.on(this.input, 'input', (event) => {\n      this._handleUserInput(event.target.value);\n    });\n  }\n\n  _handleUserInput(input) {\n    const { format24, format12 } = this._options;\n\n    if (this.input.value === '') {\n      return;\n    }\n\n    const regexAMFormat = /^(0?[1-9]|1[0-2]):[0-5][0-9] [APap][mM]$/;\n    const regexNormalFormat = /^(?:[01]\\d|2[0-3]):[0-5]\\d$/;\n    const testedAMRegex = regexAMFormat.test(input);\n    const testedNormalRegex = regexNormalFormat.test(input);\n\n    if (testedNormalRegex === true && format24) {\n      this._isInvalidTimeFormat = false;\n      this._inputValue = this.input.value;\n      this._currentTime = formatNormalHours(this._inputValue);\n    } else if (testedAMRegex === true && format12) {\n      this._isInvalidTimeFormat = false;\n      this._inputValue = this.input.value;\n      this._currentTime = formatToAmPm(this._inputValue);\n    } else {\n      this._isInvalidTimeFormat = true;\n    }\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data && /dispose|hide/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new Timepicker(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n}\n\nexport default Timepicker;\n","import EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'navbar';\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Navbar extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  init() {\n    this._onScroll();\n    this._addEvent();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  dispose() {\n    this._removeEvent();\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n  _addEvent() {\n    EventHandler.on(window, 'scroll', () => this._onScroll());\n  }\n\n  _removeEvent() {\n    EventHandler.off(window, 'scroll');\n  }\n\n  _onScroll() {\n    if (window.scrollY > 0) {\n      Manipulator.addClass(this._element, 'navbar-scrolled');\n    } else {\n      Manipulator.removeClass(this._element, 'navbar-scrolled');\n    }\n  }\n}\n\nexport default Navbar;\n","import { typeCheckConfig } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport Manipulator from '../mdb/dom/manipulator';\nimport EventHandler from '../mdb/dom/event-handler';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'infiniteScroll';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_COMPLETED = `completed${EVENT_KEY}`;\n\nconst Default = {\n  infiniteDirection: 'y',\n};\n\nconst DefaultType = {\n  infiniteDirection: 'string',\n};\n\nclass InfiniteScroll extends BaseComponent {\n  constructor(element, data) {\n    super(element);\n    this._element = element;\n\n    this._options = this._getConfig(data);\n\n    this.scrollHandler = this._scrollHandler.bind(this);\n\n    this._init();\n\n    if (this._element !== window) {\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  get rect() {\n    return this._element.getBoundingClientRect();\n  }\n\n  get condition() {\n    if (this._element === window) {\n      return (\n        Math.abs(window.scrollY + window.innerHeight - document.documentElement.scrollHeight) < 1\n      );\n    }\n    if (this._options.infiniteDirection === 'x') {\n      return this.rect.width + this._element.scrollLeft + 10 >= this._element.scrollWidth;\n    }\n    return Math.ceil(this.rect.height + this._element.scrollTop) >= this._element.scrollHeight;\n  }\n\n  // Public\n\n  dispose() {\n    EventHandler.off(this._element, 'scroll');\n    if (this._element !== window) {\n      Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n    }\n\n    super.dispose();\n  }\n\n  // Private\n\n  _init() {\n    EventHandler.on(this._element, 'scroll', () => this._scrollHandler());\n  }\n\n  _scrollHandler() {\n    if (this.condition) {\n      EventHandler.trigger(this._element, EVENT_COMPLETED);\n    }\n    EventHandler.off(this._element, 'scroll', this.scrollHandler);\n  }\n\n  _getConfig(options) {\n    const config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...options,\n    };\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n      if (!data) {\n        data = new InfiniteScroll(this, _config);\n      }\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](this);\n      }\n    });\n  }\n}\n\nexport default InfiniteScroll;\n","import { typeCheckConfig } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport Animate from './animate';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'lazyLoad';\nconst DATA_KEY = 'mdb.lazyLoad';\n\nconst CLASSNAME_LAZYLOAD = 'lazy';\nconst SELECTOR_LAZYLOAD = '.lazy';\nconst SELECTOR_ELEMENTS = ['img', 'video'];\n\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_LOADED = `contentLoaded${EVENT_KEY}`;\nconst EVENT_ERROR = `loadingError${EVENT_KEY}`;\n\nconst DefaultType = {\n  lazySrc: '(string|null)',\n  lazyDelay: 'number',\n  lazyAnimation: 'string',\n  lazyOffset: 'number',\n  lazyPlaceholder: '(string|undefined)',\n  lazyError: '(string|undefined)',\n};\n\nconst Default = {\n  lazySrc: null,\n  lazyDelay: 500,\n  lazyAnimation: 'fade-in',\n  lazyOffset: 0,\n};\n\nclass LazyLoad extends BaseComponent {\n  constructor(element, data) {\n    super(element);\n\n    this._options = this._getConfig(data);\n\n    this.scrollHandler = this._scrollHandler.bind(this);\n\n    this.errorHandler = this._setElementError.bind(this);\n\n    this._childrenInstances = null;\n\n    this._init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  get offsetValues() {\n    return this._element.getBoundingClientRect();\n  }\n\n  get inViewport() {\n    if (this.parent) {\n      const parentRect = this.parent.getBoundingClientRect();\n      return (\n        parentRect.y > 0 &&\n        parentRect.y < window.innerHeight &&\n        this.offsetValues.y >= parentRect.y &&\n        this.offsetValues.y <= parentRect.y + parentRect.height &&\n        this.offsetValues.y <= window.innerHeight\n      );\n    }\n\n    return (\n      this.offsetValues.top + this._options.lazyOffset <= window.innerHeight &&\n      this.offsetValues.bottom >= 0\n    );\n  }\n\n  get parent() {\n    const [container] = SelectorEngine.parents(this._element, SELECTOR_LAZYLOAD);\n    return container;\n  }\n\n  get node() {\n    return this._element.nodeName;\n  }\n\n  get isContainer() {\n    return !SelectorEngine.matches(this._element, SELECTOR_ELEMENTS);\n  }\n\n  // Public\n\n  dispose() {\n    EventHandler.off(this._element, 'load');\n    EventHandler.off(this._element, 'error', this.errorHandler);\n    EventHandler.off(window, 'scroll', this.scrollHandler);\n\n    if (this._animation) {\n      this._animation.dispose();\n      this._animation = null;\n    }\n    if (this._childrenInstances) {\n      this._childrenInstances.forEach((child) => child.dispose());\n    }\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n\n  _init() {\n    Manipulator.addClass(this._element, CLASSNAME_LAZYLOAD);\n\n    if (this.isContainer) {\n      this._setupContainer();\n      return;\n    }\n\n    this._setupElement();\n  }\n\n  _setupElement() {\n    EventHandler.one(this._element, 'error', this.errorHandler);\n\n    if (this._options.lazyPlaceholder) {\n      this._setPlaceholder();\n    }\n\n    this._animation = new Animate(this._element, {\n      animation: this._options.lazyAnimation,\n      animationStart: 'onLoad',\n    });\n\n    EventHandler.one(this._element, 'load', () => this._scrollHandler());\n    if (this.parent) {\n      EventHandler.on(this.parent, 'scroll', this.scrollHandler);\n    }\n\n    EventHandler.on(window, 'scroll', this.scrollHandler);\n  }\n\n  _scrollHandler() {\n    if (this.inViewport) {\n      this._timeout = setTimeout(() => {\n        this._setSrc();\n\n        this._element.classList.remove(CLASSNAME_LAZYLOAD);\n\n        this._removeAttrs();\n\n        this._animation.init();\n      }, this._options.lazyDelay);\n\n      if (this.parent) {\n        EventHandler.off(this.parent, 'scroll', this.scrollHandler);\n      }\n\n      EventHandler.off(window, 'scroll', this.scrollHandler);\n    }\n  }\n\n  _setElementError() {\n    if (!this._options.lazyError || this._element.src === this._options.lazyError) {\n      this._element.alt = '404 not found';\n    } else {\n      this._element.setAttribute('src', this._options.lazyError);\n    }\n    EventHandler.trigger(this._element, EVENT_ERROR);\n  }\n\n  _setSrc() {\n    this._element.setAttribute('src', this._options.lazySrc);\n\n    EventHandler.trigger(this._element, EVENT_LOADED);\n  }\n\n  _setPlaceholder() {\n    if (this.node === 'IMG') {\n      this._element.setAttribute('src', this._options.lazyPlaceholder);\n    } else if (this.node === 'VIDEO') {\n      this._element.setAttribute('poster', this._options.lazyPlaceholder);\n    }\n  }\n\n  _removeAttrs() {\n    ['src', 'delay', 'animation', 'placeholder', 'offset', 'error'].forEach((attr) => {\n      Manipulator.removeDataAttribute(this._element, `lazy-${attr}`);\n    });\n  }\n\n  _setupContainer() {\n    this._childrenInstances = SelectorEngine.children(this._element, SELECTOR_ELEMENTS).map(\n      (child) => new LazyLoad(child, this._options)\n    );\n  }\n\n  _getConfig(options) {\n    const config = {\n      ...Default,\n      ...options,\n      ...Manipulator.getDataAttributes(this._element),\n    };\n\n    typeCheckConfig(NAME, config, DefaultType);\n\n    return config;\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n\n      const _config = typeof config === 'object' && config;\n\n      if (!data) {\n        data = new LazyLoad(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n}\n\nexport default LazyLoad;\n","export function getDate(date) {\n  return date.getDate();\n}\n\nexport function getDayNumber(date) {\n  return date.getDay();\n}\n\nexport function getMonth(date) {\n  return date.getMonth();\n}\n\nexport function getYear(date) {\n  return date.getFullYear();\n}\n\nexport function getFirstDayOfWeek(year, month, options) {\n  const firstDayIndex = options.startDay;\n  const sundayIndex = firstDayIndex > 0 ? 7 - firstDayIndex : 0;\n  const date = new Date(year, month);\n  const index = date.getDay() + sundayIndex;\n  const newIndex = index >= 7 ? index - 7 : index;\n  return newIndex;\n}\n\nexport function getDaysInMonth(date) {\n  return getMonthEnd(date).getDate();\n}\n\nexport function getMonthEnd(date) {\n  return createDate(date.getFullYear(), date.getMonth() + 1, 0);\n}\n\nexport function getToday() {\n  return new Date();\n}\n\nexport function addYears(date, years) {\n  return addMonths(date, years * 12);\n}\n\nexport function addMonths(date, months) {\n  const month = createDate(date.getFullYear(), date.getMonth() + months, date.getDate());\n  const dayOfPreviousMonth = getDate(date);\n  const dayOfNewMonth = getDate(month);\n\n  // Solution for edge cases, like moving from a month with a greater number\n  // of days than the destination month. For example, when we move from 31 Mar 2020 to\n  // February, createDate(2020, 2, 31) will return 2 Mar 2020, not the desired 29 Feb 2020.\n  // We need to use setDate(0) to move back to the last day of the previous month (29 Feb 2020)\n  if (dayOfPreviousMonth !== dayOfNewMonth) {\n    month.setDate(0);\n  }\n\n  return month;\n}\n\nexport function addDays(date, days) {\n  return createDate(date.getFullYear(), date.getMonth(), date.getDate() + days);\n}\n\nexport function createDate(year, month, day) {\n  const result = new Date(year, month, day);\n\n  // In js native date years from 0 to 99 are treated as abbreviation\n  // for dates like 19xx\n  if (year >= 0 && year < 100) {\n    result.setFullYear(result.getFullYear() - 1900);\n  }\n  return result;\n}\n\nexport function convertStringToDate(dateString) {\n  const dateArr = dateString.split('-');\n  const year = dateArr[0];\n  const month = dateArr[1];\n  const day = dateArr[2];\n\n  return createDate(year, month, day);\n}\n\nexport function isValidDate(date) {\n  return !Number.isNaN(date.getTime());\n}\n\nexport function compareDates(date1, date2) {\n  return (\n    getYear(date1) - getYear(date2) ||\n    getMonth(date1) - getMonth(date2) ||\n    getDate(date1) - getDate(date2)\n  );\n}\n\nexport function isSameDate(date1, date2) {\n  date1.setHours(0, 0, 0, 0);\n  date2.setHours(0, 0, 0, 0);\n\n  return date1.getTime() === date2.getTime();\n}\n\nexport function getYearsOffset(activeDate, yearsInView) {\n  const activeYear = getYear(activeDate);\n  const yearsDifference = activeYear - getStartYear();\n  return modulo(yearsDifference, yearsInView);\n}\n\nfunction modulo(a, b) {\n  return ((a % b) + b) % b;\n}\n\nexport function getStartYear(yearsInView, minDate, maxDate) {\n  let startYear = 0;\n\n  if (maxDate) {\n    const maxYear = getYear(maxDate);\n    startYear = maxYear - yearsInView + 1;\n  } else if (minDate) {\n    startYear = getYear(minDate);\n  }\n\n  return startYear;\n}\n\nexport function isDateDisabled(date, minDate, maxDate, filter, disabledPast, disabledFuture) {\n  const currentDate = new Date();\n  currentDate.setHours(0, 0, 0, 0);\n\n  const isBeforeMin = minDate && compareDates(date, minDate) <= -1;\n  const isAfterMax = maxDate && compareDates(date, maxDate) >= 1;\n\n  const isDisabledPast = disabledPast && compareDates(date, currentDate) <= -1;\n  const isDisabledFuture = disabledFuture && compareDates(date, currentDate) >= 1;\n\n  const isDisabled = filter && filter(date) === false;\n\n  return isBeforeMin || isAfterMax || isDisabled || isDisabledPast || isDisabledFuture;\n}\n\nexport function isMonthDisabled(month, year, minDate, maxDate, disabledPast, disabledFuture) {\n  const currentDate = new Date();\n  const maxYear = maxDate && getYear(maxDate);\n  const maxMonth = maxDate && getMonth(maxDate);\n  const minYear = minDate && getYear(minDate);\n  const minMonth = minDate && getMonth(minDate);\n  const currentYear = getYear(currentDate);\n  const currentMonth = getMonth(currentDate);\n\n  const isMonthAndYearAfterMax =\n    maxMonth && maxYear && (year > maxYear || (year === maxYear && month > maxMonth));\n\n  const isMonthAndYearBeforeMin =\n    minMonth && minYear && (year < minYear || (year === minYear && month < minMonth));\n\n  const isMonthAndYearDisabledPast =\n    disabledPast && (year < currentYear || (year === currentYear && month < currentMonth));\n  const isMonthAndYearDisabledFuture =\n    disabledFuture && (year > currentYear || (year === currentYear && month > currentMonth));\n\n  return (\n    isMonthAndYearAfterMax ||\n    isMonthAndYearBeforeMin ||\n    isMonthAndYearDisabledPast ||\n    isMonthAndYearDisabledFuture\n  );\n}\n\nexport function isYearDisabled(year, minDate, maxDate, disabledPast, disabledFuture) {\n  const min = minDate && getYear(minDate);\n  const max = maxDate && getYear(maxDate);\n  const currentYear = getYear(new Date());\n\n  const isAfterMax = max && year > max;\n  const isBeforeMin = min && year < min;\n  const isDisabledPast = disabledPast && year < currentYear;\n  const isDisabledFuture = disabledFuture && year > currentYear;\n\n  return isAfterMax || isBeforeMin || isDisabledPast || isDisabledFuture;\n}\n\nexport function isNextDateDisabled(\n  disabledFuture,\n  activeDate,\n  view,\n  yearsInView,\n  minDate,\n  maxDate,\n  lastYearInView,\n  firstYearInView\n) {\n  const currentDate = new Date();\n  currentDate.setHours(0, 0, 0, 0);\n  if (disabledFuture && maxDate && compareDates(maxDate, currentDate) < 0) {\n    maxDate = currentDate;\n  } else if (disabledFuture) {\n    maxDate = currentDate;\n  }\n  return (\n    maxDate &&\n    areDatesInSameView(\n      activeDate,\n      maxDate,\n      view,\n      yearsInView,\n      minDate,\n      maxDate,\n      lastYearInView,\n      firstYearInView\n    )\n  );\n}\n\nexport function isPreviousDateDisabled(\n  disabledPast,\n  activeDate,\n  view,\n  yearsInView,\n  minDate,\n  maxDate,\n  lastYearInView,\n  firstYearInView\n) {\n  const currentDate = new Date();\n  currentDate.setHours(0, 0, 0, 0);\n  if (disabledPast && minDate && compareDates(minDate, currentDate) < 0) {\n    minDate = currentDate;\n  } else if (disabledPast) {\n    minDate = currentDate;\n  }\n  return (\n    minDate &&\n    areDatesInSameView(\n      activeDate,\n      minDate,\n      view,\n      yearsInView,\n      minDate,\n      maxDate,\n      lastYearInView,\n      firstYearInView\n    )\n  );\n}\n\nexport function areDatesInSameView(\n  date1,\n  date2,\n  view,\n  yearsInView,\n  minDate,\n  maxDate,\n  lastYearInView,\n  firstYearInView\n) {\n  if (view === 'days') {\n    return getYear(date1) === getYear(date2) && getMonth(date1) === getMonth(date2);\n  }\n\n  if (view === 'months') {\n    return getYear(date1) === getYear(date2);\n  }\n\n  if (view === 'years') {\n    return getYear(date2) >= firstYearInView && getYear(date2) <= lastYearInView;\n  }\n\n  return false;\n}\n","/* eslint-disable indent */\n\nimport Manipulator from '../../mdb/dom/manipulator';\nimport { element } from '../../mdb/util';\nimport {\n  getYear,\n  getMonth,\n  getDate,\n  getDayNumber,\n  getFirstDayOfWeek,\n  addMonths,\n  getDaysInMonth,\n  createDate,\n  isSameDate,\n  getToday,\n  getYearsOffset,\n  isDateDisabled,\n  isMonthDisabled,\n  isYearDisabled,\n} from './date-utils';\n\nexport function getDatepickerTemplate(\n  date,\n  selectedDate,\n  selectedYear,\n  selectedMonth,\n  options,\n  monthsInRow,\n  yearsInView,\n  yearsInRow,\n  id\n) {\n  const month = getMonth(date);\n  const year = getYear(date);\n  const day = getDate(date);\n  const dayNumber = getDayNumber(date);\n  const template = element('div');\n  const inlineContent = `\n        ${createMainContent(\n          date,\n          month,\n          year,\n          selectedDate,\n          selectedYear,\n          selectedMonth,\n          options,\n          monthsInRow,\n          yearsInView,\n          yearsInRow\n        )}\n    `;\n  const modalContent = `\n      ${createHeader(day, dayNumber, month, options, date)}\n      ${createMainContent(\n        date,\n        month,\n        year,\n        selectedDate,\n        selectedYear,\n        selectedMonth,\n        options,\n        monthsInRow,\n        yearsInView,\n        yearsInRow\n      )}\n    `;\n\n  if (options.inline) {\n    Manipulator.addClass(template, 'datepicker-dropdown-container');\n    Manipulator.addClass(template, `datepicker-dropdown-container-${id}`);\n\n    template.innerHTML = inlineContent;\n  } else {\n    Manipulator.addClass(template, 'datepicker-modal-container');\n    Manipulator.addClass(template, `datepicker-modal-container-${id}`);\n\n    template.innerHTML = modalContent;\n  }\n\n  return template;\n}\n\nexport function getBackdropTemplate() {\n  const backdrop = element('div');\n  Manipulator.addClass(backdrop, 'datepicker-backdrop');\n\n  return backdrop;\n}\n\nexport function createContainer() {\n  const container = element('div');\n  Manipulator.addClass(container, '.datepicker-modal-container');\n\n  return container;\n}\n\nexport function createCustomHeader(day, dayNumber, month, selected, options) {\n  const { weekdaysShort, weekdaysFull, monthsShort, headerTemplateModifier, headerTemplate } =\n    options;\n\n  const selectedDate = headerTemplateModifier ? headerTemplateModifier(selected) : selected;\n  return headerTemplate\n    .replaceAll('[day]', day)\n    .replaceAll('[weekday]', weekdaysShort[dayNumber])\n    .replaceAll('[weekdayFull]', weekdaysFull[dayNumber])\n    .replaceAll('[month]', monthsShort[month])\n    .replaceAll('[selected]', selectedDate);\n}\n\nfunction createHeader(day, dayNumber, month, options, selected) {\n  return `\n      <div class=\"datepicker-header\">\n      ${\n        options.headerTemplate\n          ? createCustomHeader(day, dayNumber, month, selected, options)\n          : `\n        <div class=\"datepicker-title\">\n          <span class=\"datepicker-title-text\">${options.title}</span>\n        </div>\n        <div class=\"datepicker-date\">\n          <span class=\"datepicker-date-text\">${options.weekdaysShort[dayNumber]}, ${options.monthsShort[month]} ${day}</span>\n        </div>\n        `\n      }\n      </div>\n    `;\n}\n\nfunction createMainContent(\n  date,\n  month,\n  year,\n  selectedDate,\n  selectedYear,\n  selectedMonth,\n  options,\n  monthsInRow,\n  yearsInView,\n  yearsInRow\n) {\n  let mainContentTemplate;\n  if (options.inline) {\n    mainContentTemplate = `\n    <div class=\"datepicker-main\">\n      ${createControls(month, year, options)}\n      <div class=\"datepicker-view\" tabindex=\"0\">\n        ${createViewTemplate(\n          date,\n          year,\n          selectedDate,\n          selectedYear,\n          selectedMonth,\n          options,\n          monthsInRow,\n          yearsInView,\n          yearsInRow\n        )}\n      </div>\n    </div>\n  `;\n  } else {\n    mainContentTemplate = `\n      <div class=\"datepicker-main\">\n        ${createControls(month, year, options)}\n        <div class=\"datepicker-view\" tabindex=\"0\">\n          ${createViewTemplate(\n            date,\n            year,\n            selectedDate,\n            selectedYear,\n            selectedMonth,\n            options,\n            monthsInRow,\n            yearsInView,\n            yearsInRow\n          )}\n        </div>\n        ${createFooter(options)}\n      </div>\n    `;\n  }\n\n  return mainContentTemplate;\n}\n\nfunction createViewTemplate(\n  date,\n  year,\n  selectedDate,\n  selectedYear,\n  selectedMonth,\n  options,\n  monthsInRow,\n  yearsInView,\n  yearsInRow\n) {\n  let viewTemplate;\n  if (options.view === 'days') {\n    viewTemplate = createDayViewTemplate(date, selectedDate, options);\n  } else if (options.view === 'months') {\n    viewTemplate = createMonthViewTemplate(year, selectedYear, selectedMonth, options, monthsInRow);\n  } else {\n    viewTemplate = createYearViewTemplate(date, selectedYear, options, yearsInView, yearsInRow);\n  }\n\n  return viewTemplate;\n}\n\nfunction createControls(month, year, options) {\n  return `\n    <div class=\"datepicker-date-controls\">\n      <button class=\"datepicker-view-change-button\" aria-label=\"${options.switchToMultiYearViewLabel}\">\n        ${options.monthsFull[month]} ${year}\n      </button>\n      <div class=\"datepicker-arrow-controls\">\n        <button class=\"datepicker-previous-button\" aria-label=\"${options.prevMonthLabel}\"></button>\n        <button class=\"datepicker-next-button\" aria-label=\"${options.nextMonthLabel}\"></button>\n      </div>\n    </div>\n    `;\n}\n\nfunction createFooter(options) {\n  const okBtn = `<button class=\"datepicker-footer-btn datepicker-ok-btn\" aria-label=\"${options.okBtnLabel}\">${options.okBtnText}</button>`;\n  const cancelButton = `<button class=\"datepicker-footer-btn datepicker-cancel-btn\" aria-label=\"${options.cancelBtnLabel}\">${options.cancelBtnText}</button>`;\n  const clearButton = `<button class=\"datepicker-footer-btn datepicker-clear-btn\" aria-label=\"${options.clearBtnLabel}\">${options.clearBtnText}</button>`;\n\n  return `\n        <div class=\"datepicker-footer\">\n          ${options.removeClearBtn ? '' : clearButton}\n          ${options.removeCancelBtn ? '' : cancelButton}\n          ${options.removeOkBtn ? '' : okBtn}\n        </div>\n      `;\n}\n\nexport function createDayViewTemplate(date, headerDate, options) {\n  const dates = getDatesArray(date, headerDate, options);\n  const dayNames = options.weekdaysNarrow;\n\n  const tableHeadContent = `\n      <tr>\n        ${dayNames\n          .map((name, i) => {\n            return `<th class=\"datepicker-day-heading\" scope=\"col\" aria-label=\"${options.weekdaysFull[i]}\">${name}</th>`;\n          })\n          .join('')}\n      </tr>\n    `;\n\n  const tableBodyContent = dates\n    .map((week) => {\n      return `\n        <tr>\n          ${week\n            .map((day) => {\n              return `\n              <td\n              class=\"datepicker-cell datepicker-small-cell datepicker-day-cell\n              ${day.currentMonth ? '' : 'disabled'} ${day.disabled ? 'disabled' : ''}\n              ${day.isToday && 'current'} ${day.isSelected && 'selected'}\"\n              data-mdb-date=\"${getYear(day.date)}-${getMonth(day.date)}-${getDate(day.date)}\"\n              aria-label=\"${day.date}\"\n              aria-selected=\"${day.isSelected}\">\n                <div\n                  class=\"datepicker-cell-content datepicker-small-cell-content\"\n                  style=\"${day.currentMonth ? 'display: block' : 'display: none'}\">\n                  ${day.dayNumber}\n                  </div>\n              </td>\n            `;\n            })\n            .join('')}\n        </tr>\n      `;\n    })\n    .join('');\n\n  return `\n      <table class=\"datepicker-table\">\n        <thead>\n          ${tableHeadContent}\n        </thead>\n        <tbody class=\"datepicker-table-body\">\n         ${tableBodyContent}\n        </tbody>\n      </table>\n    `;\n}\n\nfunction getDatesArray(activeDate, headerDate, options) {\n  const dates = [];\n\n  const month = getMonth(activeDate);\n  const previousMonth = getMonth(addMonths(activeDate, -1));\n  const nextMonth = getMonth(addMonths(activeDate, 1));\n  const year = getYear(activeDate);\n\n  const firstDay = getFirstDayOfWeek(year, month, options);\n  const daysInMonth = getDaysInMonth(activeDate);\n  const daysInPreviousMonth = getDaysInMonth(addMonths(activeDate, -1));\n  const daysInWeek = 7;\n\n  let dayNumber = 1;\n  let isCurrentMonth = false;\n  for (let i = 1; i < daysInWeek; i++) {\n    const week = [];\n    if (i === 1) {\n      // First week\n      const previousMonthDay = daysInPreviousMonth - firstDay + 1;\n      // Previous month\n      for (let j = previousMonthDay; j <= daysInPreviousMonth; j++) {\n        const date = createDate(year, previousMonth, j);\n\n        week.push({\n          date,\n          currentMonth: isCurrentMonth,\n          isSelected: headerDate && isSameDate(date, headerDate),\n          isToday: isSameDate(date, getToday()),\n          dayNumber: getDate(date),\n          disabled: isDateDisabled(\n            date,\n            options.min,\n            options.max,\n            options.filter,\n            options.disablePast,\n            options.disableFuture\n          ),\n        });\n      }\n\n      isCurrentMonth = true;\n      // Current month\n      const daysLeft = daysInWeek - week.length;\n      for (let j = 0; j < daysLeft; j++) {\n        const date = createDate(year, month, dayNumber);\n\n        week.push({\n          date,\n          currentMonth: isCurrentMonth,\n          isSelected: headerDate && isSameDate(date, headerDate),\n          isToday: isSameDate(date, getToday()),\n          dayNumber: getDate(date),\n          disabled: isDateDisabled(\n            date,\n            options.min,\n            options.max,\n            options.filter,\n            options.disablePast,\n            options.disableFuture\n          ),\n        });\n        dayNumber++;\n      }\n    } else {\n      // Rest of the weeks\n      for (let j = 1; j < 8; j++) {\n        if (dayNumber > daysInMonth) {\n          // Next month\n          dayNumber = 1;\n          isCurrentMonth = false;\n        }\n        const date = createDate(year, isCurrentMonth ? month : nextMonth, dayNumber);\n\n        week.push({\n          date,\n          currentMonth: isCurrentMonth,\n          isSelected: headerDate && isSameDate(date, headerDate),\n          isToday: isSameDate(date, getToday()),\n          dayNumber: getDate(date),\n          disabled: isDateDisabled(\n            date,\n            options.min,\n            options.max,\n            options.filter,\n            options.disablePast,\n            options.disableFuture\n          ),\n        });\n        dayNumber++;\n      }\n    }\n    dates.push(week);\n  }\n\n  return dates;\n}\n\nexport function createMonthViewTemplate(year, selectedYear, selectedMonth, options, monthsInRow) {\n  const months = getMonthsArray(options, monthsInRow);\n  const currentMonth = getMonth(getToday());\n  const currentYear = getYear(getToday());\n\n  const tableBodyContent = `\n      ${months\n        .map((row) => {\n          return `\n          <tr>\n            ${row\n              .map((month) => {\n                const monthIndex = options.monthsShort.indexOf(month);\n                return `\n                <td class=\"datepicker-cell datepicker-large-cell datepicker-month-cell ${\n                  isMonthDisabled(\n                    monthIndex,\n                    year,\n                    options.min,\n                    options.max,\n                    options.disablePast,\n                    options.disableFuture\n                  )\n                    ? 'disabled'\n                    : ''\n                } ${monthIndex === selectedMonth && year === selectedYear ? 'selected' : ''} ${\n                  monthIndex === currentMonth && year === currentYear ? 'current' : ''\n                }\" data-mdb-month=\"${monthIndex}\" data-mdb-year=\"${year}\" aria-label=\"${month}, ${year}\">\n                  <div class=\"datepicker-cell-content datepicker-large-cell-content\">${month}</div>\n                </td>\n              `;\n              })\n              .join('')}\n          </tr>\n        `;\n        })\n        .join('')}\n    `;\n\n  return `\n      <table class=\"datepicker-table\">\n        <tbody class=\"datepicker-table-body\">\n         ${tableBodyContent}\n        </tbody>\n      </table>\n    `;\n}\n\nfunction getMonthsArray(options, monthsInRow) {\n  const months = [];\n\n  let row = [];\n\n  for (let i = 0; i < options.monthsShort.length; i++) {\n    row.push(options.monthsShort[i]);\n\n    if (row.length === monthsInRow) {\n      const monthsRow = row;\n      months.push(monthsRow);\n      row = [];\n    }\n  }\n\n  return months;\n}\n\nexport function createYearViewTemplate(date, selectedYear, options, yearsInView, yearsInRow) {\n  const years = getYearsArray(date, yearsInView, yearsInRow);\n  const currentYear = getYear(getToday());\n\n  const tableBodyContent = `\n    ${years\n      .map((row) => {\n        return `\n        <tr>\n          ${row\n            .map((year) => {\n              return `\n              <td class=\"datepicker-cell datepicker-large-cell datepicker-year-cell ${\n                isYearDisabled(\n                  year,\n                  options.min,\n                  options.max,\n                  options.disablePast,\n                  options.disableFuture\n                )\n                  ? 'disabled'\n                  : ''\n              } ${year === selectedYear ? 'selected' : ''} ${\n                year === currentYear ? 'current' : ''\n              }\" aria-label=\"${year}\" data-mdb-year=\"${year}\">\n                <div class=\"datepicker-cell-content datepicker-large-cell-content\">${year}</div>\n              </td>\n            `;\n            })\n            .join('')}\n        </tr>\n      `;\n      })\n      .join('')}\n  `;\n\n  return `\n      <table class=\"datepicker-table\">\n        <tbody class=\"datepicker-table-body\">\n        ${tableBodyContent}\n        </tbody>\n      </table>\n    `;\n}\n\nfunction getYearsArray(date, yearsInView, yearsInRow) {\n  const years = [];\n  const activeYear = getYear(date);\n  const yearsOffset = getYearsOffset(date, yearsInView);\n\n  const firstYearInView = activeYear - yearsOffset;\n\n  let row = [];\n\n  for (let i = 0; i < yearsInView; i++) {\n    row.push(firstYearInView + i);\n\n    if (row.length === yearsInRow) {\n      const yearsRow = row;\n      years.push(yearsRow);\n      row = [];\n    }\n  }\n\n  return years;\n}\n\nexport function getToggleButtonTemplate(id) {\n  return `\n    <button id=\"${id}\" type=\"button\" class=\"datepicker-toggle-button\" data-mdb-toggle=\"datepicker\">\n      <i class=\"far fa-calendar datepicker-toggle-icon\"></i>\n    </button>\n  `;\n}\n","import { createPopper } from '@popperjs/core';\nimport Data from '../../mdb/dom/data';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport ScrollBarHelper from '../../bootstrap/mdb-prefix/util/scrollbar';\nimport { typeCheckConfig, getUID, isRTL } from '../../mdb/util/index';\nimport FocusTrap from '../../mdb/util/focusTrap';\nimport {\n  getDate,\n  getDayNumber,\n  getMonth,\n  getYear,\n  getDaysInMonth,\n  addYears,\n  addMonths,\n  addDays,\n  createDate,\n  convertStringToDate,\n  isSameDate,\n  areDatesInSameView,\n  isDateDisabled,\n  isMonthDisabled,\n  isYearDisabled,\n  isNextDateDisabled,\n  isPreviousDateDisabled,\n  getYearsOffset,\n  isValidDate,\n} from './date-utils';\nimport {\n  getBackdropTemplate,\n  getDatepickerTemplate,\n  createDayViewTemplate,\n  createMonthViewTemplate,\n  createYearViewTemplate,\n  getToggleButtonTemplate,\n  createCustomHeader,\n} from './templates';\nimport {\n  ENTER,\n  SPACE,\n  ESCAPE,\n  LEFT_ARROW,\n  RIGHT_ARROW,\n  DOWN_ARROW,\n  UP_ARROW,\n  HOME,\n  END,\n  PAGE_UP,\n  PAGE_DOWN,\n} from '../../mdb/util/keycodes';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst YEARS_IN_VIEW = 24;\nconst YEARS_IN_ROW = 4;\nconst MONTHS_IN_ROW = 4;\n\nconst NAME = 'datepicker';\nconst DATA_KEY = `mdb.${NAME}`;\nconst DATA_API_KEY = '.data-api';\n\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLOSE = `close${EVENT_KEY}`;\nconst EVENT_OPEN = `open${EVENT_KEY}`;\nconst EVENT_VALUE_CHANGED = `valueChanged${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\nconst BACKDROP_OPEN_ANIMATION_CLASS = 'fade-in';\nconst BACKDROP_CLOSE_ANIMATION_CLASS = 'fade-out';\nconst CONTAINER_OPEN_ANIMATION_CLASS = 'fade-in';\nconst CONTAINER_CLOSE_ANIMATION_CLASS = 'fade-out';\n\nconst CLASS_FORM_ICON_TRAILING = 'form-icon-trailing';\n\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-toggle=\"datepicker\"]';\nconst SELECTOR_MODAL_CONTAINER = '.datepicker-modal-container';\nconst SELECTOR_DROPDOWN_CONTAINER = '.datepicker-dropdown-container';\nconst SELECTOR_VIEW_CHANGE_BUTTON = '.datepicker-view-change-button';\nconst SELECTOR_PREVIOUS_BUTTON = '.datepicker-previous-button';\nconst SELECTOR_NEXT_BUTTON = '.datepicker-next-button';\nconst SELECTOR_OK_BUTTON = '.datepicker-ok-btn';\nconst SELECTOR_CANCEL_BUTTON = '.datepicker-cancel-btn';\nconst SELECTOR_CLEAR_BUTTON = '.datepicker-clear-btn';\nconst SELECTOR_DATES_CONTAINER = '.datepicker-view';\n\nconst Default = {\n  title: 'Select date',\n  container: 'body',\n  disablePast: false,\n  disableFuture: false,\n  monthsFull: [\n    'January',\n    'February',\n    'March',\n    'April',\n    'May',\n    'June',\n    'July',\n    'August',\n    'September',\n    'October',\n    'November',\n    'December',\n  ],\n  monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  weekdaysFull: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n  weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  weekdaysNarrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n  okBtnText: 'Ok',\n  clearBtnText: 'Clear',\n  cancelBtnText: 'Cancel',\n\n  okBtnLabel: 'Confirm selection',\n  clearBtnLabel: 'Clear selection',\n  cancelBtnLabel: 'Cancel selection',\n  nextMonthLabel: 'Next month',\n  prevMonthLabel: 'Previous month',\n  nextYearLabel: 'Next year',\n  prevYearLabel: 'Previous year',\n  nextMultiYearLabel: 'Next 24 years',\n  prevMultiYearLabel: 'Previous 24 years',\n  switchToMultiYearViewLabel: 'Switch to year list',\n  switchToDayViewLabel: 'Switch to day list',\n\n  startDate: null,\n  startDay: 0,\n  format: 'dd/mm/yyyy',\n  view: 'days',\n\n  min: null,\n  max: null,\n  filter: null,\n\n  inline: false,\n  toggleButton: true,\n  disableToggleButton: false,\n  disableInput: false,\n  animations: true,\n  confirmDateOnSelect: false,\n  removeOkBtn: false,\n  removeCancelBtn: false,\n  removeClearBtn: false,\n  headerTemplate: null,\n  headerTemplateModifier: null,\n};\n\nconst DefaultType = {\n  title: 'string',\n  container: 'string',\n  disablePast: 'boolean',\n  disableFuture: 'boolean',\n  monthsFull: 'array',\n  monthsShort: 'array',\n  weekdaysFull: 'array',\n  weekdaysShort: 'array',\n  weekdaysNarrow: 'array',\n\n  okBtnText: 'string',\n  clearBtnText: 'string',\n  cancelBtnText: 'string',\n  okBtnLabel: 'string',\n  clearBtnLabel: 'string',\n  cancelBtnLabel: 'string',\n  nextMonthLabel: 'string',\n  prevMonthLabel: 'string',\n  nextYearLabel: 'string',\n  prevYearLabel: 'string',\n  nextMultiYearLabel: 'string',\n  prevMultiYearLabel: 'string',\n  switchToMultiYearViewLabel: 'string',\n  switchToDayViewLabel: 'string',\n\n  startDate: '(null|string|date)',\n  startDay: 'number',\n  format: 'string',\n  view: 'string',\n\n  min: '(null|date|string)',\n  max: '(null|date|string)',\n  filter: '(null|function)',\n\n  inline: 'boolean',\n  toggleButton: 'boolean',\n  disableToggleButton: 'boolean',\n  disableInput: 'boolean',\n  animations: 'boolean',\n  confirmDateOnSelect: 'boolean',\n  removeOkBtn: 'boolean',\n  removeCancelBtn: 'boolean',\n  removeClearBtn: 'boolean',\n\n  headerTemplate: '(null|string)',\n  headerTemplateModifier: '(null|function)',\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Datepicker extends BaseComponent {\n  constructor(element, options) {\n    super(element);\n\n    this._input = SelectorEngine.findOne('input', this._element);\n    this._options = this._getConfig(options);\n    this._activeDate = new Date();\n    this._selectedDate = null;\n    this._selectedYear = null;\n    this._selectedMonth = null;\n    this._headerDate = null;\n    this._headerYear = null;\n    this._headerMonth = null;\n    this._view = this._options.view;\n    this._popper = null;\n    this._focusTrap = null;\n    this._isOpen = false;\n    this._toggleButtonId = this._element.id\n      ? `datepicker-toggle-${this._element.id}`\n      : getUID('datepicker-toggle-');\n    this._animations =\n      !window.matchMedia('(prefers-reduced-motion: reduce)').matches && this._options.animations;\n\n    this._scrollBar = new ScrollBarHelper();\n\n    this._init();\n\n    if (this.toggleButton && this._options.disableToggle) {\n      this.toggleButton.disabled = 'true';\n    }\n\n    if (this._options.disableInput) {\n      this._input.disabled = 'true';\n    }\n\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  get container() {\n    return (\n      SelectorEngine.findOne(`${SELECTOR_MODAL_CONTAINER}-${this._toggleButtonId}`) ||\n      SelectorEngine.findOne(`${SELECTOR_DROPDOWN_CONTAINER}-${this._toggleButtonId}`)\n    );\n  }\n\n  get options() {\n    return this._options;\n  }\n\n  get activeCell() {\n    let activeCell;\n\n    if (this._view === 'days') {\n      activeCell = this._getActiveDayCell();\n    }\n\n    if (this._view === 'months') {\n      activeCell = this._getActiveMonthCell();\n    }\n\n    if (this._view === 'years') {\n      activeCell = this._getActiveYearCell();\n    }\n\n    return activeCell;\n  }\n\n  get activeDay() {\n    return getDate(this._activeDate);\n  }\n\n  get activeMonth() {\n    return getMonth(this._activeDate);\n  }\n\n  get activeYear() {\n    return getYear(this._activeDate);\n  }\n\n  get firstYearInView() {\n    return this.activeYear - getYearsOffset(this._activeDate, YEARS_IN_VIEW);\n  }\n\n  get lastYearInView() {\n    return this.firstYearInView + YEARS_IN_VIEW - 1;\n  }\n\n  get viewChangeButton() {\n    return SelectorEngine.findOne(SELECTOR_VIEW_CHANGE_BUTTON, this.container);\n  }\n\n  get previousButton() {\n    return SelectorEngine.findOne(SELECTOR_PREVIOUS_BUTTON, this.container);\n  }\n\n  get nextButton() {\n    return SelectorEngine.findOne(SELECTOR_NEXT_BUTTON, this.container);\n  }\n\n  get okButton() {\n    return SelectorEngine.findOne(SELECTOR_OK_BUTTON, this.container);\n  }\n\n  get cancelButton() {\n    return SelectorEngine.findOne(SELECTOR_CANCEL_BUTTON, this.container);\n  }\n\n  get clearButton() {\n    return SelectorEngine.findOne(SELECTOR_CLEAR_BUTTON, this.container);\n  }\n\n  get datesContainer() {\n    return SelectorEngine.findOne(SELECTOR_DATES_CONTAINER, this.container);\n  }\n\n  get toggleButton() {\n    return SelectorEngine.findOne('.datepicker-toggle-button', this._element);\n  }\n\n  update(options = {}) {\n    this._options = this._getConfig({ ...this._options, ...options });\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n    config = {\n      ...Default,\n      ...dataAttributes,\n      ...config,\n    };\n\n    typeCheckConfig(NAME, config, DefaultType);\n\n    if (config.max && typeof config.max === 'string') {\n      config.max = new Date(config.max);\n    }\n\n    if (config.min && typeof config.min === 'string') {\n      config.min = new Date(config.min);\n    }\n\n    if (config.startDay && config.startDay !== 0) {\n      const sortedWeekdaysNarrow = this._getNewDaysOrderArray(config);\n      config.weekdaysNarrow = sortedWeekdaysNarrow;\n    }\n\n    return config;\n  }\n\n  _getContainer() {\n    return SelectorEngine.findOne(this._options.container);\n  }\n\n  _getNewDaysOrderArray(config) {\n    const index = config.startDay;\n\n    const weekdaysNarrow = config.weekdaysNarrow;\n    const sortedWeekdays = weekdaysNarrow.slice(index).concat(weekdaysNarrow.slice(0, index));\n\n    return sortedWeekdays;\n  }\n\n  _init() {\n    if (!this.toggleButton && this._options.toggleButton) {\n      this._appendToggleButton();\n      if (this._input.readOnly || this._input.disabled) {\n        this.toggleButton.style.pointerEvents = 'none';\n      }\n    }\n\n    this._listenToUserInput();\n    this._listenToToggleClick();\n    this._listenToToggleKeydown();\n  }\n\n  _appendToggleButton() {\n    const toggleButton = getToggleButtonTemplate(this._toggleButtonId);\n    this._element.insertAdjacentHTML('beforeend', toggleButton);\n    Manipulator.addClass(this._input, CLASS_FORM_ICON_TRAILING);\n  }\n\n  open() {\n    if (this._input.readOnly || this._input.disabled) {\n      return;\n    }\n    const openEvent = EventHandler.trigger(this._element, EVENT_OPEN);\n\n    if (this._isOpen || openEvent.defaultPrevented) {\n      return;\n    }\n\n    this._setInitialDate();\n\n    const backdrop = getBackdropTemplate();\n    const template = getDatepickerTemplate(\n      this._activeDate,\n      this._selectedDate,\n      this._selectedYear,\n      this._selectedMonth,\n      this._options,\n      MONTHS_IN_ROW,\n      YEARS_IN_VIEW,\n      YEARS_IN_ROW,\n      this._toggleButtonId\n    );\n\n    if (this._options.inline) {\n      this._openDropdown(template);\n    } else {\n      this._openModal(backdrop, template);\n      this._scrollBar.hide();\n    }\n\n    if (this._animations) {\n      Manipulator.addClass(this.container, 'animation');\n      Manipulator.addClass(this.container, CONTAINER_OPEN_ANIMATION_CLASS);\n      this.container.style.animationDuration = '300ms';\n\n      Manipulator.addClass(backdrop, 'animation');\n      Manipulator.addClass(backdrop, BACKDROP_OPEN_ANIMATION_CLASS);\n      backdrop.style.animationDuration = '150ms';\n    }\n\n    this._setFocusTrap(this.container);\n\n    this._listenToDateSelection();\n    this._addControlsListeners();\n    this._updateControlsDisabledState();\n    this._listenToEscapeClick();\n    this._listenToKeyboardNavigation();\n    this._listenToDatesContainerFocus();\n    this._listenToDatesContainerBlur();\n\n    // We need to wait for popper initialization to avoid bug with\n    // focusing dates container, otherwise dates container will be\n    // focused before popper position update which can change the\n    // scroll position on the page\n    this._asyncFocusDatesContainer();\n    this._updateViewControlsAndAttributes(this._view);\n    this._isOpen = true;\n\n    // Wait for the component to open to prevent immediate calling of the\n    // close method upon detecting a click on toggle element (input/button)\n    setTimeout(() => {\n      this._listenToOutsideClick();\n    }, 0);\n  }\n\n  _openDropdown(template) {\n    this._popper = createPopper(this._input, template, {\n      placement: 'bottom-start',\n    });\n    const container = this._getContainer();\n    container.appendChild(template);\n  }\n\n  _openModal(backdrop, template) {\n    const container = this._getContainer();\n    container.appendChild(backdrop);\n    container.appendChild(template);\n  }\n\n  _setFocusTrap(element) {\n    this._focusTrap = new FocusTrap(element, {\n      event: 'keydown',\n      condition: (event) => event.key === 'Tab',\n    });\n    this._focusTrap.trap();\n  }\n\n  _listenToUserInput() {\n    EventHandler.on(this._input, 'input', (event) => {\n      this._handleUserInput(event.target.value);\n    });\n  }\n\n  _listenToToggleClick() {\n    EventHandler.on(this._element, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, (event) => {\n      event.preventDefault();\n      this.open();\n    });\n  }\n\n  _listenToToggleKeydown() {\n    EventHandler.on(this._element, 'keydown', SELECTOR_DATA_TOGGLE, (event) => {\n      if (event.keyCode === ENTER && !this._isOpen) {\n        this.open();\n      }\n    });\n  }\n\n  _listenToDateSelection() {\n    EventHandler.on(this.datesContainer, 'click', (e) => {\n      this._handleDateSelection(e);\n    });\n  }\n\n  _handleDateSelection(e) {\n    const dataset = e.target.nodeName === 'DIV' ? e.target.parentNode.dataset : e.target.dataset;\n    const cell = e.target.nodeName === 'DIV' ? e.target.parentNode : e.target;\n\n    if (dataset.mdbDate) {\n      this._pickDay(dataset.mdbDate, cell);\n    }\n\n    if (dataset.mdbMonth && dataset.mdbYear) {\n      const month = parseInt(dataset.mdbMonth, 10);\n      const year = parseInt(dataset.mdbYear, 10);\n      this._pickMonth(month, year);\n    }\n\n    if (dataset.mdbYear && !dataset.mdbMonth) {\n      const year = parseInt(dataset.mdbYear, 10);\n      this._pickYear(year);\n    }\n\n    if (!this._options.inline) {\n      this._updateHeaderDate(\n        this._activeDate,\n        this._options.monthsShort,\n        this._options.weekdaysShort\n      );\n    }\n  }\n\n  _updateHeaderDate(date, monthNames, dayNames) {\n    const headerDateEl = SelectorEngine.findOne('.datepicker-date-text', this.container);\n    const month = getMonth(date);\n    const day = getDate(date);\n    const dayNumber = getDayNumber(date);\n\n    const datepickerHeaderContainer = SelectorEngine.findOne('.datepicker-header', this.container);\n\n    if (this._options.headerTemplate && datepickerHeaderContainer) {\n      datepickerHeaderContainer.innerHTML = createCustomHeader(\n        day,\n        dayNumber,\n        month,\n        date,\n        this._options\n      );\n      return;\n    }\n    headerDateEl.innerHTML = `${dayNames[dayNumber]}, ${monthNames[month]} ${day}`;\n  }\n\n  _addControlsListeners() {\n    EventHandler.on(this.nextButton, 'click', () => {\n      if (this._view === 'days') {\n        this.nextMonth();\n      } else if (this._view === 'years') {\n        this.nextYears();\n      } else {\n        this.nextYear();\n      }\n      this._updateControlsDisabledState();\n    });\n\n    EventHandler.on(this.previousButton, 'click', () => {\n      if (this._view === 'days') {\n        this.previousMonth();\n      } else if (this._view === 'years') {\n        this.previousYears();\n      } else {\n        this.previousYear();\n      }\n      this._updateControlsDisabledState();\n    });\n\n    EventHandler.on(this.viewChangeButton, 'click', () => {\n      if (this._view === 'days') {\n        this._changeView('years');\n      } else if (this._view === 'years' || this._view === 'months') {\n        this._changeView('days');\n      }\n    });\n\n    if (!this._options.inline) {\n      this._listenToFooterButtonsClick();\n    }\n  }\n\n  _listenToFooterButtonsClick() {\n    EventHandler.on(this.okButton, 'click', () => this.handleOk());\n    EventHandler.on(this.cancelButton, 'click', () => this.handleCancel());\n    EventHandler.on(this.clearButton, 'click', () => this.handleClear());\n  }\n\n  _listenToOutsideClick() {\n    EventHandler.on(document, EVENT_CLICK_DATA_API, (e) => {\n      const isContainer = e.target === this.container;\n      const isContainerContent = this.container && this.container.contains(e.target);\n\n      if (!isContainer && !isContainerContent) {\n        this.close();\n      }\n    });\n  }\n\n  _listenToEscapeClick() {\n    EventHandler.on(document, 'keydown', (event) => {\n      if (event.keyCode === ESCAPE && this._isOpen) {\n        this.close();\n      }\n    });\n  }\n\n  _listenToKeyboardNavigation() {\n    EventHandler.on(this.datesContainer, 'keydown', (event) => {\n      this._handleKeydown(event);\n    });\n  }\n\n  _listenToDatesContainerFocus() {\n    EventHandler.on(this.datesContainer, 'focus', () => {\n      this._focusActiveCell(this.activeCell);\n    });\n  }\n\n  _listenToDatesContainerBlur() {\n    EventHandler.on(this.datesContainer, 'blur', () => {\n      this._removeCurrentFocusStyles();\n    });\n  }\n\n  _handleKeydown(event) {\n    if (this._view === 'days') {\n      this._handleDaysViewKeydown(event);\n    }\n\n    if (this._view === 'months') {\n      this._handleMonthsViewKeydown(event);\n    }\n\n    if (this._view === 'years') {\n      this._handleYearsViewKeydown(event);\n    }\n  }\n\n  _handleDaysViewKeydown(event) {\n    const oldActiveDate = this._activeDate;\n    const previousActiveCell = this.activeCell;\n\n    switch (event.keyCode) {\n      case LEFT_ARROW:\n        this._activeDate = addDays(this._activeDate, isRTL ? 1 : -1);\n        break;\n      case RIGHT_ARROW:\n        this._activeDate = addDays(this._activeDate, isRTL ? -1 : 1);\n        break;\n      case UP_ARROW:\n        this._activeDate = addDays(this._activeDate, -7);\n        break;\n      case DOWN_ARROW:\n        this._activeDate = addDays(this._activeDate, 7);\n        break;\n      case HOME:\n        this._activeDate = addDays(this._activeDate, 1 - getDate(this._activeDate));\n        break;\n      case END:\n        this._activeDate = addDays(\n          this._activeDate,\n          getDaysInMonth(this._activeDate) - getDate(this._activeDate)\n        );\n        break;\n      case PAGE_UP:\n        this._activeDate = addMonths(this._activeDate, -1);\n        break;\n      case PAGE_DOWN:\n        this._activeDate = addMonths(this._activeDate, 1);\n        break;\n      case ENTER:\n      case SPACE:\n        this._selectDate(this._activeDate);\n        this._handleDateSelection(event);\n        event.preventDefault();\n        return;\n      default:\n        return;\n    }\n\n    if (\n      !areDatesInSameView(\n        oldActiveDate,\n        this._activeDate,\n        this._view,\n        YEARS_IN_VIEW,\n        this._options.min,\n        this._options.max\n      )\n    ) {\n      this._changeView('days');\n    }\n\n    this._removeHighlightFromCell(previousActiveCell);\n    this._focusActiveCell(this.activeCell);\n    event.preventDefault();\n  }\n\n  _asyncFocusDatesContainer() {\n    setTimeout(() => {\n      this.datesContainer.focus();\n    }, 0);\n  }\n\n  _focusActiveCell(cell) {\n    if (cell) {\n      Manipulator.addClass(cell, 'focused');\n    }\n  }\n\n  _removeHighlightFromCell(cell) {\n    if (cell) {\n      cell.classList.remove('focused');\n    }\n  }\n\n  _getActiveDayCell() {\n    const cells = SelectorEngine.find('td', this.datesContainer);\n\n    const activeCell = Array.from(cells).find((cell) => {\n      const cellDate = convertStringToDate(cell.dataset.mdbDate);\n      return isSameDate(cellDate, this._activeDate);\n    });\n\n    return activeCell;\n  }\n\n  _handleMonthsViewKeydown(event) {\n    const oldActiveDate = this._activeDate;\n    const previousActiveCell = this.activeCell;\n\n    switch (event.keyCode) {\n      case LEFT_ARROW:\n        this._activeDate = addMonths(this._activeDate, isRTL ? 1 : -1);\n        break;\n      case RIGHT_ARROW:\n        this._activeDate = addMonths(this._activeDate, isRTL ? -1 : 1);\n        break;\n      case UP_ARROW:\n        this._activeDate = addMonths(this._activeDate, -4);\n        break;\n      case DOWN_ARROW:\n        this._activeDate = addMonths(this._activeDate, 4);\n        break;\n      case HOME:\n        this._activeDate = addMonths(this._activeDate, -this.activeMonth);\n        break;\n      case END:\n        this._activeDate = addMonths(this._activeDate, 11 - this.activeMonth);\n        break;\n      case PAGE_UP:\n        this._activeDate = addYears(this._activeDate, -1);\n        break;\n      case PAGE_DOWN:\n        this._activeDate = addYears(this._activeDate, 1);\n        break;\n      case ENTER:\n      case SPACE:\n        this._selectMonth(this.activeMonth);\n        return;\n      default:\n        return;\n    }\n\n    if (\n      !areDatesInSameView(\n        oldActiveDate,\n        this._activeDate,\n        this._view,\n        YEARS_IN_VIEW,\n        this._options.min,\n        this._options.max\n      )\n    ) {\n      this._changeView('months');\n    }\n\n    this._removeHighlightFromCell(previousActiveCell);\n    this._focusActiveCell(this.activeCell);\n    event.preventDefault();\n  }\n\n  _getActiveMonthCell() {\n    const cells = SelectorEngine.find('td', this.datesContainer);\n\n    const activeCell = Array.from(cells).find((cell) => {\n      const cellYear = parseInt(cell.dataset.mdbYear, 10);\n      const cellMonth = parseInt(cell.dataset.mdbMonth, 10);\n      return cellYear === this.activeYear && cellMonth === this.activeMonth;\n    });\n\n    return activeCell;\n  }\n\n  _handleYearsViewKeydown(event) {\n    const oldActiveDate = this._activeDate;\n    const previousActiveCell = this.activeCell;\n    const yearsPerRow = 4;\n    const yearsPerPage = 24;\n\n    switch (event.keyCode) {\n      case LEFT_ARROW:\n        this._activeDate = addYears(this._activeDate, isRTL ? 1 : -1);\n        break;\n      case RIGHT_ARROW:\n        this._activeDate = addYears(this._activeDate, isRTL ? -1 : 1);\n        break;\n      case UP_ARROW:\n        this._activeDate = addYears(this._activeDate, -yearsPerRow);\n        break;\n      case DOWN_ARROW:\n        this._activeDate = addYears(this._activeDate, yearsPerRow);\n        break;\n      case HOME:\n        this._activeDate = addYears(\n          this._activeDate,\n          -getYearsOffset(this._activeDate, yearsPerPage)\n        );\n        break;\n      case END:\n        this._activeDate = addYears(\n          this._activeDate,\n          yearsPerPage - getYearsOffset(this._activeDate, yearsPerPage) - 1\n        );\n        break;\n      case PAGE_UP:\n        this._activeDate = addYears(this._activeDate, -yearsPerPage);\n        break;\n      case PAGE_DOWN:\n        this._activeDate = addYears(this._activeDate, yearsPerPage);\n        break;\n      case ENTER:\n      case SPACE:\n        this._selectYear(this.activeYear);\n        return;\n      default:\n        return;\n    }\n\n    if (\n      !areDatesInSameView(\n        oldActiveDate,\n        this._activeDate,\n        this._view,\n        YEARS_IN_VIEW,\n        this._options.min,\n        this._options.max\n      )\n    ) {\n      this._changeView('years');\n    }\n\n    this._removeHighlightFromCell(previousActiveCell);\n    this._focusActiveCell(this.activeCell);\n    event.preventDefault();\n  }\n\n  _getActiveYearCell() {\n    const cells = SelectorEngine.find('td', this.datesContainer);\n\n    const activeCell = Array.from(cells).find((cell) => {\n      const cellYear = parseInt(cell.dataset.mdbYear, 10);\n      return cellYear === this.activeYear;\n    });\n\n    return activeCell;\n  }\n\n  _setInitialDate() {\n    if (this._input.value) {\n      this._handleUserInput(this._input.value);\n    } else if (this._options.startDate) {\n      this._activeDate = new Date(this._options.startDate);\n    } else {\n      this._activeDate = new Date();\n    }\n  }\n\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n    if (!this._isOpen || closeEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeDatepickerListeners();\n\n    if (this._animations) {\n      Manipulator.addClass(this.container, 'animation');\n      Manipulator.addClass(this.container, CONTAINER_CLOSE_ANIMATION_CLASS);\n    }\n\n    if (this._options.inline) {\n      this._closeDropdown();\n    } else {\n      this._closeModal();\n    }\n\n    this._isOpen = false;\n    this._view = this._options.view;\n\n    if (this.toggleButton) {\n      this.toggleButton.focus();\n    } else {\n      this._input.focus();\n    }\n  }\n\n  _closeDropdown() {\n    const datepicker = SelectorEngine.findOne('.datepicker-dropdown-container');\n    const container = this._getContainer();\n    if (this._animations) {\n      datepicker.addEventListener('animationend', () => {\n        if (datepicker) {\n          container.removeChild(datepicker);\n        }\n\n        if (this._popper) {\n          this._popper.destroy();\n        }\n      });\n    } else {\n      if (datepicker) {\n        container.removeChild(datepicker);\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n    }\n    this._removeFocusTrap();\n  }\n\n  _closeModal() {\n    const backdrop = SelectorEngine.findOne('.datepicker-backdrop');\n    const datepicker = SelectorEngine.findOne('.datepicker-modal-container');\n\n    if (!datepicker || !backdrop) {\n      return;\n    }\n\n    if (this._animations) {\n      Manipulator.addClass(backdrop, 'animation');\n      Manipulator.addClass(backdrop, BACKDROP_CLOSE_ANIMATION_CLASS);\n    }\n\n    if (this._animations) {\n      backdrop.addEventListener('animationend', () => {\n        this._removePicker(backdrop, datepicker);\n        this._scrollBar.reset();\n      });\n    } else {\n      this._removePicker(backdrop, datepicker);\n      this._scrollBar.reset();\n    }\n  }\n\n  _removePicker(backdrop, datepicker) {\n    const container = this._getContainer();\n\n    container.removeChild(backdrop);\n    container.removeChild(datepicker);\n  }\n\n  _removeFocusTrap() {\n    if (this._focusTrap) {\n      this._focusTrap.disable();\n      this._focusTrap = null;\n    }\n  }\n\n  _removeDatepickerListeners() {\n    EventHandler.off(this.nextButton, 'click');\n    EventHandler.off(this.previousButton, 'click');\n    EventHandler.off(this.viewChangeButton, 'click');\n    EventHandler.off(this.okButton, 'click');\n    EventHandler.off(this.cancelButton, 'click');\n    EventHandler.off(this.clearButton, 'click');\n\n    EventHandler.off(this.datesContainer, 'click');\n    EventHandler.off(this.datesContainer, 'keydown');\n    EventHandler.off(this.datesContainer, 'focus');\n    EventHandler.off(this.datesContainer, 'blur');\n\n    EventHandler.off(document, EVENT_CLICK_DATA_API);\n  }\n\n  dispose() {\n    if (this._isOpen) {\n      this.close();\n    }\n\n    this._removeInputAndToggleListeners();\n\n    const generatedToggleButton = SelectorEngine.findOne(`#${this._toggleButtonId}`);\n\n    if (generatedToggleButton) {\n      this._element.removeChild(generatedToggleButton);\n    }\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  _removeInputAndToggleListeners() {\n    EventHandler.off(this._input, 'input');\n    EventHandler.off(this._element, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE);\n    EventHandler.off(this._element, 'keydown', SELECTOR_DATA_TOGGLE);\n  }\n\n  handleOk() {\n    this._confirmSelection(this._headerDate);\n    this.close();\n  }\n\n  _selectDate(date, cell = this.activeCell) {\n    const { min, max, filter, disablePast, disableFuture } = this._options;\n\n    if (isDateDisabled(date, min, max, filter, disablePast, disableFuture)) {\n      return;\n    }\n\n    this._removeCurrentSelectionStyles();\n    this._removeCurrentFocusStyles();\n    this._addSelectedStyles(cell);\n    this._selectedDate = date;\n    this._selectedYear = getYear(date);\n    this._selectedMonth = getMonth(date);\n    this._headerDate = date;\n\n    if (this._options.inline || this.options.confirmDateOnSelect) {\n      this._confirmSelection(date);\n      this.close();\n    }\n  }\n\n  _selectYear(year, cell = this.activeCell) {\n    this._removeCurrentSelectionStyles();\n    this._removeCurrentFocusStyles();\n    this._addSelectedStyles(cell);\n    this._headerYear = year;\n\n    this._asyncChangeView('months');\n  }\n\n  _selectMonth(month, cell = this.activeCell) {\n    this._removeCurrentSelectionStyles();\n    this._removeCurrentFocusStyles();\n    this._addSelectedStyles(cell);\n    this._headerMonth = month;\n\n    this._asyncChangeView('days');\n  }\n\n  _removeSelectedStyles(cell) {\n    if (cell) {\n      cell.classList.remove('selected');\n    }\n  }\n\n  _addSelectedStyles(cell) {\n    if (cell) {\n      Manipulator.addClass(cell, 'selected');\n    }\n  }\n\n  _confirmSelection(date) {\n    if (date) {\n      const dateString = this.formatDate(date);\n      this._input.value = dateString;\n      Manipulator.addClass(this._input, 'active');\n      EventHandler.trigger(this._element, EVENT_VALUE_CHANGED, { date });\n    }\n  }\n\n  handleCancel() {\n    this._selectedDate = null;\n    this._selectedYear = null;\n    this._selectedMonth = null;\n    this.close();\n  }\n\n  handleClear() {\n    this._selectedDate = null;\n    this._selectedMonth = null;\n    this._selectedYear = null;\n    this._headerDate = null;\n    this._headerMonth = null;\n    this._headerYear = null;\n    this._removeCurrentSelectionStyles();\n    this._input.value = '';\n    this._input.classList.remove('active');\n    this._setInitialDate();\n    this._changeView('days');\n    this._updateHeaderDate(\n      this._activeDate,\n      this._options.monthsShort,\n      this._options.weekdaysShort\n    );\n  }\n\n  _removeCurrentSelectionStyles() {\n    const currentSelected = SelectorEngine.findOne('.selected', this.container);\n\n    if (currentSelected) {\n      currentSelected.classList.remove('selected');\n    }\n  }\n\n  _removeCurrentFocusStyles() {\n    const currentFocused = SelectorEngine.findOne('.focused', this.container);\n\n    if (currentFocused) {\n      currentFocused.classList.remove('focused');\n    }\n  }\n\n  formatDate(date) {\n    const d = getDate(date);\n    const dd = this._addLeadingZero(getDate(date));\n    const ddd = this._options.weekdaysShort[getDayNumber(date)];\n    const dddd = this._options.weekdaysFull[getDayNumber(date)];\n    const m = getMonth(date) + 1;\n    const mm = this._addLeadingZero(getMonth(date) + 1);\n    const mmm = this._options.monthsShort[getMonth(date)];\n    const mmmm = this._options.monthsFull[getMonth(date)];\n    const yy =\n      getYear(date).toString().length === 2 ? getYear(date) : getYear(date).toString().slice(2, 4);\n    const yyyy = getYear(date);\n\n    const preformatted = this._options.format.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g);\n    let formatted = '';\n    preformatted.forEach((datePart) => {\n      switch (datePart) {\n        case 'dddd':\n          datePart = datePart.replace(datePart, dddd);\n          break;\n        case 'ddd':\n          datePart = datePart.replace(datePart, ddd);\n          break;\n        case 'dd':\n          datePart = datePart.replace(datePart, dd);\n          break;\n        case 'd':\n          datePart = datePart.replace(datePart, d);\n          break;\n        case 'mmmm':\n          datePart = datePart.replace(datePart, mmmm);\n          break;\n        case 'mmm':\n          datePart = datePart.replace(datePart, mmm);\n          break;\n        case 'mm':\n          datePart = datePart.replace(datePart, mm);\n          break;\n        case 'm':\n          datePart = datePart.replace(datePart, m);\n          break;\n        case 'yyyy':\n          datePart = datePart.replace(datePart, yyyy);\n          break;\n        case 'yy':\n          datePart = datePart.replace(datePart, yy);\n          break;\n        default:\n      }\n      formatted += datePart;\n    });\n\n    return formatted;\n  }\n\n  _addLeadingZero(value) {\n    return parseInt(value, 10) < 10 ? `0${value}` : value;\n  }\n\n  _pickDay(day, el) {\n    const date = convertStringToDate(day);\n    const { min, max, filter, disablePast, disableFuture } = this._options;\n\n    if (isDateDisabled(date, min, max, filter, disablePast, disableFuture)) {\n      return;\n    }\n\n    this._activeDate = date;\n    this._selectDate(date, el);\n  }\n\n  _pickYear(year) {\n    const { min, max, disablePast, disableFuture } = this._options;\n\n    if (isYearDisabled(year, min, max, disablePast, disableFuture)) {\n      return;\n    }\n\n    const newDate = createDate(year, this.activeMonth, this.activeDay);\n\n    this._activeDate = newDate;\n    this._selectedDate = newDate;\n    this._selectYear(year);\n  }\n\n  _pickMonth(month, year) {\n    const { min, max, disablePast, disableFuture } = this._options;\n\n    if (\n      isMonthDisabled(month, year, min, max, disablePast, disableFuture) ||\n      isYearDisabled(year, min, max, disablePast, disableFuture)\n    ) {\n      return;\n    }\n\n    const newDate = createDate(year, month, this.activeDay);\n\n    this._activeDate = newDate;\n    this._selectMonth(month);\n  }\n\n  nextMonth() {\n    const nextMonth = addMonths(this._activeDate, 1);\n    const template = createDayViewTemplate(nextMonth, this._headerDate, this._options);\n    this._activeDate = nextMonth;\n    this.viewChangeButton.textContent = `${this._options.monthsFull[this.activeMonth]} ${\n      this.activeYear\n    }`;\n    this.datesContainer.innerHTML = template;\n  }\n\n  previousMonth() {\n    const previousMonth = addMonths(this._activeDate, -1);\n    this._activeDate = previousMonth;\n    const template = createDayViewTemplate(previousMonth, this._headerDate, this._options);\n    this.viewChangeButton.textContent = `${this._options.monthsFull[this.activeMonth]} ${\n      this.activeYear\n    }`;\n    this.datesContainer.innerHTML = template;\n  }\n\n  nextYear() {\n    const nextYear = addYears(this._activeDate, 1);\n    this._activeDate = nextYear;\n    this.viewChangeButton.textContent = `${this.activeYear}`;\n    const template = createMonthViewTemplate(\n      this.activeYear,\n      this._selectedYear,\n      this._selectedMonth,\n      this._options,\n      MONTHS_IN_ROW\n    );\n    this.datesContainer.innerHTML = template;\n  }\n\n  previousYear() {\n    const previousYear = addYears(this._activeDate, -1);\n    this._activeDate = previousYear;\n    this.viewChangeButton.textContent = `${this.activeYear}`;\n    const template = createMonthViewTemplate(\n      this.activeYear,\n      this._selectedYear,\n      this._selectedMonth,\n      this._options,\n      MONTHS_IN_ROW\n    );\n    this.datesContainer.innerHTML = template;\n  }\n\n  nextYears() {\n    const nextYear = addYears(this._activeDate, 24);\n    this._activeDate = nextYear;\n    const template = createYearViewTemplate(\n      nextYear,\n      this._selectedYear,\n      this._options,\n      YEARS_IN_VIEW,\n      YEARS_IN_ROW\n    );\n    this.viewChangeButton.textContent = `${this.firstYearInView} - ${this.lastYearInView}`;\n    this.datesContainer.innerHTML = template;\n  }\n\n  previousYears() {\n    const previousYear = addYears(this._activeDate, -24);\n    this._activeDate = previousYear;\n    const template = createYearViewTemplate(\n      previousYear,\n      this._selectedYear,\n      this._options,\n      YEARS_IN_VIEW,\n      YEARS_IN_ROW\n    );\n    this.viewChangeButton.textContent = `${this.firstYearInView} - ${this.lastYearInView}`;\n    this.datesContainer.innerHTML = template;\n  }\n\n  _asyncChangeView(view) {\n    setTimeout(() => {\n      this._changeView(view);\n    }, 0);\n  }\n\n  _changeView(view) {\n    this._view = view;\n    // We need to add blur event here to reapply focus to\n    // dates container when switching from years to months\n    // view after selecting year\n    this.datesContainer.blur();\n\n    if (view === 'days') {\n      this.datesContainer.innerHTML = createDayViewTemplate(\n        this._activeDate,\n        this._headerDate,\n        this._options\n      );\n    }\n\n    if (view === 'months') {\n      this.datesContainer.innerHTML = createMonthViewTemplate(\n        this.activeYear,\n        this._selectedYear,\n        this._selectedMonth,\n        this._options,\n        MONTHS_IN_ROW\n      );\n    }\n\n    if (view === 'years') {\n      this.datesContainer.innerHTML = createYearViewTemplate(\n        this._activeDate,\n        this._selectedYear,\n        this._options,\n        YEARS_IN_VIEW,\n        YEARS_IN_ROW\n      );\n    }\n\n    this.datesContainer.focus();\n    this._updateViewControlsAndAttributes(view);\n    this._updateControlsDisabledState();\n  }\n\n  _updateViewControlsAndAttributes(view) {\n    if (view === 'days') {\n      this.viewChangeButton.textContent = `${this._options.monthsFull[this.activeMonth]} ${\n        this.activeYear\n      }`;\n      this.viewChangeButton.setAttribute('aria-label', this._options.switchToMultiYearViewLabel);\n      this.previousButton.setAttribute('aria-label', this._options.prevMonthLabel);\n      this.nextButton.setAttribute('aria-label', this._options.nextMonthLabel);\n    }\n\n    if (view === 'months') {\n      this.viewChangeButton.textContent = `${this.activeYear}`;\n      this.viewChangeButton.setAttribute('aria-label', this._options.switchToDayViewLabel);\n      this.previousButton.setAttribute('aria-label', this._options.prevYearLabel);\n      this.nextButton.setAttribute('aria-label', this._options.nextYearLabel);\n    }\n\n    if (view === 'years') {\n      this.viewChangeButton.textContent = `${this.firstYearInView} - ${this.lastYearInView}`;\n      this.viewChangeButton.setAttribute('aria-label', this._options.switchToDayViewLabel);\n      this.previousButton.setAttribute('aria-label', this._options.prevMultiYearLabel);\n      this.nextButton.setAttribute('aria-label', this._options.nextMultiYearLabel);\n    }\n  }\n\n  _updateControlsDisabledState() {\n    if (\n      isNextDateDisabled(\n        this._options.disableFuture,\n        this._activeDate,\n        this._view,\n        YEARS_IN_VIEW,\n        this._options.min,\n        this._options.max,\n        this.lastYearInView,\n        this.firstYearInView\n      )\n    ) {\n      this.nextButton.disabled = true;\n    } else {\n      this.nextButton.disabled = false;\n    }\n\n    if (\n      isPreviousDateDisabled(\n        this._options.disablePast,\n        this._activeDate,\n        this._view,\n        YEARS_IN_VIEW,\n        this._options.min,\n        this._options.max,\n        this.lastYearInView,\n        this.firstYearInView\n      )\n    ) {\n      this.previousButton.disabled = true;\n    } else {\n      this.previousButton.disabled = false;\n    }\n  }\n\n  _handleUserInput(input) {\n    const delimeters = this._getDelimeters(this._options.format);\n    const date = this._parseDate(input, this._options.format, delimeters);\n\n    if (isValidDate(date)) {\n      this._activeDate = date;\n      this._selectedDate = date;\n      this._selectedYear = getYear(date);\n      this._selectedMonth = getMonth(date);\n      this._headerDate = date;\n    } else {\n      this._activeDate = new Date();\n      this._selectedDate = null;\n      this._selectedMonth = null;\n      this._selectedYear = null;\n      this._headerDate = null;\n      this._headerMonth = null;\n      this._headerYear = null;\n    }\n  }\n\n  _getDelimeters(format) {\n    return format.match(/[^(dmy)]{1,}/g);\n  }\n\n  _parseDate(dateString, format, delimeters) {\n    let delimeterPattern;\n\n    if (delimeters[0] !== delimeters[1]) {\n      delimeterPattern = delimeters[0] + delimeters[1];\n    } else {\n      delimeterPattern = delimeters[0];\n    }\n\n    const regExp = new RegExp(`[${delimeterPattern}]`);\n    const dateParts = dateString.split(regExp);\n    const formatParts = format.split(regExp);\n    const isMonthString = format.indexOf('mmm') !== -1;\n\n    const datesArray = [];\n\n    for (let i = 0; i < formatParts.length; i++) {\n      if (formatParts[i].indexOf('yy') !== -1) {\n        datesArray[0] = { value: dateParts[i], format: formatParts[i] };\n      }\n      if (formatParts[i].indexOf('m') !== -1) {\n        datesArray[1] = { value: dateParts[i], format: formatParts[i] };\n      }\n      if (formatParts[i].indexOf('d') !== -1 && formatParts[i].length <= 2) {\n        datesArray[2] = { value: dateParts[i], format: formatParts[i] };\n      }\n    }\n\n    let monthsNames;\n\n    if (format.indexOf('mmmm') !== -1) {\n      monthsNames = this._options.monthsFull;\n    } else {\n      monthsNames = this._options.monthsShort;\n    }\n\n    const year = Number(datesArray[0].value);\n    const month = isMonthString\n      ? this.getMonthNumberByMonthName(datesArray[1].value, monthsNames)\n      : Number(datesArray[1].value) - 1;\n    const day = Number(datesArray[2].value);\n\n    const parsedDate = createDate(year, month, day);\n    return parsedDate;\n  }\n\n  getMonthNumberByMonthName(monthValue, monthLabels) {\n    return monthLabels.findIndex((monthLabel) => monthLabel === monthValue);\n  }\n\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data && /dispose/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new Datepicker(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](options);\n      }\n    });\n  }\n}\n\nexport default Datepicker;\n","import { createPopper } from '@popperjs/core';\nimport { element, typeCheckConfig, getUID, isRTL } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { ESCAPE } from '../mdb/util/keycodes';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\nimport FocusTrap from '../mdb/util/focusTrap';\nimport ScrollBarHelper from '../bootstrap/mdb-prefix/util/scrollbar';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popconfirm';\nconst DATA_KEY = 'mdb.popconfirm';\nconst SELECTOR_POPCONFIRM_BODY = '.popconfirm';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CANCEL = `cancel${EVENT_KEY}`;\nconst EVENT_CONFIRM = `confirm${EVENT_KEY}`;\n\nconst DefaultType = {\n  popconfirmMode: 'string',\n  message: 'string',\n  cancelText: 'string',\n  okText: 'string',\n  okClass: 'string',\n  popconfirmIcon: 'string',\n  cancelLabel: 'string',\n  confirmLabel: 'string',\n};\n\nconst Default = {\n  popconfirmMode: 'inline',\n  message: 'Are you sure?',\n  cancelText: 'Cancel',\n  okText: 'OK',\n  okClass: 'btn-primary',\n  popconfirmIcon: '',\n  cancelLabel: 'Cancel',\n  confirmLabel: 'Confirm',\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popconfirm extends BaseComponent {\n  constructor(element, options) {\n    super(element);\n\n    this._options = this._getConfig(options);\n    this._cancelButtonTemplate = this._getCancelButtonTemplate();\n    this._popper = null;\n    this._cancelButton = '';\n    this._confirmButton = '';\n    this._isOpen = false;\n    this._uid = this._element.id ? `popconfirm-${this._element.id}` : getUID('popconfirm-');\n    this._focusTrap = null;\n    this._scrollBar = new ScrollBarHelper();\n\n    this._clickHandler = this.open.bind(this);\n    EventHandler.on(this._element, 'click', this._clickHandler);\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  get container() {\n    return SelectorEngine.findOne(`#${this._uid}`);\n  }\n\n  get popconfirmBody() {\n    return SelectorEngine.findOne(SELECTOR_POPCONFIRM_BODY, this.container);\n  }\n\n  // Public\n\n  dispose() {\n    if (this._isOpen || this.container !== null) {\n      this.close();\n    }\n    EventHandler.off(this._element, 'click', this._clickHandler);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  open() {\n    if (this._isOpen) {\n      return;\n    }\n    if (this._options.popconfirmMode === 'inline') {\n      this._openPopover(this._getPopoverTemplate());\n    } else {\n      this._openModal(this._getModalTemplate());\n      this._scrollBar.hide();\n    }\n\n    this._handleCancelButtonClick();\n    this._handleConfirmButtonClick();\n    this._listenToEscapeKey();\n    this._listenToOutsideClick();\n  }\n\n  close() {\n    if (!this._isOpen) {\n      return;\n    }\n\n    if (this._popper !== null || SelectorEngine.findOne('.popconfirm-popover') !== null) {\n      EventHandler.on(\n        this.popconfirmBody,\n        'transitionend',\n        this._handlePopconfirmTransitionEnd.bind(this)\n      );\n      Manipulator.removeClass(this.popconfirmBody, 'show');\n    } else {\n      const tempElement = SelectorEngine.findOne('.popconfirm-backdrop');\n      Manipulator.removeClass(this.popconfirmBody, 'show');\n      document.body.removeChild(tempElement);\n      this._isOpen = false;\n    }\n\n    this._removeFocusTrap();\n    this._scrollBar.reset();\n\n    this._element.focus();\n\n    EventHandler.off(document, 'click', this._handleOutsideClick.bind(this));\n    EventHandler.off(document, 'keydown', this._handleEscapeKey.bind(this));\n  }\n\n  _setFocusTrap(element) {\n    this._focusTrap = new FocusTrap(element, {\n      event: 'keydown',\n      condition: (event) => event.key === 'Tab',\n    });\n\n    this._focusTrap.trap();\n\n    const cancelButton = SelectorEngine.findOne('#popconfirm-button-cancel', element);\n    const confirmButton = SelectorEngine.findOne('#popconfirm-button-confirm', element);\n\n    if (cancelButton) {\n      cancelButton.focus();\n    } else {\n      confirmButton.focus();\n    }\n  }\n\n  _removeFocusTrap() {\n    if (this._focusTrap) {\n      this._focusTrap.disable();\n      this._focusTrap = null;\n    }\n  }\n\n  _handlePopconfirmTransitionEnd(event) {\n    if (event.target !== this.popconfirmBody) {\n      return;\n    }\n\n    const popoverTemplate = SelectorEngine.findOne('.popconfirm-popover');\n    EventHandler.off(this.popconfirmBody, 'transitionend');\n\n    if (this._isOpen && event && event.propertyName === 'opacity') {\n      this._popper.destroy();\n\n      if (popoverTemplate) {\n        document.body.removeChild(popoverTemplate);\n      }\n\n      this._isOpen = false;\n    }\n  }\n\n  // Private\n\n  _getPopoverTemplate() {\n    const popover = element('div');\n    const popconfirmTemplate = this._getPopconfirmTemplate();\n    Manipulator.addClass(popover, 'popconfirm-popover');\n    Manipulator.addClass(popover, 'shadow-2');\n    popover.id = this._uid;\n    popover.innerHTML = popconfirmTemplate;\n    return popover;\n  }\n\n  _getModalTemplate() {\n    const modal = element('div');\n    const popconfirmTemplate = this._getPopconfirmTemplate();\n    Manipulator.addClass(modal, 'popconfirm-modal');\n    Manipulator.addClass(modal, 'shadow-2');\n    modal.id = this._uid;\n    modal.innerHTML = popconfirmTemplate;\n    return modal;\n  }\n\n  _getPopconfirmTemplate() {\n    return `<div class=\"popconfirm\">\n      <p class=\"popconfirm-message\">\n      ${this._getMessageIcon()}\n      <span class=\"popconfirm-message-text\">${this._options.message}</span>\n      </p>\n      <div class=\"popconfirm-buttons-container\">\n      ${this._cancelButtonTemplate}\n      <button type=\"button\" id=\"popconfirm-button-confirm\" data-mdb-ripple-init\n      aria-label=\"${this._options.confirmLabel}\"\n      class=\"btn ${this._options.okClass} btn-sm\">${this._options.okText}</button>\n      </div>\n    </div>`;\n  }\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config,\n    };\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n\n  _getCancelButtonTemplate() {\n    if (this._options.cancelText === '' || this._options.cancelText === ' ') {\n      return '';\n    }\n    return `<button type=\"button\" id=\"popconfirm-button-cancel\" aria-label=\"${this._options.cancelLabel}\"\n    class=\"btn btn-secondary btn-sm\" data-mdb-ripple-init >${this._options.cancelText}</button>`;\n  }\n\n  _getMessageIcon() {\n    if (this._options.popconfirmIcon === '') {\n      return '';\n    }\n    return `<span class=\"popconfirm-icon-container\"><i class=\"${this._options.popconfirmIcon}\"></i></span>`;\n  }\n\n  _openPopover(template) {\n    this._popper = createPopper(this._element, template, {\n      placement: this._translatePositionValue(),\n      modifiers: [\n        {\n          name: 'offset',\n          options: {\n            offset: [0, 5],\n          },\n        },\n      ],\n    });\n    document.body.appendChild(template);\n\n    setTimeout(() => {\n      Manipulator.addClass(this.popconfirmBody, 'fade');\n      Manipulator.addClass(this.popconfirmBody, 'show');\n      this._isOpen = true;\n\n      this._setFocusTrap(this.container);\n    }, 0);\n  }\n\n  _openModal(template) {\n    const backdrop = element('div');\n    Manipulator.addClass(backdrop, 'popconfirm-backdrop');\n    document.body.appendChild(backdrop);\n    backdrop.appendChild(template);\n    Manipulator.addClass(this.popconfirmBody, 'show');\n    this._isOpen = true;\n\n    this._setFocusTrap(this.container);\n  }\n\n  _handleCancelButtonClick() {\n    const container = this.container;\n    this._cancelButton = SelectorEngine.findOne('#popconfirm-button-cancel', container);\n    if (this._cancelButton !== null) {\n      EventHandler.on(this._cancelButton, 'click', () => {\n        this.close();\n        EventHandler.trigger(this._element, EVENT_CANCEL);\n      });\n    }\n  }\n\n  _handleConfirmButtonClick() {\n    const container = this.container;\n    this._confirmButton = SelectorEngine.findOne('#popconfirm-button-confirm', container);\n    EventHandler.on(this._confirmButton, 'click', () => {\n      this.close();\n      EventHandler.trigger(this._element, EVENT_CONFIRM);\n    });\n  }\n\n  _listenToEscapeKey() {\n    EventHandler.on(document, 'keydown', this._handleEscapeKey.bind(this));\n  }\n\n  _handleEscapeKey(event) {\n    if (event.keyCode === ESCAPE) {\n      this.close();\n    }\n  }\n\n  _listenToOutsideClick() {\n    EventHandler.on(document, 'click', this._handleOutsideClick.bind(this));\n  }\n\n  _handleOutsideClick(event) {\n    const container = this.container;\n    const isContainer = event.target === container;\n    const isContainerContent = container && container.contains(event.target);\n    const isElement = event.target === this._element;\n    const isElementContent = this._element && this._element.contains(event.target);\n    if (!isContainer && !isContainerContent && !isElement && !isElementContent) {\n      this.close();\n    }\n  }\n\n  _translatePositionValue() {\n    switch (this._options.position) {\n      // left, right as default\n      case 'top left':\n        return isRTL ? 'top-start' : 'top-end';\n      case 'top':\n        return 'top';\n      case 'top right':\n        return isRTL ? 'top-end' : 'top-start';\n      case 'bottom left':\n        return isRTL ? 'bottom-start' : 'bottom-end';\n      case 'bottom':\n        return 'bottom';\n      case 'bottom right':\n        return isRTL ? 'bottom-end' : 'bottom-start';\n      case 'left':\n        return isRTL ? 'right' : 'left';\n      case 'left top':\n        return isRTL ? 'right-end' : 'left-end';\n      case 'left bottom':\n        return isRTL ? 'right-start' : 'left-start';\n      case 'right':\n        return isRTL ? 'left' : 'right';\n      case 'right top':\n        return isRTL ? 'left-end' : 'right-end';\n      case 'right bottom':\n        return isRTL ? 'left-start' : 'right-start';\n      case undefined:\n        return 'bottom';\n      default:\n        return this._options.position;\n    }\n  }\n\n  // Static\n\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      const data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data && /dispose/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        // eslint-disable-next-line consistent-return\n        return new Popconfirm(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](options);\n      }\n    });\n  }\n}\n\nexport default Popconfirm;\n","import { isRTL } from '../../../mdb/util/index';\n/* eslint-disable indent */\nconst pagination = (\n  { text, entries, entriesOptions, fullPagination, rowsText, allText },\n  loading\n) => {\n  const options = entriesOptions\n    .map((option) => {\n      if (option === 'All') {\n        return `<option value=\"${option}\" ${\n          option === entries ? 'selected' : ''\n        }>${allText}</option>`;\n      }\n      return `<option value=\"${option}\" ${option === entries ? 'selected' : ''}>${option}</option>`;\n    })\n    .join('\\n');\n\n  return `\n<div class=\"datatable-pagination\">\n  <div class=\"datatable-select-wrapper\">\n    <p class=\"datatable-select-text\">${rowsText}</p>\n    <select name=\"entries\"\n      ${loading ? 'data-mdb-disabled=\"true\"' : ''} class=\"datatable-select select\">\n      ${options}\n    </select>\n  </div>\n  <div class=\"datatable-pagination-nav\">\n  ${text}\n  </div>\n  <div class=\"datatable-pagination-buttons\">\n    ${\n      fullPagination\n        ? '<button data-mdb-ripple-color=\"dark\" data-mdb-ripple-init class=\"btn btn-link datatable-pagination-button datatable-pagination-start\"><i class=\"fa fa-angle-double-left\"></i></button>'\n        : ''\n    }\n    <button data-mdb-ripple-color=\"dark\" data-mdb-ripple-init class=\"btn btn-link datatable-pagination-button datatable-pagination-left\"><i class=\"fa fa-chevron-${\n      isRTL ? 'right' : 'left'\n    }\"></i></button>\n    <button data-mdb-ripple-color=\"dark\" data-mdb-ripple-init class=\"btn btn-link datatable-pagination-button datatable-pagination-right\"><i class=\"fa fa-chevron-${\n      isRTL ? 'left' : 'right'\n    }\"></i></button>\n    ${\n      fullPagination\n        ? '<button data-mdb-ripple-color=\"dark\" data-mdb-ripple-init class=\"btn btn-link datatable-pagination-button datatable-pagination-end\"><i class=\"fa fa-angle-double-right\"></i></button>'\n        : ''\n    }\n  </div>\n</div>\n`;\n};\n\nexport default pagination;\n","/* eslint-disable indent */\n\nconst columns = (columns, selectable, multi) => {\n  const checkboxHeader = multi\n    ? `\n<th scope=\"col\">\n  <div class=\"form-check d-flex align-items-center mb-0\">\n    <input class=\"datatable-header-checkbox form-check-input\" type=\"checkbox\">\n  </div>\n</th>\n`\n    : '<th scope=\"col\"></th>';\n\n  const headers = columns.map((column, i) => {\n    const fixedOffset = column.fixed\n      ? columns\n          .filter((cell, j) => cell.fixed === column.fixed && j < i)\n          .reduce((a, b) => a + b.width, 0)\n      : null;\n\n    return `<th style=\"${\n      column.fixed ? `${column.fixed === 'right' ? 'right' : 'left'}: ${fixedOffset}px;` : ''\n    }\" ${column.fixed ? 'class=\"fixed-cell\"' : ''} scope=\"col\">${\n      column.sort\n        ? `<i data-mdb-sort=\"${column.field}\" class=\"datatable-sort-icon fas fa-arrow-up\"></i>`\n        : ''\n    } ${column.label}</th>`;\n  });\n\n  return [selectable ? checkboxHeader : '', ...headers].join('\\n');\n};\n\nexport default columns;\n","/* eslint-disable indent */\nconst rows = ({ rows, columns, noFoundMessage, edit, selectable, loading }) => {\n  const rowsTemplate = rows.map((row) => {\n    const checkbox = `\n    <td data-mdb-field=\"checkbox\">\n      <div class=\"form-check\">\n        <input data-mdb-row-index=\"${row.rowIndex}\" class=\"datatable-row-checkbox form-check-input\" type=\"checkbox\">\n      </div>\n    </td>\n    `;\n    const innerRow = columns\n      .map((column, i) => {\n        const style = {};\n\n        if (column.width) {\n          style['min-width'] = `${column.width - 1}px`;\n          style['max-width'] = `${column.width}px`;\n          style.width = `${column.width}px`;\n        }\n        if (column.fixed) {\n          const fixedOffset = columns\n            .filter((cell, j) => cell.fixed === column.fixed && j < i)\n            .reduce((a, b) => a + b.width, 0);\n\n          style[column.fixed === 'right' ? 'right' : 'left'] = `${fixedOffset}px`;\n        }\n\n        const cssText = Object.keys(style)\n          .map((property) => `${property}: ${style[property]}`)\n          .join('; ');\n\n        return `<td style=\"${cssText}\" class=\"${\n          column.fixed ? 'fixed-cell' : ''\n        }\" data-mdb-field=\"${column.field}\" ${edit && 'contenteditable=\"true\"'}>${\n          row[column.field]\n        }</td>`;\n      })\n      .join('');\n\n    return `<tr scope=\"row\" data-mdb-index=\"${row.rowIndex}\">${\n      selectable ? checkbox : ''\n    }${innerRow}</tr>`;\n  });\n\n  return rows.length > 0 || loading\n    ? rowsTemplate.join('\\n')\n    : `<tr><td>${noFoundMessage}</td></tr>`;\n};\n\nexport default rows;\n","/* eslint-disable indent */\nimport paginationTemplate from './pagination';\nimport generateColumns from './columns';\nimport generateRows from './rows';\n\nconst tableTemplate = ({\n  columns,\n  rows,\n  noFoundMessage,\n  edit,\n  multi,\n  selectable,\n  loading,\n  loadingMessage,\n  loaderClass,\n  pagination,\n}) => {\n  const rowsTemplate = generateRows({ rows, columns, noFoundMessage, edit, loading, selectable });\n  const columnsTemplate = generateColumns(columns, selectable, multi);\n\n  const table = `\n<div class=\"datatable-inner table-responsive\">\n  <table class=\"table datatable-table\">\n    <thead class=\"datatable-header\">\n      <tr>\n        ${columnsTemplate}\n      </tr>\n    </thead>\n    <tbody class=\"datatable-body\">\n      ${loading ? '' : rowsTemplate}\n    </tbody>\n  </table>\n</div>\n  ${\n    loading\n      ? `\n  <div class=\"datatable-loader bg-light}\">\n    <span class=\"datatable-loader-inner\"><span class=\"datatable-progress ${loaderClass}\"></span></span>\n  </div>\n  <p class=\"text-center text-muted my-4\">${loadingMessage}</p>\n`\n      : ''\n  }\n  ${pagination.enable ? paginationTemplate(pagination, loading) : ''}\n  `;\n\n  return { table, rows: rowsTemplate, column: columnsTemplate };\n};\n\nexport default tableTemplate;\n","const sort = ({ rows, field, order }) => {\n  const sorted = rows.sort((a, b) => {\n    let fieldA = a[field];\n    let fieldB = b[field];\n\n    if (typeof fieldA === 'string') {\n      fieldA = fieldA.toLowerCase();\n    }\n    if (typeof fieldB === 'string') {\n      fieldB = fieldB.toLowerCase();\n    }\n\n    if (fieldA < fieldB) {\n      return order === 'desc' ? 1 : -1;\n    }\n    if (fieldA > fieldB) {\n      return order === 'desc' ? -1 : 1;\n    }\n    return 0;\n  });\n\n  return sorted;\n};\n\nconst search = (rows, search, column) => {\n  if (!search) return rows;\n\n  const match = (entry) => {\n    const div = document.createElement('div');\n    div.innerHTML = entry;\n    entry = div.textContent || div.innerText || '';\n\n    return entry.toString().toLowerCase().match(search.toLowerCase());\n  };\n\n  return rows.filter((row) => {\n    if (column && typeof column === 'string') {\n      return match(row[column]);\n    }\n\n    let values = Object.values(row);\n\n    if (column && Array.isArray(column)) {\n      values = Object.keys(row)\n        .filter((key) => column.includes(key))\n        .map((key) => row[key]);\n    }\n\n    return (\n      values.filter((value) => {\n        return match(value);\n      }).length > 0\n    );\n  });\n};\n\nconst paginate = ({ rows, entries, activePage }) => {\n  const firstVisibleEntry = activePage * entries;\n  return rows.slice(firstVisibleEntry, firstVisibleEntry + Number(entries));\n};\n\nexport { sort, search, paginate };\n","import SelectorEngine from '../../mdb/dom/selector-engine';\nimport Manipulator from '../../mdb/dom/manipulator';\n\nconst SELECTOR_FORM_CHECK_INPUT = '.form-check-input';\n\nconst CLASS_NAME_SELECTED = 'selected';\nconst CLASS_NAME_ACITVE = 'active';\n\nclass SelectOption {\n  constructor(\n    id,\n    nativeOption,\n    multiple,\n    value,\n    label,\n    selected,\n    disabled,\n    hidden,\n    secondaryText,\n    groupId,\n    icon\n  ) {\n    this.id = id;\n    this.nativeOption = nativeOption;\n    this.multiple = multiple;\n    this.value = value;\n    this.label = label;\n    this.selected = selected;\n    this.disabled = disabled;\n    this.hidden = hidden;\n    this.secondaryText = secondaryText;\n    this.groupId = groupId;\n    this.icon = icon;\n    this.node = null;\n    this.active = false;\n  }\n\n  select() {\n    if (this.multiple) {\n      this._selectMultiple();\n    } else {\n      this._selectSingle();\n    }\n  }\n\n  _selectSingle() {\n    if (!this.selected) {\n      Manipulator.addClass(this.node, CLASS_NAME_SELECTED);\n      this.node.setAttribute('aria-selected', true);\n      this.selected = true;\n\n      if (this.nativeOption) {\n        this.nativeOption.selected = true;\n      }\n    }\n  }\n\n  _selectMultiple() {\n    if (!this.selected) {\n      const checkbox = SelectorEngine.findOne(SELECTOR_FORM_CHECK_INPUT, this.node);\n      checkbox.checked = true;\n      Manipulator.addClass(this.node, CLASS_NAME_SELECTED);\n      this.node.setAttribute('aria-selected', true);\n      this.selected = true;\n\n      if (this.nativeOption) {\n        this.nativeOption.selected = true;\n      }\n    }\n  }\n\n  deselect() {\n    if (this.multiple) {\n      this._deselectMultiple();\n    } else {\n      this._deselectSingle();\n    }\n  }\n\n  _deselectSingle() {\n    if (this.selected) {\n      Manipulator.removeClass(this.node, CLASS_NAME_SELECTED);\n      this.node.setAttribute('aria-selected', false);\n      this.selected = false;\n\n      if (this.nativeOption) {\n        this.nativeOption.selected = false;\n      }\n    }\n  }\n\n  _deselectMultiple() {\n    if (this.selected) {\n      const checkbox = SelectorEngine.findOne(SELECTOR_FORM_CHECK_INPUT, this.node);\n      checkbox.checked = false;\n      Manipulator.removeClass(this.node, CLASS_NAME_SELECTED);\n      this.node.setAttribute('aria-selected', false);\n      this.selected = false;\n\n      if (this.nativeOption) {\n        this.nativeOption.selected = false;\n      }\n    }\n  }\n\n  setNode(node) {\n    this.node = node;\n  }\n\n  setActiveStyles() {\n    if (!this.active && !this.multiple) {\n      this.active = true;\n      Manipulator.addClass(this.node, CLASS_NAME_ACITVE);\n    }\n  }\n\n  removeActiveStyles() {\n    if (this.active) {\n      this.active = false;\n      Manipulator.removeClass(this.node, CLASS_NAME_ACITVE);\n    }\n  }\n}\n\nexport default SelectOption;\n","class SelectionModel {\n  constructor(multiple = false) {\n    this._multiple = multiple;\n    this._selections = [];\n  }\n\n  select(option) {\n    if (this._multiple) {\n      this._selections.push(option);\n    } else {\n      this._selections = [option];\n    }\n  }\n\n  deselect(option) {\n    if (this._multiple) {\n      const optionIndex = this._selections.findIndex((selection) => option === selection);\n      this._selections.splice(optionIndex, 1);\n    } else {\n      this._selections = [];\n    }\n  }\n\n  clear() {\n    this._selections = [];\n  }\n\n  get selection() {\n    return this._selections[0];\n  }\n\n  get selections() {\n    return this._selections;\n  }\n\n  get label() {\n    return this._selections[0] && this.selection.label;\n  }\n\n  get labels() {\n    return this._selections.map((selection) => selection.label).join(', ');\n  }\n\n  get value() {\n    return this.selections[0] && this.selection.value;\n  }\n\n  get values() {\n    return this._selections.map((selection) => selection.value);\n  }\n}\n\nexport default SelectionModel;\n","export default function allOptionsSelected(options) {\n  return options\n    .filter((option) => !option.disabled)\n    .every((option) => {\n      return option.selected;\n    });\n}\n","import { element } from '../../mdb/util/index';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport allOptionsSelected from './util';\n\nconst preventKeydown = (event) => {\n  if (event.code === 'Tab' || event.code === 'Esc') {\n    return;\n  }\n\n  event.preventDefault();\n};\n\nexport function getWrapperTemplate(id, config, label) {\n  const wrapper = document.createElement('div');\n  wrapper.setAttribute('id', id);\n  wrapper.classList.add('select-wrapper');\n\n  const formOutline = element('div');\n  Manipulator.addClass(formOutline, 'form-outline');\n  formOutline.setAttribute('data-mdb-input-init', '');\n\n  if (config.formWhite) {\n    Manipulator.addClass(formOutline, 'form-white');\n  }\n\n  const input = element('input');\n  const role = config.filter ? 'combobox' : 'listbox';\n  const multiselectable = config.multiple ? 'true' : 'false';\n  const disabled = config.disabled ? 'true' : 'false';\n  Manipulator.addClass(input, 'form-control');\n  Manipulator.addClass(input, 'select-input');\n\n  if (config.size === 'sm') {\n    Manipulator.addClass(input, 'form-control-sm');\n  }\n\n  if (config.size === 'lg') {\n    Manipulator.addClass(input, 'form-control-lg');\n  }\n\n  input.setAttribute('type', 'text');\n  input.setAttribute('role', role);\n  input.setAttribute('aria-multiselectable', multiselectable);\n  input.setAttribute('aria-disabled', disabled);\n  input.setAttribute('aria-haspopup', 'true');\n  input.setAttribute('aria-expanded', false);\n\n  if (config.tabIndex) {\n    input.setAttribute('tabIndex', config.tabIndex);\n  }\n\n  if (config.disabled) {\n    input.setAttribute('disabled', '');\n  }\n\n  if (config.placeholder !== '') {\n    input.setAttribute('placeholder', config.placeholder);\n  }\n\n  if (config.validation) {\n    Manipulator.addStyle(input, { 'pointer-events': 'none', 'caret-color': 'transparent' });\n    Manipulator.addStyle(formOutline, { cursor: 'pointer' });\n  } else {\n    input.setAttribute('readonly', 'true');\n  }\n\n  if (config.validation) {\n    input.setAttribute('required', 'true');\n    input.setAttribute('aria-required', 'true');\n    input.addEventListener('keydown', preventKeydown);\n  }\n\n  const validFeedback = element('div');\n  Manipulator.addClass(validFeedback, 'valid-feedback');\n  const validFeedBackText = document.createTextNode(`${config.validFeedback}`);\n  validFeedback.appendChild(validFeedBackText);\n\n  const invalidFeedback = element('div');\n  Manipulator.addClass(invalidFeedback, 'invalid-feedback');\n  const invalidFeedBackText = document.createTextNode(`${config.invalidFeedback}`);\n  invalidFeedback.appendChild(invalidFeedBackText);\n\n  const clearBtn = element('span');\n  Manipulator.addClass(clearBtn, 'select-clear-btn');\n  const clearBtnText = document.createTextNode('\\u2715');\n  clearBtn.appendChild(clearBtnText);\n  clearBtn.setAttribute('tabindex', '0');\n\n  const arrow = element('span');\n  Manipulator.addClass(arrow, 'select-arrow');\n\n  formOutline.appendChild(input);\n\n  if (label) {\n    formOutline.appendChild(label);\n  }\n\n  if (config.validation) {\n    formOutline.appendChild(validFeedback);\n    formOutline.appendChild(invalidFeedback);\n  }\n\n  if (config.clearButton) {\n    formOutline.appendChild(clearBtn);\n  }\n\n  formOutline.appendChild(arrow);\n\n  wrapper.appendChild(formOutline);\n  return wrapper;\n}\n\nexport function getDropdownTemplate(\n  id,\n  config,\n  width,\n  height,\n  selectAllOption,\n  options,\n  customContent\n) {\n  const dropdownContainer = document.createElement('div');\n  dropdownContainer.classList.add('select-dropdown-container');\n\n  dropdownContainer.setAttribute('id', `${id}`);\n  dropdownContainer.style.width = `${width}px`;\n\n  const dropdown = document.createElement('div');\n  dropdown.setAttribute('tabindex', 0);\n  dropdown.classList.add('select-dropdown');\n\n  const optionsWrapper = element('div');\n  Manipulator.addClass(optionsWrapper, 'select-options-wrapper');\n  optionsWrapper.style.maxHeight = `${height}px`;\n\n  const optionsList = getOptionsListTemplate(options, selectAllOption, config);\n\n  optionsWrapper.appendChild(optionsList);\n\n  if (config.filter) {\n    dropdown.appendChild(getFilterTemplate(config.searchPlaceholder));\n  }\n\n  dropdown.appendChild(optionsWrapper);\n\n  if (customContent) {\n    dropdown.appendChild(customContent);\n  }\n\n  dropdownContainer.appendChild(dropdown);\n\n  return dropdownContainer;\n}\n\nexport function getOptionsListTemplate(options, selectAllOption, config) {\n  const optionsList = element('div');\n  Manipulator.addClass(optionsList, 'select-options-list');\n\n  let optionsNodes;\n\n  if (config.multiple) {\n    optionsNodes = getMultipleOptionsNodes(options, selectAllOption, config);\n  } else {\n    optionsNodes = getSingleOptionsNodes(options, config);\n  }\n\n  optionsNodes.forEach((node) => {\n    optionsList.appendChild(node);\n  });\n\n  return optionsList;\n}\n\nexport function getFilterTemplate(placeholder) {\n  const inputGroup = element('div');\n  Manipulator.addClass(inputGroup, 'input-group');\n  const input = element('input');\n  Manipulator.addClass(input, 'form-control');\n  Manipulator.addClass(input, 'select-filter-input');\n  input.placeholder = placeholder;\n  input.setAttribute('role', 'searchbox');\n  input.setAttribute('type', 'text');\n\n  inputGroup.appendChild(input);\n\n  return inputGroup;\n}\n\nfunction getSingleOptionsNodes(options, config) {\n  const nodes = getOptionsNodes(options, config);\n  return nodes;\n}\n\nfunction getMultipleOptionsNodes(options, selectAllOption, config) {\n  let selectAllNode = null;\n\n  if (config.selectAll) {\n    selectAllNode = createSelectAllNode(selectAllOption, options, config);\n  }\n  const optionsNodes = getOptionsNodes(options, config);\n  const nodes = selectAllNode ? [selectAllNode, ...optionsNodes] : optionsNodes;\n  return nodes;\n}\n\nfunction getOptionsNodes(options, config) {\n  const nodes = [];\n\n  options.forEach((option) => {\n    const isOptionGroup = option.hasOwnProperty('options');\n    if (isOptionGroup) {\n      const group = createOptionGroupTemplate(option, config);\n      nodes.push(group);\n    } else {\n      nodes.push(createOptionTemplate(option, config));\n    }\n  });\n\n  return nodes;\n}\n\nfunction createSelectAllNode(option, options, config) {\n  const isSelected = allOptionsSelected(options);\n  const optionNode = element('div');\n  Manipulator.addClass(optionNode, 'select-option');\n  Manipulator.addClass(optionNode, 'select-all-option');\n  Manipulator.addStyle(optionNode, { height: `${config.optionHeight}px` });\n  optionNode.setAttribute('role', 'option');\n  optionNode.setAttribute('aria-selected', isSelected);\n\n  if (isSelected) {\n    Manipulator.addClass(optionNode, 'selected');\n  }\n\n  optionNode.appendChild(getOptionContentTemplate(option, config));\n  option.setNode(optionNode);\n\n  return optionNode;\n}\n\nfunction createOptionTemplate(option, config) {\n  if (option.node) {\n    return option.node;\n  }\n\n  const optionNode = element('div');\n  Manipulator.addClass(optionNode, 'select-option');\n  Manipulator.addStyle(optionNode, { height: `${config.optionHeight}px` });\n  Manipulator.setDataAttribute(optionNode, 'id', option.id);\n  optionNode.setAttribute('role', 'option');\n  optionNode.setAttribute('aria-selected', option.selected);\n  optionNode.setAttribute('aria-disabled', option.disabled);\n\n  if (option.selected) {\n    Manipulator.addClass(optionNode, 'selected');\n  }\n\n  if (option.disabled) {\n    Manipulator.addClass(optionNode, 'disabled');\n  }\n\n  if (option.hidden) {\n    Manipulator.addClass(optionNode, 'd-none');\n  }\n\n  optionNode.appendChild(getOptionContentTemplate(option, config));\n\n  if (option.icon) {\n    optionNode.appendChild(getOptionIconTemplate(option));\n  }\n\n  option.setNode(optionNode);\n\n  return optionNode;\n}\n\nfunction getOptionContentTemplate(option, config) {\n  const content = element('span');\n  Manipulator.addClass(content, 'select-option-text');\n\n  const label = document.createTextNode(option.label);\n\n  if (config.multiple) {\n    content.appendChild(getCheckboxTemplate(option));\n  }\n\n  content.appendChild(label);\n\n  if (option.secondaryText || typeof option.secondaryText === 'number') {\n    content.appendChild(getSecondaryTextTemplate(option.secondaryText));\n  }\n\n  return content;\n}\n\nfunction getSecondaryTextTemplate(text) {\n  const span = element('span');\n  Manipulator.addClass(span, 'select-option-secondary-text');\n  const textContent = document.createTextNode(text);\n  span.appendChild(textContent);\n  return span;\n}\n\nfunction getCheckboxTemplate(option) {\n  const checkbox = element('input');\n  checkbox.setAttribute('type', 'checkbox');\n  Manipulator.addClass(checkbox, 'form-check-input');\n\n  const label = element('label');\n\n  if (option.selected) {\n    checkbox.setAttribute('checked', true);\n  }\n\n  if (option.disabled) {\n    checkbox.setAttribute('disabled', true);\n  }\n\n  checkbox.appendChild(label);\n  return checkbox;\n}\n\nfunction getOptionIconTemplate(option) {\n  const container = element('span');\n  Manipulator.addClass(container, 'select-option-icon-container');\n  const image = element('img');\n  Manipulator.addClass(image, 'select-option-icon');\n  Manipulator.addClass(image, 'rounded-circle');\n  image.src = option.icon;\n\n  container.appendChild(image);\n  return container;\n}\n\nfunction createOptionGroupTemplate(optionGroup, config) {\n  const group = element('div');\n  Manipulator.addClass(group, 'select-option-group');\n  group.setAttribute('role', 'group');\n  group.setAttribute('id', optionGroup.id);\n\n  if (optionGroup.hidden) {\n    Manipulator.addClass(group, 'd-none');\n  }\n\n  const label = element('label');\n  Manipulator.addClass(label, 'select-option-group-label');\n  Manipulator.addStyle(label, { height: `${config.optionHeight}px` });\n  label.setAttribute('for', optionGroup.id);\n  label.textContent = optionGroup.label;\n\n  group.appendChild(label);\n\n  optionGroup.options.forEach((option) => {\n    group.appendChild(createOptionTemplate(option, config));\n  });\n\n  return group;\n}\n\nexport function getFakeValueTemplate(value) {\n  const fakeValue = element('div');\n  fakeValue.textContent = value;\n  Manipulator.addClass(fakeValue, 'form-label');\n  Manipulator.addClass(fakeValue, 'select-fake-value');\n\n  return fakeValue;\n}\n","import { createPopper } from '@popperjs/core';\nimport Data from '../../mdb/dom/data';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport { typeCheckConfig, getUID } from '../../mdb/util/index';\nimport Input from '../../free/input';\nimport SelectOption from './select-option';\nimport SelectionModel from './selection-model';\nimport { ESCAPE, ENTER, DOWN_ARROW, UP_ARROW, HOME, END, TAB } from '../../mdb/util/keycodes';\nimport allOptionsSelected from './util';\nimport {\n  getWrapperTemplate,\n  getDropdownTemplate,\n  getOptionsListTemplate,\n  getFakeValueTemplate,\n} from './templates';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\nconst Default = {\n  autoSelect: false,\n  container: 'body',\n  clearButton: false,\n  disabled: false,\n  displayedLabels: 5,\n  formWhite: false,\n  multiple: false,\n  optionsSelectedLabel: 'options selected',\n  optionHeight: 38,\n  selectAll: true,\n  selectAllLabel: 'Select all',\n  searchPlaceholder: 'Search...',\n  size: 'default',\n  visibleOptions: 5,\n  filter: false,\n  filterDebounce: 300,\n  noResultText: 'No results',\n  validation: false,\n  validFeedback: 'Valid',\n  invalidFeedback: 'Invalid',\n  placeholder: '',\n  filterFn: null,\n};\n\nconst DefaultType = {\n  autoSelect: 'boolean',\n  container: 'string',\n  clearButton: 'boolean',\n  disabled: 'boolean',\n  displayedLabels: 'number',\n  formWhite: 'boolean',\n  multiple: 'boolean',\n  optionsSelectedLabel: 'string',\n  optionHeight: 'number',\n  selectAll: 'boolean',\n  selectAllLabel: 'string',\n  searchPlaceholder: 'string',\n  size: 'string',\n  visibleOptions: 'number',\n  filter: 'boolean',\n  filterDebounce: 'number',\n  noResultText: 'string',\n  validation: 'boolean',\n  validFeedback: 'string',\n  invalidFeedback: 'string',\n  placeholder: '',\n  filterFn: '(function|null)',\n};\n\nconst NAME = 'select';\nconst DATA_KEY = 'mdb.select';\n\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLOSE = `close${EVENT_KEY}`;\nconst EVENT_OPEN = `open${EVENT_KEY}`;\nconst EVENT_SELECTED = `optionSelected${EVENT_KEY}`;\nconst EVENT_DESELECTED = `optionDeselected${EVENT_KEY}`;\nconst EVENT_VALUE_CHANGED = `valueChanged${EVENT_KEY}`;\nconst EVENT_CHANGE_NATIVE = 'change';\nconst EVENT_OPENED = `opened${EVENT_KEY}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY}`;\n\nconst SELECTOR_LABEL = '.select-label';\nconst SELECTOR_INPUT = '.select-input';\nconst SELECTOR_FILTER_INPUT = '.select-filter-input';\nconst SELECTOR_DROPDOWN = '.select-dropdown';\nconst SELECTOR_OPTIONS_WRAPPER = '.select-options-wrapper';\nconst SELECTOR_OPTIONS_LIST = '.select-options-list';\nconst SELECTOR_OPTION = '.select-option';\nconst SELECTOR_CLEAR_BUTTON = '.select-clear-btn';\nconst SELECTOR_CUSTOM_CONTENT = '.select-custom-content';\nconst SELECTOR_NO_RESULTS = '.select-no-results';\nconst SELECTOR_FORM_OUTLINE = '.form-outline';\nconst SELECTOR_TOGGLE = '[data-mdb-toggle]';\n\nconst CLASS_NAME_INITIALIZED = 'select-initialized';\nconst CLASS_NAME_OPEN = 'open';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FOCUSED = 'focused';\nconst CLASS_NAME_OPTION_GROUP_LABEL = 'select-option-group-label';\nconst CLASS_NAME_SELECT_ALL_OPTION = 'select-all-option';\n\nconst ANIMATION_TRANSITION_TIME = 200;\n\nclass Select extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n\n    this._config = this._getConfig(config);\n    this._optionsToRender = this._getOptionsToRender(element);\n\n    // optionsToRender may contain option groups and nested options, in this case\n    // we need a list of plain options to manage selections and keyboard navigation\n    this._plainOptions = this._getPlainOptions(this._optionsToRender);\n    this._filteredOptionsList = null;\n\n    this._selectionModel = new SelectionModel(this.multiple);\n\n    this._activeOptionIndex = -1;\n    this._activeOption = null;\n\n    this._wrapperId = this._element.id\n      ? `select-wrapper-${this._element.id}`\n      : getUID('select-wrapper-');\n    this._dropdownContainerId = this._element.id\n      ? `select-dropdown-container-${this._element.id}`\n      : getUID('select-dropdown-container-');\n    this._selectAllId = this._element.id ? `select-all-${this._element.id}` : getUID('select-all-');\n    this._debounceTimeoutId = null;\n\n    this._dropdownHeight = this._config.optionHeight * this._config.visibleOptions;\n\n    this._popper = null;\n    this._input = null;\n    this._label = SelectorEngine.next(this._element, SELECTOR_LABEL)[0];\n    this._fakeValue = null;\n    this._isFakeValueActive = false;\n    this._customContent = SelectorEngine.next(element, SELECTOR_CUSTOM_CONTENT)[0];\n    this._toggleButton = null;\n    this._elementToggle = null;\n\n    this._wrapper = null;\n    this._inputEl = null;\n    this._dropdownContainer = null;\n    this._container = null;\n    this._selectAllOption = null;\n\n    this._init();\n\n    this._mutationObserver = null;\n    this._isOpen = false;\n\n    this._addMutationObserver();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  get filterInput() {\n    return SelectorEngine.findOne(SELECTOR_FILTER_INPUT, this._dropdownContainer);\n  }\n\n  get dropdown() {\n    return SelectorEngine.findOne(SELECTOR_DROPDOWN, this._dropdownContainer);\n  }\n\n  get optionsList() {\n    return SelectorEngine.findOne(SELECTOR_OPTIONS_LIST, this._dropdownContainer);\n  }\n\n  get optionsWrapper() {\n    return SelectorEngine.findOne(SELECTOR_OPTIONS_WRAPPER, this._dropdownContainer);\n  }\n\n  get clearButton() {\n    return SelectorEngine.findOne(SELECTOR_CLEAR_BUTTON, this._wrapper);\n  }\n\n  get options() {\n    return this._filteredOptionsList ? this._filteredOptionsList : this._plainOptions;\n  }\n\n  get value() {\n    return this.multiple ? this._selectionModel.values : this._selectionModel.value;\n  }\n\n  get multiple() {\n    return this._config.multiple;\n  }\n\n  get hasSelectAll() {\n    return this.multiple && this._config.selectAll;\n  }\n\n  get hasSelection() {\n    return this._selectionModel.selection || this._selectionModel.selections.length > 0;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n    config = {\n      ...Default,\n      ...dataAttributes,\n      ...config,\n    };\n\n    if (this._element.hasAttribute('multiple')) {\n      config.multiple = true;\n    }\n\n    if (this._element.hasAttribute('disabled')) {\n      config.disabled = true;\n    }\n\n    if (this._element.tabIndex) {\n      config.tabIndex = this._element.getAttribute('tabIndex');\n    }\n\n    typeCheckConfig(NAME, config, DefaultType);\n\n    return config;\n  }\n\n  _getOptionsToRender(select) {\n    const options = [];\n\n    const nodes = select.childNodes;\n\n    nodes.forEach((node) => {\n      if (node.nodeName === 'OPTGROUP') {\n        const optionGroup = {\n          id: node.id ? `group-${node.id}` : getUID('group-'),\n          label: node.label,\n          disabled: node.hasAttribute('disabled'),\n          hidden: node.hasAttribute('hidden'),\n          options: [],\n        };\n        const groupOptions = node.childNodes;\n        groupOptions.forEach((option) => {\n          if (option.nodeName === 'OPTION') {\n            optionGroup.options.push(this._createOptionObject(option, optionGroup));\n          }\n        });\n        options.push(optionGroup);\n      } else if (node.nodeName === 'OPTION') {\n        options.push(this._createOptionObject(node));\n      }\n    });\n    return options;\n  }\n\n  _getPlainOptions(optionsToRender) {\n    const hasOptionGroup = SelectorEngine.findOne('optgroup', this._element);\n\n    if (!hasOptionGroup) {\n      return optionsToRender;\n    }\n\n    const options = [];\n\n    optionsToRender.forEach((option) => {\n      const isOptionGroup = option.hasOwnProperty('options');\n      if (isOptionGroup) {\n        option.options.forEach((nestedOption) => {\n          options.push(nestedOption);\n        });\n      } else {\n        options.push(option);\n      }\n    });\n\n    return options;\n  }\n\n  _createOptionObject(nativeOption, group = {}) {\n    const id = nativeOption.id ? `option-${nativeOption.id}` : getUID('option-');\n    const groupId = group.id ? group.id : null;\n    const groupDisabled = group.disabled ? group.disabled : false;\n    const selected = nativeOption.selected || nativeOption.hasAttribute('selected');\n    const disabled = nativeOption.hasAttribute('disabled') || groupDisabled;\n    const hidden = nativeOption.hasAttribute('hidden') || (group && group.hidden);\n    const multiple = this.multiple;\n    const value = nativeOption.value;\n    const label = nativeOption.label;\n    const secondaryText = Manipulator.getDataAttribute(nativeOption, 'secondaryText');\n    const icon = Manipulator.getDataAttribute(nativeOption, 'icon');\n    return new SelectOption(\n      id,\n      nativeOption,\n      multiple,\n      value,\n      label,\n      selected,\n      disabled,\n      hidden,\n      secondaryText,\n      groupId,\n      icon\n    );\n  }\n\n  _getNavigationOptions() {\n    const availableOptions = this.options.filter((option) => !option.hidden);\n\n    return this.hasSelectAll ? [this._selectAllOption, ...availableOptions] : availableOptions;\n  }\n\n  _init() {\n    this._renderMaterialWrapper();\n\n    this._wrapper = SelectorEngine.findOne(`#${this._wrapperId}`);\n    this._input = SelectorEngine.findOne(SELECTOR_INPUT, this._wrapper);\n\n    if (this._element.getAttribute('autocomplete') === 'off') {\n      this._input.setAttribute('autocomplete', 'off');\n    }\n    const containerSelector = this._config.container;\n\n    if (containerSelector === 'body') {\n      this._container = document.body;\n    } else {\n      this._container = SelectorEngine.findOne(containerSelector);\n    }\n\n    this._initOutlineInput();\n    this._setDefaultSelections();\n    this._updateInputValue();\n    this._appendFakeValue();\n    this._updateFakeLabelPosition();\n    this._updateLabelPosition();\n    this._updateClearButtonVisibility();\n\n    this._bindComponentEvents();\n\n    if (this.hasSelectAll) {\n      this._selectAllOption = this._createSelectAllOption();\n    }\n\n    this._dropdownContainer = getDropdownTemplate(\n      this._dropdownContainerId,\n      this._config,\n      this._input.offsetWidth,\n      this._dropdownHeight,\n      this._selectAllOption,\n      this._optionsToRender,\n      this._customContent\n    );\n\n    this._setFirstActiveOption();\n  }\n\n  _renderMaterialWrapper() {\n    const template = getWrapperTemplate(this._wrapperId, this._config, this._label);\n    this._element.parentNode.insertBefore(template, this._element);\n    Manipulator.addClass(this._element, CLASS_NAME_INITIALIZED);\n    template.appendChild(this._element);\n  }\n\n  _initOutlineInput() {\n    const inputWrapper = SelectorEngine.findOne(SELECTOR_FORM_OUTLINE, this._wrapper);\n    const outlineInput = new Input(inputWrapper);\n    outlineInput.init();\n  }\n\n  _bindComponentEvents() {\n    this._listenToComponentKeydown();\n    this._listenToWrapperClick();\n    if (!this._config.disabled) {\n      this._listenToClearBtnClick();\n      this._listenToClearBtnKeydown();\n    }\n  }\n\n  _setDefaultSelections() {\n    this.options.forEach((option) => {\n      if (option.selected) {\n        this._selectionModel.select(option);\n      }\n    });\n  }\n\n  _listenToComponentKeydown() {\n    EventHandler.on(this._wrapper, 'keydown', this._handleKeydown.bind(this));\n  }\n\n  _handleKeydown(event) {\n    if (this._isOpen && !this._config.filter) {\n      this._handleOpenKeydown(event);\n    } else {\n      this._handleClosedKeydown(event);\n    }\n  }\n\n  _handleOpenKeydown(event) {\n    const key = event.keyCode;\n    const isCloseKey =\n      key === ESCAPE || ((key === UP_ARROW || key === DOWN_ARROW) && event.altKey) || key === TAB;\n\n    if (key === TAB && this._config.autoSelect && !this.multiple) {\n      this._handleAutoSelection(this._activeOption);\n    }\n\n    if (isCloseKey) {\n      this.close();\n      this._input.focus();\n      return;\n    }\n\n    switch (key) {\n      case DOWN_ARROW:\n        this._setNextOptionActive();\n        this._scrollToOption(this._activeOption);\n        break;\n      case UP_ARROW:\n        this._setPreviousOptionActive();\n        this._scrollToOption(this._activeOption);\n        break;\n      case HOME:\n        this._setFirstOptionActive();\n        this._scrollToOption(this._activeOption);\n        break;\n      case END:\n        this._setLastOptionActive();\n        this._scrollToOption(this._activeOption);\n        break;\n      case ENTER:\n        event.preventDefault();\n        if (this._activeOption) {\n          if (this.hasSelectAll && this._activeOptionIndex === 0) {\n            this._handleSelectAll();\n          } else {\n            this._handleSelection(this._activeOption);\n          }\n        }\n        return;\n      default:\n        return;\n    }\n\n    event.preventDefault();\n  }\n\n  _handleClosedKeydown(event) {\n    const key = event.keyCode;\n    if (key === ENTER) {\n      event.preventDefault();\n    }\n    const isOpenKey =\n      key === ENTER ||\n      ((key === DOWN_ARROW || key === UP_ARROW) && event.altKey) ||\n      (key === DOWN_ARROW && this.multiple);\n\n    if (isOpenKey) {\n      this.open();\n    }\n\n    if (!this.multiple) {\n      switch (key) {\n        case DOWN_ARROW:\n          if (event.altKey) return;\n          this._setNextOptionActive();\n          this._handleSelection(this._activeOption);\n          break;\n        case UP_ARROW:\n          if (event.altKey) return;\n          this._setPreviousOptionActive();\n          this._handleSelection(this._activeOption);\n          break;\n        case HOME:\n          this._setFirstOptionActive();\n          this._handleSelection(this._activeOption);\n          break;\n        case END:\n          this._setLastOptionActive();\n          this._handleSelection(this._activeOption);\n          break;\n        default:\n          return;\n      }\n    } else {\n      switch (key) {\n        case DOWN_ARROW:\n          this.open();\n          break;\n        case UP_ARROW:\n          this.open();\n          break;\n        default:\n          return;\n      }\n    }\n\n    event.preventDefault();\n  }\n\n  _scrollToOption(option) {\n    if (!option) {\n      return;\n    }\n\n    let optionIndex;\n\n    const visibleOptions = this.options.filter((option) => !option.hidden);\n\n    if (this.hasSelectAll) {\n      optionIndex = visibleOptions.indexOf(option) + 1;\n    } else {\n      optionIndex = visibleOptions.indexOf(option);\n    }\n\n    const groupsNumber = this._getNumberOfGroupsBeforeOption(optionIndex);\n\n    const scrollToIndex = optionIndex + groupsNumber;\n\n    const list = this.optionsWrapper;\n    const listHeight = list.offsetHeight;\n    const optionHeight = this._config.optionHeight;\n    const scrollTop = list.scrollTop;\n\n    if (optionIndex > -1) {\n      const optionOffset = scrollToIndex * optionHeight;\n      const isBelow = optionOffset + optionHeight > scrollTop + listHeight;\n      const isAbove = optionOffset < scrollTop;\n\n      if (isAbove) {\n        list.scrollTop = optionOffset;\n      } else if (isBelow) {\n        list.scrollTop = optionOffset - listHeight + optionHeight;\n      } else {\n        list.scrollTop = scrollTop;\n      }\n    }\n  }\n\n  _getNumberOfGroupsBeforeOption(optionIndex) {\n    const optionsList = this.options.filter((option) => !option.hidden);\n    const groupsList = this._optionsToRender.filter((group) => !group.hidden);\n    const index = this.hasSelectAll ? optionIndex - 1 : optionIndex;\n    let groupsNumber = 0;\n\n    for (let i = 0; i <= index; i++) {\n      if (\n        optionsList[i].groupId &&\n        groupsList[groupsNumber] &&\n        groupsList[groupsNumber].id &&\n        optionsList[i].groupId === groupsList[groupsNumber].id\n      ) {\n        groupsNumber++;\n      }\n    }\n\n    return groupsNumber;\n  }\n\n  _setNextOptionActive() {\n    let index = this._activeOptionIndex + 1;\n    const options = this._getNavigationOptions();\n\n    if (!options[index]) {\n      return;\n    }\n\n    while (options[index].disabled) {\n      index += 1;\n\n      if (!options[index]) {\n        return;\n      }\n    }\n\n    this._updateActiveOption(options[index], index);\n  }\n\n  _setPreviousOptionActive() {\n    let index = this._activeOptionIndex - 1;\n    const options = this._getNavigationOptions();\n\n    if (!options[index]) {\n      return;\n    }\n\n    while (options[index].disabled) {\n      index -= 1;\n\n      if (!options[index]) {\n        return;\n      }\n    }\n\n    this._updateActiveOption(options[index], index);\n  }\n\n  _setFirstOptionActive() {\n    const index = 0;\n    const options = this._getNavigationOptions();\n\n    this._updateActiveOption(options[index], index);\n  }\n\n  _setLastOptionActive() {\n    const options = this._getNavigationOptions();\n    const index = options.length - 1;\n\n    this._updateActiveOption(options[index], index);\n  }\n\n  _updateActiveOption(newActiveOption, index) {\n    const currentActiveOption = this._activeOption;\n\n    if (currentActiveOption) {\n      currentActiveOption.removeActiveStyles();\n    }\n\n    newActiveOption.setActiveStyles();\n    this._activeOptionIndex = index;\n    this._activeOption = newActiveOption;\n  }\n\n  _listenToWrapperClick() {\n    EventHandler.on(this._wrapper, 'click', () => {\n      this.toggle();\n    });\n  }\n\n  _listenToClearBtnClick() {\n    EventHandler.on(this.clearButton, 'click', (event) => {\n      event.preventDefault();\n      event.stopPropagation();\n      this._handleClear();\n    });\n  }\n\n  _listenToClearBtnKeydown() {\n    EventHandler.on(this.clearButton, 'keydown', (event) => {\n      if (event.keyCode === ENTER) {\n        this._handleClear();\n        event.preventDefault();\n        event.stopPropagation();\n      }\n    });\n  }\n\n  _handleClear() {\n    if (this.multiple) {\n      this._selectionModel.clear();\n      this._deselectAllOptions(this.options);\n\n      if (this.hasSelectAll) {\n        this._updateSelectAllState();\n      }\n    } else {\n      const selected = this._selectionModel.selection;\n      this._selectionModel.clear();\n      selected.deselect();\n    }\n    this._updateInputValue();\n    this._updateFakeLabelPosition();\n    this._updateLabelPosition();\n    this._updateClearButtonVisibility();\n\n    this._emitValueChangeEvent(null);\n    this._emitNativeChangeEvent();\n  }\n\n  _listenToOptionsClick() {\n    EventHandler.on(this.optionsWrapper, 'click', (event) => {\n      const optionGroupLabel = event.target.classList.contains(CLASS_NAME_OPTION_GROUP_LABEL);\n\n      if (optionGroupLabel) {\n        return;\n      }\n\n      const target =\n        event.target.nodeName === 'DIV'\n          ? event.target\n          : SelectorEngine.closest(event.target, SELECTOR_OPTION);\n      const selectAllOption = target.classList.contains(CLASS_NAME_SELECT_ALL_OPTION);\n\n      if (selectAllOption) {\n        this._handleSelectAll();\n        return;\n      }\n\n      const id = target.dataset.mdbId;\n      const option = this.options.find((option) => option.id === id);\n\n      if (option && !option.disabled) {\n        this._handleSelection(option);\n      }\n    });\n  }\n\n  _handleSelectAll() {\n    const selected = this._selectAllOption.selected;\n\n    if (selected) {\n      this._deselectAllOptions(this.options);\n      this._selectAllOption.deselect();\n    } else {\n      this._selectAllOptions(this.options);\n      this._selectAllOption.select();\n    }\n\n    this._updateInputValue();\n    this._updateFakeLabelPosition();\n    this._updateLabelPosition();\n    this._updateClearButtonVisibility();\n\n    this._emitValueChangeEvent(this.value);\n    this._emitNativeChangeEvent();\n  }\n\n  _selectAllOptions(options) {\n    options.forEach((option) => {\n      if (!option.selected && !option.disabled) {\n        this._selectionModel.select(option);\n        option.select();\n      }\n    });\n  }\n\n  _deselectAllOptions(options) {\n    options.forEach((option) => {\n      if (option.selected && !option.disabled) {\n        this._selectionModel.deselect(option);\n        option.deselect();\n      }\n    });\n  }\n\n  _handleSelection(option) {\n    if (this.multiple) {\n      this._handleMultiSelection(option);\n\n      if (this.hasSelectAll) {\n        this._updateSelectAllState();\n      }\n    } else {\n      this._handleSingleSelection(option);\n    }\n\n    this._updateInputValue();\n    this._updateFakeLabelPosition();\n    this._updateLabelPosition();\n    this._updateClearButtonVisibility();\n  }\n\n  _handleAutoSelection(option) {\n    this._singleOptionSelect(option);\n    this._updateInputValue();\n    this._updateFakeLabelPosition();\n    this._updateLabelPosition();\n    this._updateClearButtonVisibility();\n  }\n\n  _handleSingleSelection(option) {\n    this._singleOptionSelect(option);\n    this.close();\n    this._input.focus();\n  }\n\n  _singleOptionSelect(option) {\n    const currentSelected = this._selectionModel.selections[0];\n\n    if (currentSelected && currentSelected !== option) {\n      this._selectionModel.deselect(currentSelected);\n      currentSelected.deselect();\n      currentSelected.node.setAttribute('selected', false);\n      EventHandler.trigger(this._element, EVENT_DESELECTED, { value: currentSelected.value });\n    }\n\n    if (!currentSelected || (currentSelected && option !== currentSelected)) {\n      this._selectionModel.select(option);\n      option.select();\n      option.node.setAttribute('selected', true);\n      EventHandler.trigger(this._element, EVENT_SELECTED, { value: option.value });\n      this._emitValueChangeEvent(this.value);\n      this._emitNativeChangeEvent();\n    }\n  }\n\n  _handleMultiSelection(option) {\n    if (option.selected) {\n      this._selectionModel.deselect(option);\n      option.deselect();\n      option.node.setAttribute('selected', false);\n      EventHandler.trigger(this._element, EVENT_DESELECTED, { value: option.value });\n    } else {\n      this._selectionModel.select(option);\n      option.select();\n      option.node.setAttribute('selected', true);\n      EventHandler.trigger(this._element, EVENT_SELECTED, { value: option.value });\n    }\n\n    this._emitValueChangeEvent(this.value);\n    this._emitNativeChangeEvent();\n  }\n\n  _emitValueChangeEvent(value) {\n    EventHandler.trigger(this._element, EVENT_VALUE_CHANGED, { value });\n  }\n\n  _emitNativeChangeEvent() {\n    EventHandler.trigger(this._element, EVENT_CHANGE_NATIVE);\n  }\n\n  _updateInputValue() {\n    const labels = this.multiple ? this._selectionModel.labels : this._selectionModel.label;\n    let value;\n\n    if (\n      this.multiple &&\n      this._config.displayedLabels !== -1 &&\n      this._selectionModel.selections.length > this._config.displayedLabels\n    ) {\n      value = `${this._selectionModel.selections.length} ${this._config.optionsSelectedLabel}`;\n    } else {\n      value = labels;\n    }\n\n    if (!this.multiple && !this._isSelectionValid(this._selectionModel.selection)) {\n      this._input.value = '';\n    } else if (this._isLabelEmpty(this._selectionModel.selection)) {\n      this._input.value = ' ';\n    } else if (value) {\n      this._input.value = value;\n    } else {\n      // prettier-ignore\n      // eslint-disable-next-line\n      this.multiple || !this._optionsToRender[0] ? (this._input.value = '') : (this._input.value = this._optionsToRender[0].label);\n    }\n  }\n\n  _isSelectionValid(selection) {\n    if (selection && (selection.disabled || selection.value === '')) {\n      return false;\n    }\n\n    return true;\n  }\n\n  _isLabelEmpty(selection) {\n    if (selection && selection.label === '') {\n      return true;\n    }\n\n    return false;\n  }\n\n  _appendFakeValue() {\n    if (!this._selectionModel.selection || this._selectionModel._multiple) {\n      return;\n    }\n\n    const value = this._selectionModel.selection.label;\n    this._fakeValue = getFakeValueTemplate(value);\n    const inputWrapper = SelectorEngine.findOne(SELECTOR_FORM_OUTLINE, this._wrapper);\n    inputWrapper.appendChild(this._fakeValue);\n  }\n\n  _updateLabelPosition() {\n    const isInitialized = Manipulator.hasClass(this._element, CLASS_NAME_INITIALIZED);\n    const isValueEmpty = this._input.value !== '';\n    if (!this._label) {\n      return;\n    }\n\n    if (isInitialized && (isValueEmpty || this._isOpen || this._isFakeValueActive)) {\n      Manipulator.addClass(this._label, CLASS_NAME_ACTIVE);\n    } else {\n      Manipulator.removeClass(this._label, CLASS_NAME_ACTIVE);\n    }\n  }\n\n  _updateLabelPositionWhileClosing() {\n    if (!this._label) {\n      return;\n    }\n\n    if (this._input.value !== '' || this._isFakeValueActive) {\n      Manipulator.addClass(this._label, CLASS_NAME_ACTIVE);\n    } else {\n      Manipulator.removeClass(this._label, CLASS_NAME_ACTIVE);\n    }\n  }\n\n  _updateFakeLabelPosition() {\n    if (!this._fakeValue) {\n      return;\n    }\n\n    if (this.hasSelection) {\n      this._fakeValue.textContent = this.hasSelection.label;\n    }\n\n    if (this._input.value === '' && this._fakeValue.innerHTML !== '') {\n      this._isFakeValueActive = true;\n      Manipulator.addClass(this._fakeValue, CLASS_NAME_ACTIVE);\n    } else {\n      this._isFakeValueActive = false;\n      Manipulator.removeClass(this._fakeValue, CLASS_NAME_ACTIVE);\n    }\n  }\n\n  _updateClearButtonVisibility() {\n    if (!this.clearButton) {\n      return;\n    }\n\n    const hasSelection =\n      this._selectionModel.selection || this._selectionModel.selections.length > 0;\n\n    if (hasSelection) {\n      Manipulator.addStyle(this.clearButton, { display: 'block' });\n    } else {\n      Manipulator.addStyle(this.clearButton, { display: 'none' });\n    }\n  }\n\n  _updateSelectAllState() {\n    const selectAllSelected = this._selectAllOption.selected;\n    const allSelected = allOptionsSelected(this.options);\n    if (!allSelected && selectAllSelected) {\n      this._selectAllOption.deselect();\n    } else if (allSelected && !selectAllSelected) {\n      this._selectAllOption.select();\n    }\n  }\n\n  toggle() {\n    if (this._isOpen) {\n      this.close();\n    } else {\n      this.open();\n    }\n  }\n\n  open() {\n    const isDisabled = this._config.disabled;\n    const openEvent = EventHandler.trigger(this._element, EVENT_OPEN);\n\n    if (this._isOpen || isDisabled || openEvent.defaultPrevented) {\n      return;\n    }\n\n    this._openDropdown();\n    this._updateDropdownWidth();\n    this._setFirstActiveOption();\n    this._scrollToOption(this._activeOption);\n\n    if (this._config.filter) {\n      // We need to wait for popper initialization, otherwise\n      // dates container will be focused before popper position\n      // update which can change the scroll position on the page\n      setTimeout(() => {\n        this.filterInput.focus();\n      }, 0);\n\n      this._listenToSelectSearch();\n\n      // New listener for dropdown navigation is needed, because\n      // we focus search input inside dropdown template, which is\n      // appended to the body. In this case listener attached to the\n      // select wrapper won't work\n      this._listenToDropdownKeydown();\n    }\n\n    this._listenToOptionsClick();\n    this._listenToOutsideClick();\n    this._listenToWindowResize();\n\n    this._isOpen = true;\n    EventHandler.trigger(this._element, EVENT_OPENED);\n\n    this._updateLabelPosition();\n    this._setInputActiveStyles();\n  }\n\n  _openDropdown() {\n    this._popper = createPopper(this._input, this._dropdownContainer, {\n      placement: 'bottom-start',\n      modifiers: [\n        {\n          name: 'offset',\n          options: {\n            offset: [0, 1],\n          },\n        },\n      ],\n    });\n    this._container.appendChild(this._dropdownContainer);\n\n    // We need to add delay to wait for the popper initialization\n    // and position update\n    setTimeout(() => {\n      Manipulator.addClass(this.dropdown, CLASS_NAME_OPEN);\n    }, 0);\n  }\n\n  _updateDropdownWidth() {\n    const inputWidth = this._input.offsetWidth;\n    Manipulator.addStyle(this._dropdownContainer, { width: `${inputWidth}px` });\n  }\n\n  _setFirstActiveOption() {\n    const options = this._getNavigationOptions();\n    const currentActive = this._activeOption;\n\n    if (currentActive) {\n      currentActive.removeActiveStyles();\n    }\n\n    const firstSelected = this.multiple\n      ? this._selectionModel.selections[0]\n      : this._selectionModel.selection;\n\n    if (firstSelected) {\n      this._activeOption = firstSelected;\n      firstSelected.setActiveStyles();\n      this._activeOptionIndex = options.findIndex((option) => option === firstSelected);\n    } else {\n      this._activeOption = null;\n      this._activeOptionIndex = -1;\n    }\n  }\n\n  _setInputActiveStyles() {\n    Manipulator.addClass(this._input, CLASS_NAME_FOCUSED);\n  }\n\n  _listenToWindowResize() {\n    EventHandler.on(window, 'resize', this._handleWindowResize.bind(this));\n  }\n\n  _handleWindowResize() {\n    if (this._dropdownContainer) {\n      this._updateDropdownWidth();\n    }\n  }\n\n  _listenToSelectSearch() {\n    this.filterInput.addEventListener('input', (event) => {\n      const searchTerm = event.target.value;\n      const debounceTime = this._config.filterDebounce;\n      this._debounceFilter(searchTerm, debounceTime);\n    });\n  }\n\n  _debounceFilter(searchTerm, debounceTime) {\n    if (this._debounceTimeoutId) {\n      clearTimeout(this._debounceTimeoutId);\n    }\n\n    this._debounceTimeoutId = setTimeout(() => {\n      this._filterOptions(searchTerm);\n    }, debounceTime);\n  }\n\n  _filterOptions(searchTerm) {\n    const filtered = [];\n    const filterFn = this._config.filterFn;\n\n    this._optionsToRender.forEach((option) => {\n      const isOptionGroup = option.hasOwnProperty('options');\n      const isValidOption =\n        !isOptionGroup && option.label.toLowerCase().includes(searchTerm.toLowerCase());\n      const group = {};\n\n      if (isOptionGroup) {\n        group.label = option.label;\n        group.options = this._filter(searchTerm, option.options);\n\n        if (group.options.length > 0) {\n          filtered.push(group);\n        }\n      }\n\n      if (filterFn && !isOptionGroup) {\n        const customSearchResult = filterFn(searchTerm, option);\n        if (customSearchResult) {\n          filtered.push(option);\n        }\n      } else if (isValidOption) {\n        filtered.push(option);\n      }\n    });\n\n    const hasNoResultsText = this._config.noResultText !== '';\n    const hasFilteredOptions = filtered.length !== 0;\n\n    if (hasFilteredOptions) {\n      this._updateOptionsListTemplate(filtered);\n      this._popper.forceUpdate();\n      this._filteredOptionsList = this._getPlainOptions(filtered);\n\n      if (this.hasSelectAll) {\n        this._updateSelectAllState();\n      }\n\n      this._setFirstActiveOption();\n    } else if (!hasFilteredOptions && hasNoResultsText) {\n      const noResultsTemplate = this._getNoResultTemplate();\n      this.optionsWrapper.innerHTML = noResultsTemplate;\n    }\n  }\n\n  _updateOptionsListTemplate(optionsToRender) {\n    const optionsWrapperContent =\n      SelectorEngine.findOne(SELECTOR_OPTIONS_LIST, this._dropdownContainer) ||\n      SelectorEngine.findOne(SELECTOR_NO_RESULTS, this._dropdownContainer);\n\n    const optionsListTemplate = getOptionsListTemplate(\n      optionsToRender,\n      this._selectAllOption,\n      this._config\n    );\n    this.optionsWrapper.removeChild(optionsWrapperContent);\n    this.optionsWrapper.appendChild(optionsListTemplate);\n  }\n\n  _getNoResultTemplate() {\n    return `<div class=\"select-no-results\" style=\"height: ${this._config.optionHeight}px\">${this._config.noResultText}</div>`;\n  }\n\n  _filter(value, options) {\n    const filterFn = this._config.filterFn;\n    if (filterFn) {\n      return options.filter((option) => filterFn(value, option));\n    }\n    const filterValue = value.toLowerCase();\n    return options.filter((option) => option.label.toLowerCase().includes(filterValue));\n  }\n\n  _listenToDropdownKeydown() {\n    EventHandler.on(this.dropdown, 'keydown', this._handleOpenKeydown.bind(this));\n  }\n\n  _listenToOutsideClick() {\n    this._outsideClick = this._handleOutSideClick.bind(this);\n    EventHandler.on(document, 'click', this._outsideClick);\n  }\n\n  _handleOutSideClick(event) {\n    const isSelectContent = this._wrapper && this._wrapper.contains(event.target);\n    const isDropdown = event.target === this._dropdownContainer;\n    const isDropdownContent =\n      this._dropdownContainer && this._dropdownContainer.contains(event.target);\n\n    let isButton;\n    if (!this._toggleButton) {\n      this._elementToggle = SelectorEngine.find(SELECTOR_TOGGLE);\n    }\n    if (this._elementToggle) {\n      this._elementToggle.forEach((button) => {\n        const attributes = Manipulator.getDataAttribute(button, 'toggle');\n        if (attributes === this._element.id || this._element.classList.contains(attributes)) {\n          this._toggleButton = button;\n          isButton = this._toggleButton.contains(event.target);\n        }\n      });\n    }\n\n    if (!isSelectContent && !isDropdown && !isDropdownContent && !isButton) {\n      this.close();\n    }\n  }\n\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n    if (!this._isOpen || closeEvent.defaultPrevented) {\n      return;\n    }\n\n    if (this._config.filter && this.hasSelectAll) {\n      this._resetFilterState();\n      this._updateOptionsListTemplate(this._optionsToRender);\n      if (this._config.multiple) {\n        this._updateSelectAllState();\n      }\n    }\n\n    this._removeDropdownEvents();\n\n    Manipulator.removeClass(this.dropdown, CLASS_NAME_OPEN);\n\n    setTimeout(() => {\n      Manipulator.removeClass(this._input, CLASS_NAME_FOCUSED);\n      if (this._label && !this.hasSelection) {\n        Manipulator.removeClass(this._label, CLASS_NAME_ACTIVE);\n        Manipulator.removeClass(this._input, CLASS_NAME_ACTIVE);\n      }\n      this._updateLabelPositionWhileClosing();\n    }, 0);\n\n    setTimeout(() => {\n      if (this._container && this._dropdownContainer.parentNode === this._container) {\n        this._container.removeChild(this._dropdownContainer);\n      }\n      this._popper.destroy();\n      this._isOpen = false;\n      EventHandler.off(this.dropdown, 'transitionend');\n      EventHandler.trigger(this._element, EVENT_CLOSED);\n    }, ANIMATION_TRANSITION_TIME);\n  }\n\n  _resetFilterState() {\n    this.filterInput.value = '';\n    this._filteredOptionsList = null;\n  }\n\n  _removeDropdownEvents() {\n    EventHandler.off(document, 'click', this._outsideClick);\n\n    if (this._config.filter) {\n      EventHandler.off(this.dropdown, 'keydown');\n    }\n\n    EventHandler.off(this.optionsWrapper, 'click');\n  }\n\n  _addMutationObserver() {\n    this._mutationObserver = new MutationObserver(() => {\n      if (this._wrapper) {\n        this._updateSelections();\n        this._updateDisabledState();\n      }\n    });\n\n    this._observeMutationObserver();\n  }\n\n  _updateSelections() {\n    this._optionsToRender = this._getOptionsToRender(this._element);\n    this._plainOptions = this._getPlainOptions(this._optionsToRender);\n    this._selectionModel.clear();\n    this._setDefaultSelections();\n    this._updateInputValue();\n    this._updateFakeLabelPosition();\n    this._updateLabelPosition();\n    this._updateClearButtonVisibility();\n\n    if (this.hasSelectAll) {\n      this._updateSelectAllState();\n    }\n\n    const hasFilterValue = this._config.filter && this.filterInput && this.filterInput.value;\n\n    if (this._isOpen && !hasFilterValue) {\n      this._updateOptionsListTemplate(this._optionsToRender);\n      this._setFirstActiveOption();\n    } else if (this._isOpen && hasFilterValue) {\n      this._filterOptions(this.filterInput.value);\n      this._setFirstActiveOption();\n    } else {\n      this._dropdownContainer = getDropdownTemplate(\n        this._dropdownContainerId,\n        this._config,\n        this._input.offsetWidth,\n        this._dropdownHeight,\n        this._selectAllOption,\n        this._optionsToRender,\n        this._customContent\n      );\n    }\n  }\n\n  _updateDisabledState() {\n    const input = SelectorEngine.findOne(SELECTOR_INPUT, this._wrapper);\n\n    if (this._element.hasAttribute('disabled')) {\n      this._config.disabled = true;\n      input.setAttribute('disabled', '');\n    } else {\n      this._config.disabled = false;\n      input.removeAttribute('disabled');\n    }\n  }\n\n  _observeMutationObserver() {\n    if (!this._mutationObserver) {\n      return;\n    }\n\n    this._mutationObserver.observe(this._element, {\n      attributes: true,\n      childList: true,\n      characterData: true,\n      subtree: true,\n    });\n  }\n\n  _disconnectMutationObserver() {\n    if (this._mutationObserver) {\n      this._mutationObserver.disconnect();\n      this._mutationObserver = null;\n    }\n  }\n\n  _createSelectAllOption() {\n    const id = this._selectAllId;\n    const nativeOption = null;\n    const multiple = true;\n    const value = 'select-all';\n    const label = this._config.selectAllLabel;\n    const selected = allOptionsSelected(this.options);\n    const disabled = false;\n    const hidden = false;\n    const secondaryText = null;\n    const groupId = null;\n    const icon = null;\n\n    return new SelectOption(\n      id,\n      nativeOption,\n      multiple,\n      value,\n      label,\n      selected,\n      disabled,\n      hidden,\n      secondaryText,\n      groupId,\n      icon\n    );\n  }\n\n  dispose() {\n    this._disconnectMutationObserver();\n    this._removeComponentEvents();\n\n    this._disconnectMutationObserver();\n\n    this._destroyMaterialSelect();\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  _removeComponentEvents() {\n    EventHandler.off(this.input, 'click');\n    EventHandler.off(this.wrapper, this._handleKeydown.bind(this));\n    EventHandler.off(this.clearButton, 'click');\n    EventHandler.off(this.clearButton, 'keydown');\n    EventHandler.off(window, 'resize', this._handleWindowResize.bind(this));\n  }\n\n  _destroyMaterialSelect() {\n    if (this._isOpen) {\n      this.close();\n    }\n\n    this._destroyMaterialTemplate();\n  }\n\n  _destroyMaterialTemplate() {\n    const wrapperParent = this._wrapper.parentNode;\n    const labels = SelectorEngine.find('label', this._wrapper);\n\n    wrapperParent.appendChild(this._element);\n    labels.forEach((label) => {\n      wrapperParent.appendChild(label);\n    });\n\n    labels.forEach((label) => {\n      Manipulator.removeClass(label, CLASS_NAME_ACTIVE);\n    });\n    Manipulator.removeClass(this._element, CLASS_NAME_INITIALIZED);\n\n    // restore custom content removed on init\n    if (this._customContent) {\n      wrapperParent.appendChild(this._customContent);\n    }\n\n    wrapperParent.removeChild(this._wrapper);\n  }\n\n  setValue(value) {\n    this.options\n      .filter((option) => option.selected)\n      .forEach((selection) => (selection.nativeOption.selected = false));\n\n    const isMultipleValue = Array.isArray(value);\n\n    if (isMultipleValue) {\n      value.forEach((selectionValue) => {\n        this._selectByValue(selectionValue);\n      });\n    } else {\n      this._selectByValue(value);\n    }\n\n    this._updateSelections();\n    this._emitValueChangeEvent(value);\n  }\n\n  _selectByValue(value) {\n    const correspondingOption = this.options.find((option) => option.value === value);\n    if (!correspondingOption) {\n      return false;\n    }\n    correspondingOption.nativeOption.selected = true;\n    return true;\n  }\n\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data && /dispose/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new Select(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](options);\n      }\n    });\n  }\n}\n\nexport default Select;\n","import PerfectScrollbar from '../../mdb/perfect-scrollbar';\nimport { typeCheckConfig } from '../../mdb/util/index';\nimport Data from '../../mdb/dom/data';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport tableTemplate from './html/table'; //eslint-disable-line\nimport { search, sort, paginate } from './util';\nimport Select from '../select';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'datatable';\nconst DATA_KEY = `mdb.${NAME}`;\n\nconst CLASS_DATATABLE = 'datatable';\nconst CLASS_FIXED_CELL = 'fixed-cell';\n\nconst SELECTOR_BODY = '.datatable-inner';\nconst SELECTOR_CELL = 'td';\nconst SELECTOR_HEADER = '.datatable-header th';\nconst SELECTOR_HEADER_CHECKBOX = '.datatable-header-checkbox';\nconst SELECTOR_PAGINATION_RIGHT = '.datatable-pagination-right';\nconst SELECTOR_PAGINATION_LEFT = '.datatable-pagination-left';\nconst SELECTOR_PAGINATION_START = '.datatable-pagination-start';\nconst SELECTOR_PAGINATION_END = '.datatable-pagination-end';\nconst SELECTOR_PAGINATION_NAV = '.datatable-pagination-nav';\nconst SELECTOR_SELECT = '.datatable-select';\nconst SELECTOR_SORT_ICON = '.datatable-sort-icon';\nconst SELECTOR_ROW = '.datatable-body tr';\nconst SELECTOR_ROW_CHECKBOX = '.datatable-row-checkbox';\n\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_SELECTED = `rowSelected${EVENT_KEY}`;\nconst EVENT_RENDER = `render${EVENT_KEY}`;\nconst EVENT_ROW_CLICKED = `rowClicked${EVENT_KEY}`;\nconst EVENT_UPDATE = `update${EVENT_KEY}`;\n\nconst EVENT_VALUE_CHANGED_SELECT = 'valueChanged.mdb.select';\n\nconst TYPE_OPTIONS = {\n  bordered: 'boolean',\n  borderless: 'boolean',\n  borderColor: '(string|null)',\n  clickableRows: 'boolean',\n  color: '(string|null)',\n  defaultValue: 'string',\n  edit: 'boolean',\n  entries: '(number|string)',\n  entriesOptions: 'array',\n  fullPagination: 'boolean',\n  hover: 'boolean',\n  loading: 'boolean',\n  loadingMessage: 'string',\n  maxWidth: '(null|number|string)',\n  maxHeight: '(null|number|string)',\n  multi: 'boolean',\n  noFoundMessage: 'string',\n  pagination: 'boolean',\n  selectable: 'boolean',\n  sm: 'boolean',\n  sortField: '(null|string)',\n  sortOrder: 'string',\n  loaderClass: 'string',\n  fixedHeader: 'boolean',\n  striped: 'boolean',\n  rowsText: 'string',\n  ofText: 'string',\n  allText: 'string',\n  forceSort: 'boolean',\n};\n\nconst TYPE_COLUMN_FIELDS = {\n  label: 'string',\n  field: 'string',\n  fixed: '(boolean|string)',\n  format: '(function|null)',\n  width: '(number|null)',\n  sort: 'boolean',\n  columnIndex: 'number',\n};\n\nconst DEFAULT_OPTIONS = {\n  bordered: false,\n  borderless: false,\n  borderColor: null,\n  clickableRows: false,\n  color: null,\n  dark: false,\n  defaultValue: '-',\n  edit: false,\n  entries: 10,\n  entriesOptions: [10, 25, 50, 200],\n  fixedHeader: false,\n  fullPagination: false,\n  hover: false,\n  loaderClass: 'bg-primary',\n  loading: false,\n  loadingMessage: 'Loading results...',\n  maxWidth: null,\n  maxHeight: null,\n  multi: false,\n  noFoundMessage: 'No matching results found',\n  pagination: true,\n  selectable: false,\n  sm: false,\n  sortField: null,\n  sortOrder: 'asc',\n  striped: false,\n  rowsText: 'Rows per page:',\n  ofText: 'of',\n  allText: 'All',\n  forceSort: false,\n};\n\nconst DEFAUL_COLUMN = {\n  label: '',\n  field: '',\n  fixed: false,\n  format: null,\n  width: null,\n  sort: true,\n  columnIndex: 0,\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Datatable extends BaseComponent {\n  constructor(element, data = {}, options = {}) {\n    super(element);\n\n    this._options = this._getOptions(options);\n\n    this._sortReverse = false;\n\n    this._activePage = 0;\n\n    this._search = '';\n    this._searchColumn = null;\n\n    this._paginationLeft = null;\n    this._paginationRight = null;\n    this._paginationStart = null;\n    this._paginationEnd = null;\n    this._select = null;\n    this._selectInstance = null;\n\n    this._selected = [];\n    this._checkboxes = null;\n    this._headerCheckbox = null;\n    this._rows = this._getRows(data.rows);\n    this._columns = this._getColumns(data.columns);\n\n    if (this._element) {\n      this._perfectScrollbar = null;\n      this._setup();\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  get columns() {\n    return this._columns.map((column, index) => {\n      let template = {\n        ...DEFAUL_COLUMN,\n        field: `field_${index}`,\n        columnIndex: index,\n      };\n\n      if (typeof column === 'string') {\n        template.label = column;\n      } else if (typeof column === 'object') {\n        template = {\n          ...template,\n          ...column,\n        };\n      }\n\n      typeCheckConfig('column', template, TYPE_COLUMN_FIELDS);\n\n      return template;\n    });\n  }\n\n  get rows() {\n    return this._rows.map((row, index) => {\n      const output = {\n        rowIndex: index,\n      };\n\n      if (Array.isArray(row)) {\n        this.columns.forEach((column, i) => {\n          if (row[i] === 0) {\n            output[column.field] = row[i];\n          } else {\n            output[column.field] = row[i] || this._options.defaultValue;\n          }\n        });\n      } else if (typeof row === 'object') {\n        this.columns.forEach((column) => {\n          if (row[column.field] === 0) {\n            output[column.field] = row[column.field];\n          } else {\n            output[column.field] = row[column.field] || this._options.defaultValue;\n          }\n        });\n      }\n\n      return output;\n    });\n  }\n\n  get searchResult() {\n    return search(this.rows, this._search, this._searchColumn);\n  }\n\n  get computedRows() {\n    let result = [...this.searchResult];\n\n    if (this._options.sortOrder) {\n      result = sort({\n        rows: result,\n        field: this._options.sortField,\n        order: this._options.sortOrder,\n      });\n    }\n\n    if (this._options.pagination) {\n      if (this._options.entries === 'All') {\n        result = paginate({\n          rows: result,\n          entries: result.length,\n          activePage: this._activePage,\n        });\n      } else {\n        result = paginate({\n          rows: result,\n          entries: this._options.entries,\n          activePage: this._activePage,\n        });\n      }\n    }\n\n    return result;\n  }\n\n  get pages() {\n    if (this._options.entries === 'All') {\n      return 1;\n    }\n\n    return Math.ceil(this.searchResult.length / this._options.entries);\n  }\n\n  get navigationText() {\n    const firstVisibleEntry = this._activePage * this._options.entries;\n\n    if (this.searchResult.length === 0) {\n      return `0 ${this._options.ofText} 0`;\n    }\n\n    if (this._options.entries === 'All') {\n      return `1 - ${this.searchResult.length} ${this._options.ofText} ${this.searchResult.length}`;\n    }\n\n    return `${firstVisibleEntry + 1} - ${this.computedRows.length + firstVisibleEntry} ${\n      this._options.ofText\n    } ${this.searchResult.length}`;\n  }\n\n  get classNames() {\n    return [\n      CLASS_DATATABLE,\n      this._options.color,\n      this._options.borderColor && `border-${this._options.borderColor}`,\n      this._options.dark && 'datatable-dark',\n      this._options.hover && 'datatable-hover',\n      this._options.bordered && 'datatable-bordered',\n      this._options.borderless && 'datatable-borderless',\n      this._options.sm && 'datatable-sm',\n      this._options.striped && 'datatable-striped',\n      this._options.loading && 'datatable-loading',\n      this._options.clickableRows && 'datatable-clickable-rows',\n    ].filter((className) => className);\n  }\n\n  get tableOptions() {\n    return {\n      columns: this.columns,\n      rows: this.computedRows,\n      noFoundMessage: this._options.noFoundMessage,\n      edit: this._options.edit,\n      loading: this._options.loading,\n      loaderClass: this._options.loaderClass,\n      loadingMessage: this._options.loadingMessage,\n      selectable: this._options.selectable,\n      multi: this._options.multi,\n      pagination: {\n        enable: this._options.pagination,\n        text: this.navigationText,\n        entries: this._options.entries,\n        entriesOptions: this._options.entriesOptions,\n        fullPagination: this._options.fullPagination,\n        rowsText: this._options.rowsText,\n        ofText: this._options.ofText,\n        allText: this._options.allText,\n      },\n      forceSort: this._options.forceSort,\n    };\n  }\n\n  // Public\n\n  update(data, options = {}) {\n    if (data && data.rows) {\n      this._rows = data.rows;\n    }\n\n    if (data && data.columns) {\n      this._columns = data.columns;\n    }\n\n    this._clearClassList(options);\n\n    this._options = this._getOptions({ ...this._options, ...options });\n\n    this._setup();\n\n    this._performSort();\n  }\n\n  dispose() {\n    if (this._selectInstance) {\n      this._selectInstance.dispose();\n    }\n\n    this._removeEventListeners();\n    this._perfectScrollbar.destroy();\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  search(string, column) {\n    this._search = string;\n\n    this._searchColumn = column;\n\n    this._activePage = 0;\n\n    if (this._options.pagination) {\n      this._toggleDisableState();\n    }\n\n    this._renderRows();\n\n    if (this._options.maxHeight) {\n      this._perfectScrollbar.element.scrollTop = 0;\n\n      this._perfectScrollbar.update();\n    }\n  }\n\n  sort(column, order = 'asc') {\n    this._options.sortOrder = order;\n\n    if (typeof column === 'string') {\n      this._options.sortField = this.columns.find((header) => header.label === column).field;\n    } else {\n      this._options.sortField = column.field;\n    }\n\n    const icon = SelectorEngine.findOne(\n      `i[data-mdb-sort=\"${this._options.sortField}\"]`,\n      this._element\n    );\n\n    this._activePage = 0;\n\n    this._toggleDisableState();\n\n    this._renderRows();\n\n    this._setActiveSortIcon(icon);\n  }\n\n  setActivePage(index) {\n    if (index < this.pages) {\n      this._changeActivePage(index);\n    }\n  }\n\n  // Private\n\n  _changeActivePage(index) {\n    this._activePage = index;\n\n    this._toggleDisableState();\n\n    this._renderRows();\n  }\n\n  _clearClassList(options) {\n    if (this._options.color && options.color) {\n      Manipulator.removeClass(this._element, this._options.color);\n    }\n\n    if (this._options.borderColor && options.borderColor) {\n      Manipulator.removeClass(this._element, `border-${this._options.borderColor}`);\n    }\n\n    ['dark', 'hover', 'bordered', 'borderless', 'sm', 'striped', 'loading'].forEach((option) => {\n      if (this._options[option] && !options[option]) {\n        Manipulator.removeClass(this._element, `datatable-${option}`);\n      }\n    });\n  }\n\n  _emitSelectEvent() {\n    EventHandler.trigger(this._element, EVENT_SELECTED, {\n      selectedRows: this.rows.filter((row) => this._selected.indexOf(row.rowIndex) !== -1),\n      selectedIndexes: this._selected,\n      allSelected: this._selected.length === this.rows.length,\n    });\n  }\n\n  _getRows(rows = []) {\n    const body = SelectorEngine.findOne('tbody', this._element);\n\n    if (!body) {\n      return rows;\n    }\n\n    const tableRows = SelectorEngine.find('tr', body).map((row) => {\n      return SelectorEngine.find('td', row).map((cell) => cell.innerHTML);\n    });\n\n    return [...tableRows, ...rows];\n  }\n\n  _getColumns(columns = []) {\n    const head = SelectorEngine.findOne('thead', this._element);\n\n    if (!head) {\n      return columns;\n    }\n\n    const headerRow = SelectorEngine.findOne('tr', head);\n\n    const headers = SelectorEngine.find('th', headerRow).map((cell) => ({\n      label: cell.innerHTML,\n      ...Manipulator.getDataAttributes(cell),\n    }));\n\n    return [...headers, ...columns];\n  }\n\n  _getCSSValue(size) {\n    if (typeof size === 'string') {\n      return size;\n    }\n\n    return `${size}px`;\n  }\n\n  _getOptions(options) {\n    const config = {\n      ...DEFAULT_OPTIONS,\n      ...Manipulator.getDataAttributes(this._element),\n      ...options,\n    };\n\n    const entriesOptions = Manipulator.getDataAttributes(this._element).entriesOptions;\n    const entriesOptionsAsArray = Array.isArray(config.entriesOptions)\n      ? config.entriesOptions\n      : JSON.parse(entriesOptions);\n\n    config.entriesOptions = entriesOptionsAsArray;\n\n    typeCheckConfig(NAME, config, TYPE_OPTIONS);\n    return config;\n  }\n\n  _setActiveRows() {\n    SelectorEngine.find(SELECTOR_ROW, this._element).forEach((row) => {\n      if (this._selected.includes(Manipulator.getDataAttribute(row, 'index'))) {\n        Manipulator.addClass(row, 'active');\n      } else {\n        Manipulator.removeClass(row, 'active');\n      }\n    });\n  }\n\n  _setEntries(e) {\n    this._options = this._getOptions({ ...this._options, entries: e.target.value });\n\n    if (this._activePage > this.pages - 1) {\n      this._activePage = this.pages - 1;\n    }\n\n    this._toggleDisableState();\n\n    this._renderRows();\n  }\n\n  _setSelected() {\n    SelectorEngine.find(SELECTOR_ROW_CHECKBOX, this._element).forEach((checkbox) => {\n      const index = Manipulator.getDataAttribute(checkbox, 'rowIndex');\n\n      checkbox.checked = this._selected.includes(index);\n    });\n\n    this._setActiveRows();\n  }\n\n  _setActiveSortIcon(active) {\n    SelectorEngine.find(SELECTOR_SORT_ICON, this._element).forEach((icon) => {\n      const angle = this._options.sortOrder === 'desc' && icon === active ? 180 : 0;\n\n      Manipulator.style(icon, {\n        transform: `rotate(${angle}deg)`,\n      });\n\n      if (icon === active && this._options.sortOrder) {\n        Manipulator.addClass(icon, 'active');\n      } else {\n        Manipulator.removeClass(icon, 'active');\n      }\n    });\n  }\n\n  _setClassNames() {\n    this.classNames.forEach((className) => {\n      Manipulator.addClass(this._element, className);\n    });\n  }\n\n  _setup() {\n    this._setClassNames();\n\n    this._renderTable();\n\n    if (this._options.pagination) {\n      this._setupPagination();\n    }\n\n    if (this._options.edit) {\n      this._setupEditable();\n    }\n\n    if (this._options.clickableRows) {\n      this._setupClickableRows();\n    }\n\n    if (this._options.selectable) {\n      this._setupSelectable();\n    }\n\n    this._setupScroll();\n\n    this._setupSort();\n  }\n\n  _setupClickableRows() {\n    SelectorEngine.find(SELECTOR_ROW, this._element).forEach((row) => {\n      const index = Manipulator.getDataAttribute(row, 'index');\n\n      EventHandler.on(row, 'click', (e) => {\n        if (!SelectorEngine.matches(e.target, SELECTOR_ROW_CHECKBOX)) {\n          EventHandler.trigger(this._element, EVENT_ROW_CLICKED, { index, row: this.rows[index] });\n        }\n      });\n    });\n  }\n\n  _setupEditable() {\n    SelectorEngine.find(SELECTOR_ROW, this._element).forEach((row) => {\n      const index = Manipulator.getDataAttribute(row, 'index');\n\n      SelectorEngine.find(SELECTOR_CELL, row).forEach((cell) => {\n        EventHandler.on(cell, 'input', (e) => this._updateRow(e, index));\n      });\n    });\n  }\n\n  _setupScroll() {\n    const datatableBody = SelectorEngine.findOne(SELECTOR_BODY, this._element);\n\n    const style = {\n      overflow: 'auto',\n      position: 'relative',\n    };\n\n    if (this._options.maxHeight) {\n      style.maxHeight = this._getCSSValue(this._options.maxHeight);\n    }\n\n    if (this._options.maxWidth) {\n      const width = this._getCSSValue(this._options.maxWidth);\n\n      style.maxWidth = width;\n\n      Manipulator.style(this._element, { maxWidth: width });\n    }\n\n    Manipulator.style(datatableBody, style);\n\n    if (this._options.fixedHeader) {\n      let headers = SelectorEngine.find(SELECTOR_HEADER, this._element);\n\n      if (this._options.selectable) {\n        headers = headers.filter((header, index) => {\n          Manipulator.addClass(header, CLASS_FIXED_CELL);\n\n          if (this._options.color) {\n            Manipulator.addClass(header, this._options.color);\n          }\n\n          return index !== 0;\n        });\n      }\n\n      headers.forEach((header, i) => {\n        Manipulator.addClass(header, CLASS_FIXED_CELL);\n\n        if (this.columns[i].fixed) {\n          Manipulator.addStyle(header, { zIndex: 4 });\n        }\n\n        if (this._options.color) {\n          Manipulator.addClass(header, this._options.color);\n        }\n      });\n    }\n\n    this._perfectScrollbar = new PerfectScrollbar(datatableBody);\n  }\n\n  _setupSort() {\n    SelectorEngine.find(SELECTOR_SORT_ICON, this._element).forEach((icon) => {\n      const field = Manipulator.getDataAttribute(icon, 'sort');\n      const [header] = SelectorEngine.parents(icon, 'th');\n      Manipulator.style(header, { cursor: 'pointer' });\n\n      if (field === this._options.sortField) {\n        this._setActiveSortIcon(icon);\n      }\n\n      EventHandler.on(header, 'click', () => {\n        if (this._options.sortField === field && this._options.sortOrder === 'asc') {\n          this._options.sortOrder = 'desc';\n        } else if (this._options.sortField === field && this._options.sortOrder === 'desc') {\n          this._options.sortOrder = this._options.forceSort ? 'asc' : null;\n        } else {\n          this._options.sortOrder = 'asc';\n        }\n\n        this._options.sortField = field;\n\n        this._activePage = 0;\n\n        this._performSort();\n\n        this._setActiveSortIcon(icon);\n      });\n    });\n  }\n\n  _performSort() {\n    this._toggleDisableState();\n\n    this._renderRows();\n  }\n\n  _setupSelectable() {\n    this._checkboxes = SelectorEngine.find(SELECTOR_ROW_CHECKBOX, this._element);\n\n    this._headerCheckbox = SelectorEngine.findOne(SELECTOR_HEADER_CHECKBOX, this._element);\n\n    EventHandler.on(this._headerCheckbox, 'input', (e) => this._toggleSelectAll(e));\n\n    this._checkboxes.forEach((checkbox) => {\n      const rowIndex = Manipulator.getDataAttribute(checkbox, 'rowIndex');\n\n      EventHandler.on(checkbox, 'input', (e) => this._toggleSelectRow(e, rowIndex));\n    });\n  }\n\n  _setupPagination() {\n    this._paginationRight = SelectorEngine.findOne(SELECTOR_PAGINATION_RIGHT, this._element);\n\n    this._paginationLeft = SelectorEngine.findOne(SELECTOR_PAGINATION_LEFT, this._element);\n\n    EventHandler.on(this._paginationRight, 'click', () =>\n      this._changeActivePage(this._activePage + 1)\n    );\n\n    EventHandler.on(this._paginationLeft, 'click', () =>\n      this._changeActivePage(this._activePage - 1)\n    );\n\n    if (this._options.fullPagination) {\n      this._paginationStart = SelectorEngine.findOne(SELECTOR_PAGINATION_START, this._element);\n\n      this._paginationEnd = SelectorEngine.findOne(SELECTOR_PAGINATION_END, this._element);\n\n      EventHandler.on(this._paginationStart, 'click', () => this._changeActivePage(0));\n\n      EventHandler.on(this._paginationEnd, 'click', () => this._changeActivePage(this.pages - 1));\n    }\n\n    this._toggleDisableState();\n\n    this._setupPaginationSelect();\n  }\n\n  _setupPaginationSelect() {\n    this._select = SelectorEngine.findOne(SELECTOR_SELECT, this._element);\n\n    if (this._selectInstance) {\n      this._selectInstance.dispose();\n    }\n\n    this._selectInstance = new Select(this._select);\n\n    EventHandler.on(this._select, EVENT_VALUE_CHANGED_SELECT, (e) => this._setEntries(e));\n  }\n\n  _removeEventListeners() {\n    if (this._options.pagination) {\n      EventHandler.off(this._paginationRight, 'click');\n\n      EventHandler.off(this._paginationLeft, 'click');\n\n      EventHandler.off(this._select, EVENT_VALUE_CHANGED_SELECT);\n\n      if (this._options.fullPagination) {\n        EventHandler.off(this._paginationStart, 'click');\n\n        EventHandler.off(this._paginationEnd, 'click');\n      }\n    }\n\n    if (this._options.editable) {\n      SelectorEngine.find(SELECTOR_CELL, this._element).forEach((cell) => {\n        EventHandler.off(cell, 'input');\n      });\n    }\n\n    if (this._options.clickableRows) {\n      SelectorEngine.find(SELECTOR_ROW, this._element).forEach((row) => {\n        EventHandler.off(row, 'click');\n      });\n    }\n\n    SelectorEngine.find(SELECTOR_SORT_ICON, this._element).forEach((icon) => {\n      const [header] = SelectorEngine.parents(icon, 'th');\n\n      EventHandler.off(header, 'click');\n    });\n\n    if (this._options.selectable) {\n      EventHandler.off(this._headerCheckbox, 'input');\n\n      this._checkboxes.forEach((checkbox) => {\n        EventHandler.off(checkbox, 'input');\n      });\n    }\n  }\n\n  _renderTable() {\n    this._element.innerHTML = tableTemplate(this.tableOptions).table;\n\n    this._formatCells();\n\n    EventHandler.trigger(this._element, EVENT_RENDER);\n  }\n\n  _renderRows() {\n    const body = SelectorEngine.findOne('tbody', this._element);\n\n    if (this._options.pagination) {\n      const navigation = SelectorEngine.findOne(SELECTOR_PAGINATION_NAV, this._element);\n      navigation.innerText = this.navigationText;\n    }\n\n    body.innerHTML = tableTemplate(this.tableOptions).rows;\n\n    this._formatCells();\n\n    if (this._options.edit) {\n      this._setupEditable();\n    }\n\n    if (this._options.selectable) {\n      this._setupSelectable();\n\n      this._setSelected();\n    }\n\n    if (this._options.clickableRows) {\n      this._setupClickableRows();\n    }\n\n    EventHandler.trigger(this._element, EVENT_RENDER);\n  }\n\n  _formatCells() {\n    const rows = SelectorEngine.find(SELECTOR_ROW, this._element);\n\n    rows.forEach((row) => {\n      const index = Manipulator.getDataAttribute(row, 'index');\n\n      const cells = SelectorEngine.find(SELECTOR_CELL, row);\n\n      cells.forEach((cell) => {\n        const field = Manipulator.getDataAttribute(cell, 'field');\n\n        const column = this.columns.find((column) => column.field === field);\n\n        if (column && column.format !== null) {\n          column.format(cell, this.rows[index][field]);\n        }\n      });\n    });\n  }\n\n  _toggleDisableState() {\n    if (this._options.pagination === false) {\n      return;\n    }\n    if (this._activePage === 0 || this._options.loading) {\n      this._paginationLeft.setAttribute('disabled', true);\n\n      if (this._options.fullPagination) {\n        this._paginationStart.setAttribute('disabled', true);\n      }\n    } else {\n      this._paginationLeft.removeAttribute('disabled');\n\n      if (this._options.fullPagination) {\n        this._paginationStart.removeAttribute('disabled');\n      }\n    }\n\n    if (this._activePage === this.pages - 1 || this._options.loading || this.pages === 0) {\n      this._paginationRight.setAttribute('disabled', true);\n\n      if (this._options.fullPagination) {\n        this._paginationEnd.setAttribute('disabled', true);\n      }\n    } else {\n      this._paginationRight.removeAttribute('disabled');\n\n      if (this._options.fullPagination) {\n        this._paginationEnd.removeAttribute('disabled');\n      }\n    }\n  }\n\n  _toggleSelectAll(e) {\n    if (e.target.checked) {\n      this._selected = this.rows.map((row) => row.rowIndex);\n    } else this._selected = [];\n\n    this._setSelected();\n\n    this._emitSelectEvent();\n  }\n\n  _toggleSelectRow(e, rowIndex) {\n    if (e.target.checked) {\n      if (this._options.multi && !this._selected.includes(rowIndex)) {\n        this._selected = [...this._selected, rowIndex];\n      } else {\n        this._selected = [rowIndex];\n\n        this._checkboxes.forEach((checkbox) => {\n          if (checkbox !== e.target) {\n            checkbox.checked = false;\n          }\n        });\n      }\n    } else {\n      this._selected = this._selected.filter((index) => index !== rowIndex);\n    }\n    if (this._options.multi && !e.target.checked) {\n      this._headerCheckbox.checked = false;\n    }\n\n    this._setActiveRows();\n\n    this._emitSelectEvent();\n  }\n\n  _updateRow(event, index) {\n    const field = Manipulator.getDataAttribute(event.target, 'field');\n\n    const value = event.target.textContent;\n\n    const row = this._rows[index];\n\n    if (Array.isArray(row)) {\n      const column = this.columns.find((column) => {\n        return column.field === field;\n      });\n\n      const columnIndex = column.columnIndex;\n\n      row[columnIndex] = value;\n    } else {\n      row[field] = value;\n    }\n\n    EventHandler.trigger(this._element, EVENT_UPDATE, {\n      rows: this._rows,\n      columns: this._columns,\n    });\n  }\n\n  static jQueryInterface(config, param1, param2) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data && /dispose/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new Datatable(this, _config, param1);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](param1, param2);\n      }\n    });\n  }\n}\n\nexport default Datatable;\n","import Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { typeCheckConfig, isRTL } from '../mdb/util/index';\nimport {\n  LEFT_ARROW,\n  RIGHT_ARROW,\n  UP_ARROW,\n  DOWN_ARROW,\n  HOME,\n  END,\n  ENTER,\n  SPACE,\n  TAB,\n} from '../mdb/util/keycodes';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'stepper';\nconst DATA_KEY = 'mdb.stepper';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst STEPPER_HORIZONTAL = 'horizontal';\nconst STEPPER_VERTICAL = 'vertical';\nconst STEPPER_MOBILE = 'mobile';\n\nconst DefaultType = {\n  stepperType: 'string',\n  stepperLinear: 'boolean',\n  stepperNoEditable: 'boolean',\n  stepperActive: 'string',\n  stepperCompleted: 'string',\n  stepperInvalid: 'string',\n  stepperDisabled: 'string',\n  stepperVerticalBreakpoint: 'number',\n  stepperMobileBreakpoint: 'number',\n  stepperMobileBarBreakpoint: 'number',\n  animations: 'boolean',\n  stepperHeadClick: 'boolean',\n  stepperMobileNextBtn: 'string',\n  stepperMobileBackBtn: 'string',\n  stepperMobileStepTxt: 'string',\n  stepperMobileOfTxt: 'string',\n};\n\nconst Default = {\n  stepperType: STEPPER_HORIZONTAL,\n  stepperLinear: false,\n  stepperNoEditable: false,\n  stepperActive: '',\n  stepperCompleted: '',\n  stepperInvalid: '',\n  stepperDisabled: '',\n  stepperVerticalBreakpoint: 0,\n  stepperMobileBreakpoint: 0,\n  stepperMobileBarBreakpoint: 4,\n  animations: true,\n  stepperHeadClick: true,\n  stepperMobileNextBtn: 'NEXT',\n  stepperMobileBackBtn: 'BACK',\n  stepperMobileStepTxt: 'step',\n  stepperMobileOfTxt: 'of',\n};\n\nconst EVENT_MOUSEDOWN = `mousedown${EVENT_KEY}`;\nconst EVENT_SUBMIT = `submit${EVENT_KEY}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`;\nconst EVENT_KEYUP = `keyup${EVENT_KEY}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY}`;\nconst EVENT_CLICK = `click${EVENT_KEY}`;\nconst EVENT_ANIMATIONEND = 'animationend';\nconst EVENT_CHANGE_STEP = `stepChange${EVENT_KEY}`;\nconst EVENT_CHANGED_STEP = `stepChanged${EVENT_KEY}`;\nconst EVENT_INVALID = `stepInvalid${EVENT_KEY}`;\nconst EVENT_VALID = `stepValid${EVENT_KEY}`;\n\nconst STEP_CLASS = `${NAME}-step`;\nconst HEAD_CLASS = `${NAME}-head`;\nconst HEAD_TEXT_CLASS = `${NAME}-head-text`;\nconst CONTENT_CLASS = `${NAME}-content`;\nconst ACTIVE_CLASS = `${NAME}-active`;\nconst COMPLETED_CLASS = `${NAME}-completed`;\nconst INVALID_CLASS = `${NAME}-invalid`;\nconst DISABLED_CLASS = `${NAME}-disabled`;\nconst VERTICAL_CLASS = `${NAME}-${STEPPER_VERTICAL}`;\nconst CONTENT_HIDE_CLASS = `${NAME}-content-hide`;\nconst HORIZONTAL_CLASS = `${NAME}-${STEPPER_HORIZONTAL}`;\nconst MOBILE_CLASS = `${NAME}-${STEPPER_MOBILE}`;\nconst MOBILE_HEAD_CLASS = `${NAME}-${STEPPER_MOBILE}-head`;\nconst MOBILE_FOOTER_CLASS = `${NAME}-${STEPPER_MOBILE}-footer`;\nconst MOBILE_PROGRESS_BAR_CLASS = `${NAME}-${STEPPER_MOBILE}-progress-bar`;\nconst MOBILE_PROGRESS_CLASS = `${NAME}-${STEPPER_MOBILE}-progress`;\nconst NEXT_BTN_CLASS = `${NAME}-next-btn`;\nconst BACK_BTN_CLASS = `${NAME}-back-btn`;\n\nconst MOBILE_ACTIVE_STEP_ID = `${NAME}-active-step`;\nconst MOBILE_NUMBER_OF_STEPS_ID = `${NAME}-all-steps`;\n\nconst MOBILE_BUTTON_NEXT = (options) => {\n  return `\n  <div class=\"${NEXT_BTN_CLASS}\">\n    <button type=\"button\" class=\"btn btn-link\">\n      ${options.stepperMobileNextBtn}\n      <i class=\"fas fa-chevron-right\"></i>\n    </button>\n  </div>\n`;\n};\nconst MOBILE_BUTTON_BACK = (options) => {\n  return `\n  <div class=\"${BACK_BTN_CLASS}\">\n    <button type=\"button\" class=\"btn btn-link\">\n      <i class=\"fas fa-chevron-left\"></i>\n      ${options.stepperMobileBackBtn}\n    </button>\n  </div>\n`;\n};\nconst MOBILE_STEPPER_HEAD = (options) => {\n  return `\n  <div class =\"${MOBILE_HEAD_CLASS}\">\n    ${options.stepperMobileStepTxt} <span id=\"${MOBILE_ACTIVE_STEP_ID}\"></span> ${options.stepperMobileOfTxt} <span id=\"${MOBILE_NUMBER_OF_STEPS_ID}\"></span>\n  </div>\n`;\n};\nconst MOBILE_PROGRESS_BAR = `\n  <div class=\"${MOBILE_PROGRESS_CLASS} gray-500\">\n    <div class=\"${MOBILE_PROGRESS_BAR_CLASS}\"></div>\n  </div>\n`;\nconst MOBILE_FOOTER = `\n  <div class=\"${MOBILE_FOOTER_CLASS}\"></div>\n`;\n\nclass Stepper extends BaseComponent {\n  constructor(element, options) {\n    super(element);\n\n    this._options = this._getConfig(options);\n    this._elementHeight = 0;\n    this._steps = SelectorEngine.find(`.${STEP_CLASS}`, this._element);\n    this._currentView = '';\n    this._activeStepIndex = 0;\n    this._verticalStepperStyles = [];\n    this._animations =\n      !window.matchMedia('(prefers-reduced-motion: reduce)').matches && this._options.animations;\n\n    if (this._element) {\n      this._init();\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  get activeStep() {\n    return this._steps[this._activeStepIndex];\n  }\n\n  get activeStepIndex() {\n    return this._activeStepIndex;\n  }\n\n  // Public\n\n  dispose() {\n    this._steps.forEach((el) => {\n      EventHandler.off(el, EVENT_MOUSEDOWN);\n      EventHandler.off(el, EVENT_KEYDOWN);\n    });\n\n    EventHandler.off(window, EVENT_RESIZE);\n\n    this._unbindMouseDown();\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  changeStep(index) {\n    this._toggleStep(index);\n  }\n\n  nextStep() {\n    this._toggleStep(this._activeStepIndex + 1);\n  }\n\n  prevStep() {\n    this._toggleStep(this._activeStepIndex - 1);\n  }\n\n  resizeStepper() {\n    if (this._currentView === STEPPER_VERTICAL) {\n      this._setSingleStepHeight(this.activeStep);\n    }\n\n    if (this._currentView === STEPPER_HORIZONTAL) {\n      this._setHeight(this.activeStep);\n    }\n\n    if (this._options.stepperVerticalBreakpoint || this._options.stepperMobileBreakpoint) {\n      this._toggleStepperView();\n    }\n  }\n\n  // Private\n  _init() {\n    const activeStep = SelectorEngine.findOne(`.${ACTIVE_CLASS}`, this._element);\n\n    if (activeStep) {\n      this._activeStepIndex = this._steps.indexOf(activeStep);\n      this._toggleStepClass(this._activeStepIndex, 'add', this._options.stepperActive);\n    } else {\n      this._toggleStepClass(this._activeStepIndex, 'add', ACTIVE_CLASS);\n      this._toggleStepClass(this._activeStepIndex, 'add', this._options.stepperActive);\n    }\n\n    this._setOptional();\n    if (this._options.stepperHeadClick) {\n      this._bindMouseDown();\n    }\n    this._bindKeysNavigation();\n\n    switch (this._options.stepperType) {\n      case STEPPER_VERTICAL:\n        this._toggleVertical();\n        break;\n      case STEPPER_MOBILE:\n        this._toggleMobile();\n        break;\n      default:\n        this._toggleHorizontal();\n        break;\n    }\n\n    if (this._options.stepperVerticalBreakpoint || this._options.stepperMobileBreakpoint) {\n      this._toggleStepperView();\n    }\n\n    if (this._options.stepperLinear) {\n      this._setValidation();\n    }\n\n    this._bindResize();\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n    config = {\n      ...Default,\n      ...dataAttributes,\n      ...config,\n    };\n\n    typeCheckConfig(NAME, config, DefaultType);\n\n    return config;\n  }\n\n  _bindMouseDown() {\n    this._steps.forEach((el) => {\n      const stepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, el);\n\n      EventHandler.on(stepHead, EVENT_MOUSEDOWN, (e) => {\n        const step = SelectorEngine.parents(e.target, `.${STEP_CLASS}`)[0];\n        const stepIndex = this._steps.indexOf(step);\n\n        e.preventDefault();\n        this._toggleStep(stepIndex);\n      });\n    });\n  }\n\n  _unbindMouseDown() {\n    this._steps.forEach((el) => {\n      const stepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, el);\n\n      EventHandler.off(stepHead, EVENT_MOUSEDOWN);\n    });\n  }\n\n  _bindResize() {\n    EventHandler.on(window, EVENT_RESIZE, () => {\n      this.resizeStepper();\n    });\n  }\n\n  _toggleStepperView() {\n    const shouldBeHorizontal = this._options.stepperVerticalBreakpoint < window.innerWidth;\n    const shouldBeVertical = this._options.stepperVerticalBreakpoint > window.innerWidth;\n    const shouldBeMobile = this._options.stepperMobileBreakpoint > window.innerWidth;\n\n    if (shouldBeHorizontal && this._currentView !== STEPPER_HORIZONTAL) {\n      this._toggleHorizontal();\n    }\n\n    if (shouldBeVertical && !shouldBeMobile && this._currentView !== STEPPER_VERTICAL) {\n      this._steps.forEach((el) => {\n        const stepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, el);\n\n        this._resetStepperHeight();\n        this._showElement(stepContent);\n      });\n\n      this._toggleVertical();\n    }\n\n    if (shouldBeMobile && this._currentView !== STEPPER_MOBILE) {\n      this._toggleMobile();\n    }\n  }\n\n  _toggleStep(index) {\n    const numberOfSteps = this._steps.length;\n\n    const isValid = this._validateStep(index);\n\n    const activeStepIndex = this._activeStepIndex;\n\n    if (!isValid) {\n      return;\n    }\n\n    if (this._options.stepperLinear) {\n      EventHandler.trigger(this.activeStep, EVENT_VALID, {\n        currentStep: this._activeStepIndex,\n        nextStep: index,\n      });\n    }\n\n    if (this._options.stepperNoEditable) {\n      this._toggleDisabled();\n    }\n\n    this._showElement(SelectorEngine.findOne(`.${CONTENT_CLASS}`, this._steps[index]));\n    this._toggleActive(index);\n\n    if (!this._options.stepperLinear || index > this._activeStepIndex) {\n      this._toggleCompleted(this._activeStepIndex);\n    }\n\n    if (this._currentView === STEPPER_HORIZONTAL || this._currentView === STEPPER_MOBILE) {\n      this._animateHorizontalStep(index);\n    } else {\n      this._animateVerticalStep(index);\n      this._setSingleStepHeight(this._steps[index]);\n    }\n\n    this._toggleStepTabIndex(\n      SelectorEngine.findOne(`.${HEAD_CLASS}`, this.activeStep),\n      SelectorEngine.findOne(`.${HEAD_CLASS}`, this._steps[index])\n    );\n\n    this._activeStepIndex = index;\n\n    if (this._currentView === STEPPER_MOBILE) {\n      const activeStepElement = SelectorEngine.findOne(`#${MOBILE_ACTIVE_STEP_ID}`, this._element);\n\n      activeStepElement.textContent = this._activeStepIndex + 1;\n\n      if (numberOfSteps > this._options.stepperMobileBarBreakpoint) {\n        this._updateProgressBar();\n      }\n    }\n\n    const inputs = this.activeStep.querySelectorAll('.form-outline');\n    const inputNotches = SelectorEngine.find('.form-notch', inputs[0]);\n    if (inputs.length && inputNotches.length < 1) {\n      inputs.forEach((formOutline) => {\n        new mdb.Input(formOutline).init();\n      });\n    }\n\n    EventHandler.trigger(this.activeStep, EVENT_CHANGED_STEP, {\n      currentStep: this._activeStepIndex,\n      prevStep: activeStepIndex,\n    });\n  }\n\n  _resetStepperHeight() {\n    this._element.style.height = '';\n  }\n\n  _setStepsHeight() {\n    this._steps.forEach((el) => {\n      const stepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, el);\n      const stepComputed = window.getComputedStyle(stepContent);\n      this._verticalStepperStyles.push({\n        paddingTop: parseFloat(stepComputed.paddingTop),\n        paddingBottom: parseFloat(stepComputed.paddingBottom),\n      });\n      const stepHeight = stepContent.scrollHeight;\n      stepContent.style.height = `${stepHeight}px`;\n    });\n  }\n\n  _setSingleStepHeight(step) {\n    const stepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, step);\n    const isActiveStep = this.activeStep === step;\n    const stepIndex = this._steps.indexOf(step);\n    let stepContentHeight;\n\n    if (!isActiveStep) {\n      stepContentHeight =\n        stepContent.scrollHeight +\n        this._verticalStepperStyles[stepIndex].paddingTop +\n        this._verticalStepperStyles[stepIndex].paddingBottom;\n    } else {\n      stepContent.style.height = '';\n      stepContentHeight = stepContent.scrollHeight;\n    }\n\n    stepContent.style.height = `${stepContentHeight}px`;\n  }\n\n  _createMobileElements() {\n    this._element.insertAdjacentHTML('beforeend', MOBILE_FOOTER);\n\n    const footer = SelectorEngine.findOne(`.${MOBILE_FOOTER_CLASS}`, this._element);\n\n    if (this._steps.length > this._options.stepperMobileBarBreakpoint) {\n      this._element.classList.add('stepper-progress-bar');\n\n      footer.insertAdjacentHTML('afterbegin', MOBILE_PROGRESS_BAR);\n\n      this._updateProgressBar();\n    }\n\n    footer.insertAdjacentHTML('afterbegin', MOBILE_BUTTON_BACK(this._options));\n    footer.insertAdjacentHTML('beforeend', MOBILE_BUTTON_NEXT(this._options));\n\n    this._element.insertAdjacentHTML('afterbegin', MOBILE_STEPPER_HEAD(this._options));\n\n    const allStepsElement = SelectorEngine.findOne(`#${MOBILE_NUMBER_OF_STEPS_ID}`, this._element);\n    allStepsElement.textContent = this._steps.length;\n\n    const ActiveStepsElement = SelectorEngine.findOne(`#${MOBILE_ACTIVE_STEP_ID}`, this._element);\n    ActiveStepsElement.textContent = this._activeStepIndex + 1;\n  }\n\n  _toggleMobile() {\n    this._currentView = STEPPER_MOBILE;\n\n    this._toggleStepperClass(MOBILE_CLASS);\n    this._createMobileElements();\n    this._bindMobileButtons();\n    this._setHeight(this.activeStep);\n    this._hideInactiveSteps();\n  }\n\n  _toggleVertical() {\n    if (this._currentView === STEPPER_MOBILE) {\n      this._deleteMobileElements();\n      this._unbindMobileButtons();\n    }\n\n    this._currentView = STEPPER_VERTICAL;\n\n    this._toggleStepperClass(VERTICAL_CLASS);\n    this._setStepsHeight();\n    this._hideInactiveSteps();\n  }\n\n  _toggleHorizontal() {\n    if (this._currentView === STEPPER_MOBILE) {\n      this._deleteMobileElements();\n      this._unbindMobileButtons();\n    }\n\n    this._currentView = STEPPER_HORIZONTAL;\n\n    this._toggleStepperClass(HORIZONTAL_CLASS);\n    this._setHeight(this.activeStep);\n    this._hideInactiveSteps();\n  }\n\n  _toggleStepperClass(className) {\n    this._element.classList.remove(HORIZONTAL_CLASS, MOBILE_CLASS, VERTICAL_CLASS);\n    this._element.classList.add(className);\n\n    if (className !== VERTICAL_CLASS) {\n      this._steps.forEach((el) => {\n        SelectorEngine.findOne(`.${CONTENT_CLASS}`, el).classList.remove(CONTENT_HIDE_CLASS);\n      });\n    }\n  }\n\n  _toggleStepClass(index, action, className) {\n    // condition to prevent errors if the user has not set any custom classes like active, disabled etc.\n    if (className) {\n      this._steps[index].classList[action](className);\n    }\n  }\n\n  _deleteMobileElements() {\n    const footer = SelectorEngine.findOne(`.${MOBILE_FOOTER_CLASS}`, this._element);\n    const head = SelectorEngine.findOne(`.${MOBILE_HEAD_CLASS}`, this._element);\n\n    footer.remove();\n    head.remove();\n  }\n\n  _bindKeysNavigation() {\n    this._toggleStepTabIndex(false, SelectorEngine.findOne(`.${HEAD_CLASS}`, this.activeStep));\n\n    this._steps.forEach((el) => {\n      const stepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, el);\n\n      EventHandler.on(stepHead, EVENT_KEYDOWN, (e) => {\n        const focusedStep = SelectorEngine.parents(e.currentTarget, `.${STEP_CLASS}`)[0];\n        const nextStep = SelectorEngine.next(focusedStep, `.${STEP_CLASS}`)[0];\n        const prevStep = SelectorEngine.prev(focusedStep, `.${STEP_CLASS}`)[0];\n        const focusedStepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, focusedStep);\n        const activeStepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, this.activeStep);\n        let nextStepHead = null;\n        let prevStepHead = null;\n\n        if (nextStep) {\n          nextStepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, nextStep);\n        }\n\n        if (prevStep) {\n          prevStepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, prevStep);\n        }\n\n        if (e.keyCode === LEFT_ARROW && this._currentView !== STEPPER_VERTICAL) {\n          if (!isRTL && prevStepHead) {\n            this._toggleStepTabIndex(focusedStepHead, prevStepHead);\n            this._toggleOutlineStyles(focusedStepHead, prevStepHead);\n\n            prevStepHead.focus();\n          } else if (isRTL && nextStepHead) {\n            this._toggleStepTabIndex(focusedStepHead, nextStepHead);\n            this._toggleOutlineStyles(focusedStepHead, nextStepHead);\n\n            nextStepHead.focus();\n          }\n        }\n\n        if (e.keyCode === RIGHT_ARROW && this._currentView !== STEPPER_VERTICAL) {\n          if (!isRTL && nextStepHead) {\n            this._toggleStepTabIndex(focusedStepHead, nextStepHead);\n            this._toggleOutlineStyles(focusedStepHead, nextStepHead);\n\n            nextStepHead.focus();\n          } else if (isRTL && prevStepHead) {\n            this._toggleStepTabIndex(focusedStepHead, prevStepHead);\n            this._toggleOutlineStyles(focusedStepHead, prevStepHead);\n\n            prevStepHead.focus();\n          }\n        }\n\n        if (e.keyCode === DOWN_ARROW && this._currentView === STEPPER_VERTICAL) {\n          e.preventDefault();\n\n          if (nextStepHead) {\n            this._toggleStepTabIndex(focusedStepHead, nextStepHead);\n            this._toggleOutlineStyles(focusedStepHead, nextStepHead);\n\n            nextStepHead.focus();\n          }\n        }\n\n        if (e.keyCode === UP_ARROW && this._currentView === STEPPER_VERTICAL) {\n          e.preventDefault();\n\n          if (prevStepHead) {\n            this._toggleStepTabIndex(focusedStepHead, prevStepHead);\n            this._toggleOutlineStyles(focusedStepHead, prevStepHead);\n\n            prevStepHead.focus();\n          }\n        }\n\n        if (e.keyCode === HOME) {\n          const firstStepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, this._steps[0]);\n\n          this._toggleStepTabIndex(focusedStepHead, firstStepHead);\n          this._toggleOutlineStyles(focusedStepHead, firstStepHead);\n\n          firstStepHead.focus();\n        }\n\n        if (e.keyCode === END) {\n          const lastStep = this._steps[this._steps.length - 1];\n          const lastStepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, lastStep);\n          this._toggleStepTabIndex(focusedStepHead, lastStepHead);\n          this._toggleOutlineStyles(focusedStepHead, lastStepHead);\n\n          lastStepHead.focus();\n        }\n\n        if (e.keyCode === ENTER || e.keyCode === SPACE) {\n          e.preventDefault();\n\n          this.changeStep(this._steps.indexOf(focusedStep));\n        }\n\n        if (e.keyCode === TAB) {\n          this._toggleStepTabIndex(focusedStepHead, activeStepHead);\n          this._toggleOutlineStyles(focusedStepHead, false);\n\n          activeStepHead.focus();\n        }\n      });\n\n      EventHandler.on(stepHead, EVENT_KEYUP, (e) => {\n        const focusedStep = SelectorEngine.parents(e.currentTarget, `.${STEP_CLASS}`)[0];\n        const focusedStepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, focusedStep);\n        const activeStepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, this.activeStep);\n\n        if (e.keyCode === TAB) {\n          this._toggleStepTabIndex(focusedStepHead, activeStepHead);\n          this._toggleOutlineStyles(false, activeStepHead);\n\n          activeStepHead.focus();\n        }\n      });\n    });\n  }\n\n  _bindMobileButtons() {\n    const btnBack = SelectorEngine.findOne(`.${BACK_BTN_CLASS}`, this._element);\n    const btnNext = SelectorEngine.findOne(`.${NEXT_BTN_CLASS}`, this._element);\n\n    EventHandler.on(btnBack, EVENT_CLICK, () => this.prevStep());\n    EventHandler.on(btnNext, EVENT_CLICK, () => this.nextStep());\n  }\n\n  _unbindMobileButtons() {\n    const btnBack = SelectorEngine.findOne(`.${BACK_BTN_CLASS}`, this._element);\n    const btnNext = SelectorEngine.findOne(`.${NEXT_BTN_CLASS}`, this._element);\n\n    EventHandler.off(btnBack, EVENT_CLICK, () => this.prevStep());\n    EventHandler.off(btnNext, EVENT_CLICK, () => this.nextStep());\n  }\n\n  _toggleStepTabIndex(focusedElement, newTarget) {\n    if (focusedElement) {\n      focusedElement.setAttribute('tabIndex', -1);\n    }\n\n    if (newTarget) {\n      newTarget.setAttribute('tabIndex', 0);\n    }\n  }\n\n  _validateActiveStepRequiredElements() {\n    const isValid = SelectorEngine.find('[required]', this.activeStep).every((el) => {\n      return el.checkValidity() === true;\n    });\n\n    return isValid;\n  }\n\n  _validateStep(index) {\n    const numberOfSteps = this._steps.length;\n    let result = true;\n\n    // prevent any actions if the same step is chosen\n    if (index === this._activeStepIndex) {\n      result = false;\n    }\n\n    // prevent toggleSteps if next/prev step don't exist\n    if (index >= numberOfSteps || index < 0) {\n      result = false;\n    }\n\n    const changeStepEvent = EventHandler.trigger(this.activeStep, EVENT_CHANGE_STEP, {\n      currentStep: this._activeStepIndex,\n      nextStep: index,\n    });\n\n    if (this._options.stepperLinear) {\n      // prevent toggleStep if one of the steps is skipped\n      const stepsToCheck = index - this.activeStepIndex - 1;\n      if (index > this._activeStepIndex + 1) {\n        let nextStepToValidate = SelectorEngine.next(this.activeStep, 'li')[0];\n\n        for (let i = 0; i < stepsToCheck; i++) {\n          if (!nextStepToValidate.classList.contains('stepper-completed')) {\n            nextStepToValidate.classList.add('stepper-invalid');\n            result = false;\n          }\n          nextStepToValidate = SelectorEngine.next(nextStepToValidate, 'li')[0];\n        }\n      }\n\n      if (index < this._activeStepIndex) {\n        if (!this._validateActiveStepRequiredElements()) {\n          this.activeStep.classList.remove('stepper-completed');\n        }\n      }\n\n      if (index > this._activeStepIndex || index === numberOfSteps - 1) {\n        this.activeStep.classList.add('was-validated');\n\n        if (!this._validateActiveStepRequiredElements()) {\n          this._toggleInvalid(this._activeStepIndex);\n          EventHandler.trigger(this.activeStep, EVENT_INVALID, {\n            currentStep: this._activeStepIndex,\n            nextStep: index,\n          });\n          // wait for other elements transition end\n          // the input transition takes 200ms. + 10ms is added, because without it it would not expand to the correct height\n\n          if (this._currentView !== STEPPER_VERTICAL) {\n            setTimeout(() => {\n              this._setHeight(this.activeStep);\n            }, 210);\n          } else {\n            setTimeout(() => {\n              this._setSingleStepHeight(this.activeStep);\n            }, 210);\n          }\n\n          result = false;\n        }\n      }\n    }\n\n    if (index > this._activeStepIndex && changeStepEvent.defaultPrevented) {\n      result = false;\n    }\n\n    if (this._options.stepperNoEditable) {\n      if (this._steps[index].classList.contains(DISABLED_CLASS)) {\n        result = false;\n      }\n    }\n\n    return result;\n  }\n\n  _updateProgressBar() {\n    const numberOfSteps = this._steps.length;\n    const progressBar = SelectorEngine.findOne(`.${MOBILE_PROGRESS_BAR_CLASS}`, this._element);\n\n    progressBar.style.width = `${((this._activeStepIndex + 1) / numberOfSteps) * 100}%`;\n  }\n\n  _toggleOutlineStyles(focusedElement, newTarget) {\n    if (focusedElement) {\n      focusedElement.style.outline = '';\n    }\n\n    if (newTarget) {\n      newTarget.style.outline = 'revert';\n    }\n  }\n\n  _toggleDisabled() {\n    this._toggleStepClass(this._activeStepIndex, 'add', DISABLED_CLASS);\n    this._toggleStepClass(this._activeStepIndex, 'add', this._options.stepperDisabled);\n  }\n\n  _toggleActive(index) {\n    this._toggleStepClass(index, 'add', ACTIVE_CLASS);\n    this._toggleStepClass(this._activeStepIndex, 'remove', ACTIVE_CLASS);\n    this._toggleStepClass(index, 'add', this._options.stepperActive);\n    this._toggleStepClass(this._activeStepIndex, 'remove', this._options.stepperActive);\n  }\n\n  _toggleCompleted(index) {\n    this._toggleStepClass(index, 'add', COMPLETED_CLASS);\n    this._toggleStepClass(index, 'remove', INVALID_CLASS);\n    this._toggleStepClass(index, 'add', this._options.stepperCompleted);\n    this._toggleStepClass(index, 'remove', this._options.stepperInvalid);\n  }\n\n  _toggleInvalid(index) {\n    this._toggleStepClass(index, 'add', INVALID_CLASS);\n    this._toggleStepClass(index, 'remove', COMPLETED_CLASS);\n    this._toggleStepClass(index, 'add', this._options.stepperInvalid);\n    this._toggleStepClass(index, 'remove', this._options.stepperCompleted);\n  }\n\n  _setOptional() {\n    this._steps.forEach((el) => {\n      const isOptional = Manipulator.getDataAttribute(el, 'stepper-optional');\n\n      if (isOptional) {\n        const stepHeadText = SelectorEngine.findOne(`.${HEAD_TEXT_CLASS}`, el);\n        stepHeadText.setAttribute('data-mdb-content', 'Optional');\n      }\n    });\n  }\n\n  _hideInactiveSteps() {\n    this._steps.forEach((el) => {\n      if (!el.classList.contains(ACTIVE_CLASS)) {\n        this._hideElement(SelectorEngine.findOne(`.${CONTENT_CLASS}`, el));\n      }\n    });\n  }\n\n  _setValidation() {\n    const form = SelectorEngine.findOne('.needs-validation.stepper-form', this._element);\n\n    EventHandler.on(\n      form,\n      EVENT_SUBMIT,\n      (event) => {\n        if (!form.checkValidity()) {\n          event.preventDefault();\n          event.stopPropagation();\n        }\n\n        this._steps.forEach((el, i) => {\n          const isValid = this._validateStep(i);\n\n          if (!isValid) {\n            this._toggleInvalid(i);\n            EventHandler.trigger(this.activeStep, EVENT_INVALID);\n          }\n        });\n      },\n      false\n    );\n  }\n\n  _setHeight(stepElement) {\n    const stepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, stepElement);\n    const stepFooter = SelectorEngine.findOne(`.${MOBILE_FOOTER_CLASS}`, this._element);\n    const contentStyle = getComputedStyle(stepContent);\n    const footerStyle = stepFooter ? getComputedStyle(stepFooter) : '';\n    let stepHead;\n\n    if (this._currentView === STEPPER_MOBILE) {\n      stepHead = SelectorEngine.findOne(`.${MOBILE_HEAD_CLASS}`, this._element);\n    } else {\n      stepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, stepElement);\n    }\n\n    const headStyle = getComputedStyle(stepHead);\n    const stepContentHeight =\n      stepContent.offsetHeight +\n      parseFloat(contentStyle.marginTop) +\n      parseFloat(contentStyle.marginBottom);\n\n    const stepHeadHeight =\n      stepHead.offsetHeight + parseFloat(headStyle.marginTop) + parseFloat(headStyle.marginBottom);\n\n    const stepFooterHeight = footerStyle\n      ? stepFooter.offsetHeight +\n        parseFloat(footerStyle.marginTop) +\n        parseFloat(footerStyle.marginBottom)\n      : 0;\n\n    this._element.style.height = `${stepHeadHeight + stepContentHeight + stepFooterHeight}px`;\n  }\n\n  _hideElement(stepContent) {\n    const isActive = SelectorEngine.parents(stepContent, `.${STEP_CLASS}`)[0].classList.contains(\n      ACTIVE_CLASS\n    );\n\n    // prevent hiding during a quick step change\n    if (!isActive && this._currentView !== STEPPER_VERTICAL) {\n      stepContent.style.display = 'none';\n    } else {\n      stepContent.classList.add(CONTENT_HIDE_CLASS);\n    }\n  }\n\n  _showElement(stepContent) {\n    if (this._currentView === STEPPER_VERTICAL) {\n      stepContent.classList.remove(CONTENT_HIDE_CLASS);\n    } else {\n      stepContent.style.display = 'block';\n    }\n  }\n\n  _animateHorizontalStep(index) {\n    if (!this._animations) {\n      this._steps.forEach((el, i) => {\n        const stepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, el);\n\n        if (i !== index) {\n          this._hideElement(stepContent);\n        }\n      });\n\n      this._setHeight(this._steps[index]);\n\n      return;\n    }\n\n    const isForward = index > this._activeStepIndex;\n    const nextStepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, this._steps[index]);\n    const activeStepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, this.activeStep);\n\n    let nextStepAnimation;\n    let activeStepAnimation;\n\n    this._steps.forEach((el, i) => {\n      const stepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, el);\n\n      this._clearStepAnimation(stepContent);\n\n      if (i !== index && i !== this._activeStepIndex) {\n        this._hideElement(stepContent);\n      }\n    });\n\n    if (isForward) {\n      activeStepAnimation = 'slide-out-left';\n      nextStepAnimation = 'slide-in-right';\n    } else {\n      activeStepAnimation = 'slide-out-right';\n      nextStepAnimation = 'slide-in-left';\n    }\n\n    if (this._animations) {\n      activeStepContent.classList.add(activeStepAnimation, 'animation', 'fast');\n      nextStepContent.classList.add(nextStepAnimation, 'animation', 'fast');\n    }\n\n    this._setHeight(this._steps[index]);\n\n    EventHandler.one(activeStepContent, EVENT_ANIMATIONEND, (e) => {\n      this._clearStepAnimation(e.target);\n      this._hideElement(e.target);\n    });\n\n    EventHandler.one(nextStepContent, EVENT_ANIMATIONEND, (e) => {\n      this._clearStepAnimation(e.target);\n    });\n  }\n\n  _animateVerticalStep(index) {\n    const nextStepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, this._steps[index]);\n    const activeStepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, this.activeStep);\n\n    this._hideElement(activeStepContent);\n    this._showElement(nextStepContent);\n  }\n\n  _clearStepAnimation(element) {\n    element.classList.remove(\n      'slide-out-left',\n      'slide-in-right',\n      'slide-out-right',\n      'slide-in-left',\n      'animation',\n      'fast'\n    );\n  }\n\n  // Static\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data && /dispose|hide/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new Stepper(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](options);\n      }\n    });\n  }\n}\n\nexport default Stepper;\n","import { typeCheckConfig } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'sticky';\nconst DATA_KEY = 'mdb.sticky';\n\nconst ANIMATED_CLASS = 'animation';\n\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_ACTIVATED = `activated${EVENT_KEY}`;\nconst EVENT_DEACTIVATED = `deactivated${EVENT_KEY}`;\n\nconst Default = {\n  stickyActiveClass: '',\n  stickyAnimationSticky: '',\n  stickyAnimationUnsticky: '',\n  stickyBoundary: false,\n  stickyDelay: 0,\n  stickyDirection: 'down',\n  stickyMedia: 0,\n  stickyOffset: 0,\n  stickyPosition: 'top',\n};\n\nconst DefaultType = {\n  stickyActiveClass: 'string',\n  stickyAnimationSticky: 'string',\n  stickyAnimationUnsticky: 'string',\n  stickyBoundary: '(boolean|string)',\n  stickyDelay: 'number',\n  stickyDirection: 'string',\n  stickyMedia: 'number',\n  stickyOffset: 'number',\n  stickyPosition: 'string',\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Sticky extends BaseComponent {\n  constructor(element, options) {\n    super(element);\n\n    this._hiddenElement = null;\n    this._elementPositionStyles = {};\n    this._scrollDirection = '';\n    this._isSticked = false;\n    this._elementOffsetTop = null;\n    this._scrollTop = 0;\n    this._pushPoint = '';\n    this._manuallyDeactivated = false;\n\n    if (this._element) {\n      this._options = this._getConfig(options);\n      this._init();\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n\n  dispose() {\n    const { stickyAnimationUnsticky } = this._options;\n    let { animationDuration } = getComputedStyle(this._element);\n\n    animationDuration = stickyAnimationUnsticky !== '' ? parseFloat(animationDuration) * 1000 : 0;\n\n    this._disableSticky();\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    setTimeout(() => {\n      super.dispose();\n    }, animationDuration);\n  }\n\n  activate() {\n    // prevent action if sticky is already active\n    if (this._isSticked) {\n      return;\n    }\n\n    this._createHiddenElement();\n    this._enableSticky();\n    this._changeBoundaryPosition();\n    this._isSticked = true;\n    this._manuallyDeactivated = false;\n  }\n\n  deactivate() {\n    // prevent action if sticky is already inactive\n    if (!this._isSticked) {\n      return;\n    }\n\n    this._disableSticky();\n    this._isSticked = false;\n    this._manuallyDeactivated = true;\n  }\n\n  // Private\n  _init() {\n    this._userActivityListener();\n  }\n\n  _userActivityListener() {\n    EventHandler.on(window, 'resize', () => {\n      this._updateElementPosition();\n      this._updateElementOffset();\n    });\n\n    EventHandler.on(window, 'scroll', () => {\n      if (!this._element) {\n        return;\n      }\n\n      // prevent action if browser resolution <= user acceptable resolution\n      if (window.innerWidth <= this._options.stickyMedia) {\n        return;\n      }\n\n      // prevent action if user deactivated sticky manually using public methods.\n      if (this._manuallyDeactivated) {\n        return;\n      }\n\n      const doc = document.documentElement;\n      const { stickyDirection } = this._options;\n      const scrollTop = window.pageYOffset || doc.scrollTop;\n\n      this._updateElementOffset();\n      this._updatePushPoint();\n      this._updateScrollDirection(scrollTop);\n      this._clearInProgressAnimations();\n\n      const isCorrectScrollDirection = [this._scrollDirection, 'both'].includes(stickyDirection);\n      const isPushPointReached = this._pushPoint <= scrollTop;\n\n      const shouldBeSticky = isPushPointReached && !this._isSticked && isCorrectScrollDirection;\n      const shouldNotBeSticky =\n        (!isPushPointReached || !isCorrectScrollDirection) && this._isSticked;\n\n      if (shouldBeSticky) {\n        this._createHiddenElement();\n        this._enableSticky();\n        this._changeBoundaryPosition();\n        this._isSticked = true;\n      }\n\n      if (shouldNotBeSticky) {\n        this._disableSticky();\n        this._isSticked = false;\n      }\n\n      if (this._isSticked) {\n        this._updatePosition({ styles: this._elementPositionStyles });\n        this._changeBoundaryPosition();\n      }\n\n      this._scrollTop = scrollTop <= 0 ? 0 : scrollTop; // Get last scrollTop position and fix negative scroll\n    });\n  }\n\n  _updatePushPoint() {\n    if (this._options.stickyPosition === 'top') {\n      this._pushPoint = this._elementOffsetTop - this._options.stickyDelay;\n    } else {\n      this._pushPoint =\n        this._elementOffsetTop +\n        this._element.height -\n        document.body.scrollHeight +\n        this._options.stickyDelay;\n    }\n  }\n\n  _updateElementOffset() {\n    if (this._hiddenElement) {\n      this._elementOffsetTop = this._hiddenElement.offsetTop;\n    } else {\n      this._elementOffsetTop = this._element.offsetTop;\n    }\n\n    if (this._options.stickyAnimationUnsticky) {\n      this._elementOffsetTop += this._element.height || 0;\n    }\n  }\n\n  _updateElementPosition() {\n    if (this._hiddenElement) {\n      const { left } = this._hiddenElement.getBoundingClientRect();\n\n      this._elementPositionStyles = {\n        left: `${left}px`,\n      };\n    } else {\n      this._elementPositionStyles = {};\n    }\n\n    this._setStyle(this._element, this._elementPositionStyles);\n  }\n\n  _updateScrollDirection(scrollTop) {\n    if (scrollTop > this._scrollTop) {\n      this._scrollDirection = 'down';\n    } else {\n      this._scrollDirection = 'up';\n    }\n  }\n\n  _clearInProgressAnimations() {\n    const isScrollUp = this._scrollDirection === 'up';\n    const isUnstickyAnimationInProgress = this._element.classList.contains(\n      this._options.stickyAnimationUnsticky\n    );\n    const isScrolledAboveElement = window.scrollY <= this._elementOffsetTop - this._element.height;\n\n    if (isScrollUp && isUnstickyAnimationInProgress && isScrolledAboveElement) {\n      this._removeUnstickyAnimation();\n      this._resetStyles();\n      this._removeHiddenElement();\n    }\n  }\n\n  _enableSticky() {\n    const {\n      stickyActiveClass,\n      stickyAnimationSticky,\n      stickyAnimationUnsticky,\n      stickyOffset,\n      stickyPosition,\n    } = this._options;\n    const { height, left, width } = this._element.getBoundingClientRect();\n\n    if (stickyAnimationSticky !== '') {\n      Manipulator.addClass(this._element, ANIMATED_CLASS);\n      this._toggleClass(stickyAnimationSticky, stickyAnimationUnsticky, this._element);\n    }\n\n    this._toggleClass(stickyActiveClass, '', this._element);\n\n    this._setStyle(this._element, {\n      top: stickyPosition === 'top' && `${0 + stickyOffset}px`,\n      bottom: stickyPosition === 'bottom' && `${0 + stickyOffset}px`,\n      height: `${height}px`,\n      width: `${width}px`,\n      left: `${left}px`,\n      zIndex: '100',\n      position: 'fixed',\n    });\n\n    this._hiddenElement.hidden = false;\n\n    EventHandler.trigger(this._element, EVENT_ACTIVATED);\n  }\n\n  _changeBoundaryPosition() {\n    const { stickyPosition, stickyBoundary, stickyOffset } = this._options;\n    const { height } = this._element.getBoundingClientRect();\n    const parentOffset = {\n      height: this._element.parentElement.getBoundingClientRect().height,\n      ...this._getOffset(this._element.parentElement),\n    };\n    let stopPoint;\n    const stopper = SelectorEngine.findOne(stickyBoundary);\n\n    if (stopper) {\n      stopPoint = this._getOffset(stopper).top - height - stickyOffset;\n    } else {\n      stopPoint = parentOffset.height + parentOffset[stickyPosition] - height - stickyOffset;\n    }\n\n    const isStickyTop = stickyPosition === 'top';\n    const isStickyBottom = stickyPosition === 'bottom';\n    const isStickyBoundary = stickyBoundary;\n    const isBelowStopPoint = stopPoint < 0;\n    const isBelowParentElementEnd = stopPoint > parentOffset.height - height;\n    let elementStyle;\n\n    if (isStickyTop) {\n      if (isBelowStopPoint && isStickyBoundary) {\n        elementStyle = { top: `${stickyOffset + stopPoint}px` };\n      } else {\n        elementStyle = { top: `${stickyOffset + 0}px` };\n      }\n    }\n\n    if (isStickyBottom) {\n      if (isBelowStopPoint && isStickyBoundary) {\n        elementStyle = { bottom: `${stickyOffset + stopPoint}px` };\n      } else if (isBelowParentElementEnd && isStickyBoundary) {\n        elementStyle = { bottom: `${stickyOffset + parentOffset.bottom}px` };\n      } else {\n        elementStyle = { bottom: `${stickyOffset + 0}px` };\n      }\n    }\n\n    this._setStyle(this._element, elementStyle);\n  }\n\n  _disableSticky() {\n    const { stickyActiveClass, stickyAnimationUnsticky, stickyAnimationSticky } = this._options;\n\n    let { animationDuration } = getComputedStyle(this._element);\n\n    animationDuration = stickyAnimationUnsticky !== '' ? parseFloat(animationDuration) * 1000 : 0;\n\n    if (this._options.stickyAnimationUnsticky !== '') {\n      Manipulator.addClass(this._element, ANIMATED_CLASS);\n      this._toggleClass(stickyAnimationUnsticky, stickyAnimationSticky, this._element);\n    }\n\n    setTimeout(() => {\n      if (this._element.classList.contains(stickyAnimationSticky)) {\n        return;\n      }\n\n      this._removeUnstickyAnimation();\n      this._resetStyles();\n      this._removeHiddenElement();\n      this._toggleClass('', stickyActiveClass, this._element);\n\n      EventHandler.trigger(this._element, EVENT_DEACTIVATED);\n    }, animationDuration);\n  }\n\n  _createHiddenElement() {\n    if (!this._hiddenElement) {\n      this._hiddenElement = this._copyElement(this._element);\n    }\n  }\n\n  _removeHiddenElement() {\n    // prevent to throw error when hidden Element don't exist;\n    if (!this._hiddenElement) {\n      return;\n    }\n\n    this._hiddenElement.remove();\n    this._hiddenElement = null;\n  }\n\n  _removeUnstickyAnimation() {\n    this._toggleClass('', this._options.stickyAnimationUnsticky, this._element);\n  }\n\n  _resetStyles() {\n    this._setStyle(this._element, {\n      top: null,\n      bottom: null,\n      position: null,\n      left: null,\n      zIndex: null,\n      width: null,\n      height: null,\n    });\n  }\n\n  _updatePosition({ styles }) {\n    this._setStyle(this._element, styles);\n  }\n\n  _toggleClass(addClass, removeClass, target) {\n    if (addClass) {\n      Manipulator.addClass(target, addClass);\n    }\n\n    if (removeClass) {\n      Manipulator.removeClass(target, removeClass);\n    }\n  }\n\n  _getOffset(element) {\n    const offsetElement = Manipulator.offset(element);\n    const rectElement = element.getBoundingClientRect();\n\n    const bottom =\n      offsetElement.left === 0 && offsetElement.top === 0\n        ? 0\n        : window.innerHeight - rectElement.bottom;\n\n    return {\n      ...offsetElement,\n      bottom,\n    };\n  }\n\n  _copyElement(itemToCopy) {\n    const { height, width } = itemToCopy.getBoundingClientRect();\n    const COPIED_ITEM = itemToCopy.cloneNode(false);\n    COPIED_ITEM.hidden = true;\n\n    this._setStyle(COPIED_ITEM, {\n      height: `${height}px`,\n      width: `${width}px`,\n      opacity: '0',\n    });\n\n    itemToCopy.parentElement.insertBefore(COPIED_ITEM, itemToCopy);\n\n    return COPIED_ITEM;\n  }\n\n  _getConfig(config = {}) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n    config = {\n      ...Default,\n      ...dataAttributes,\n      ...config,\n    };\n\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n\n  _setStyle(element, styles) {\n    Object.keys(styles).forEach((style) => {\n      element.style[style] = styles[style];\n    });\n  }\n\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data && /dispose|hide/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new Sticky(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](options);\n      }\n    });\n  }\n}\n\nexport default Sticky;\n","class TouchUtil {\n  _getCoordinates(e) {\n    const [touch] = e.touches;\n\n    return {\n      x: touch.clientX,\n      y: touch.clientY,\n    };\n  }\n\n  _getDirection({ x, y }) {\n    return {\n      x: {\n        direction: x < 0 ? 'left' : 'right',\n        value: Math.abs(x),\n      },\n      y: {\n        direction: y < 0 ? 'up' : 'down',\n        value: Math.abs(y),\n      },\n    };\n  }\n\n  _getOrigin({ x, y }, { x: x2, y: y2 }) {\n    return {\n      x: x - x2,\n      y: y - y2,\n    };\n  }\n\n  _getDistanceBetweenTwoPoints(x1, x2, y1, y2) {\n    return Math.hypot(x2 - x1, y2 - y1);\n  }\n\n  _getMidPoint({ x1, x2, y1, y2 }) {\n    return {\n      x: (x1 + x2) / 2,\n      y: (y1 + y2) / 2,\n    };\n  }\n\n  _getVectorLength({ x1, x2, y1, y2 }) {\n    return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n  }\n\n  _getRightMostTouch(touches) {\n    let rightMost = null;\n    const distance = Number.MIN_VALUE;\n    touches.forEach((touch) => {\n      if (touch.clientX > distance) {\n        rightMost = touch;\n      }\n    });\n    return rightMost;\n  }\n\n  _getAngle(x1, y1, x2, y2) {\n    return Math.atan2(y2 - y1, x2 - x1);\n  }\n\n  _getAngularDistance(start, end) {\n    return end - start;\n  }\n\n  _getCenterXY({ x1, x2, y1, y2 }) {\n    return {\n      x: x1 + (x2 - x1) / 2,\n      y: y1 + (y2 - y1) / 2,\n    };\n  }\n\n  _getPinchTouchOrigin(touches) {\n    const [t1, t2] = touches;\n\n    const _position = {\n      x1: t1.clientX,\n      x2: t2.clientX,\n      y1: t1.clientY,\n      y2: t2.clientY,\n    };\n\n    return [this._getVectorLength(_position), this._getCenterXY(_position)];\n  }\n\n  _getPosition({ x1, x2, y1, y2 }) {\n    return { x1, x2, y1, y2 };\n  }\n}\n\nexport default TouchUtil;\n","import TouchUtil from './touchUtil';\nimport EventHandler from '../../mdb/dom/event-handler';\n\nconst DEFAULT_OPTIONS = {\n  time: 250,\n  pointers: 1,\n};\n\nconst NAME = 'press';\nconst EVENT_UP = 'pressup';\n\nclass Press extends TouchUtil {\n  constructor(element, options = {}) {\n    super();\n    this._element = element;\n    this._options = {\n      ...DEFAULT_OPTIONS,\n      ...options,\n    };\n    this._timer = null;\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  handleTouchStart(e) {\n    const { time, pointers } = this._options;\n\n    if (e.touches.length === pointers) {\n      this._timer = setTimeout(() => {\n        EventHandler.trigger(this._element, NAME, { touch: e, time });\n        EventHandler.trigger(this._element, EVENT_UP, { touch: e });\n      }, time);\n    }\n  }\n\n  handleTouchEnd() {\n    clearTimeout(this._timer);\n  }\n}\n\nexport default Press;\n","import EventHandler from '../../mdb/dom/event-handler';\n\nconst DEFAULT_OPTIONS = {\n  threshold: 10,\n  direction: 'all',\n};\n\nclass Swipe {\n  constructor(element, options) {\n    this._element = element;\n    this._startPosition = null;\n    this._options = {\n      ...DEFAULT_OPTIONS,\n      ...options,\n    };\n  }\n\n  handleTouchStart(e) {\n    this._startPosition = this._getCoordinates(e);\n  }\n\n  handleTouchMove(e) {\n    if (!this._startPosition) return;\n\n    const position = this._getCoordinates(e);\n    const displacement = {\n      x: position.x - this._startPosition.x,\n      y: position.y - this._startPosition.y,\n    };\n\n    const swipe = this._getDirection(displacement);\n\n    if (this._options.direction === 'all') {\n      if (swipe.y.value < this._options.threshold && swipe.x.value < this._options.threshold) {\n        return;\n      }\n      const direction = swipe.y.value > swipe.x.value ? swipe.y.direction : swipe.x.direction;\n      EventHandler.trigger(this._element, `swipe${direction}`, { touch: e });\n      EventHandler.trigger(this._element, 'swipe', { touch: e, direction });\n      this._startPosition = null;\n      return;\n    }\n\n    const axis = this._options.direction === 'left' || this._options === 'right' ? 'x' : 'y';\n\n    if (\n      swipe[axis].direction === this._options.direction &&\n      swipe[axis].value > this._options.threshold\n    ) {\n      EventHandler.trigger(this._element, `swipe${swipe[axis].direction}`, { touch: e });\n      this._startPosition = null;\n    }\n  }\n\n  handleTouchEnd() {\n    this._startPosition = null;\n  }\n\n  _getCoordinates(e) {\n    const [touch] = e.touches;\n    return {\n      x: touch.clientX,\n      y: touch.clientY,\n    };\n  }\n\n  _getDirection(displacement) {\n    return {\n      x: {\n        direction: displacement.x < 0 ? 'left' : 'right',\n        value: Math.abs(displacement.x),\n      },\n      y: {\n        direction: displacement.y < 0 ? 'up' : 'down',\n        value: Math.abs(displacement.y),\n      },\n    };\n  }\n}\n\nexport default Swipe;\n","import TouchUtil from './touchUtil';\nimport EventHandler from '../../mdb/dom/event-handler';\n\nconst DEFAULT_OPTIONS = {\n  threshold: 20,\n  direction: 'all',\n  pointers: 1,\n};\n\nconst NAME = 'pan';\nconst EVENT_START = `${NAME}start`;\nconst EVENT_END = `${NAME}end`;\nconst EVENT_MOVE = `${NAME}move`;\nconst LEFT = 'left';\nconst RIGHT = 'right';\n\nclass Pan extends TouchUtil {\n  constructor(element, options = {}) {\n    super();\n    this._element = element;\n    this._options = {\n      ...DEFAULT_OPTIONS,\n      ...options,\n    };\n    this._startTouch = null;\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  handleTouchStart(e) {\n    this._startTouch = this._getCoordinates(e);\n    this._movedTouch = e;\n\n    EventHandler.trigger(this._element, EVENT_START, { touch: e });\n  }\n\n  handleTouchMove(e) {\n    // eslint-disable-next-line no-unused-expressions\n    e.type === 'touchmove' && e.preventDefault();\n\n    const { threshold, direction } = this._options;\n    const postion = this._getCoordinates(e);\n    const movedPosition = this._getCoordinates(this._movedTouch);\n\n    const displacement = this._getOrigin(postion, this._startTouch);\n    const displacementMoved = this._getOrigin(postion, movedPosition);\n\n    const pan = this._getDirection(displacement);\n    const movedDirection = this._getDirection(displacementMoved);\n\n    const { x, y } = pan;\n\n    if (direction === 'all' && (y.value > threshold || x.value > threshold)) {\n      const direction = y.value > x.value ? y.direction : x.direction;\n\n      EventHandler.trigger(this._element, `${NAME}${direction}`, { touch: e });\n      EventHandler.trigger(this._element, NAME, { ...displacementMoved, touch: e });\n    }\n\n    const axis = direction === LEFT || direction === RIGHT ? 'x' : 'y';\n\n    if (movedDirection[axis].direction === direction && pan[axis].value > threshold) {\n      EventHandler.trigger(this._element, `${NAME}${direction}`, {\n        touch: e,\n        [axis]: postion[axis] - movedPosition[axis],\n      });\n    }\n\n    this._movedTouch = e;\n\n    EventHandler.trigger(this._element, EVENT_MOVE, { touch: e });\n  }\n\n  handleTouchEnd(e) {\n    // eslint-disable-next-line no-unused-expressions\n    e.type === 'touchend' && e.preventDefault();\n\n    this._movedTouch = null;\n    this._startTouch = null;\n\n    EventHandler.trigger(this._element, EVENT_END, { touch: e });\n  }\n}\n\nexport default Pan;\n","import TouchUtil from './touchUtil';\nimport EventHandler from '../../mdb/dom/event-handler';\n\nconst DEFAULT_OPTIONS = {\n  pointers: 2,\n  threshold: 10,\n};\n\nconst NAME = 'pinch';\nconst EVENT_END = `${NAME}end`;\nconst EVENT_START = `${NAME}start`;\nconst EVENT_MOVE = `${NAME}move`;\nclass Pinch extends TouchUtil {\n  constructor(element, options = {}) {\n    super();\n    this._element = element;\n    this._options = {\n      ...DEFAULT_OPTIONS,\n      ...options,\n    };\n    this._startTouch = null;\n    this._origin = null;\n    this._touch = null;\n    this._math = null;\n    this._ratio = null;\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  get isNumber() {\n    return (\n      typeof this._startTouch === 'number' &&\n      typeof this._touch === 'number' &&\n      // eslint-disable-next-line no-restricted-globals\n      !isNaN(this._startTouch) &&\n      // eslint-disable-next-line no-restricted-globals\n      !isNaN(this._touch)\n    );\n  }\n\n  handleTouchStart(e) {\n    if (e.touches.length !== this._options.pointers) return;\n\n    // eslint-disable-next-line no-unused-expressions\n    e.type === 'touchstart' && e.preventDefault();\n\n    const [touch, origin] = this._getPinchTouchOrigin(e.touches);\n\n    this._touch = touch;\n    this._origin = origin;\n    this._startTouch = this._touch;\n\n    EventHandler.trigger(this._element, EVENT_START, {\n      touch: e,\n      ratio: this._ratio,\n      origin: this._origin,\n    });\n  }\n\n  handleTouchMove(e) {\n    const { threshold, pointers } = this._options;\n\n    if (e.touches.length !== pointers) return;\n\n    // eslint-disable-next-line no-unused-expressions\n    e.type === 'touchmove' && e.preventDefault();\n\n    this._touch = this._getPinchTouchOrigin(e.touches)[0];\n    this._ratio = this._touch / this._startTouch;\n\n    if (this.isNumber) {\n      if (this._origin.x > threshold || this._origin.y > threshold) {\n        this._startTouch = this._touch;\n\n        EventHandler.trigger(this._element, NAME, {\n          touch: e,\n          ratio: this._ratio,\n          origin: this._origin,\n        });\n        EventHandler.trigger(this._element, EVENT_MOVE, {\n          touch: e,\n          ratio: this._ratio,\n          origin: this._origin,\n        });\n      }\n    }\n  }\n\n  handleTouchEnd(e) {\n    if (this.isNumber) {\n      this._startTouch = null;\n\n      EventHandler.trigger(this._element, EVENT_END, {\n        touch: e,\n        ratio: this._ratio,\n        origin: this._origin,\n      });\n    }\n  }\n}\n\nexport default Pinch;\n","import TouchUtil from './touchUtil';\nimport EventHandler from '../../mdb/dom/event-handler';\n\nconst DEFAULT_OPTIONS = {\n  interval: 500,\n  time: 250,\n  taps: 1,\n  pointers: 1,\n};\nconst NAME = 'tap';\n\nclass Tap extends TouchUtil {\n  constructor(element, options) {\n    super();\n    this._element = element;\n    this._options = {\n      ...DEFAULT_OPTIONS,\n      ...options,\n    };\n    this._timer = null;\n    this._tapCount = 0;\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  handleTouchStart(e) {\n    const { x, y } = this._getCoordinates(e);\n    const { interval, taps, pointers } = this._options;\n\n    if (e.touches.length === pointers) {\n      this._tapCount += 1;\n\n      if (this._tapCount === 1) {\n        this._timer = setTimeout(() => {\n          this._tapCount = 0;\n        }, interval);\n      }\n\n      if (this._tapCount === taps) {\n        clearTimeout(this._timer);\n        this._tapCount = 0;\n        EventHandler.trigger(this._element, NAME, {\n          touch: e,\n          origin: {\n            x,\n            y,\n          },\n        });\n      }\n    }\n\n    return e;\n  }\n\n  handleTouchEnd() {\n    return;\n  }\n\n  handleTouchMove() {\n    return;\n  }\n}\n\nexport default Tap;\n","/* eslint-disable no-multi-assign */\nimport TouchUtil from './touchUtil';\nimport EventHandler from '../../mdb/dom/event-handler';\n\nconst DEFAULT_OPTIONS = {\n  angle: 0,\n  pointers: 2,\n};\nconst NAME = 'rotate';\nconst EVENT_END = `${NAME}end`;\nconst EVENT_START = `${NAME}start`;\n\nclass Rotate extends TouchUtil {\n  constructor(element, options) {\n    super();\n    this._element = element;\n    this._options = {\n      ...DEFAULT_OPTIONS,\n      ...options,\n    };\n    this._origin = {};\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  handleTouchStart(e) {\n    // eslint-disable-next-line no-unused-expressions\n    e.type === 'touchstart' && e.preventDefault();\n\n    if (e.touches.length < 2) return;\n    this._startTouch = e;\n    this._origin = {};\n    EventHandler.trigger(this._element, EVENT_START, { touch: e });\n    return;\n  }\n\n  handleTouchMove(e) {\n    // eslint-disable-next-line no-unused-expressions\n    e.type === 'touchmove' && e.preventDefault();\n\n    let origin;\n    let input;\n    const touches = e.touches;\n\n    if (touches.length === 1 && this._options.pointers === 1) {\n      const { left, top, width, height } = this._element.getBoundingClientRect();\n      origin = {\n        x: left + width / 2,\n        y: top + height / 2,\n      };\n\n      input = touches[0];\n    } else if (e.touches.length === 2 && this._options.pointers === 2) {\n      const [t2, t1] = e.touches;\n      const _position = {\n        x1: t1.clientX,\n        x2: t2.clientX,\n        y1: t1.clientY,\n        y2: t2.clientY,\n      };\n\n      origin = this._getMidPoint(_position);\n      input = this._getRightMostTouch(e.touches);\n    } else {\n      return;\n    }\n\n    this.currentAngle = this._getAngle(origin.x, origin.y, input.clientX, input.clientY);\n\n    if (!this._origin.initialAngle) {\n      this._origin.initialAngle = this._origin.previousAngle = this.currentAngle;\n      this._origin.distance = this._origin.change = 0;\n    } else {\n      this._origin.change = this._getAngularDistance(this._origin.previousAngle, this.currentAngle);\n      this._origin.distance += this._origin.change;\n    }\n\n    this._origin.previousAngle = this.currentAngle;\n\n    this.rotate = {\n      currentAngle: this.currentAngle,\n      distance: this._origin.distance,\n      change: this._origin.change,\n    };\n\n    EventHandler.trigger(this._element, NAME, { ...this.rotate, touch: e });\n  }\n\n  handleTouchEnd(e) {\n    // eslint-disable-next-line no-unused-expressions\n    e.type === 'touchend' && e.preventDefault();\n\n    this._origin = {};\n\n    EventHandler.trigger(this._element, EVENT_END, { touch: e });\n  }\n}\n\nexport default Rotate;\n","import Data from '../../mdb/dom/data';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport Press from './press';\nimport Swipe from './swipe';\nimport Pan from './pan';\nimport Pinch from './pinch';\nimport Tap from './tap';\nimport Rotate from './rotate';\nimport BaseComponent from '../../free/base-component';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\nconst NAME = 'touch';\nconst DATA_KEY = 'mdb.touch';\n\nclass Touch extends BaseComponent {\n  constructor(element, event = 'swipe', options = {}) {\n    super(element);\n\n    this._options = this._getConfig(options);\n    this._event = this._options.event || event;\n\n    // events\n\n    this.swipe = this._event === 'swipe' ? new Swipe(element, this._options) : null;\n    this.press = this._event === 'press' ? new Press(element, this._options) : null;\n    this.pan = this._event === 'pan' ? new Pan(element, this._options) : null;\n    this.pinch = this._event === 'pinch' ? new Pinch(element, this._options) : null;\n    this.tap = this._event === 'tap' ? new Tap(element, this._options) : null;\n    this.rotate = this._event === 'rotate' ? new Rotate(element, this._options) : null;\n\n    // handlers\n\n    this._touchStartHandler = this._handleTouchStart.bind(this);\n    this._touchMoveHandler = this._handleTouchMove.bind(this);\n    this._touchEndHandler = this._handleTouchEnd.bind(this);\n\n    this.init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n\n  dispose() {\n    EventHandler.off(this._element, 'touchstart', this._touchStartHandler);\n    EventHandler.off(this._element, 'touchmove', this._touchMoveHandler);\n    EventHandler.off(this._element, 'touchend', this._touchEndHandler);\n\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  init() {\n    // istanbul ignore next\n    EventHandler.on(this._element, 'touchstart', this._touchStartHandler);\n\n    // istanbul ignore next\n    EventHandler.on(this._element, 'touchmove', this._touchMoveHandler);\n\n    // istanbul ignore next\n    EventHandler.on(this._element, 'touchend', this._touchEndHandler);\n  }\n\n  // Private\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n    config = {\n      ...dataAttributes,\n      ...config,\n    };\n\n    return config;\n  }\n\n  _handleTouchStart(e) {\n    this[this._event].handleTouchStart(e);\n  }\n\n  _handleTouchMove(e) {\n    if (this[this._event].handleTouchMove) {\n      this[this._event].handleTouchMove(e);\n    }\n  }\n\n  _handleTouchEnd(e) {\n    this[this._event].handleTouchEnd(e);\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data && /dispose/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new Touch(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        // eslint-disable-next-line consistent-return\n        return data[config];\n      }\n    });\n  }\n}\n\nexport default Touch;\n","import { element, typeCheckConfig } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\nconst NAME = 'smoothScroll';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst DefaultType = {\n  container: 'string',\n  offset: 'number',\n  easing: 'string',\n  duration: 'number',\n};\n\nconst Default = {\n  container: 'body',\n  offset: 0,\n  easing: 'linear',\n  duration: 500,\n};\n\nconst EVENT_SCROLL_START = `scrollStart${EVENT_KEY}`;\nconst EVENT_SCROLL_END = `scrollEnd${EVENT_KEY}`;\nconst EVENT_SCROLL_CANCEL = `scrollCancel${EVENT_KEY}`;\n\nclass SmoothScroll extends BaseComponent {\n  constructor(element, options = {}) {\n    super(element);\n\n    this._options = this._getConfig(options);\n    this._href = this._element.getAttribute('href');\n    this.isCancel = false;\n\n    if (this._element) {\n      this._setup();\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n  }\n\n  // getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  get isWindow() {\n    return this._options.container === 'body';\n  }\n\n  get containerToScroll() {\n    return this.isWindow\n      ? document.documentElement\n      : SelectorEngine.findOne(this._options.container, document.documentElement);\n  }\n\n  get elFromHrefExist() {\n    return !!SelectorEngine.findOne(this._href, this.containerToScroll);\n  }\n\n  get offsetFromEl() {\n    const heightFromTop = this.containerToScroll.scrollTop;\n    const el = SelectorEngine.findOne(this._href, this.containerToScroll);\n    if (this.isWindow) {\n      return Manipulator.offset(el).top - this._options.offset + heightFromTop;\n    }\n    const elY = el.getBoundingClientRect().y;\n    const containerY = this.containerToScroll.getBoundingClientRect().y;\n    const offsetFromContainer = elY - containerY;\n\n    return offsetFromContainer - this._options.offset + heightFromTop;\n  }\n\n  get easingFunction() {\n    const easing = this._options.easing;\n    const motionName = `_motion${easing[0].toUpperCase()}${easing.slice(1)}`;\n    return this[motionName] ? this[motionName] : this._motionLinear;\n  }\n\n  // public\n\n  dispose() {\n    EventHandler.off(this._element, 'click');\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  cancelScroll() {\n    this.isCancel = true;\n  }\n\n  // private\n\n  _getConfig(options) {\n    const config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...options,\n    };\n\n    typeCheckConfig(NAME, config, DefaultType);\n\n    return config;\n  }\n\n  _inViewport() {\n    if (this.isWindow) {\n      return true;\n    }\n    const rect = this.containerToScroll.getBoundingClientRect();\n    return (\n      rect.top >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight)\n    );\n  }\n\n  _setup() {\n    const linkExist = typeof this._href !== 'undefined';\n    const isHashInLink = this._href.includes('#');\n\n    if (linkExist && isHashInLink && this.elFromHrefExist) {\n      this._scrollOnClickEvent();\n      this._preventNativeScroll();\n    }\n  }\n\n  _scrollOnClickEvent() {\n    EventHandler.on(this._element, 'click', (e) => {\n      this._handleClick(e);\n    });\n  }\n\n  _handleClick(e) {\n    e.preventDefault();\n    this.isCancel = false;\n\n    EventHandler.trigger(this._element, EVENT_SCROLL_START);\n\n    const scrollingContainer = this.containerToScroll;\n    const positionFrom = this.containerToScroll.scrollTop;\n    const positionTo = this.offsetFromEl;\n    const scrollProgress = 0;\n    const speed = 1 / this._options.duration;\n    // Thanks to this value time of scrolling is almost equal to value which user set\n    const step = 4.25;\n    const easing = this.easingFunction;\n\n    if (!this._inViewport()) {\n      this._scrollOnNextTick(\n        document.documentElement,\n        document.documentElement.scrollTop,\n        this.containerToScroll.offsetTop,\n        scrollProgress,\n        speed,\n        step,\n        easing\n      );\n\n      // Function which is waiting for ends scrolling to viewport\n      setTimeout(() => {\n        this._scrollOnNextTick(\n          scrollingContainer,\n          positionFrom,\n          positionTo,\n          scrollProgress,\n          speed,\n          step,\n          easing\n        );\n        this.isCancel = false;\n      }, this._options.duration);\n    } else {\n      this._scrollOnNextTick(\n        scrollingContainer,\n        positionFrom,\n        positionTo,\n        scrollProgress,\n        speed,\n        step,\n        easing\n      );\n    }\n  }\n\n  _scrollOnNextTick(\n    scrollingContainer,\n    positionFrom,\n    positionTo,\n    scrollProgress,\n    speed,\n    step,\n    easing\n  ) {\n    const progressWrongValue = scrollProgress < 0;\n    const scrollEnd = scrollProgress > 1;\n    const speedWrongValue = speed <= 0;\n    if (progressWrongValue || scrollEnd || speedWrongValue || this.isCancel) {\n      if (this.isCancel) {\n        if (this.isInViewport) {\n          this.isCancel = false;\n        }\n        EventHandler.trigger(this._element, EVENT_SCROLL_CANCEL);\n        return;\n      }\n      EventHandler.trigger(this._element, EVENT_SCROLL_END);\n      scrollingContainer.scrollTop = positionTo;\n      return;\n    }\n    scrollingContainer.scrollTo({\n      top: positionFrom - (positionFrom - positionTo) * easing(scrollProgress),\n    });\n    scrollProgress += speed * step;\n\n    // After one tick ends next tick is able to run, otherwise scrolling aren't goint to be animated\n    setTimeout(() => {\n      this._scrollOnNextTick(\n        scrollingContainer,\n        positionFrom,\n        positionTo,\n        scrollProgress,\n        speed,\n        step,\n        easing\n      );\n    });\n  }\n\n  _preventDefault(e) {\n    e.preventDefault();\n  }\n\n  _preventNativeScroll() {\n    let supportsPassive = false;\n    try {\n      window.addEventListener(\n        'test',\n        null,\n        Object.defineProperty({}, 'passive', {\n          get: () => (supportsPassive = true),\n        })\n      );\n    } catch (e) {\n      this._scrollError = e;\n    }\n\n    const wheelOpt = supportsPassive ? { passive: false } : false;\n    const wheelEvent = 'onwheel' in element('div') ? 'wheel' : 'mousewheel';\n    if (this.isWindow) {\n      this._deleteScrollOnStart(wheelOpt, wheelEvent);\n      this._addScrollOnEnd(wheelOpt, wheelEvent);\n      this._addScrollOnCancel(wheelOpt, wheelEvent);\n    }\n  }\n\n  _deleteScrollOnStart(wheelOpt, wheelEvent) {\n    EventHandler.on(this._element, 'scrollStart.mdb.smoothScroll', () => {\n      window.addEventListener(wheelEvent, this._preventDefault, wheelOpt);\n      window.addEventListener('touchmove', this._preventDefault, wheelOpt);\n    });\n  }\n\n  _addScrollOnEnd(wheelOpt, wheelEvent) {\n    EventHandler.on(this._element, 'scrollEnd.mdb.smoothScroll', () => {\n      window.removeEventListener(wheelEvent, this._preventDefault, wheelOpt);\n      window.removeEventListener('touchmove', this._preventDefault, wheelOpt);\n    });\n  }\n\n  _addScrollOnCancel(wheelOpt, wheelEvent) {\n    EventHandler.on(this._element, 'scrollCancel.mdb.smoothScroll', () => {\n      window.removeEventListener(wheelEvent, this._preventDefault, wheelOpt);\n      window.removeEventListener('touchmove', this._preventDefault, wheelOpt);\n    });\n  }\n\n  // Motions\n\n  // Linear\n\n  _motionLinear(t) {\n    return t;\n  }\n\n  // Ease-In\n\n  _motionEaseInQuad(t) {\n    return t * t;\n  }\n\n  _motionEaseInCubic(t) {\n    return t * t * t;\n  }\n\n  _motionEaseInQuart(t) {\n    return t * t * t * t;\n  }\n\n  _motionEaseInQuint(t) {\n    return t * t * t * t * t;\n  }\n\n  // Ease-In-Out\n\n  _motionEaseInOutQuad(t) {\n    return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n  }\n\n  _motionEaseInOutCubic(t) {\n    t /= 0.5;\n    if (t < 1) return (t * t * t) / 2;\n    t -= 2;\n    return (t * t * t + 2) / 2;\n  }\n\n  _motionEaseInOutQuart(t) {\n    t /= 0.5;\n    if (t < 1) return 0.5 * t * t * t * t;\n    t -= 2;\n    return -(t * t * t * t - 2) / 2;\n  }\n\n  _motionEaseInOutQuint(t) {\n    t /= 0.5;\n    if (t < 1) return (t * t * t * t * t) / 2;\n    t -= 2;\n    return (t * t * t * t * t + 2) / 2;\n  }\n\n  // Ease-Out\n\n  _motionEaseOutQuad(t) {\n    return -t * (t - 2);\n  }\n\n  _motionEaseOutCubic(t) {\n    t--;\n    return t * t * t + 1;\n  }\n\n  _motionEaseOutQuart(t) {\n    t--;\n    return -(t * t * t * t - 1);\n  }\n\n  _motionEaseOutQuint(t) {\n    t--;\n    return t * t * t * t * t + 1;\n  }\n\n  // static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data) {\n        data = new SmoothScroll(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n}\n\nexport default SmoothScroll;\n","/*!\n * perfect-scrollbar v1.5.3\n * Copyright 2021 Hyunje Jun, MDBootstrap and Contributors\n * Licensed under MIT\n */\n\nfunction get(element) {\n  return getComputedStyle(element);\n}\n\nfunction set(element, obj) {\n  for (var key in obj) {\n    var val = obj[key];\n    if (typeof val === 'number') {\n      val = val + \"px\";\n    }\n    element.style[key] = val;\n  }\n  return element;\n}\n\nfunction div(className) {\n  var div = document.createElement('div');\n  div.className = className;\n  return div;\n}\n\nvar elMatches =\n  typeof Element !== 'undefined' &&\n  (Element.prototype.matches ||\n    Element.prototype.webkitMatchesSelector ||\n    Element.prototype.mozMatchesSelector ||\n    Element.prototype.msMatchesSelector);\n\nfunction matches(element, query) {\n  if (!elMatches) {\n    throw new Error('No element matching method supported');\n  }\n\n  return elMatches.call(element, query);\n}\n\nfunction remove(element) {\n  if (element.remove) {\n    element.remove();\n  } else {\n    if (element.parentNode) {\n      element.parentNode.removeChild(element);\n    }\n  }\n}\n\nfunction queryChildren(element, selector) {\n  return Array.prototype.filter.call(element.children, function (child) { return matches(child, selector); }\n  );\n}\n\nvar cls = {\n  main: 'ps',\n  rtl: 'ps__rtl',\n  element: {\n    thumb: function (x) { return (\"ps__thumb-\" + x); },\n    rail: function (x) { return (\"ps__rail-\" + x); },\n    consuming: 'ps__child--consume',\n  },\n  state: {\n    focus: 'ps--focus',\n    clicking: 'ps--clicking',\n    active: function (x) { return (\"ps--active-\" + x); },\n    scrolling: function (x) { return (\"ps--scrolling-\" + x); },\n  },\n};\n\n/*\n * Helper methods\n */\nvar scrollingClassTimeout = { x: null, y: null };\n\nfunction addScrollingClass(i, x) {\n  var classList = i.element.classList;\n  var className = cls.state.scrolling(x);\n\n  if (classList.contains(className)) {\n    clearTimeout(scrollingClassTimeout[x]);\n  } else {\n    classList.add(className);\n  }\n}\n\nfunction removeScrollingClass(i, x) {\n  scrollingClassTimeout[x] = setTimeout(\n    function () { return i.isAlive && i.element.classList.remove(cls.state.scrolling(x)); },\n    i.settings.scrollingThreshold\n  );\n}\n\nfunction setScrollingClassInstantly(i, x) {\n  addScrollingClass(i, x);\n  removeScrollingClass(i, x);\n}\n\nvar EventElement = function EventElement(element) {\n  this.element = element;\n  this.handlers = {};\n};\n\nvar prototypeAccessors = { isEmpty: { configurable: true } };\n\nEventElement.prototype.bind = function bind (eventName, handler) {\n  if (typeof this.handlers[eventName] === 'undefined') {\n    this.handlers[eventName] = [];\n  }\n  this.handlers[eventName].push(handler);\n  this.element.addEventListener(eventName, handler, false);\n};\n\nEventElement.prototype.unbind = function unbind (eventName, target) {\n    var this$1 = this;\n\n  this.handlers[eventName] = this.handlers[eventName].filter(function (handler) {\n    if (target && handler !== target) {\n      return true;\n    }\n    this$1.element.removeEventListener(eventName, handler, false);\n    return false;\n  });\n};\n\nEventElement.prototype.unbindAll = function unbindAll () {\n  for (var name in this.handlers) {\n    this.unbind(name);\n  }\n};\n\nprototypeAccessors.isEmpty.get = function () {\n    var this$1 = this;\n\n  return Object.keys(this.handlers).every(\n    function (key) { return this$1.handlers[key].length === 0; }\n  );\n};\n\nObject.defineProperties( EventElement.prototype, prototypeAccessors );\n\nvar EventManager = function EventManager() {\n  this.eventElements = [];\n};\n\nEventManager.prototype.eventElement = function eventElement (element) {\n  var ee = this.eventElements.filter(function (ee) { return ee.element === element; })[0];\n  if (!ee) {\n    ee = new EventElement(element);\n    this.eventElements.push(ee);\n  }\n  return ee;\n};\n\nEventManager.prototype.bind = function bind (element, eventName, handler) {\n  this.eventElement(element).bind(eventName, handler);\n};\n\nEventManager.prototype.unbind = function unbind (element, eventName, handler) {\n  var ee = this.eventElement(element);\n  ee.unbind(eventName, handler);\n\n  if (ee.isEmpty) {\n    // remove\n    this.eventElements.splice(this.eventElements.indexOf(ee), 1);\n  }\n};\n\nEventManager.prototype.unbindAll = function unbindAll () {\n  this.eventElements.forEach(function (e) { return e.unbindAll(); });\n  this.eventElements = [];\n};\n\nEventManager.prototype.once = function once (element, eventName, handler) {\n  var ee = this.eventElement(element);\n  var onceHandler = function (evt) {\n    ee.unbind(eventName, onceHandler);\n    handler(evt);\n  };\n  ee.bind(eventName, onceHandler);\n};\n\nfunction createEvent(name) {\n  if (typeof window.CustomEvent === 'function') {\n    return new CustomEvent(name);\n  } else {\n    var evt = document.createEvent('CustomEvent');\n    evt.initCustomEvent(name, false, false, undefined);\n    return evt;\n  }\n}\n\nfunction processScrollDiff(\n  i,\n  axis,\n  diff,\n  useScrollingClass,\n  forceFireReachEvent\n) {\n  if ( useScrollingClass === void 0 ) useScrollingClass = true;\n  if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false;\n\n  var fields;\n  if (axis === 'top') {\n    fields = [\n      'contentHeight',\n      'containerHeight',\n      'scrollTop',\n      'y',\n      'up',\n      'down' ];\n  } else if (axis === 'left') {\n    fields = [\n      'contentWidth',\n      'containerWidth',\n      'scrollLeft',\n      'x',\n      'left',\n      'right' ];\n  } else {\n    throw new Error('A proper axis should be provided');\n  }\n\n  processScrollDiff$1(i, diff, fields, useScrollingClass, forceFireReachEvent);\n}\n\nfunction processScrollDiff$1(\n  i,\n  diff,\n  ref,\n  useScrollingClass,\n  forceFireReachEvent\n) {\n  var contentHeight = ref[0];\n  var containerHeight = ref[1];\n  var scrollTop = ref[2];\n  var y = ref[3];\n  var up = ref[4];\n  var down = ref[5];\n  if ( useScrollingClass === void 0 ) useScrollingClass = true;\n  if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false;\n\n  var element = i.element;\n\n  // reset reach\n  i.reach[y] = null;\n\n  // 1 for subpixel rounding\n  if (element[scrollTop] < 1) {\n    i.reach[y] = 'start';\n  }\n\n  // 1 for subpixel rounding\n  if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) {\n    i.reach[y] = 'end';\n  }\n\n  if (diff) {\n    element.dispatchEvent(createEvent((\"ps-scroll-\" + y)));\n\n    if (diff < 0) {\n      element.dispatchEvent(createEvent((\"ps-scroll-\" + up)));\n    } else if (diff > 0) {\n      element.dispatchEvent(createEvent((\"ps-scroll-\" + down)));\n    }\n\n    if (useScrollingClass) {\n      setScrollingClassInstantly(i, y);\n    }\n  }\n\n  if (i.reach[y] && (diff || forceFireReachEvent)) {\n    element.dispatchEvent(createEvent((\"ps-\" + y + \"-reach-\" + (i.reach[y]))));\n  }\n}\n\nfunction toInt(x) {\n  return parseInt(x, 10) || 0;\n}\n\nfunction isEditable(el) {\n  return (\n    matches(el, 'input,[contenteditable]') ||\n    matches(el, 'select,[contenteditable]') ||\n    matches(el, 'textarea,[contenteditable]') ||\n    matches(el, 'button,[contenteditable]')\n  );\n}\n\nfunction outerWidth(element) {\n  var styles = get(element);\n  return (\n    toInt(styles.width) +\n    toInt(styles.paddingLeft) +\n    toInt(styles.paddingRight) +\n    toInt(styles.borderLeftWidth) +\n    toInt(styles.borderRightWidth)\n  );\n}\n\nvar env = {\n  isWebKit:\n    typeof document !== 'undefined' &&\n    'WebkitAppearance' in document.documentElement.style,\n  supportsTouch:\n    typeof window !== 'undefined' &&\n    ('ontouchstart' in window ||\n      ('maxTouchPoints' in window.navigator &&\n        window.navigator.maxTouchPoints > 0) ||\n      (window.DocumentTouch && document instanceof window.DocumentTouch)),\n  supportsIePointer:\n    typeof navigator !== 'undefined' && navigator.msMaxTouchPoints,\n  isChrome:\n    typeof navigator !== 'undefined' &&\n    /Chrome/i.test(navigator && navigator.userAgent),\n};\n\nfunction updateGeometry(i) {\n  var element = i.element;\n  var roundedScrollTop = Math.floor(element.scrollTop);\n  var rect = element.getBoundingClientRect();\n\n  i.containerWidth = Math.round(rect.width);\n  i.containerHeight = Math.round(rect.height);\n\n  i.contentWidth = element.scrollWidth;\n  i.contentHeight = element.scrollHeight;\n\n  if (!element.contains(i.scrollbarXRail)) {\n    // clean up and append\n    queryChildren(element, cls.element.rail('x')).forEach(function (el) { return remove(el); }\n    );\n    element.appendChild(i.scrollbarXRail);\n  }\n  if (!element.contains(i.scrollbarYRail)) {\n    // clean up and append\n    queryChildren(element, cls.element.rail('y')).forEach(function (el) { return remove(el); }\n    );\n    element.appendChild(i.scrollbarYRail);\n  }\n\n  if (\n    !i.settings.suppressScrollX &&\n    i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth\n  ) {\n    i.scrollbarXActive = true;\n    i.railXWidth = i.containerWidth - i.railXMarginWidth;\n    i.railXRatio = i.containerWidth / i.railXWidth;\n    i.scrollbarXWidth = getThumbSize(\n      i,\n      toInt((i.railXWidth * i.containerWidth) / i.contentWidth)\n    );\n    i.scrollbarXLeft = toInt(\n      ((i.negativeScrollAdjustment + element.scrollLeft) *\n        (i.railXWidth - i.scrollbarXWidth)) /\n        (i.contentWidth - i.containerWidth)\n    );\n  } else {\n    i.scrollbarXActive = false;\n  }\n\n  if (\n    !i.settings.suppressScrollY &&\n    i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight\n  ) {\n    i.scrollbarYActive = true;\n    i.railYHeight = i.containerHeight - i.railYMarginHeight;\n    i.railYRatio = i.containerHeight / i.railYHeight;\n    i.scrollbarYHeight = getThumbSize(\n      i,\n      toInt((i.railYHeight * i.containerHeight) / i.contentHeight)\n    );\n    i.scrollbarYTop = toInt(\n      (roundedScrollTop * (i.railYHeight - i.scrollbarYHeight)) /\n        (i.contentHeight - i.containerHeight)\n    );\n  } else {\n    i.scrollbarYActive = false;\n  }\n\n  if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {\n    i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;\n  }\n  if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {\n    i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;\n  }\n\n  updateCss(element, i);\n\n  if (i.scrollbarXActive) {\n    element.classList.add(cls.state.active('x'));\n  } else {\n    element.classList.remove(cls.state.active('x'));\n    i.scrollbarXWidth = 0;\n    i.scrollbarXLeft = 0;\n    element.scrollLeft = i.isRtl === true ? i.contentWidth : 0;\n  }\n  if (i.scrollbarYActive) {\n    element.classList.add(cls.state.active('y'));\n  } else {\n    element.classList.remove(cls.state.active('y'));\n    i.scrollbarYHeight = 0;\n    i.scrollbarYTop = 0;\n    element.scrollTop = 0;\n  }\n}\n\nfunction getThumbSize(i, thumbSize) {\n  if (i.settings.minScrollbarLength) {\n    thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);\n  }\n  if (i.settings.maxScrollbarLength) {\n    thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);\n  }\n  return thumbSize;\n}\n\nfunction updateCss(element, i) {\n  var xRailOffset = { width: i.railXWidth };\n  var roundedScrollTop = Math.floor(element.scrollTop);\n\n  if (i.isRtl) {\n    xRailOffset.left =\n      i.negativeScrollAdjustment +\n      element.scrollLeft +\n      i.containerWidth -\n      i.contentWidth;\n  } else {\n    xRailOffset.left = element.scrollLeft;\n  }\n  if (i.isScrollbarXUsingBottom) {\n    xRailOffset.bottom = i.scrollbarXBottom - roundedScrollTop;\n  } else {\n    xRailOffset.top = i.scrollbarXTop + roundedScrollTop;\n  }\n  set(i.scrollbarXRail, xRailOffset);\n\n  var yRailOffset = { top: roundedScrollTop, height: i.railYHeight };\n  if (i.isScrollbarYUsingRight) {\n    if (i.isRtl) {\n      yRailOffset.right =\n        i.contentWidth -\n        (i.negativeScrollAdjustment + element.scrollLeft) -\n        i.scrollbarYRight -\n        i.scrollbarYOuterWidth -\n        9;\n    } else {\n      yRailOffset.right = i.scrollbarYRight - element.scrollLeft;\n    }\n  } else {\n    if (i.isRtl) {\n      yRailOffset.left =\n        i.negativeScrollAdjustment +\n        element.scrollLeft +\n        i.containerWidth * 2 -\n        i.contentWidth -\n        i.scrollbarYLeft -\n        i.scrollbarYOuterWidth;\n    } else {\n      yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;\n    }\n  }\n  set(i.scrollbarYRail, yRailOffset);\n\n  set(i.scrollbarX, {\n    left: i.scrollbarXLeft,\n    width: i.scrollbarXWidth - i.railBorderXWidth,\n  });\n  set(i.scrollbarY, {\n    top: i.scrollbarYTop,\n    height: i.scrollbarYHeight - i.railBorderYWidth,\n  });\n}\n\nfunction clickRail(i) {\n  var element = i.element;\n\n  i.event.bind(i.scrollbarY, 'mousedown', function (e) { return e.stopPropagation(); });\n  i.event.bind(i.scrollbarYRail, 'mousedown', function (e) {\n    var positionTop =\n      e.pageY -\n      window.pageYOffset -\n      i.scrollbarYRail.getBoundingClientRect().top;\n    var direction = positionTop > i.scrollbarYTop ? 1 : -1;\n\n    i.element.scrollTop += direction * i.containerHeight;\n    updateGeometry(i);\n\n    e.stopPropagation();\n  });\n\n  i.event.bind(i.scrollbarX, 'mousedown', function (e) { return e.stopPropagation(); });\n  i.event.bind(i.scrollbarXRail, 'mousedown', function (e) {\n    var positionLeft =\n      e.pageX -\n      window.pageXOffset -\n      i.scrollbarXRail.getBoundingClientRect().left;\n    var direction = positionLeft > i.scrollbarXLeft ? 1 : -1;\n\n    i.element.scrollLeft += direction * i.containerWidth;\n    updateGeometry(i);\n\n    e.stopPropagation();\n  });\n}\n\nfunction dragThumb(i) {\n  bindMouseScrollHandler(i, [\n    'containerWidth',\n    'contentWidth',\n    'pageX',\n    'railXWidth',\n    'scrollbarX',\n    'scrollbarXWidth',\n    'scrollLeft',\n    'x',\n    'scrollbarXRail' ]);\n  bindMouseScrollHandler(i, [\n    'containerHeight',\n    'contentHeight',\n    'pageY',\n    'railYHeight',\n    'scrollbarY',\n    'scrollbarYHeight',\n    'scrollTop',\n    'y',\n    'scrollbarYRail' ]);\n}\n\nfunction bindMouseScrollHandler(\n  i,\n  ref\n) {\n  var containerHeight = ref[0];\n  var contentHeight = ref[1];\n  var pageY = ref[2];\n  var railYHeight = ref[3];\n  var scrollbarY = ref[4];\n  var scrollbarYHeight = ref[5];\n  var scrollTop = ref[6];\n  var y = ref[7];\n  var scrollbarYRail = ref[8];\n\n  var element = i.element;\n\n  var startingScrollTop = null;\n  var startingMousePageY = null;\n  var scrollBy = null;\n\n  function mouseMoveHandler(e) {\n    if (e.touches && e.touches[0]) {\n      e[pageY] = e.touches[0].pageY;\n    }\n    element[scrollTop] =\n      startingScrollTop + scrollBy * (e[pageY] - startingMousePageY);\n    addScrollingClass(i, y);\n    updateGeometry(i);\n\n    e.stopPropagation();\n    if (e.type.startsWith('touch') && e.changedTouches.length > 1) {\n      e.preventDefault();\n    }\n  }\n\n  function mouseUpHandler() {\n    removeScrollingClass(i, y);\n    i[scrollbarYRail].classList.remove(cls.state.clicking);\n    i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n  }\n\n  function bindMoves(e, touchMode) {\n    startingScrollTop = element[scrollTop];\n    if (touchMode && e.touches) {\n      e[pageY] = e.touches[0].pageY;\n    }\n    startingMousePageY = e[pageY];\n    scrollBy =\n      (i[contentHeight] - i[containerHeight]) /\n      (i[railYHeight] - i[scrollbarYHeight]);\n    if (!touchMode) {\n      i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n      i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);\n      e.preventDefault();\n    } else {\n      i.event.bind(i.ownerDocument, 'touchmove', mouseMoveHandler);\n    }\n\n    i[scrollbarYRail].classList.add(cls.state.clicking);\n\n    e.stopPropagation();\n  }\n\n  i.event.bind(i[scrollbarY], 'mousedown', function (e) {\n    bindMoves(e);\n  });\n  i.event.bind(i[scrollbarY], 'touchstart', function (e) {\n    bindMoves(e, true);\n  });\n}\n\nfunction keyboard(i) {\n  var element = i.element;\n\n  var elementHovered = function () { return matches(element, ':hover'); };\n  var scrollbarFocused = function () { return matches(i.scrollbarX, ':focus') || matches(i.scrollbarY, ':focus'); };\n\n  function shouldPreventDefault(deltaX, deltaY) {\n    var scrollTop = Math.floor(element.scrollTop);\n    if (deltaX === 0) {\n      if (!i.scrollbarYActive) {\n        return false;\n      }\n      if (\n        (scrollTop === 0 && deltaY > 0) ||\n        (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)\n      ) {\n        return !i.settings.wheelPropagation;\n      }\n    }\n\n    var scrollLeft = element.scrollLeft;\n    if (deltaY === 0) {\n      if (!i.scrollbarXActive) {\n        return false;\n      }\n      if (\n        (scrollLeft === 0 && deltaX < 0) ||\n        (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)\n      ) {\n        return !i.settings.wheelPropagation;\n      }\n    }\n    return true;\n  }\n\n  i.event.bind(i.ownerDocument, 'keydown', function (e) {\n    if (\n      (e.isDefaultPrevented && e.isDefaultPrevented()) ||\n      e.defaultPrevented\n    ) {\n      return;\n    }\n\n    if (!elementHovered() && !scrollbarFocused()) {\n      return;\n    }\n\n    var activeElement = document.activeElement\n      ? document.activeElement\n      : i.ownerDocument.activeElement;\n    if (activeElement) {\n      if (activeElement.tagName === 'IFRAME') {\n        activeElement = activeElement.contentDocument.activeElement;\n      } else {\n        // go deeper if element is a webcomponent\n        while (activeElement.shadowRoot) {\n          activeElement = activeElement.shadowRoot.activeElement;\n        }\n      }\n      if (isEditable(activeElement)) {\n        return;\n      }\n    }\n\n    var deltaX = 0;\n    var deltaY = 0;\n\n    switch (e.which) {\n      case 37: // left\n        if (e.metaKey) {\n          deltaX = -i.contentWidth;\n        } else if (e.altKey) {\n          deltaX = -i.containerWidth;\n        } else {\n          deltaX = -30;\n        }\n        break;\n      case 38: // up\n        if (e.metaKey) {\n          deltaY = i.contentHeight;\n        } else if (e.altKey) {\n          deltaY = i.containerHeight;\n        } else {\n          deltaY = 30;\n        }\n        break;\n      case 39: // right\n        if (e.metaKey) {\n          deltaX = i.contentWidth;\n        } else if (e.altKey) {\n          deltaX = i.containerWidth;\n        } else {\n          deltaX = 30;\n        }\n        break;\n      case 40: // down\n        if (e.metaKey) {\n          deltaY = -i.contentHeight;\n        } else if (e.altKey) {\n          deltaY = -i.containerHeight;\n        } else {\n          deltaY = -30;\n        }\n        break;\n      case 32: // space bar\n        if (e.shiftKey) {\n          deltaY = i.containerHeight;\n        } else {\n          deltaY = -i.containerHeight;\n        }\n        break;\n      case 33: // page up\n        deltaY = i.containerHeight;\n        break;\n      case 34: // page down\n        deltaY = -i.containerHeight;\n        break;\n      case 36: // home\n        deltaY = i.contentHeight;\n        break;\n      case 35: // end\n        deltaY = -i.contentHeight;\n        break;\n      default:\n        return;\n    }\n\n    if (i.settings.suppressScrollX && deltaX !== 0) {\n      return;\n    }\n    if (i.settings.suppressScrollY && deltaY !== 0) {\n      return;\n    }\n\n    element.scrollTop -= deltaY;\n    element.scrollLeft += deltaX;\n    updateGeometry(i);\n\n    if (shouldPreventDefault(deltaX, deltaY)) {\n      e.preventDefault();\n    }\n  });\n}\n\nfunction wheel(i) {\n  var element = i.element;\n\n  function shouldPreventDefault(deltaX, deltaY) {\n    var roundedScrollTop = Math.floor(element.scrollTop);\n    var isTop = element.scrollTop === 0;\n    var isBottom =\n      roundedScrollTop + element.offsetHeight === element.scrollHeight;\n    var isLeft = element.scrollLeft === 0;\n    var isRight =\n      element.scrollLeft + element.offsetWidth === element.scrollWidth;\n\n    var hitsBound;\n\n    // pick axis with primary direction\n    if (Math.abs(deltaY) > Math.abs(deltaX)) {\n      hitsBound = isTop || isBottom;\n    } else {\n      hitsBound = isLeft || isRight;\n    }\n\n    return hitsBound ? !i.settings.wheelPropagation : true;\n  }\n\n  function getDeltaFromEvent(e) {\n    var deltaX = e.deltaX;\n    var deltaY = -1 * e.deltaY;\n\n    if (typeof deltaX === 'undefined' || typeof deltaY === 'undefined') {\n      // OS X Safari\n      deltaX = (-1 * e.wheelDeltaX) / 6;\n      deltaY = e.wheelDeltaY / 6;\n    }\n\n    if (e.deltaMode && e.deltaMode === 1) {\n      // Firefox in deltaMode 1: Line scrolling\n      deltaX *= 10;\n      deltaY *= 10;\n    }\n\n    if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) {\n      // IE in some mouse drivers\n      deltaX = 0;\n      deltaY = e.wheelDelta;\n    }\n\n    if (e.shiftKey) {\n      // reverse axis with shift key\n      return [-deltaY, -deltaX];\n    }\n    return [deltaX, deltaY];\n  }\n\n  function shouldBeConsumedByChild(target, deltaX, deltaY) {\n    // FIXME: this is a workaround for <select> issue in FF and IE #571\n    if (!env.isWebKit && element.querySelector('select:focus')) {\n      return true;\n    }\n\n    if (!element.contains(target)) {\n      return false;\n    }\n\n    var cursor = target;\n\n    while (cursor && cursor !== element) {\n      if (cursor.classList.contains(cls.element.consuming)) {\n        return true;\n      }\n\n      var style = get(cursor);\n\n      // if deltaY && vertical scrollable\n      if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n        var maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n        if (maxScrollTop > 0) {\n          if (\n            (cursor.scrollTop > 0 && deltaY < 0) ||\n            (cursor.scrollTop < maxScrollTop && deltaY > 0)\n          ) {\n            return true;\n          }\n        }\n      }\n      // if deltaX && horizontal scrollable\n      if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n        var maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n        if (maxScrollLeft > 0) {\n          if (\n            (cursor.scrollLeft > 0 && deltaX < 0) ||\n            (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n          ) {\n            return true;\n          }\n        }\n      }\n\n      cursor = cursor.parentNode;\n    }\n\n    return false;\n  }\n\n  function mousewheelHandler(e) {\n    var ref = getDeltaFromEvent(e);\n    var deltaX = ref[0];\n    var deltaY = ref[1];\n\n    if (shouldBeConsumedByChild(e.target, deltaX, deltaY)) {\n      return;\n    }\n\n    var shouldPrevent = false;\n    if (!i.settings.useBothWheelAxes) {\n      // deltaX will only be used for horizontal scrolling and deltaY will\n      // only be used for vertical scrolling - this is the default\n      element.scrollTop -= deltaY * i.settings.wheelSpeed;\n      element.scrollLeft += deltaX * i.settings.wheelSpeed;\n    } else if (i.scrollbarYActive && !i.scrollbarXActive) {\n      // only vertical scrollbar is active and useBothWheelAxes option is\n      // active, so let's scroll vertical bar using both mouse wheel axes\n      if (deltaY) {\n        element.scrollTop -= deltaY * i.settings.wheelSpeed;\n      } else {\n        element.scrollTop += deltaX * i.settings.wheelSpeed;\n      }\n      shouldPrevent = true;\n    } else if (i.scrollbarXActive && !i.scrollbarYActive) {\n      // useBothWheelAxes and only horizontal bar is active, so use both\n      // wheel axes for horizontal bar\n      if (deltaX) {\n        element.scrollLeft += deltaX * i.settings.wheelSpeed;\n      } else {\n        element.scrollLeft -= deltaY * i.settings.wheelSpeed;\n      }\n      shouldPrevent = true;\n    }\n\n    updateGeometry(i);\n\n    shouldPrevent = shouldPrevent || shouldPreventDefault(deltaX, deltaY);\n    if (shouldPrevent && !e.ctrlKey) {\n      e.stopPropagation();\n      e.preventDefault();\n    }\n  }\n\n  if (typeof window.onwheel !== 'undefined') {\n    i.event.bind(element, 'wheel', mousewheelHandler);\n  } else if (typeof window.onmousewheel !== 'undefined') {\n    i.event.bind(element, 'mousewheel', mousewheelHandler);\n  }\n}\n\nfunction touch(i) {\n  if (!env.supportsTouch && !env.supportsIePointer) {\n    return;\n  }\n\n  var element = i.element;\n\n  function shouldPrevent(deltaX, deltaY) {\n    var scrollTop = Math.floor(element.scrollTop);\n    var scrollLeft = element.scrollLeft;\n    var magnitudeX = Math.abs(deltaX);\n    var magnitudeY = Math.abs(deltaY);\n\n    if (magnitudeY > magnitudeX) {\n      // user is perhaps trying to swipe up/down the page\n\n      if (\n        (deltaY < 0 && scrollTop === i.contentHeight - i.containerHeight) ||\n        (deltaY > 0 && scrollTop === 0)\n      ) {\n        // set prevent for mobile Chrome refresh\n        return window.scrollY === 0 && deltaY > 0 && env.isChrome;\n      }\n    } else if (magnitudeX > magnitudeY) {\n      // user is perhaps trying to swipe left/right across the page\n\n      if (\n        (deltaX < 0 && scrollLeft === i.contentWidth - i.containerWidth) ||\n        (deltaX > 0 && scrollLeft === 0)\n      ) {\n        return true;\n      }\n    }\n\n    return true;\n  }\n\n  function applyTouchMove(differenceX, differenceY) {\n    element.scrollTop -= differenceY;\n    element.scrollLeft -= differenceX;\n\n    updateGeometry(i);\n  }\n\n  var startOffset = {};\n  var startTime = 0;\n  var speed = {};\n  var easingLoop = null;\n\n  function getTouch(e) {\n    if (e.targetTouches) {\n      return e.targetTouches[0];\n    } else {\n      // Maybe IE pointer\n      return e;\n    }\n  }\n\n  function shouldHandle(e) {\n    if (e.pointerType && e.pointerType === 'pen' && e.buttons === 0) {\n      return false;\n    }\n    if (e.targetTouches && e.targetTouches.length === 1) {\n      return true;\n    }\n    if (\n      e.pointerType &&\n      e.pointerType !== 'mouse' &&\n      e.pointerType !== e.MSPOINTER_TYPE_MOUSE\n    ) {\n      return true;\n    }\n    return false;\n  }\n\n  function touchStart(e) {\n    if (!shouldHandle(e)) {\n      return;\n    }\n\n    var touch = getTouch(e);\n\n    startOffset.pageX = touch.pageX;\n    startOffset.pageY = touch.pageY;\n\n    startTime = new Date().getTime();\n\n    if (easingLoop !== null) {\n      clearInterval(easingLoop);\n    }\n  }\n\n  function shouldBeConsumedByChild(target, deltaX, deltaY) {\n    if (!element.contains(target)) {\n      return false;\n    }\n\n    var cursor = target;\n\n    while (cursor && cursor !== element) {\n      if (cursor.classList.contains(cls.element.consuming)) {\n        return true;\n      }\n\n      var style = get(cursor);\n\n      // if deltaY && vertical scrollable\n      if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n        var maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n        if (maxScrollTop > 0) {\n          if (\n            (cursor.scrollTop > 0 && deltaY < 0) ||\n            (cursor.scrollTop < maxScrollTop && deltaY > 0)\n          ) {\n            return true;\n          }\n        }\n      }\n      // if deltaX && horizontal scrollable\n      if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n        var maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n        if (maxScrollLeft > 0) {\n          if (\n            (cursor.scrollLeft > 0 && deltaX < 0) ||\n            (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n          ) {\n            return true;\n          }\n        }\n      }\n\n      cursor = cursor.parentNode;\n    }\n\n    return false;\n  }\n\n  function touchMove(e) {\n    if (shouldHandle(e)) {\n      var touch = getTouch(e);\n\n      var currentOffset = { pageX: touch.pageX, pageY: touch.pageY };\n\n      var differenceX = currentOffset.pageX - startOffset.pageX;\n      var differenceY = currentOffset.pageY - startOffset.pageY;\n\n      if (shouldBeConsumedByChild(e.target, differenceX, differenceY)) {\n        return;\n      }\n\n      applyTouchMove(differenceX, differenceY);\n      startOffset = currentOffset;\n\n      var currentTime = new Date().getTime();\n\n      var timeGap = currentTime - startTime;\n      if (timeGap > 0) {\n        speed.x = differenceX / timeGap;\n        speed.y = differenceY / timeGap;\n        startTime = currentTime;\n      }\n\n      if (shouldPrevent(differenceX, differenceY)) {\n        e.preventDefault();\n      }\n    }\n  }\n  function touchEnd() {\n    if (i.settings.swipeEasing) {\n      clearInterval(easingLoop);\n      easingLoop = setInterval(function() {\n        if (i.isInitialized) {\n          clearInterval(easingLoop);\n          return;\n        }\n\n        if (!speed.x && !speed.y) {\n          clearInterval(easingLoop);\n          return;\n        }\n\n        if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {\n          clearInterval(easingLoop);\n          return;\n        }\n\n        if (!i.element) {\n          clearInterval(easingLoop);\n          return;\n        }\n\n        applyTouchMove(speed.x * 30, speed.y * 30);\n\n        speed.x *= 0.8;\n        speed.y *= 0.8;\n      }, 10);\n    }\n  }\n\n  if (env.supportsTouch) {\n    i.event.bind(element, 'touchstart', touchStart);\n    i.event.bind(element, 'touchmove', touchMove);\n    i.event.bind(element, 'touchend', touchEnd);\n  } else if (env.supportsIePointer) {\n    if (window.PointerEvent) {\n      i.event.bind(element, 'pointerdown', touchStart);\n      i.event.bind(element, 'pointermove', touchMove);\n      i.event.bind(element, 'pointerup', touchEnd);\n    } else if (window.MSPointerEvent) {\n      i.event.bind(element, 'MSPointerDown', touchStart);\n      i.event.bind(element, 'MSPointerMove', touchMove);\n      i.event.bind(element, 'MSPointerUp', touchEnd);\n    }\n  }\n}\n\nvar defaultSettings = function () { return ({\n  handlers: ['click-rail', 'drag-thumb', 'keyboard', 'wheel', 'touch'],\n  maxScrollbarLength: null,\n  minScrollbarLength: null,\n  scrollingThreshold: 1000,\n  scrollXMarginOffset: 0,\n  scrollYMarginOffset: 0,\n  suppressScrollX: false,\n  suppressScrollY: false,\n  swipeEasing: true,\n  useBothWheelAxes: false,\n  wheelPropagation: true,\n  wheelSpeed: 1,\n}); };\n\nvar handlers = {\n  'click-rail': clickRail,\n  'drag-thumb': dragThumb,\n  keyboard: keyboard,\n  wheel: wheel,\n  touch: touch,\n};\n\nvar PerfectScrollbar = function PerfectScrollbar(element, userSettings) {\n  var this$1 = this;\n  if ( userSettings === void 0 ) userSettings = {};\n\n  if (typeof element === 'string') {\n    element = document.querySelector(element);\n  }\n\n  if (!element || !element.nodeName) {\n    throw new Error('no element is specified to initialize PerfectScrollbar');\n  }\n\n  this.element = element;\n\n  element.classList.add(cls.main);\n\n  this.settings = defaultSettings();\n  for (var key in userSettings) {\n    this.settings[key] = userSettings[key];\n  }\n\n  this.containerWidth = null;\n  this.containerHeight = null;\n  this.contentWidth = null;\n  this.contentHeight = null;\n\n  var focus = function () { return element.classList.add(cls.state.focus); };\n  var blur = function () { return element.classList.remove(cls.state.focus); };\n\n  this.isRtl = get(element).direction === 'rtl';\n  if (this.isRtl === true) {\n    element.classList.add(cls.rtl);\n  }\n  this.isNegativeScroll = (function () {\n    var originalScrollLeft = element.scrollLeft;\n    var result = null;\n    element.scrollLeft = -1;\n    result = element.scrollLeft < 0;\n    element.scrollLeft = originalScrollLeft;\n    return result;\n  })();\n  this.negativeScrollAdjustment = this.isNegativeScroll\n    ? element.scrollWidth - element.clientWidth\n    : 0;\n  this.event = new EventManager();\n  this.ownerDocument = element.ownerDocument || document;\n\n  this.scrollbarXRail = div(cls.element.rail('x'));\n  element.appendChild(this.scrollbarXRail);\n  this.scrollbarX = div(cls.element.thumb('x'));\n  this.scrollbarXRail.appendChild(this.scrollbarX);\n  this.scrollbarX.setAttribute('tabindex', 0);\n  this.event.bind(this.scrollbarX, 'focus', focus);\n  this.event.bind(this.scrollbarX, 'blur', blur);\n  this.scrollbarXActive = null;\n  this.scrollbarXWidth = null;\n  this.scrollbarXLeft = null;\n  var railXStyle = get(this.scrollbarXRail);\n  this.scrollbarXBottom = parseInt(railXStyle.bottom, 10);\n  if (isNaN(this.scrollbarXBottom)) {\n    this.isScrollbarXUsingBottom = false;\n    this.scrollbarXTop = toInt(railXStyle.top);\n  } else {\n    this.isScrollbarXUsingBottom = true;\n  }\n  this.railBorderXWidth =\n    toInt(railXStyle.borderLeftWidth) + toInt(railXStyle.borderRightWidth);\n  // Set rail to display:block to calculate margins\n  set(this.scrollbarXRail, { display: 'block' });\n  this.railXMarginWidth =\n    toInt(railXStyle.marginLeft) + toInt(railXStyle.marginRight);\n  set(this.scrollbarXRail, { display: '' });\n  this.railXWidth = null;\n  this.railXRatio = null;\n\n  this.scrollbarYRail = div(cls.element.rail('y'));\n  element.appendChild(this.scrollbarYRail);\n  this.scrollbarY = div(cls.element.thumb('y'));\n  this.scrollbarYRail.appendChild(this.scrollbarY);\n  this.scrollbarY.setAttribute('tabindex', 0);\n  this.event.bind(this.scrollbarY, 'focus', focus);\n  this.event.bind(this.scrollbarY, 'blur', blur);\n  this.scrollbarYActive = null;\n  this.scrollbarYHeight = null;\n  this.scrollbarYTop = null;\n  var railYStyle = get(this.scrollbarYRail);\n  this.scrollbarYRight = parseInt(railYStyle.right, 10);\n  if (isNaN(this.scrollbarYRight)) {\n    this.isScrollbarYUsingRight = false;\n    this.scrollbarYLeft = toInt(railYStyle.left);\n  } else {\n    this.isScrollbarYUsingRight = true;\n  }\n  this.scrollbarYOuterWidth = this.isRtl ? outerWidth(this.scrollbarY) : null;\n  this.railBorderYWidth =\n    toInt(railYStyle.borderTopWidth) + toInt(railYStyle.borderBottomWidth);\n  set(this.scrollbarYRail, { display: 'block' });\n  this.railYMarginHeight =\n    toInt(railYStyle.marginTop) + toInt(railYStyle.marginBottom);\n  set(this.scrollbarYRail, { display: '' });\n  this.railYHeight = null;\n  this.railYRatio = null;\n\n  this.reach = {\n    x:\n      element.scrollLeft <= 0\n        ? 'start'\n        : element.scrollLeft >= this.contentWidth - this.containerWidth\n        ? 'end'\n        : null,\n    y:\n      element.scrollTop <= 0\n        ? 'start'\n        : element.scrollTop >= this.contentHeight - this.containerHeight\n        ? 'end'\n        : null,\n  };\n\n  this.isAlive = true;\n\n  this.settings.handlers.forEach(function (handlerName) { return handlers[handlerName](this$1); });\n\n  this.lastScrollTop = Math.floor(element.scrollTop); // for onScroll only\n  this.lastScrollLeft = element.scrollLeft; // for onScroll only\n  this.event.bind(this.element, 'scroll', function (e) { return this$1.onScroll(e); });\n  updateGeometry(this);\n};\n\nPerfectScrollbar.prototype.update = function update () {\n  if (!this.isAlive) {\n    return;\n  }\n\n  // Recalcuate negative scrollLeft adjustment\n  this.negativeScrollAdjustment = this.isNegativeScroll\n    ? this.element.scrollWidth - this.element.clientWidth\n    : 0;\n\n  // Recalculate rail margins\n  set(this.scrollbarXRail, { display: 'block' });\n  set(this.scrollbarYRail, { display: 'block' });\n  this.railXMarginWidth =\n    toInt(get(this.scrollbarXRail).marginLeft) +\n    toInt(get(this.scrollbarXRail).marginRight);\n  this.railYMarginHeight =\n    toInt(get(this.scrollbarYRail).marginTop) +\n    toInt(get(this.scrollbarYRail).marginBottom);\n\n  // Hide scrollbars not to affect scrollWidth and scrollHeight\n  set(this.scrollbarXRail, { display: 'none' });\n  set(this.scrollbarYRail, { display: 'none' });\n\n  updateGeometry(this);\n\n  processScrollDiff(this, 'top', 0, false, true);\n  processScrollDiff(this, 'left', 0, false, true);\n\n  set(this.scrollbarXRail, { display: '' });\n  set(this.scrollbarYRail, { display: '' });\n};\n\nPerfectScrollbar.prototype.onScroll = function onScroll (e) {\n  if (!this.isAlive) {\n    return;\n  }\n\n  updateGeometry(this);\n  processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop);\n  processScrollDiff(\n    this,\n    'left',\n    this.element.scrollLeft - this.lastScrollLeft\n  );\n\n  this.lastScrollTop = Math.floor(this.element.scrollTop);\n  this.lastScrollLeft = this.element.scrollLeft;\n};\n\nPerfectScrollbar.prototype.destroy = function destroy () {\n  if (!this.isAlive) {\n    return;\n  }\n\n  this.event.unbindAll();\n  remove(this.scrollbarX);\n  remove(this.scrollbarY);\n  remove(this.scrollbarXRail);\n  remove(this.scrollbarYRail);\n  this.removePsClasses();\n\n  // unset elements\n  this.element = null;\n  this.scrollbarX = null;\n  this.scrollbarY = null;\n  this.scrollbarXRail = null;\n  this.scrollbarYRail = null;\n\n  this.isAlive = false;\n};\n\nPerfectScrollbar.prototype.removePsClasses = function removePsClasses () {\n  this.element.className = this.element.className\n    .split(' ')\n    .filter(function (name) { return !name.match(/^ps([-_].+|)$/); })\n    .join(' ');\n};\n\nexport default PerfectScrollbar;\n//# sourceMappingURL=perfect-scrollbar.esm.js.map\n","/* eslint-disable no-restricted-globals */\nimport PerfectScrollbar from 'perfect-scrollbar';\nimport { typeCheckConfig } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport Manipulator from '../mdb/dom/manipulator';\nimport EventHandler from '../mdb/dom/event-handler';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\nconst NAME = 'perfectScrollbar';\nconst CLASSNAME_PS = 'perfect-scrollbar';\nconst DATA_KEY = 'mdb.perfectScrollbar';\nconst MDB_NAME = 'mdb';\nconst PS_NAME = 'ps';\n\nconst EVENTS = [\n  { mdb: `scrollX.${MDB_NAME}.${PS_NAME}`, ps: 'ps-scroll-x' },\n  { mdb: `scrollY.${MDB_NAME}.${PS_NAME}`, ps: 'ps-scroll-y' },\n  { mdb: `scrollUp.${MDB_NAME}.${PS_NAME}`, ps: 'ps-scroll-up' },\n  { mdb: `scrollDown.${MDB_NAME}.${PS_NAME}`, ps: 'ps-scroll-down' },\n  { mdb: `scrollLeft.${MDB_NAME}.${PS_NAME}`, ps: 'ps-scroll-left' },\n  { mdb: `scrollRight.${MDB_NAME}.${PS_NAME}`, ps: 'ps-scroll-right' },\n  { mdb: `scrollXEnd.${MDB_NAME}.${PS_NAME}`, ps: 'ps-x-reach-end' },\n  { mdb: `scrollYEnd.${MDB_NAME}.${PS_NAME}`, ps: 'ps-y-reach-end' },\n  { mdb: `scrollXStart.${MDB_NAME}.${PS_NAME}`, ps: 'ps-x-reach-start' },\n  { mdb: `scrollYStart.${MDB_NAME}.${PS_NAME}`, ps: 'ps-y-reach-start' },\n];\n\nconst Default = {\n  handlers: ['click-rail', 'drag-thumb', 'keyboard', 'wheel', 'touch'],\n  wheelSpeed: 1,\n  wheelPropagation: true,\n  swipeEasing: true,\n  minScrollbarLength: null,\n  maxScrollbarLength: null,\n  scrollingThreshold: 1000,\n  useBothWheelAxes: false,\n  suppressScrollX: false,\n  suppressScrollY: false,\n  scrollXMarginOffset: 0,\n  scrollYMarginOffset: 0,\n};\n\nconst DefaultType = {\n  handlers: '(string|array)',\n  wheelSpeed: 'number',\n  wheelPropagation: 'boolean',\n  swipeEasing: 'boolean',\n  minScrollbarLength: '(number|null)',\n  maxScrollbarLength: '(number|null)',\n  scrollingThreshold: 'number',\n  useBothWheelAxes: 'boolean',\n  suppressScrollX: 'boolean',\n  suppressScrollY: 'boolean',\n  scrollXMarginOffset: 'number',\n  scrollYMarginOffset: 'number',\n};\n\nclass PerfectScrollbars extends BaseComponent {\n  constructor(element, options = {}) {\n    super(element);\n\n    this._options = this._getConfig(options);\n    this.perfectScrollbar = null;\n\n    if (this._element) {\n      Manipulator.addClass(this._element, CLASSNAME_PS);\n    }\n\n    this.init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n    if (dataAttributes.handlers !== undefined) {\n      dataAttributes.handlers = dataAttributes.handlers.split(' ');\n    }\n\n    config = {\n      ...Default,\n      ...dataAttributes,\n      ...config,\n    };\n\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n\n  // Public\n  dispose() {\n    this.removeEvent(EVENTS);\n    this.perfectScrollbar.destroy();\n    this.perfectScrollbar = null;\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  init() {\n    this.perfectScrollbar = new PerfectScrollbar(this._element, this._options);\n\n    this._initEvents(EVENTS);\n  }\n\n  update() {\n    return this.perfectScrollbar.update();\n  }\n\n  _initEvents(events = []) {\n    events.forEach(({ ps, mdb }) =>\n      EventHandler.on(this._element, ps, (e) => EventHandler.trigger(this._element, mdb, { e }))\n    );\n  }\n\n  removeEvent(event) {\n    let filter = [];\n\n    if (typeof event === 'string') {\n      filter = EVENTS.filter(({ mdb }) => mdb === event);\n    }\n\n    filter.forEach(({ ps, mdb }) => {\n      EventHandler.off(this._element, ps);\n      EventHandler.off(this._element, mdb);\n    });\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data && /dispose|hide/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new PerfectScrollbars(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n}\n\nexport default PerfectScrollbars;\n","/* eslint-disable import/prefer-default-export */\nimport Manipulator from '../../mdb/dom/manipulator';\nimport { element } from '../../mdb/util/index';\n\nexport function getBackdropTemplate({ backdropID, backdropOpacity, backdropColor }) {\n  const backdrop = element('div');\n\n  Manipulator.addClass(backdrop, 'loading-backdrop');\n  backdrop.id = backdropID;\n  Manipulator.addStyle(backdrop, { opacity: backdropOpacity, backgroundColor: backdropColor });\n\n  return backdrop;\n}\n","import { typeCheckConfig } from '../../mdb/util/index';\nimport Data from '../../mdb/dom/data';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport { getBackdropTemplate } from './templates';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\nconst NAME = 'loading';\nconst CLASS_SPINNER = 'loading-spinner';\nconst DATA_KEY = 'mdb.loading';\n\nconst SELECTOR_LOADING_ICON = '.loading-icon';\nconst SELECTOR_LOADING_TEXT = '.loading-text';\n\nconst SHOW_EVENT = 'show.mdb.loading';\n\nconst DefaultType = {\n  backdrop: '(null|boolean)',\n  backdropColor: 'string',\n  backdropOpacity: '(number|string)',\n  delay: '(null|number)',\n  loader: 'string',\n  loadingIcon: 'boolean',\n  loadingText: 'boolean',\n  scroll: 'boolean',\n};\n\nconst Default = {\n  backdrop: true,\n  backdropColor: 'rgba(0, 0, 0)',\n  backdropOpacity: 0.4,\n  backdropID: '',\n  delay: null,\n  loader: '',\n  parentSelector: null,\n  scroll: true,\n  loadingText: true,\n  loadingIcon: true,\n};\n\nclass Loading extends BaseComponent {\n  constructor(element, options = {}) {\n    super(element);\n\n    this._options = this._getConfig(options);\n\n    this._backdropElement = null;\n    this._parentElement = SelectorEngine.findOne(this._options.parentSelector);\n\n    this._loadingIcon = SelectorEngine.findOne(SELECTOR_LOADING_ICON, this._element);\n    this._loadingText = SelectorEngine.findOne(SELECTOR_LOADING_TEXT, this._element);\n\n    this.init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n\n  init() {\n    const spinnerCloned = this._loadingIcon.cloneNode(true);\n    const loadingCloned = this._loadingText.cloneNode(true);\n\n    this._removeElementsOnStart();\n\n    setTimeout(() => {\n      Manipulator.addClass(this._element, CLASS_SPINNER);\n\n      this._setBackdrop();\n      this._setLoadingIcon(spinnerCloned);\n      this._setLoadingText(loadingCloned);\n      this._setScrollOption();\n\n      EventHandler.trigger(this._element, SHOW_EVENT);\n    }, this._options.delay);\n  }\n\n  dispose() {\n    Manipulator.removeClass(this._element, CLASS_SPINNER);\n\n    const delay = this._options.delay;\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    setTimeout(() => {\n      this._removeBackdrop();\n\n      setTimeout(() => {\n        super.dispose();\n      }, delay);\n    }, delay);\n  }\n\n  // Private\n\n  _setBackdrop() {\n    const { backdrop } = this._options;\n\n    if (!backdrop) return;\n\n    this._backdropElement = getBackdropTemplate(this._options);\n\n    if (this._parentElement !== null) {\n      Manipulator.addClass(this._element, 'position-absolute');\n      Manipulator.addClass(this._parentElement, 'position-relative');\n      Manipulator.addClass(this._backdropElement, 'position-absolute');\n\n      this._parentElement.appendChild(this._backdropElement);\n    } else {\n      Manipulator.addClass(this._element, 'position-fixed');\n\n      document.body.appendChild(this._backdropElement);\n      document.body.appendChild(this._element);\n    }\n  }\n\n  _removeBackdrop() {\n    const { backdrop } = this._options;\n\n    if (!backdrop) return;\n\n    if (this._parentElement !== null) {\n      Manipulator.removeClass(this._element, 'position-absolute');\n      Manipulator.removeClass(this._parentElement, 'position-relative');\n\n      this._backdropElement.remove();\n    } else {\n      this._backdropElement.remove();\n      this._element.remove();\n    }\n  }\n\n  _setLoadingIcon(spinner) {\n    if (!this._options.loadingIcon) {\n      spinner.remove();\n      return;\n    }\n    this._element.appendChild(spinner);\n    spinner.id = this._options.loader;\n  }\n\n  _setLoadingText(text) {\n    if (!this._options.loadingText) {\n      text.remove();\n      return;\n    }\n\n    this._element.appendChild(text);\n  }\n\n  _removeElementsOnStart() {\n    if (this._element === null) return;\n\n    this._loadingIcon.remove();\n    this._loadingText.remove();\n  }\n\n  _setScrollOption() {\n    if (!this._options.scroll) {\n      if (this._parentElement === null) {\n        document.body.style.overflow = 'hidden';\n        return;\n      }\n\n      Manipulator.addStyle(this._parentElement, { overflow: 'hidden' });\n    } else {\n      if (this._parentElement === null) {\n        document.body.style.overflow = '';\n        return;\n      }\n\n      Manipulator.addStyle(this._parentElement, { overflow: '' });\n    }\n  }\n\n  _getConfig(options) {\n    const config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...options,\n    };\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n      if (!data) {\n        data = new Loading(this, _config);\n      }\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](this);\n      }\n    });\n  }\n}\n\nexport default Loading;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = new Set([\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href',\n]);\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi;\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN =\n  /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(\n        attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN)\n      );\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter((attrRegex) => attrRegex instanceof RegExp);\n\n  // Check if a regular expression validates the attribute.\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nexport const DefaultWhitelist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: [],\n};\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const whitelistKeys = Object.keys(whiteList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (whitelistKeys.indexOf(elName) === -1) {\n      el.parentNode.removeChild(el);\n\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n\n    attributeList.forEach((attr) => {\n      if (!allowedAttribute(attr, whitelistedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n","import { element } from '../../mdb/util/index';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport { sanitizeHtml, DefaultWhitelist } from '../../mdb/util/sanitizer';\n\nconst CLASS_NAME_AUTOCOMPLETE_DROPDOWN_CONTAINER = 'autocomplete-dropdown-container';\nconst CLASS_NAME_AUTOCOMPLETE_DROPDOWN = 'autocomplete-dropdown';\nconst CLASS_NAME_AUTOCOMPLETE_ITEMS_LIST = 'autocomplete-items-list';\nconst CLASS_NAME_AUTOCOMPLETE_ITEM = 'autocomplete-item';\nconst CLASS_NAME_LOADER = 'autocomplete-loader';\nconst CLASS_NAME_SPINNER_BORDER = 'spinner-border';\nconst CLASS_NAME_NO_RESULTS = 'autocomplete-item autocomplete-no-results';\n\n// eslint-disable-next-line import/prefer-default-export\nexport function getDropdownTemplate(settings) {\n  const { id, items, width, options } = settings;\n\n  const dropdownContainer = element('div');\n  Manipulator.addClass(dropdownContainer, CLASS_NAME_AUTOCOMPLETE_DROPDOWN_CONTAINER);\n  Manipulator.addStyle(dropdownContainer, { width: `${width}px` });\n  dropdownContainer.setAttribute('id', id);\n\n  const dropdown = element('div');\n  Manipulator.addClass(dropdown, CLASS_NAME_AUTOCOMPLETE_DROPDOWN);\n\n  const itemsList = element('ul');\n  const listHeight = options.listHeight;\n  Manipulator.addClass(itemsList, CLASS_NAME_AUTOCOMPLETE_ITEMS_LIST);\n  Manipulator.addStyle(itemsList, { maxHeight: `${listHeight}px` });\n  itemsList.setAttribute('role', 'listbox');\n\n  const itemsListTemplate = getItemsTemplate(items, options);\n\n  itemsList.innerHTML = itemsListTemplate;\n\n  dropdown.appendChild(itemsList);\n  dropdownContainer.appendChild(dropdown);\n\n  return dropdownContainer;\n}\n\nexport function getItemsTemplate(items = [], options) {\n  const displayValue = options.displayValue;\n  const itemContent = options.itemContent;\n  return `\n    ${items\n      .map((item, index) => {\n        const content =\n          typeof itemContent === 'function'\n            ? sanitizeHtml(itemContent(item), DefaultWhitelist, null)\n            : displayValue(item);\n        return `<li data-mdb-index=\"${index}\" role=\"option\" class=\"${CLASS_NAME_AUTOCOMPLETE_ITEM}\">${content}</li>`;\n      })\n      .join('')}\n  `;\n}\n\nexport function getLoaderTemplate() {\n  const container = element('div');\n  Manipulator.addClass(container, CLASS_NAME_LOADER);\n  Manipulator.addClass(container, CLASS_NAME_SPINNER_BORDER);\n  container.setAttribute('role', 'status');\n\n  const content = '<span class=\"sr-only\">Loading...</span>';\n  container.innerHTML = content;\n\n  return container;\n}\n\nexport function getNoResultsTemplate(message) {\n  return `<li class=\"${CLASS_NAME_NO_RESULTS}\">${message}</li>`;\n}\n","import { createPopper } from '@popperjs/core';\nimport Data from '../../mdb/dom/data';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport { typeCheckConfig, getUID, defineJQueryPlugin } from '../../mdb/util/index';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport {\n  getDropdownTemplate,\n  getItemsTemplate,\n  getLoaderTemplate,\n  getNoResultsTemplate,\n} from './templates';\nimport { ESCAPE, UP_ARROW, DOWN_ARROW, HOME, END, ENTER, TAB } from '../../mdb/util/keycodes';\nimport { sanitizeHtml, DefaultWhitelist } from '../../mdb/util/sanitizer';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\nconst Default = {\n  autoSelect: false,\n  container: 'body',\n  customContent: '',\n  debounce: 300,\n  displayValue: (value) => value,\n  filter: null,\n  itemContent: null,\n  listHeight: 190,\n  noResults: 'No results found',\n  threshold: 0,\n};\n\nconst DefaultType = {\n  autoSelect: 'boolean',\n  container: 'string',\n  customContent: 'string',\n  debounce: 'number',\n  displayValue: 'function',\n  filter: '(null|function)',\n  itemContent: '(null|function)',\n  listHeight: 'number',\n  noResults: 'string',\n  threshold: 'number',\n};\n\nconst NAME = 'autocomplete';\nconst DATA_KEY = 'mdb.autocomplete';\n\nconst CLASS_NAME_CUSTOM_INPUT = 'autocomplete-input';\nconst CLASS_NAME_CUSTOM_LABEL = 'autocomplete-label';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FOCUSED = 'focused';\nconst CLASS_NAME_FOCUSING = 'focusing';\nconst CLASS_NAME_OPEN = 'open';\n\nconst SELECTOR_DROPDOWN = '.autocomplete-dropdown';\nconst SELECTOR_ITEMS_LIST = '.autocomplete-items-list';\nconst SELECTOR_ITEM = '.autocomplete-item';\nconst SELECTOR_LOADER = '.autocomplete-loader';\nconst SELECTOR_INPUT = '.form-control';\nconst SELECTOR_LABEL = '.form-label';\nconst SELECTOR_CUSTOM_CONTENT = '.autocomplete-custom-content';\n\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLOSE = `close${EVENT_KEY}`;\nconst EVENT_OPEN = `open${EVENT_KEY}`;\nconst EVENT_SELECT = `itemSelect${EVENT_KEY}`;\nconst EVENT_UPDATE = `update${EVENT_KEY}`;\n\nconst LOADER_CLOSE_DELAY = 300;\n\nclass Autocomplete extends BaseComponent {\n  constructor(element, options) {\n    super(element);\n\n    this._options = this._getConfig(options);\n    this._getContainer();\n    this._input = SelectorEngine.findOne(SELECTOR_INPUT, element);\n    this._label = SelectorEngine.findOne(SELECTOR_LABEL, element);\n    this._customContent = SelectorEngine.findOne(SELECTOR_CUSTOM_CONTENT, element);\n    this._loader = getLoaderTemplate();\n    this._popper = null;\n    this._debounceTimeoutId = null;\n    this._loaderTimeout = null;\n    this._activeItemIndex = -1;\n    this._activeItem = null;\n    this._filteredResults = null;\n    this._lastQueryValue = null;\n    this._canOpenOnFocus = true;\n    this._isOpen = false;\n\n    this._outsideClickHandler = this._handleOutsideClick.bind(this);\n    this._inputFocusHandler = this._handleInputFocus.bind(this);\n    this._userInputHandler = this._handleUserInput.bind(this);\n    this._keydownHandler = this._handleKeydown.bind(this);\n\n    this._init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  get filter() {\n    return this._options.filter;\n  }\n\n  get dropdown() {\n    return SelectorEngine.findOne(SELECTOR_DROPDOWN, this._dropdownContainer);\n  }\n\n  get items() {\n    return SelectorEngine.find(SELECTOR_ITEM, this._dropdownContainer);\n  }\n\n  get itemsList() {\n    return SelectorEngine.findOne(SELECTOR_ITEMS_LIST, this._dropdownContainer);\n  }\n\n  search(value) {\n    this._filterResults(value);\n  }\n\n  _getContainer() {\n    this._container = SelectorEngine.findOne(this._options.container);\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n    config = {\n      ...Default,\n      ...dataAttributes,\n      ...config,\n    };\n\n    typeCheckConfig(NAME, config, DefaultType);\n\n    return config;\n  }\n\n  _init() {\n    this._initDropdown();\n    this._setInputAndLabelClasses();\n    this._updateLabelPosition();\n    this._setInputAriaAttributes();\n    this._listenToInputFocus();\n    this._listenToUserInput();\n    this._listenToKeydown();\n  }\n\n  _initDropdown() {\n    this._dropdownContainerId = this._element.id\n      ? `autocomplete-dropdown-${this._element.id}`\n      : getUID('autocomplete-dropdown-');\n    const settings = {\n      id: this._dropdownContainerId,\n      items: [],\n      width: this._input.offsetWidth,\n      options: this._options,\n    };\n\n    this._dropdownContainer = getDropdownTemplate(settings);\n\n    if (this._options.customContent !== '') {\n      const customContent = this._options.customContent;\n      const sanitizedCustomContent = sanitizeHtml(customContent, DefaultWhitelist, null);\n      this.dropdown.insertAdjacentHTML('beforeend', sanitizedCustomContent);\n    }\n  }\n\n  _setInputAndLabelClasses() {\n    Manipulator.addClass(this._input, CLASS_NAME_CUSTOM_INPUT);\n\n    if (this._label) {\n      Manipulator.addClass(this._label, CLASS_NAME_CUSTOM_LABEL);\n    }\n  }\n\n  _setInputAriaAttributes() {\n    this._input.setAttribute('role', 'combobox');\n    this._input.setAttribute('aria-expanded', false);\n    this._input.setAttribute('aria-owns', this._dropdownContainerId);\n    this._input.setAttribute('aria-haspopup', true);\n    this._input.setAttribute('autocomplete', 'off');\n  }\n\n  _updateLabelPosition() {\n    if (!this._label) {\n      return;\n    }\n\n    if (this._input.value !== '' || this._isOpen) {\n      Manipulator.addClass(this._label, CLASS_NAME_ACTIVE);\n    } else {\n      Manipulator.removeClass(this._label, CLASS_NAME_ACTIVE);\n    }\n  }\n\n  _listenToInputFocus() {\n    EventHandler.on(this._input, 'focus', this._inputFocusHandler);\n  }\n\n  _handleInputFocus(event) {\n    const { value } = event.target;\n    const threshold = this._options.threshold;\n\n    if (!this._canOpenOnFocus) {\n      this._canOpenOnFocus = true;\n      return;\n    }\n\n    if (value.length < threshold) {\n      return;\n    }\n\n    if (this._lastQueryValue !== value) {\n      this._filterResults(value);\n    } else {\n      this.open();\n    }\n  }\n\n  _listenToWindowResize() {\n    EventHandler.on(window, 'resize', this._handleWindowResize.bind(this));\n  }\n\n  _handleWindowResize() {\n    if (this._dropdownContainer) {\n      this._updateDropdownWidth();\n    }\n  }\n\n  _updateDropdownWidth() {\n    const inputWidth = this._input.offsetWidth;\n    Manipulator.addStyle(this._dropdownContainer, { width: `${inputWidth}px` });\n  }\n\n  _listenToUserInput() {\n    EventHandler.on(this._input, 'input', this._userInputHandler);\n  }\n\n  _handleUserInput(event) {\n    const { value } = event.target;\n    const threshold = this._options.threshold;\n    const debounceTime = this._options.debounce;\n\n    if (!this.filter) {\n      return;\n    }\n\n    if (value.length < threshold) {\n      if (this._isOpen) {\n        this.close();\n      }\n      return;\n    }\n\n    this._debounceFilter(value, debounceTime);\n  }\n\n  _debounceFilter(searchTerm, debounceTime) {\n    if (this._debounceTimeoutId) {\n      clearTimeout(this._debounceTimeoutId);\n    }\n\n    this._debounceTimeoutId = setTimeout(() => {\n      this._filterResults(searchTerm);\n    }, debounceTime);\n  }\n\n  _filterResults(value) {\n    this._lastQueryValue = value;\n    const data = this.filter(value);\n\n    if (this._isPromise(data)) {\n      this._asyncUpdateResults(data);\n    } else {\n      this._updateResults(data);\n    }\n  }\n\n  _isPromise(value) {\n    return !!value && typeof value.then === 'function';\n  }\n\n  _asyncUpdateResults(data) {\n    this._resetActiveItem();\n    this._showLoader();\n\n    data.then((items) => {\n      this._updateResults(items);\n\n      this._loaderTimeout = setTimeout(() => {\n        this._hideLoader();\n        this._loaderTimeout = null;\n      }, LOADER_CLOSE_DELAY);\n    });\n  }\n\n  _resetActiveItem() {\n    const currentActive = this._activeItem;\n\n    if (currentActive) {\n      Manipulator.removeClass(currentActive, 'active');\n      this._activeItem = null;\n      this._activeItemIndex = -1;\n    }\n  }\n\n  _showLoader() {\n    this._element.appendChild(this._loader);\n  }\n\n  _hideLoader() {\n    const loader = SelectorEngine.findOne(SELECTOR_LOADER, this._element);\n\n    if (loader) {\n      this._element.removeChild(this._loader);\n    }\n  }\n\n  _updateResults(data) {\n    this._resetActiveItem();\n    this._filteredResults = data;\n    EventHandler.trigger(this._element, EVENT_UPDATE, { results: data });\n\n    const itemsList = SelectorEngine.findOne('.autocomplete-items-list', this._dropdownContainer);\n    const newTemplate = getItemsTemplate(data, this._options);\n    const noResultsTemplate = getNoResultsTemplate(this._options.noResults);\n\n    if (data.length === 0 && this._options.noResults !== '') {\n      itemsList.innerHTML = noResultsTemplate;\n    } else {\n      itemsList.innerHTML = newTemplate;\n    }\n\n    if (!this._isOpen) {\n      this.open();\n    }\n\n    if (this._popper) {\n      this._popper.forceUpdate();\n    }\n  }\n\n  _listenToKeydown() {\n    EventHandler.on(this._element, 'keydown', this._keydownHandler);\n  }\n\n  _handleKeydown(event) {\n    if (this._isOpen) {\n      this._handleOpenKeydown(event);\n    } else {\n      this._handleClosedKeydown(event);\n    }\n  }\n\n  _handleOpenKeydown(event) {\n    const key = event.keyCode;\n\n    if (key === TAB && this._options.autoSelect) {\n      this._selectActiveItem();\n    }\n\n    // fix for flashing notch\n    if (key === ESCAPE || (key === UP_ARROW && event.altKey)) {\n      if (!this._input.value) {\n        Manipulator.addClass(this._input, CLASS_NAME_FOCUSING);\n      }\n\n      this.close();\n      this._input.focus();\n\n      if (!this._input.value) {\n        setTimeout(() => {\n          Manipulator.removeClass(this._input, CLASS_NAME_FOCUSING);\n        }, 10);\n      }\n      return;\n    }\n\n    const isCloseKey = key === ESCAPE || (key === UP_ARROW && event.altKey) || key === TAB;\n\n    if (isCloseKey) {\n      this.close();\n      this._input.focus();\n      return;\n    }\n\n    switch (key) {\n      case DOWN_ARROW:\n        this._setActiveItem(this._activeItemIndex + 1);\n        this._scrollToItem(this._activeItem);\n        break;\n      case UP_ARROW:\n        this._setActiveItem(this._activeItemIndex - 1);\n        this._scrollToItem(this._activeItem);\n        break;\n      case HOME:\n        if (this._activeItemIndex > -1) {\n          this._setActiveItem(0);\n          this._scrollToItem(this._activeItem);\n        } else {\n          this._input.setSelectionRange(0, 0);\n        }\n        break;\n      case END:\n        if (this._activeItemIndex > -1) {\n          this._setActiveItem(this.items.length - 1);\n          this._scrollToItem(this._activeItem);\n        } else {\n          const end = this._input.value.length;\n          this._input.setSelectionRange(end, end);\n        }\n        break;\n      case ENTER:\n        event.preventDefault();\n        if (this._activeItemIndex > -1) {\n          const item = this._filteredResults[this._activeItemIndex];\n          this._handleSelection(item);\n        }\n        return;\n      default:\n        return;\n    }\n\n    event.preventDefault();\n  }\n\n  _setActiveItem(index) {\n    const items = this.items;\n\n    if (!items[index]) {\n      return;\n    }\n\n    this._updateActiveItem(items[index], index);\n  }\n\n  _updateActiveItem(newActiveItem, index) {\n    const currentActiveItem = this._activeItem;\n\n    if (currentActiveItem) {\n      Manipulator.removeClass(currentActiveItem, 'active');\n    }\n\n    Manipulator.addClass(newActiveItem, 'active');\n    this._activeItemIndex = index;\n    this._activeItem = newActiveItem;\n  }\n\n  _scrollToItem(item) {\n    if (!item) {\n      return;\n    }\n\n    const list = this.itemsList;\n    const listHeight = list.offsetHeight;\n    const itemIndex = this.items.indexOf(item);\n    const itemHeight = item.offsetHeight;\n    const scrollTop = list.scrollTop;\n\n    if (itemIndex > -1) {\n      const itemOffset = itemIndex * itemHeight;\n      const isBelow = itemOffset + itemHeight > scrollTop + listHeight;\n      const isAbove = itemOffset < scrollTop;\n\n      if (isAbove) {\n        list.scrollTop = itemOffset;\n      } else if (isBelow) {\n        list.scrollTop = itemOffset - listHeight + itemHeight;\n      } else {\n        list.scrollTop = scrollTop;\n      }\n    }\n  }\n\n  _handleClosedKeydown(event) {\n    if (event.key === 'Enter') {\n      event.preventDefault();\n    }\n    const key = event.keyCode;\n    const isOpenKey = key === ENTER || key === DOWN_ARROW || key === DOWN_ARROW;\n\n    if (isOpenKey) {\n      this.open();\n    }\n  }\n\n  open() {\n    if (this._lastQueryValue === null) {\n      this._filterResults('');\n    }\n\n    const openEvent = EventHandler.trigger(this._element, EVENT_OPEN);\n\n    if (this._isOpen || openEvent.defaultPrevented) {\n      return;\n    }\n    this._updateDropdownWidth();\n    this._listenToWindowResize();\n\n    this._popper = createPopper(this._element, this._dropdownContainer, {\n      modifiers: [\n        {\n          name: 'offset',\n          options: {\n            offset: [0, 1],\n          },\n        },\n      ],\n    });\n    this._container.appendChild(this._dropdownContainer);\n\n    this._listenToOutsideClick();\n    this._listenToItemsClick();\n\n    // We need to add delay to wait for the popper initialization\n    // and position update\n    setTimeout(() => {\n      Manipulator.addClass(this.dropdown, CLASS_NAME_OPEN);\n      this._isOpen = true;\n      this._setInputActiveStyles();\n      this._updateLabelPosition();\n    }, 0);\n  }\n\n  _listenToOutsideClick() {\n    EventHandler.on(document, 'click', this._outsideClickHandler);\n  }\n\n  _handleOutsideClick(event) {\n    const isInput = this._input === event.target;\n    const isDropdown = event.target === this._dropdownContainer;\n    const isDropdownContent =\n      this._dropdownContainer && this._dropdownContainer.contains(event.target);\n\n    if (!isInput && !isDropdown && !isDropdownContent) {\n      this.close();\n    }\n  }\n\n  _listenToItemsClick() {\n    const itemsList = SelectorEngine.findOne(SELECTOR_ITEMS_LIST, this._dropdownContainer);\n    EventHandler.on(itemsList, 'click', this._handleItemsClick.bind(this));\n  }\n\n  _handleItemsClick(event) {\n    const target = SelectorEngine.closest(event.target, SELECTOR_ITEM);\n    const targetIndex = Manipulator.getDataAttribute(target, 'index');\n    const item = this._filteredResults[targetIndex];\n\n    this._handleSelection(item);\n  }\n\n  _selectActiveItem() {\n    const item = this._filteredResults[this._activeItemIndex];\n\n    if (!item) {\n      return;\n    }\n\n    const value = this._options.displayValue(item);\n    const selectEvent = EventHandler.trigger(this._element, EVENT_SELECT, { value: item });\n\n    if (selectEvent.defaultPrevented) {\n      return;\n    }\n\n    setTimeout(() => {\n      this._canOpenOnFocus = false;\n      this._updateInputValue(value);\n      this._updateLabelPosition();\n    }, 0);\n  }\n\n  _handleSelection(item) {\n    const value = this._options.displayValue(item);\n    const selectEvent = EventHandler.trigger(this._element, EVENT_SELECT, { value: item });\n\n    if (item === undefined) {\n      return;\n    }\n\n    if (selectEvent.defaultPrevented) {\n      return;\n    }\n\n    setTimeout(() => {\n      this._canOpenOnFocus = false;\n      this._updateInputValue(value);\n      this._updateLabelPosition();\n      this._input.focus();\n      this.close();\n    }, 0);\n  }\n\n  _updateInputValue(value) {\n    this._input.value = value;\n  }\n\n  _setInputActiveStyles() {\n    Manipulator.addClass(this._input, CLASS_NAME_FOCUSED);\n  }\n\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n    if (!this._isOpen || closeEvent.defaultPrevented) {\n      return;\n    }\n\n    this._resetActiveItem();\n    this._removeDropdownEvents();\n\n    Manipulator.removeClass(this.dropdown, CLASS_NAME_OPEN);\n\n    EventHandler.on(this.dropdown, 'transitionend', this._handleDropdownTransitionEnd.bind(this));\n\n    Manipulator.removeClass(this._input, CLASS_NAME_FOCUSED);\n    Manipulator.removeClass(this._input, CLASS_NAME_ACTIVE);\n\n    if (!this._input.value && this._label) {\n      Manipulator.removeClass(this._label, CLASS_NAME_ACTIVE);\n    }\n  }\n\n  _removeDropdownEvents() {\n    const itemsList = SelectorEngine.findOne(SELECTOR_ITEMS_LIST, this._dropdownContainer);\n    EventHandler.off(itemsList, 'click');\n    EventHandler.off(document, 'click', this._outsideClickHandler);\n    EventHandler.off(window, 'resize', this._handleWindowResize.bind(this));\n  }\n\n  _handleDropdownTransitionEnd(event) {\n    // This event fires for each animated property. We only want\n    // to run this code once\n    if (this._isOpen && event && event.propertyName === 'opacity') {\n      this._popper.destroy();\n\n      if (this._dropdownContainer) {\n        this._container.removeChild(this._dropdownContainer);\n      }\n\n      this._isOpen = false;\n      EventHandler.off(this.dropdown, 'transitionend');\n    }\n  }\n\n  dispose() {\n    if (this._isOpen) {\n      this.close();\n    }\n\n    this._removeInputAndElementEvents();\n    this._dropdownContainer.remove();\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  _removeInputAndElementEvents() {\n    EventHandler.off(this._input, 'focus', this._inputFocusHandler);\n    EventHandler.off(this._input, 'input', this._userInputHandler);\n    EventHandler.off(this._element, 'keydown', this._keydownHandler);\n  }\n\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data && /dispose/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new Autocomplete(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](options);\n      }\n    });\n  }\n}\n\ndefineJQueryPlugin(Autocomplete);\n\nexport default Autocomplete;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport Backdrop from './util/backdrop.js';\nimport { enableDismissTrigger } from './util/component-functions.js';\nimport FocusTrap from './util/focustrap.js';\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js';\nimport ScrollBarHelper from './util/scrollbar.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'modal';\nconst DATA_KEY = 'bs.modal';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\nconst ESCAPE_KEY = 'Escape';\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\n\nconst OPEN_SELECTOR = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-toggle=\"modal\"]';\n\nconst Default = {\n  backdrop: true,\n  focus: true,\n  keyboard: true,\n};\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  focus: 'boolean',\n  keyboard: 'boolean',\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._focustrap = this._initializeFocusTrap();\n    this._isShown = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n\n    this._addEventListeners();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n      relatedTarget,\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._isTransitioning = true;\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._backdrop.show(() => this._showElement(relatedTarget));\n  }\n\n  hide() {\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n    this._isTransitioning = true;\n    this._focustrap.deactivate();\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n  }\n\n  dispose() {\n    EventHandler.off(window, EVENT_KEY);\n    EventHandler.off(this._dialog, EVENT_KEY);\n\n    this._backdrop.dispose();\n    this._focustrap.deactivate();\n\n    super.dispose();\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  }\n\n  // Private\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop) && Boolean(!this._config.modalNonInvasive), // 'static' option will be translated to true, and booleans will keep their value,\n      isAnimated: this._isAnimated(),\n    });\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element,\n    });\n  }\n\n  _showElement(relatedTarget) {\n    // try to append dynamic modal\n    if (!document.body.contains(this._element)) {\n      document.body.append(this._element);\n    }\n\n    this._element.style.display = 'block';\n    this._element.removeAttribute('aria-hidden');\n    this._element.setAttribute('aria-modal', true);\n    this._element.setAttribute('role', 'dialog');\n    this._element.scrollTop = 0;\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOW);\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._focustrap.activate();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN, {\n        relatedTarget,\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, (event) => {\n      if (event.key !== ESCAPE_KEY) {\n        return;\n      }\n\n      if (this._config.keyboard) {\n        this.hide();\n        return;\n      }\n\n      this._triggerBackdropTransition();\n    });\n\n    EventHandler.on(window, EVENT_RESIZE, () => {\n      if (this._isShown && !this._isTransitioning) {\n        this._adjustDialog();\n      }\n    });\n\n    EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, (event) => {\n      // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n      EventHandler.one(this._element, EVENT_CLICK_DISMISS, (event2) => {\n        if (this._element !== event.target || this._element !== event2.target) {\n          return;\n        }\n\n        if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n          return;\n        }\n\n        if (this._config.backdrop) {\n          this.hide();\n        }\n      });\n    });\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n    this._element.setAttribute('aria-hidden', true);\n    this._element.removeAttribute('aria-modal');\n    this._element.removeAttribute('role');\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n      this._resetAdjustments();\n      this._scrollBar.reset();\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    });\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n    const initialOverflowY = this._element.style.overflowY;\n    // return if the following background transition hasn't yet completed\n    if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      this._element.style.overflowY = 'hidden';\n    }\n\n    this._element.classList.add(CLASS_NAME_STATIC);\n    this._queueCallback(() => {\n      this._element.classList.remove(CLASS_NAME_STATIC);\n      this._queueCallback(() => {\n        this._element.style.overflowY = initialOverflowY;\n      }, this._dialog);\n    }, this._dialog);\n\n    this._element.focus();\n  }\n\n  /**\n   * The following methods are used to handle overflowing modals\n   */\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n    const scrollbarWidth = this._scrollBar.getWidth();\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (isBodyOverflowing && !isModalOverflowing) {\n      const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n      this._element.style[property] = `${scrollbarWidth}px`;\n    }\n\n    if (!isBodyOverflowing && isModalOverflowing) {\n      const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n      this._element.style[property] = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  }\n\n  // Static\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n//   const target = SelectorEngine.getElementFromSelector(this);\n\n//   if (['A', 'AREA'].includes(this.tagName)) {\n//     event.preventDefault();\n//   }\n\n//   EventHandler.one(target, EVENT_SHOW, (showEvent) => {\n//     if (showEvent.defaultPrevented) {\n//       // only register focus restorer if modal will actually get shown\n//       return;\n//     }\n\n//     EventHandler.one(target, EVENT_HIDDEN, () => {\n//       if (isVisible(this)) {\n//         this.focus();\n//       }\n//     });\n//   });\n\n//   // avoid conflict when clicking modal toggler while another one is open\n//   const allreadyOpenedModals = SelectorEngine.find(OPEN_SELECTOR);\n//   allreadyOpenedModals.forEach((modal) => {\n//     if (!modal.classList.contains('modal-non-invasive-show')) {\n//       Modal.getInstance(modal).hide();\n//     }\n//   });\n\n//   const data = Modal.getOrCreateInstance(target);\n\n//   data.toggle(this);\n// });\n\n// enableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Modal);\n\nexport default Modal;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine';\nimport Manipulator from '../dom/manipulator';\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nconst getWidth = () => {\n  // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n  const documentWidth = document.documentElement.clientWidth;\n  return Math.abs(window.innerWidth - documentWidth);\n};\n\nconst hide = (width = getWidth()) => {\n  _disableOverFlow();\n  // give padding to element to balances the hidden scrollbar width\n  _setElementAttributes('body', 'paddingRight', (calculatedValue) => calculatedValue + width);\n  // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements, to keep shown fullwidth\n  _setElementAttributes(\n    SELECTOR_FIXED_CONTENT,\n    'paddingRight',\n    (calculatedValue) => calculatedValue + width\n  );\n  _setElementAttributes(\n    SELECTOR_STICKY_CONTENT,\n    'marginRight',\n    (calculatedValue) => calculatedValue - width\n  );\n};\n\nconst _disableOverFlow = () => {\n  const actualValue = document.body.style.overflow;\n  if (actualValue) {\n    Manipulator.setDataAttribute(document.body, 'overflow', actualValue);\n  }\n\n  document.body.style.overflow = 'hidden';\n};\n\nconst _setElementAttributes = (selector, styleProp, callback) => {\n  const scrollbarWidth = getWidth();\n  SelectorEngine.find(selector).forEach((element) => {\n    if (element !== document.body && window.innerWidth > element.clientWidth + scrollbarWidth) {\n      return;\n    }\n\n    const actualValue = element.style[styleProp];\n    const calculatedValue = window.getComputedStyle(element)[styleProp];\n    Manipulator.setDataAttribute(element, styleProp, actualValue);\n    element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n  });\n};\n\nconst reset = () => {\n  _resetElementAttributes('body', 'overflow');\n  _resetElementAttributes('body', 'paddingRight');\n  _resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n  _resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n};\n\nconst _resetElementAttributes = (selector, styleProp) => {\n  SelectorEngine.find(selector).forEach((element) => {\n    const value = Manipulator.getDataAttribute(element, styleProp);\n    if (typeof value === 'undefined') {\n      element.style.removeProperty(styleProp);\n    } else {\n      Manipulator.removeDataAttribute(element, styleProp);\n      element.style[styleProp] = value;\n    }\n  });\n};\n\nconst isBodyOverflowing = () => {\n  return getWidth() > 0;\n};\n\nexport { getWidth, hide, isBodyOverflowing, reset };\n","import { typeCheckConfig, getElementFromSelector } from '../mdb/util/index';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Data from '../mdb/dom/data';\nimport Manipulator from '../mdb/dom/manipulator';\nimport BSModal from '../bootstrap/mdb-prefix/modal';\nimport { reset as scrollBarReset } from '../mdb/util/scrollbar';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal';\nconst DATA_KEY = 'bs.modal';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\n// width below which, according to css rules, modal position changes - modal gets position relative instead of absolute.\nconst MODAL_CSS_BREAKPOINT = 992;\n\nconst NON_INVASIVE_CLASS = 'modal-non-invasive-open';\nconst NON_INVASIVE_SHOW_CLASS = 'modal-non-invasive-show';\nconst SHOW_CLASS = 'show';\nconst MODAL_CLASS = 'modal';\nconst MODAL_OPEN_CLASS = 'modal-open';\nconst MODAL_CONTENT_CLASS = 'modal-content';\nconst MODAL_BOTTOM_CLASS = 'modal-bottom';\nconst MODAL_BOTTOM_RIGHT_CLASS = 'modal-bottom-right';\nconst MODAL_BOTTOM_LEFT_CLASS = 'modal-bottom-left';\nconst MODAL_TOP_RIGHT_CLASS = 'modal-top-right';\nconst MODAL_TOP_LEFT_CLASS = 'modal-top-left';\nconst MODAL_DIALOG_SCROLLABLE_CLASS = 'modal-dialog-scrollable';\nconst MODAL_DIALOG_CLASS = 'modal-dialog';\n\nconst SELECTOR_MODAL_CONTENT = `.${MODAL_CONTENT_CLASS}`;\nconst SELECTOR_MODAL_BOTTOM = `.${MODAL_BOTTOM_CLASS}`;\nconst SELECTOR_MODAL_BOTTOM_RIGHT = `.${MODAL_BOTTOM_RIGHT_CLASS}`;\nconst SELECTOR_MODAL_BOTTOM_LEFT = `.${MODAL_BOTTOM_LEFT_CLASS}`;\nconst SELECTOR_MODAL_TOP_RIGHT = `.${MODAL_TOP_RIGHT_CLASS}`;\nconst SELECTOR_MODAL_TOP_LEFT = `.${MODAL_TOP_LEFT_CLASS}`;\nconst SELECTOR_MODAL_DIALOG_SCROLLABLE = `.${MODAL_DIALOG_SCROLLABLE_CLASS}`;\nconst SELECTOR_MODAL_DIALOG = `.${MODAL_DIALOG_CLASS}`;\n\nconst EVENT_SHOW_BS_MODAL = `show${EVENT_KEY}`;\nconst EVENT_SHOWN_BS_MODAL = `shown${EVENT_KEY}`;\nconst EVENT_HIDDEN_BS_MODAL = `hidden${EVENT_KEY}`;\nconst EVENT_HIDE_BS_MODAL = 'hide.bs.modal';\nconst EVENT_HIDE_PREVENTED_BS_MODAL = 'hidePrevented.bs.modal';\n\nconst EXTENDED_EVENTS = [\n  { name: 'show', parametersToCopy: ['relatedTarget'] },\n  { name: 'shown', parametersToCopy: ['relatedTarget'] },\n  { name: 'hide' },\n  { name: 'hidePrevented' },\n  { name: 'hidden' },\n];\n\nconst Default = {\n  backdrop: true,\n  keyboard: true,\n  focus: true,\n  show: true,\n  modalNonInvasive: false,\n};\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean',\n  show: 'boolean',\n  modalNonInvasive: 'boolean',\n};\n\nclass Modal extends BSModal {\n  constructor(element, data) {\n    super(element, data);\n    this._config = this._getConfig(data);\n    this._modalContentRect = '';\n    this._modalContentComputedStyles = '';\n    this._isNonInvasive = this._config.modalNonInvasive;\n    this._isScrollable = '';\n    this._isBottomRight = '';\n    this._isBottomLeft = '';\n    this._isTopRight = '';\n    this._isTopLeft = '';\n    this._isSideTopModal = '';\n    this._isSideBottomModal = '';\n    this._isSideModal = '';\n    this._isModalBottom = '';\n\n    if (this._isNonInvasive) {\n      this._config.backdrop = false;\n      this._config.focus = false;\n      this._isBodyOverflowing = true;\n      this._onModalShow();\n      this._onModalShown();\n      this._onModalHidden();\n      this._listenToWindowResize();\n    }\n    Data.setData(element, DATA_KEY, this);\n\n    this._bindMdbEvents();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  dispose() {\n    EventHandler.off(this._element, EVENT_SHOW_BS_MODAL);\n    EventHandler.off(this._element, EVENT_SHOWN_BS_MODAL);\n    EventHandler.off(this._element, EVENT_HIDE_BS_MODAL);\n    EventHandler.off(this._element, EVENT_HIDDEN_BS_MODAL);\n    EventHandler.off(this._element, EVENT_HIDE_PREVENTED_BS_MODAL);\n\n    this._modalContentRect = null;\n    this._modalContentComputedStyles = null;\n    this._isNonInvasive = null;\n    this._isScrollable = null;\n    this._isBottomRight = null;\n    this._isBottomLeft = null;\n    this._isTopRight = null;\n    this._isTopLeft = null;\n    this._isSideTopModal = null;\n    this._isSideBottomModal = null;\n    this._isSideModal = null;\n    this._isModalBottom = null;\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n  _onModalShow() {\n    EventHandler.on(this._element, EVENT_SHOW_BS_MODAL, () => {\n      this._addNonInvasiveClass();\n    });\n  }\n\n  _onModalShown() {\n    EventHandler.on(this._element, EVENT_SHOWN_BS_MODAL, () => {\n      const modalContent = SelectorEngine.findOne(SELECTOR_MODAL_CONTENT, this._element);\n\n      this._isScrollable = SelectorEngine.findOne(SELECTOR_MODAL_DIALOG_SCROLLABLE, this._element);\n      this._isBottomRight = SelectorEngine.findOne(SELECTOR_MODAL_BOTTOM_RIGHT, this._element);\n      this._isBottomLeft = SelectorEngine.findOne(SELECTOR_MODAL_BOTTOM_LEFT, this._element);\n      this._isTopRight = SelectorEngine.findOne(SELECTOR_MODAL_TOP_RIGHT, this._element);\n      this._isTopLeft = SelectorEngine.findOne(SELECTOR_MODAL_TOP_LEFT, this._element);\n      this._isSideTopModal = this._isTopLeft || this._isTopRight;\n      this._isSideBottomModal = this._isBottomLeft || this._isBottomRight;\n      this._isSideModal = this._isSideTopModal || this._isSideBottomModal;\n      this._isModalBottom = SelectorEngine.findOne(SELECTOR_MODAL_BOTTOM, this._element);\n      this._modalContentRect = modalContent.getBoundingClientRect();\n      this._modalContentComputedStyles = window.getComputedStyle(modalContent);\n      this._modalDialogComputedStyles = window.getComputedStyle(\n        SelectorEngine.findOne(SELECTOR_MODAL_DIALOG, this._element)\n      );\n      this._topOffset = parseInt(this._modalDialogComputedStyles.top, 0);\n      this._leftOffset = parseInt(this._modalDialogComputedStyles.left, 0);\n      this._rightOffset = parseInt(this._modalDialogComputedStyles.right, 0);\n      this._bottomOffset = parseInt(this._modalDialogComputedStyles.bottom, 0);\n\n      this._addOpenClass();\n      this._setStyles();\n    });\n  }\n\n  _listenToWindowResize() {\n    EventHandler.on(window, 'resize', this._handleWindowResize.bind(this));\n  }\n\n  _handleWindowResize() {\n    const modalContent = SelectorEngine.findOne(SELECTOR_MODAL_CONTENT, this._element);\n    this._resetStyles();\n\n    this._modalContentRect = modalContent.getBoundingClientRect();\n    this._modalContentComputedStyles = window.getComputedStyle(modalContent);\n\n    if (this._isSideTopModal || this._isSideBottomModal) {\n      let sideOffset = 0;\n      let topOffset = 0;\n      if (this._isBottomRight || this._isBottomLeft) {\n        topOffset = -this._bottomOffset;\n      }\n      if (this._isBottomRight || this._isTopRight) {\n        sideOffset = -this._rightOffset;\n      }\n      if (this._isBottomLeft || this._isTopLeft) {\n        sideOffset = this._leftOffset;\n      }\n\n      this._setStyles(sideOffset, topOffset);\n\n      return;\n    }\n    this._setStyles();\n  }\n\n  _showBackdrop(callback) {\n    if (this._isNonInvasive) {\n      if (typeof callback === 'function') {\n        callback();\n      }\n    } else {\n      super._showBackdrop(callback);\n    }\n  }\n\n  _adjustDialog() {\n    super._adjustDialog();\n    const isNonInvasiveModalOpen = document.body.classList.contains(NON_INVASIVE_CLASS);\n\n    if (this._isNonInvasive || isNonInvasiveModalOpen) {\n      this._isBodyOverflowing = false;\n    }\n\n    if (this._isNonInvasive) {\n      this._resetAdjustments();\n      scrollBarReset();\n    }\n  }\n\n  _onModalHidden() {\n    EventHandler.on(this._element, EVENT_HIDDEN_BS_MODAL, (e) => {\n      // Prevent Bootstrap default behavior - focus the button after closing the modal. Users still can use this event\n      e.stopImmediatePropagation();\n      this._removeOpenClass();\n      this._resetStyles();\n      this._removeNonInvasiveClass();\n    });\n  }\n\n  _addOpenClass() {\n    this._element.classList.add(NON_INVASIVE_SHOW_CLASS);\n  }\n\n  _removeOpenClass() {\n    this._element.classList.remove(NON_INVASIVE_SHOW_CLASS);\n  }\n\n  _addNonInvasiveClass() {\n    document.body.classList.add(NON_INVASIVE_CLASS);\n  }\n\n  _removeNonInvasiveClass() {\n    const isOtherModalOpen = SelectorEngine.findOne(\n      `.${MODAL_CLASS}.${SHOW_CLASS}.${NON_INVASIVE_SHOW_CLASS}`,\n      document.body\n    );\n\n    if (!isOtherModalOpen) {\n      document.body.classList.remove(NON_INVASIVE_CLASS);\n    } else {\n      // if other modal open add bootstrap modal open class back\n      document.body.classList.add(MODAL_OPEN_CLASS);\n    }\n  }\n\n  _setStyles(leftOffset = 0, topOffset = 0) {\n    const isAboveBreakpoint = window.innerWidth >= MODAL_CSS_BREAKPOINT;\n    this._element.style.left = `${this._modalContentRect.left + leftOffset}px`;\n    this._element.style.width = this._modalContentComputedStyles.width;\n\n    if (!this._isScrollable) {\n      this._element.style.height = this._modalContentComputedStyles.height;\n      this._element.style.display = '';\n    }\n\n    if (isAboveBreakpoint) {\n      if (this._isSideBottomModal || this._isModalBottom) {\n        this._element.style.top = `${this._modalContentRect.top + topOffset}px`;\n      }\n\n      if (this._isSideModal) {\n        this._element.style.overflowX = 'auto';\n      }\n    }\n\n    if (!isAboveBreakpoint) {\n      this._element.style.height = '';\n    }\n  }\n\n  _resetStyles() {\n    this._element.style.left = '';\n    this._element.style.top = '';\n    this._element.style.height = '';\n    this._element.style.width = '';\n\n    if (!this._isScrollable) {\n      this._element.style.display = '';\n    }\n\n    if (this._isSideModal) {\n      this._element.style.overflowX = '';\n    }\n  }\n\n  _getConfig(options) {\n    let target;\n    if (this._element) {\n      target = getElementFromSelector(this._element);\n    }\n\n    const config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...Manipulator.getDataAttributes(target),\n      ...options,\n    };\n\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n\n  // Private\n  _bindMdbEvents() {\n    EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n  }\n\n  // Static\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = {\n        ...Default,\n        ...Manipulator.getDataAttributes(this),\n        // eslint-disable-next-line no-extra-parens\n        ...(typeof config === 'object' && config ? config : {}),\n      };\n\n      if (!data) {\n        data = new Modal(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      } else if (_config.show) {\n        data.show(relatedTarget);\n      }\n    });\n  }\n}\n\nexport default Modal;\n","import { typeCheckConfig, element } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'clipboard';\nconst DATA_KEY = 'mdb.clipboard';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst DEFAULT_OPTIONS = {\n  clipboardTarget: null,\n};\n\nconst OPTIONS_TYPE = {\n  clipboardTarget: 'null|string',\n};\n\nconst EVENT_COPIED = `copied${EVENT_KEY}`;\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Clipboard extends BaseComponent {\n  constructor(element, options = {}) {\n    super(element);\n\n    this._options = options;\n\n    if (this._element) {\n      this._initCopy = this._initCopy.bind(this);\n\n      this._setup();\n      Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n      bindCallbackEventsIfNeeded(this.constructor);\n    }\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  get options() {\n    const config = {\n      ...DEFAULT_OPTIONS,\n      ...Manipulator.getDataAttributes(this._element),\n      ...this._options,\n    };\n\n    typeCheckConfig(NAME, config, OPTIONS_TYPE);\n\n    return config;\n  }\n\n  get clipboardTarget() {\n    return SelectorEngine.findOne(this.options.clipboardTarget);\n  }\n\n  get copyText() {\n    const clipboardTextExist = this.clipboardTarget.hasAttribute('data-mdb-clipboard-text');\n    const inputValue = this.clipboardTarget.value;\n    const targetText = this.clipboardTarget.textContent;\n\n    if (clipboardTextExist) {\n      return this.clipboardTarget.getAttribute('data-mdb-clipboard-text');\n    }\n\n    if (inputValue) {\n      return inputValue;\n    }\n\n    return targetText;\n  }\n\n  // Public\n\n  dispose() {\n    EventHandler.off(this._element, 'click', this._initCopy);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n  _setup() {\n    EventHandler.on(this._element, 'click', this._initCopy);\n  }\n\n  _initCopy() {\n    const inputToCopy = this._createNewInput();\n    document.body.appendChild(inputToCopy);\n    this._selectInput(inputToCopy);\n    EventHandler.trigger(this._element, EVENT_COPIED, { copyText: this.copyText });\n\n    inputToCopy.remove();\n  }\n\n  _createNewInput() {\n    const tag = this.clipboardTarget.tagName === 'TEXTAREA' ? 'textarea' : 'input';\n    const newInput = element(tag);\n    newInput.value = this.copyText;\n    Manipulator.style(newInput, { left: '-9999px', position: 'absolute' });\n\n    return newInput;\n  }\n\n  _selectInput(input) {\n    input.select();\n    input.focus();\n    input.setSelectionRange(0, 99999);\n\n    document.execCommand('copy');\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data) {\n        data = new Clipboard(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](this);\n      }\n    });\n  }\n}\n\nexport default Clipboard;\n","/* eslint-disable import/prefer-default-export */\nexport const getInputField = ({ inputID, labelText }) => {\n  return `<div class=\"form-outline chips-input-wrapper\">\n      <input type=\"text\" id=\"${inputID}\" class=\"form-control chips-input\" />\n      <label class=\"form-label\" for=\"${inputID}\">\n        ${labelText}\n      </label>\n\n      <div class=\"form-notch\">\n        <div class=\"form-notch-leading\" style=\"width: 9px;\"></div>\n        <div class=\"form-notch-middle\" style=\"width: 87.2px;\"></div>\n        <div class=\"form-notch-trailing\"></div>\n      </div>\n    </div>`;\n};\n\nexport const getChip = ({ text }) => {\n  return `<div class=\"chip btn\"><span class=\"text-chip\">${text}</span> <i class=\"close fas fa-times\"></i></div>`;\n};\n","import { element, typeCheckConfig } from '../../mdb/util/index';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport Data from '../../mdb/dom/data';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport { getChip } from './templates';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\n/**\n *\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'chip';\nconst DATA_KEY = `mdb.${NAME}`;\nconst SELECTOR_CLOSE = '.close';\nconst EVENT_DELETE = 'delete.mdb.chips';\nconst EVENT_SELECT = 'select.mdb.chip';\n\nconst DefaultType = { text: 'string', closeIcon: 'boolean', img: 'object' };\n\nconst Default = { text: '', closeIcon: false, img: { path: '', alt: '' } };\n\nclass Chip extends BaseComponent {\n  constructor(element, data = {}) {\n    super(element, data);\n    this._options = this._getConfig(data);\n\n    if (this._element) {\n      Data.setData(element, DATA_KEY, this);\n    }\n\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n\n  init() {\n    this._appendCloseIcon();\n    this._handleDelete();\n    this._handleTextChip();\n    this._handleClickOnChip();\n  }\n\n  dispose() {\n    EventHandler.off(this._element, 'click');\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  appendChip() {\n    const { text, closeIcon } = this._options;\n    const chip = getChip({ text, closeIcon });\n\n    return chip;\n  }\n\n  // Private\n\n  _appendCloseIcon(el = this._element) {\n    if (SelectorEngine.find(SELECTOR_CLOSE, this._element).length > 0) return;\n\n    if (this._options.closeIcon) {\n      const createIcon = element('i');\n      createIcon.classList = 'close fas fa-times';\n\n      el.insertAdjacentElement('beforeend', createIcon);\n    }\n  }\n\n  _handleClickOnChip() {\n    EventHandler.on(this._element, 'click', (event) => {\n      const { textContent } = event.target;\n      const obj = {};\n\n      obj.tag = textContent.trim();\n\n      EventHandler.trigger(EVENT_SELECT, { event, obj });\n    });\n  }\n\n  _handleDelete() {\n    const deleteElement = SelectorEngine.find(SELECTOR_CLOSE, this._element);\n    if (deleteElement.length === 0) return;\n\n    EventHandler.on(this._element, 'click', SELECTOR_CLOSE, () => {\n      EventHandler.trigger(this._element, EVENT_DELETE);\n      this._element.remove();\n    });\n  }\n\n  _handleTextChip() {\n    if (this._element.innerText !== '') return;\n\n    this._element.innerText = this._options.text;\n  }\n\n  _getConfig(options) {\n    const config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...options,\n    };\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data && /dispose|hide/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new Chip(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n}\n\nexport default Chip;\n","import { typeCheckConfig, element } from '../../mdb/util/index';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport Chip from './chip';\nimport Data from '../../mdb/dom/data';\nimport { getInputField } from './templates';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport {\n  LEFT_ARROW,\n  RIGHT_ARROW,\n  ENTER,\n  BACKSPACE,\n  UP_ARROW,\n  DOWN_ARROW,\n  DELETE,\n} from '../../mdb/util/keycodes';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\n// import FocusTrap from '../../mdb/util/focusTrap';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'chips';\n\nconst DATA_KEY = `mdb.${NAME}`;\n\nconst CLASSNAME_ACTIVE = 'active';\nconst CLASSNAME_CHIPS_INITIAL = `${NAME}-initial`;\nconst CLASSNAME_CHIPS_PLACEHOLDER = `${NAME}-placeholder`;\nconst CLASSNAME_CLOSE_OPACITY = 'close-opacity';\nconst CLASSNAME_CHIP_OPACITY = 'chip-opacity';\nconst CLASSNAME_CHIPS_PADDING = `${NAME}-padding`;\nconst CLASSNAME_CHIPS_TANSITION = `${NAME}-transition`;\nconst CLASSNAME_CHIPS_WRAPPER = `${NAME}-input-wrapper`;\n\nconst SELECTOR_CHIP = '.chip';\nconst SELECTOR_CHIP_ACTIVE = `${SELECTOR_CHIP}.${CLASSNAME_ACTIVE}`;\nconst SELECTOR_CLOSE = '.close';\n\nconst EVENT_ADD = 'add.mdb.chips';\nconst EVENT_ADDED = 'added.mdb.chips';\nconst EVENT_ARROW_DOWN = 'arrowDown.mdb.chips';\nconst EVENT_ARROW_LEFT = 'arrowLeft.mdb.chips';\nconst EVENT_ARROW_RIGHT = 'arrowRight.mdb.chips';\nconst EVENT_ARROW_UP = 'arrowUp.mdb.chips';\nconst EVENT_DELETE = 'delete.mdb.chips';\nconst EVENT_SELECT = 'select.mdb.chips';\n\nconst DefaultType = {\n  inputID: 'string',\n  parentSelector: 'string',\n  initialValues: 'array',\n  editable: 'boolean',\n  labelText: 'string',\n};\n\nconst Default = {\n  inputID: '',\n  parentSelector: '',\n  initialValues: [{ tag: 'init1' }, { tag: 'init2' }],\n  editable: false,\n  labelText: 'Example label',\n};\n\nclass ChipsInput extends Chip {\n  constructor(element, data = {}) {\n    super(element, data);\n    this._options = this._getConfig(data);\n    this.numberClicks = 0;\n\n    this.init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  get activeChip() {\n    return SelectorEngine.findOne(SELECTOR_CHIP_ACTIVE, this._element);\n  }\n\n  get input() {\n    return SelectorEngine.findOne('input', this._element);\n  }\n\n  get allChips() {\n    return SelectorEngine.find(SELECTOR_CHIP, this._element);\n  }\n\n  get chipsInputWrapper() {\n    return SelectorEngine.findOne(`.${CLASSNAME_CHIPS_WRAPPER}`, this._element);\n  }\n\n  // Public\n\n  init() {\n    this._setChipsClass();\n    this._appendInputToElement(CLASSNAME_CHIPS_PLACEHOLDER);\n    this._handleInitialValue();\n    this._handleInputText();\n    this._handleKeyboard();\n    this._handleChipsOnSelect();\n    this._handleEditable();\n    this._handleChipsFocus();\n    this._handleClicksOnChips();\n  }\n\n  dispose() {\n    Manipulator.removeClass(this._element, 'chips');\n    this.allChips.forEach((chip) => {\n      const instance = Chip.getInstance(chip);\n      if (instance) {\n        chip.remove();\n        EventHandler.off(chip, 'dblclick');\n        instance.dispose();\n      }\n    });\n    this.chipsInputWrapper.remove();\n    EventHandler.off(this._element, 'click');\n    EventHandler.off(this._element, 'keyup');\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n\n  _setChipsClass() {\n    Manipulator.addClass(this._element, 'chips');\n  }\n\n  _handleDeleteEvents(event) {\n    const [last] = this.allChips.slice(-1);\n\n    if (this.activeChip === null) {\n      last.remove();\n\n      this._handleEvents(event, EVENT_DELETE);\n    } else {\n      const index = this.allChips.findIndex((chip) => chip === this.activeChip);\n      const activeChipAfter = this._handleActiveChipAfterRemove(index);\n      const arr = [];\n\n      if (this.activeChip === null) return;\n\n      this.activeChip.remove();\n      this._handleEvents(event, EVENT_DELETE);\n\n      this.numberClicks = index;\n\n      Manipulator.addClass(activeChipAfter, CLASSNAME_ACTIVE);\n\n      this.allChips.forEach((chip) => {\n        if (Manipulator.hasClass(chip, CLASSNAME_ACTIVE)) {\n          arr.push(chip);\n\n          if (arr.length > 1) {\n            this.allChips.forEach((chip) => chip.remove());\n          }\n        }\n      });\n    }\n  }\n\n  _handleUpEvents(event) {\n    this.numberClicks += 1;\n\n    if (this.numberClicks === this.allChips.length + 1) this.numberClicks = 0;\n\n    this._handleRightKeyboardArrow(this.numberClicks);\n\n    this._handleEvents(event, EVENT_ARROW_RIGHT);\n    this._handleEvents(event, EVENT_ARROW_UP);\n  }\n\n  _handleDownEvents(event) {\n    this.numberClicks -= 1;\n\n    if (this.numberClicks <= 0) this.numberClicks = this.allChips.length;\n\n    this._handleLeftKeyboardArrow(this.numberClicks);\n\n    this._handleEvents(event, EVENT_ARROW_LEFT);\n    this._handleEvents(event, EVENT_ARROW_DOWN);\n  }\n\n  _keyboardEvents(event) {\n    const { target, keyCode, ctrlKey } = event;\n\n    if (target.value.length > 0 || this.allChips.length === 0) return;\n\n    if (keyCode === BACKSPACE || keyCode === DELETE) {\n      this._handleDeleteEvents(event);\n    } else if (keyCode === RIGHT_ARROW || keyCode === UP_ARROW) {\n      this._handleUpEvents(event);\n    } else if (keyCode === LEFT_ARROW || keyCode === DOWN_ARROW) {\n      this._handleDownEvents(event);\n    } else if (keyCode === 65 && ctrlKey) {\n      this._handleAddActiveClass();\n    }\n  }\n\n  _handleKeyboard() {\n    EventHandler.on(this.input, 'keydown', (event) => this._keyboardEvents(event));\n  }\n\n  _handleEditable() {\n    const { editable } = this._options;\n\n    if (!editable) return;\n\n    this.allChips.forEach((chip) => {\n      EventHandler.on(chip, 'dblclick', (e) => {\n        const close = SelectorEngine.findOne('.close', chip);\n\n        chip.contentEditable = true;\n        chip.focus();\n\n        setTimeout(() => {\n          Manipulator.addStyle(close, { display: 'none' });\n        }, 200);\n        Manipulator.addClass(close, 'close-opacity');\n\n        const obj = {};\n\n        obj.tag = e.target.textContent;\n\n        EventHandler.trigger(chip, EVENT_SELECT, { event: e, allChips: this.allChips });\n      });\n\n      EventHandler.on(document, 'click', ({ target }) => {\n        const close = SelectorEngine.findOne('.close', chip);\n        const chipText = SelectorEngine.findOne('.text-chip', chip);\n\n        const isContainer = target === chip;\n        const isContainerContent = chip && chip.contains(target);\n\n        if (!isContainer && !isContainerContent) {\n          chip.contentEditable = false;\n          if (chipText.textContent !== '') {\n            setTimeout(() => {\n              Manipulator.addStyle(close, { display: 'block' });\n              Manipulator.removeClass(close, 'close-opacity');\n            }, 160);\n          }\n        }\n\n        if (chipText.textContent === '') {\n          setTimeout(() => {\n            Manipulator.addClass(chip, CLASSNAME_CHIP_OPACITY);\n          }, 200);\n\n          setTimeout(() => {\n            chip.remove();\n          }, 300);\n        }\n      });\n    });\n  }\n\n  _handleRemoveActiveClass() {\n    this.allChips.forEach((chip) => Manipulator.removeClass(chip, CLASSNAME_ACTIVE));\n  }\n\n  _handleAddActiveClass() {\n    this.allChips.forEach((chip) => Manipulator.addClass(chip, CLASSNAME_ACTIVE));\n  }\n\n  _handleRightKeyboardArrow(num) {\n    this._handleRemoveActiveClass();\n\n    if (num === 0) num = 1;\n\n    this._handleAddActiveClassWithKeyboard(num);\n  }\n\n  _handleLeftKeyboardArrow(num) {\n    this._handleRemoveActiveClass();\n    this._handleAddActiveClassWithKeyboard(num);\n  }\n\n  _handleActiveChipAfterRemove(index) {\n    const chipIndex = index === 0 ? 1 : index - 1;\n\n    return this.allChips[chipIndex];\n  }\n\n  _handleClicksOnChips() {\n    EventHandler.on(this._element, 'click', () => {\n      if (this.allChips.length === 0) {\n        Manipulator.removeClass(this.chipsInputWrapper, CLASSNAME_CHIPS_PADDING);\n        Manipulator.removeClass(this.input, CLASSNAME_ACTIVE);\n      }\n    });\n  }\n\n  _handleTextContent() {\n    const arr = [];\n\n    this.allChips.forEach((chip) => arr.push({ tag: chip.textContent.trim() }));\n\n    return arr;\n  }\n\n  _handleEvents(event, eventName) {\n    const arr = this._handleTextContent();\n\n    const filterActive = this.allChips.filter(\n      (chip) => Manipulator.hasClass(chip, CLASSNAME_ACTIVE) && chip\n    );\n\n    EventHandler.trigger(this._element, eventName, {\n      event,\n      allChips: this.allChips,\n      arrOfObjects: arr,\n      active: filterActive,\n      activeObj: {\n        tag: filterActive.length <= 0 ? '' : filterActive[0].textContent.trim(),\n      },\n    });\n  }\n\n  _handleChipsFocus() {\n    EventHandler.on(this._element, 'click', ({ target: { classList } }) => {\n      if (\n        classList.contains('chip') ||\n        classList.contains('close') ||\n        classList.contains('text-chip')\n      ) {\n        return;\n      }\n\n      this.input.focus();\n    });\n  }\n\n  _handleInitialValue() {\n    this._appendInputToElement(CLASSNAME_CHIPS_INITIAL);\n\n    if (Manipulator.hasClass(this._element, CLASSNAME_CHIPS_INITIAL)) {\n      const { initialValues } = this._options;\n\n      initialValues.forEach(({ tag }) => this._handleCreateChip(this.input, tag));\n\n      Manipulator.addClass(this.input, CLASSNAME_ACTIVE);\n    }\n\n    if (this.allChips.length > 0) {\n      Manipulator.addClass(this.chipsInputWrapper, CLASSNAME_CHIPS_PADDING);\n      Manipulator.addClass(this.chipsInputWrapper, CLASSNAME_CHIPS_TANSITION);\n    }\n  }\n\n  _handleKeysInputToElement(event) {\n    const { keyCode, target } = event;\n\n    if (Manipulator.hasClass(target, 'chip')) {\n      const close = SelectorEngine.findOne(SELECTOR_CLOSE, target);\n\n      if (keyCode === ENTER) {\n        target.contentEditable = false;\n\n        if (target.textContent !== '') {\n          setTimeout(() => {\n            Manipulator.addStyle(close, { display: 'block' });\n            Manipulator.removeClass(close, CLASSNAME_CLOSE_OPACITY);\n          }, 160);\n        } else if (target.textContent === '') {\n          setTimeout(() => {\n            Manipulator.addClass(target, CLASSNAME_CHIP_OPACITY);\n          }, 200);\n\n          setTimeout(() => {\n            target.remove();\n          }, 300);\n        }\n      }\n\n      return;\n    }\n\n    if (keyCode === ENTER) {\n      if (target.value === '') return;\n\n      this._handleCreateChip(target, target.value);\n\n      this._handleRemoveActiveClass();\n      this.numberClicks = this.allChips.length + 1;\n    }\n\n    if (this.allChips.length > 0) {\n      Manipulator.addClass(this.chipsInputWrapper, CLASSNAME_CHIPS_PADDING);\n      Manipulator.addClass(this.chipsInputWrapper, CLASSNAME_CHIPS_TANSITION);\n    } else {\n      Manipulator.removeClass(this.chipsInputWrapper, CLASSNAME_CHIPS_PADDING);\n    }\n  }\n\n  _handleBlurInput(event) {\n    const { target } = event;\n    if (target.value.length > 0) {\n      this._handleCreateChip(target, target.value);\n    }\n\n    if (this.allChips.length > 0) {\n      Manipulator.addClass(target, CLASSNAME_ACTIVE);\n      Manipulator.addClass(this.chipsInputWrapper, CLASSNAME_CHIPS_PADDING);\n    } else {\n      Manipulator.removeClass(target, CLASSNAME_ACTIVE);\n      Manipulator.removeClass(this.chipsInputWrapper, CLASSNAME_CHIPS_PADDING);\n    }\n\n    this.allChips.forEach((chip) => Manipulator.removeClass(chip, CLASSNAME_ACTIVE));\n  }\n\n  _handleInputText() {\n    const placeholder = SelectorEngine.findOne(CLASSNAME_CHIPS_PLACEHOLDER, this._element);\n\n    EventHandler.on(this._element, 'keyup', placeholder, (e) => this._handleKeysInputToElement(e));\n    EventHandler.on(this.input, 'blur', (e) => this._handleBlurInput(e));\n  }\n\n  _appendInputToElement(selector) {\n    if (!Manipulator.hasClass(this._element, selector)) return;\n\n    const inputField = getInputField(this._options);\n\n    this._element.insertAdjacentHTML('beforeend', inputField);\n  }\n\n  _handleCreateChip(target, value) {\n    const addEvent = EventHandler.trigger(this._element, EVENT_ADD, { value });\n\n    if (addEvent.defaultPrevented) {\n      return;\n    }\n\n    const divElement = element('div');\n    const divWithChips = new Chip(divElement, { text: value });\n\n    let chipsContainer;\n\n    if (this._options.parentSelector !== '') {\n      const parent = document.querySelector(this._options.parentSelector);\n      parent.insertAdjacentHTML('beforeend', divWithChips.appendChip());\n      chipsContainer = parent;\n    } else {\n      target.insertAdjacentHTML('beforebegin', divWithChips.appendChip());\n      chipsContainer = target.parentNode;\n    }\n\n    target.value = '';\n\n    SelectorEngine.find(SELECTOR_CHIP, chipsContainer).forEach((chip) => {\n      let instance = Chip.getInstance(chip);\n      if (!instance) {\n        instance = new Chip(chip);\n        instance.init();\n      }\n    });\n\n    this._handleEditable();\n\n    EventHandler.trigger(this._element, EVENT_ADDED, { value });\n  }\n\n  _handleChipsOnSelect() {\n    this.allChips.forEach((chip) => {\n      EventHandler.on(this._element, 'click', (e) => {\n        EventHandler.trigger(chip, EVENT_SELECT, { event: e, allChips: this.allChips });\n      });\n    });\n  }\n\n  _handleAddActiveClassWithKeyboard(num) {\n    let chip;\n\n    if (this.allChips[num - 1] === undefined) {\n      chip = this.allChips[num - 2];\n    } else {\n      chip = this.allChips[num - 1];\n    }\n\n    Manipulator.addClass(chip, CLASSNAME_ACTIVE);\n  }\n\n  _getConfig(options) {\n    const config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...options,\n    };\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data && /dispose|hide/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new ChipsInput(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n}\n\nexport default ChipsInput;\n","/* eslint-disable import/prefer-default-export */\n\nconst getConnectsTemplate = () => {\n  return `<div class=\"multi-range-slider-connects\">\n<div class=\"multi-range-slider-connect\"></div>\n</div>`;\n};\n\nconst getHandleTemplate = () => {\n  return `<div class=\"multi-range-slider-hand\">\n  <div class=\"multi-range-slider-handle\"></div>\n</div>`;\n};\n\nconst getTooltipTemplate = (value) => {\n  return `\n  <span class=\"multi-range-slider-tooltip\">\n    <span class=\"multi-range-slider-tooltip-value\">${value}</span>\n  </span>\n  `;\n};\n\nexport { getConnectsTemplate, getHandleTemplate, getTooltipTemplate };\n","// eslint-disable-next-line import/prefer-default-export\nexport const getEventTypeClientX = (ev) => {\n  const event = ev.type === 'touchmove' ? ev.touches[0].clientX : ev.clientX;\n\n  return event;\n};\n","import { typeCheckConfig } from '../../mdb/util/index';\nimport EventHandler, { EventHandlerMulti } from '../../mdb/dom/event-handler';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport Data from '../../mdb/dom/data';\nimport { getConnectsTemplate, getHandleTemplate, getTooltipTemplate } from './template';\nimport { getEventTypeClientX } from './utils';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'multiRangeSlider';\nconst DATA_KEY = `mdb.${NAME}`;\nconst SELECTOR_MULTI = 'multi-range-slider';\n\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_VALUE_CHANGED = `valueChanged${EVENT_KEY}`;\nconst EVENT_START = `start${EVENT_KEY}`;\n\nconst CLASSNAME_HAND = '.multi-range-slider-hand';\nconst CLASSNAME_CONNECT = '.multi-range-slider-connect';\nconst CLASSNAME_TOOLTIP = '.multi-range-slider-tooltip';\n\nconst SELECTOR_ACTIVE = 'active';\nconst SELECTOR_HORIZONTAL = 'multi-range-slider-horizontal';\nconst SELECTOR_VERTICAL = 'multi-range-slider-vertical';\n\nconst DefaultType = {\n  direction: 'string',\n  margin: '(string||number||null)',\n  max: 'number',\n  min: 'number',\n  numberOfRanges: 'number',\n  orientation: 'string',\n  padding: '(string||number||null)',\n  startValues: 'array',\n  step: '(string||null||number)',\n  tooltips: 'boolean',\n};\n\nconst Default = {\n  direction: '',\n  margin: null,\n  max: 100,\n  min: 0,\n  numberOfRanges: 2,\n  orientation: 'horizontal',\n  padding: null,\n  startValues: [0, 100],\n  step: null,\n  tooltips: false,\n};\n\nclass MultiRangeSlider extends BaseComponent {\n  constructor(element, data = {}) {\n    super(element);\n    this._options = this._getConfig(data);\n    this._mousemove = false;\n\n    this.init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  get hands() {\n    return SelectorEngine.find(CLASSNAME_HAND, this._element);\n  }\n\n  get connect() {\n    return SelectorEngine.findOne(CLASSNAME_CONNECT, this._element);\n  }\n\n  get leftConnectRect() {\n    return this.connect.getBoundingClientRect().left;\n  }\n\n  get handsNoActive() {\n    return this.hands.filter((hand) => !Manipulator.hasClass(hand, 'active'));\n  }\n\n  get handActive() {\n    return SelectorEngine.findOne(`${CLASSNAME_HAND}.active`);\n  }\n\n  get activeTooltip() {\n    return SelectorEngine.findOne(CLASSNAME_TOOLTIP);\n  }\n\n  get activeTooltipValue() {\n    const handTooltip = SelectorEngine.findOne(`${CLASSNAME_HAND}.active`);\n\n    // fast fix to correct in future\n    const tooltip = handTooltip.children[1].children[0];\n    return tooltip;\n  }\n\n  // Public\n\n  init() {\n    this._setClassHorizontalOrVertical();\n    this._setRangeConnectsElement();\n    this._setRangeHandleElements();\n    this._setTransofrmationOnStart();\n    this._handleClickEventOnHand();\n    this._handleEndMoveEventDocument();\n    this._handleClickOnRange();\n    this._setValueEventOnMouseDown();\n    this._setTooltipToHand();\n  }\n\n  dispose() {\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n\n  _setTransofrmationOnStart() {\n    const { startValues, max, min } = this._options;\n\n    if (startValues.length === 0) {\n      this.hands.forEach((hand) => {\n        const translation = -hand.offsetWidth;\n\n        Manipulator.setDataAttribute(hand, 'translation', Math.round(translation));\n\n        Manipulator.addStyle(hand, {\n          transform: `translate(${translation}px,-25%)`,\n        });\n      });\n    } else {\n      this.hands.forEach((hand, i) => {\n        if (startValues[i] > max || startValues[i] < min) return;\n        const normalizedValue = (startValues[i] - min) / (max - min);\n        const translation = normalizedValue * this.connect.offsetWidth - hand.offsetWidth / 2;\n\n        Manipulator.setDataAttribute(hand, 'translation', Math.round(translation));\n\n        Manipulator.addStyle(hand, {\n          transform: `translate(${translation}px,-25%)`,\n        });\n      });\n    }\n  }\n\n  _handleClickEventOnHand() {\n    const { max, min } = this._options;\n    this.hands.forEach((hand, index) => {\n      EventHandlerMulti.on(hand, 'mousedown touchstart', (ev) => {\n        this._mousemove = true;\n        const translation = getEventTypeClientX(ev) - this.leftConnectRect - hand.offsetWidth / 2;\n\n        const value =\n          ((getEventTypeClientX(ev) - this.leftConnectRect) /\n            (this.connect.offsetWidth / (max - min))) %\n          (max - min);\n\n        Manipulator.addStyle(hand, {\n          transform: `translate(${translation}px,-25%)`,\n        });\n\n        Manipulator.setDataAttribute(hand, 'translation', translation);\n\n        Manipulator.addClass(hand, SELECTOR_ACTIVE);\n\n        if (this._options.tooltip) {\n          Manipulator.addClass(hand.children[1], 'active');\n          this.activeTooltipValue.innerText = Math.round(value);\n        }\n\n        this._handleMoveEvent(hand, index);\n        this._handleEndMoveEvent(hand, ev);\n      });\n    });\n  }\n\n  _setValueEventOnMouseDown() {\n    EventHandlerMulti.on(this.connect, 'mousedown touchstart', (ev) => {\n      const { max, min, numberOfRanges } = this._options;\n\n      if (numberOfRanges < 2) {\n        const value =\n          Math.round(\n            (getEventTypeClientX(ev) - this.leftConnectRect) / (ev.target.offsetWidth / (max - min))\n          ) %\n          (max - min);\n\n        EventHandler.trigger(this._element, EVENT_START, {\n          values: { value: value + min, rounded: Math.round(value + min) },\n        });\n      }\n    });\n  }\n\n  _setClassHorizontalOrVertical() {\n    if (this._element) {\n      Manipulator.addClass(this._element, SELECTOR_MULTI);\n    }\n\n    if (this._options.orientation === 'horizontal') {\n      Manipulator.addClass(this._element, SELECTOR_HORIZONTAL);\n    } else {\n      Manipulator.addClass(this._element, SELECTOR_VERTICAL);\n    }\n  }\n\n  _setRangeConnectsElement() {\n    this._element.insertAdjacentHTML('afterbegin', getConnectsTemplate());\n  }\n\n  _setRangeHandleElements() {\n    for (let i = 0; i < this._options.numberOfRanges; i++) {\n      this._element.insertAdjacentHTML('beforeend', getHandleTemplate());\n    }\n\n    this.hands.forEach((hand, i) => {\n      hand.setAttribute('aria-orientation', this._options.orientation);\n      hand.setAttribute('role', 'slider');\n\n      Manipulator.setDataAttribute(hand, 'handle', i);\n    });\n  }\n\n  _setTooltipToHand() {\n    if (this._options.tooltip) {\n      this.hands.forEach((hand) => {\n        return hand.insertAdjacentHTML('beforeend', getTooltipTemplate());\n      });\n    }\n  }\n\n  _handleMoveEvent(hand) {\n    const { tooltip, step } = this._options;\n\n    EventHandlerMulti.on(document, 'mousemove touchmove', (ev) => {\n      if (ev.type === 'mousemove') ev.preventDefault();\n\n      const { max, min, numberOfRanges } = this._options;\n\n      if (Manipulator.hasClass(hand, SELECTOR_ACTIVE)) {\n        const maxValue =\n          ((getEventTypeClientX(ev) - this.leftConnectRect) / this.connect.offsetWidth) * max;\n        let value =\n          (((getEventTypeClientX(ev) - this.leftConnectRect) /\n            (this.connect.offsetWidth / (max - min))) %\n            (max - min)) +\n          min;\n\n        let translation = getEventTypeClientX(ev) - this.leftConnectRect - hand.offsetWidth / 2;\n\n        const handActiveHandle = Manipulator.getDataAttribute(this.handActive, 'handle');\n        const handActiveTranslation = Manipulator.getDataAttribute(this.handActive, 'translation');\n        if (value < min) {\n          translation = min - hand.offsetWidth / 2;\n          value = min;\n        } else if (maxValue >= max) {\n          return;\n        }\n\n        const handleDataHandle = this.handsNoActive.map((hand) =>\n          Manipulator.getDataAttribute(hand, 'handle')\n        );\n        const handleDataTranslate = this.handsNoActive.map((hand) =>\n          Manipulator.getDataAttribute(hand, 'translation')\n        );\n\n        if (handActiveHandle < handleDataHandle && handActiveTranslation <= handleDataTranslate) {\n          if (Math.round(value) % step === 0 && step !== null) {\n            Manipulator.addStyle(hand, {\n              transform: `translate(${translation}px,-25%)`,\n            });\n\n            if (tooltip) this.activeTooltipValue.innerText = Math.round(value);\n          } else if (step === null) {\n            Manipulator.addStyle(hand, {\n              transform: `translate(${translation}px,-25%)`,\n            });\n\n            if (tooltip) this.activeTooltipValue.innerText = Math.round(value);\n          }\n        } else if (\n          handActiveHandle > handleDataHandle &&\n          handActiveTranslation >= handleDataTranslate\n        ) {\n          if (Math.round(value) % step === 0 && step !== null) {\n            Manipulator.addStyle(hand, {\n              transform: `translate(${translation}px,-25%)`,\n            });\n\n            if (tooltip) this.activeTooltipValue.innerText = Math.round(value);\n          } else if (step === null) {\n            Manipulator.addStyle(hand, {\n              transform: `translate(${translation}px,-25%)`,\n            });\n\n            if (tooltip) this.activeTooltipValue.innerText = Math.round(value);\n          }\n        }\n\n        if (numberOfRanges < 2) {\n          if (Math.round(value) % step === 0 && step !== null) {\n            Manipulator.addStyle(hand, {\n              transform: `translate(${translation}px,-25%)`,\n            });\n\n            if (tooltip) this.activeTooltipValue.innerText = Math.round(value);\n          } else if (step === null) {\n            Manipulator.addStyle(hand, {\n              transform: `translate(${translation}px,-25%)`,\n            });\n\n            if (tooltip) this.activeTooltipValue.innerText = Math.round(value);\n          }\n        }\n\n        Manipulator.setDataAttribute(hand, 'translation', translation);\n\n        if (numberOfRanges < 2) {\n          EventHandler.trigger(this._element, EVENT_VALUE_CHANGED, {\n            values: { value: value + min, rounded: Math.round(value + min) },\n          });\n        } else {\n          this._handleMultiValuesOnRange();\n        }\n      }\n    });\n  }\n\n  _handleMultiValuesOnRange() {\n    const { max, min } = this._options;\n    const arr = [];\n\n    this.hands.forEach((hand) => {\n      const translation =\n        hand.getBoundingClientRect().left - this.leftConnectRect + hand.offsetWidth / 2;\n\n      let value = (translation / (this.connect.offsetWidth / (max - min))) % (max - min);\n\n      if (translation === this.connect.offsetWidth) {\n        value = max;\n      } else {\n        value += min;\n      }\n\n      Manipulator.setDataAttribute(hand, 'value', Math.round(value * 10) / 10);\n\n      arr.push({ value });\n    });\n\n    EventHandler.trigger(this._element, EVENT_VALUE_CHANGED, {\n      values: {\n        value: arr.map(({ value }) => value),\n        rounded: arr.map(({ value }) => Math.round(value)),\n      },\n    });\n  }\n\n  _handleEndMoveEventDocument() {\n    EventHandlerMulti.on(document, 'mouseup touchend', () => {\n      if (this._mousemove) {\n        this.hands.forEach((hand) => {\n          EventHandler.off(hand, 'mousemove');\n          Manipulator.removeClass(hand, SELECTOR_ACTIVE);\n\n          if (this._options.tooltip) Manipulator.removeClass(hand.children[1], 'active');\n        });\n\n        this._mousemove = false;\n      }\n    });\n  }\n\n  _handleEndMoveEvent(hand) {\n    EventHandlerMulti.on(hand, 'mouseup touchend', () => {\n      EventHandler.off(hand, 'mousemove');\n      Manipulator.removeClass(hand, SELECTOR_ACTIVE);\n\n      if (this._options.tooltip) Manipulator.removeClass(hand.children[1], 'active');\n\n      this._mousemove = false;\n    });\n  }\n\n  _handleClickOnRange() {\n    EventHandlerMulti.on(this.connect, 'mousedown touchstart', (ev) => {\n      this.hands.forEach((hand) => {\n        Manipulator.addClass(hand, SELECTOR_ACTIVE);\n        this._mousemove = true;\n        if (this._options.numberOfRanges < 2) {\n          Manipulator.addStyle(hand, {\n            transform: `translate(${\n              getEventTypeClientX(ev) - this.leftConnectRect - hand.offsetWidth / 2\n            }px,-25%)`,\n          });\n        } else {\n          Manipulator.addStyle(this.hands[0], {\n            transform: `translate(${\n              getEventTypeClientX(ev) - this.leftConnectRect - hand.offsetWidth / 2\n            }px,-25%)`,\n          });\n        }\n      });\n    });\n  }\n\n  _handlePadding() {\n    EventHandlerMulti.on(this.connect, 'mousedown touchstart', (ev) => {\n      const { padding, numberOfRanges } = this._options;\n      let value;\n      if (numberOfRanges < 2) {\n        value =\n          Math.round(\n            (getEventTypeClientX(ev) - this.leftConnectRect) / (ev.target.offsetWidth / padding)\n          ) % padding;\n      }\n\n      return value;\n    });\n  }\n\n  _setMovingTooltipEvent() {\n    EventHandlerMulti.on(this.connect, 'mousemove', (ev) => {\n      const value = (getEventTypeClientX(ev) - this.leftConnectRect) / ev.target.offsetWidth;\n      const percent = `${Math.round(value * 100)}%`;\n      EventHandler.trigger(this._element, 'movetooltip', {\n        percents: { value, percent },\n      });\n    });\n  }\n\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data && /dispose|hide/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new MultiRangeSlider(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](options);\n      }\n    });\n  }\n\n  _getConfig(options) {\n    const config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...options,\n    };\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n}\n\nexport default MultiRangeSlider;\n","import { createDate } from '../datepicker/date-utils';\n\nconst isValidTime = (time) => {\n  const AmPmReg = /^(0?[1-9]|1[012])(:[0-5]\\d) [APap][mM]$/;\n  const timeReg = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$/;\n  return time.match(AmPmReg) || time.match(timeReg);\n};\n\nconst isValidDate = (date) => {\n  // eslint-disable-next-line no-restricted-globals\n  return date && Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date);\n};\n\nconst getMonth = (date) => {\n  return date.getMonth();\n};\n\nconst getYear = (date) => {\n  return date.getFullYear();\n};\n\nconst getDelimeters = (format) => {\n  return format.match(/[^(dmy)]{1,}/g);\n};\n\nconst parseDate = (dateString, format, delimeters, options) => {\n  let delimeterPattern;\n\n  if (delimeters[0] !== delimeters[1]) {\n    delimeterPattern = delimeters[0] + delimeters[1];\n  } else {\n    delimeterPattern = delimeters[0];\n  }\n\n  const regExp = new RegExp(`[${delimeterPattern}]`);\n  const dateParts = dateString.split(regExp);\n  const formatParts = format.split(regExp);\n  const isMonthString = format.indexOf('mmm') !== -1;\n\n  const datesArray = [];\n\n  for (let i = 0; i < formatParts.length; i++) {\n    if (formatParts[i].indexOf('yy') !== -1) {\n      datesArray[0] = { value: dateParts[i], format: formatParts[i] };\n    }\n    if (formatParts[i].indexOf('m') !== -1) {\n      datesArray[1] = { value: dateParts[i], format: formatParts[i] };\n    }\n    if (formatParts[i].indexOf('d') !== -1 && formatParts[i].length <= 2) {\n      datesArray[2] = { value: dateParts[i], format: formatParts[i] };\n    }\n  }\n\n  let monthsNames;\n\n  if (format.indexOf('mmmm') !== -1) {\n    monthsNames = options.monthsFull;\n  } else {\n    monthsNames = options.monthsShort;\n  }\n\n  const year = Number(datesArray[0].value);\n  const month = isMonthString\n    ? getMonthNumberByMonthName(datesArray[1].value, monthsNames)\n    : Number(datesArray[1].value) - 1;\n  const day = Number(datesArray[2].value);\n\n  const parsedDate = createDate(year, month, day);\n  return parsedDate;\n};\n\nconst getMonthNumberByMonthName = (monthValue, monthLabels) => {\n  return monthLabels.findIndex((monthLabel) => monthLabel === monthValue);\n};\n\nexport {\n  getDelimeters,\n  parseDate,\n  getMonth,\n  getYear,\n  getMonthNumberByMonthName,\n  isValidDate,\n  isValidTime,\n};\n","export const ICON_BUTTONS = `\n  <button type=\"button\" class=\"datepicker-button-toggle\"  data-mdb-toggle=\"datepicker\">\n    <i class=\"far fa-calendar datepicker-toggle-icon\"></i>\n  </button>\n  <button type=\"button\" class=\"timepicker-button-toggle\" data-mdb-toggle=\"timepicker\">\n    <i class=\"far fa-clock fa-sm timepicker-icon\"></i>\n  </button>\n`;\n\nexport const TOGGLE_BUTTON = `\n  <button type=\"button\" class=\"datetimepicker-toggle-button\" data-mdb-toggle=\"datetimepicker\">\n    <i class=\"far fa-calendar datepicker-toggle-icon\"></i>\n  </button>\n`;\n","import { element, getUID, typeCheckConfig } from '../../mdb/util/index';\nimport { getDelimeters, parseDate, getMonth, getYear, isValidDate, isValidTime } from './utils';\nimport { ICON_BUTTONS, TOGGLE_BUTTON } from './templates';\nimport ScrollBarHelper from '../../bootstrap/mdb-prefix/util/scrollbar';\nimport Data from '../../mdb/dom/data';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport Datepicker from '../datepicker/index';\nimport Timepicker from '../timepicker';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\nconst NAME = 'datetimepicker';\nconst DATA_KEY = `mdb.${NAME}`;\n\nconst CLASSNAME_DATEPICKER = 'datepicker';\nconst CLASSNAME_TIMEPICKER = 'timepicker';\nconst CLASSNAME_TOGGLE_BUTTON = `${NAME}-toggle-button`;\nconst CLASSNAME_INVALID_FEEDBACK = 'invalid-feedback';\nconst CLASSNAME_IS_INVALID = 'is-invalid';\n\nconst SELECTOR_TIMEPICKER = `.${CLASSNAME_TIMEPICKER}`;\nconst SELECTOR_DATEPICKER = `.${CLASSNAME_DATEPICKER}`;\nconst SELECTOR_DATA_TOGGLE = `[data-mdb-toggle=\"${NAME}\"]`;\nconst SELECTOR_TOGGLE_BUTTON = `.${CLASSNAME_TOGGLE_BUTTON}`;\nconst SELECTOR_INVALID_FEEDBACK = `.${CLASSNAME_INVALID_FEEDBACK}`;\n\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_OPEN = `open${EVENT_KEY}`;\nconst EVENT_CLOSE = `close${EVENT_KEY}`;\nconst EVENT_VALUE_CHANGED = `valueChanged${EVENT_KEY}`;\n\nconst EVENT_CLOSE_DATEPICKER = 'close.mdb.datepicker';\nconst EVENT_VALUE_CHANGED_TIMEPICKER = 'valueChanged.mdb.timepicker';\n\nconst BUTTONS_WRAPPER = element('div');\n\nconst Default = {\n  appendValidationInfo: true,\n  inline: false,\n  toggleButton: true,\n  container: 'body',\n  disabled: false,\n  disablePast: false,\n  disableFuture: false,\n  defaultTime: '',\n  defaultDate: '',\n  timepicker: {},\n  datepicker: {},\n  invalidLabel: 'Invalid Date or Time Format',\n  showFormat: false,\n};\n\nconst DefaultType = {\n  appendValidationInfo: 'boolean',\n  inline: 'boolean',\n  toggleButton: 'boolean',\n  container: 'string',\n  disabled: 'boolean',\n  disablePast: 'boolean',\n  disableFuture: 'boolean',\n  defaultTime: '(string|date|number)',\n  defaultDate: '(string|date|number)',\n  timepicker: 'object',\n  datepicker: 'object',\n  invalidLabel: 'string',\n  showFormat: 'boolean',\n};\n\nclass Datetimepicker extends BaseComponent {\n  constructor(element, options) {\n    super(element);\n\n    this._input = SelectorEngine.findOne('input', this._element);\n    this._options = this._getConfig(options);\n    this._timepicker = null;\n    this._datepicker = null;\n    this._dateValue = this._options.defaultDate ? this._options.defaultDate : '';\n    this._timeValue = this._options.defaultTime ? this._options.defaultTime : '';\n    this._isInvalidTimeFormat = false;\n    this._validationInfo = null;\n    this._format = this._options.datepicker.format ? this._options.datepicker.format : 'dd/mm/yyyy';\n    this._cancel = false;\n\n    this._scrollBar = new ScrollBarHelper();\n\n    this._init();\n    Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n    bindCallbackEventsIfNeeded(this.constructor);\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME;\n  }\n\n  get toggleButton() {\n    return SelectorEngine.findOne(SELECTOR_TOGGLE_BUTTON, this._element);\n  }\n\n  dispose() {\n    EventHandler.off(this._element, 'click', this._openDatePicker);\n    EventHandler.off(this._input, 'input', this._handleInput);\n    EventHandler.off(this._element, 'click');\n\n    this._removeTimePicker();\n    this._removeDatepicker();\n    const toggleButton = this.toggleButton;\n    if (toggleButton) {\n      this.toggleButton.remove();\n    }\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  update(options = {}) {\n    const tempOptions = this._getConfig({ ...this._options, ...options });\n\n    EventHandler.off(this._element, 'click', this._openDatePicker);\n    EventHandler.off(this._input, 'input', this._handleInput);\n    EventHandler.off(this._element, 'click');\n\n    this._removeTimePicker();\n    this._removeDatepicker();\n    const toggleButton = this.toggleButton;\n    if (toggleButton) {\n      this.toggleButton.remove();\n    }\n\n    this._options = Default;\n    this._timepicker = null;\n    this._datepicker = null;\n    this._dateValue = null;\n    this._timeValue = null;\n    this._isInvalidTimeFormat = null;\n    this._validationInfo = null;\n\n    this._options = tempOptions;\n\n    this._init();\n  }\n\n  // Private\n\n  _init() {\n    this._addDatepicker();\n    this._addTimePicker();\n    this._appendToggleButton();\n    this._listenToToggleClick();\n    this._listenToUserInput();\n    this._disableInput();\n    this._setInitialDefaultInput();\n    this._appendValidationInfo();\n    this._applyFormatPlaceholder();\n\n    if (this._options.disablePast) {\n      this._handleTimepickerDisablePast();\n    }\n    if (this._options.disableFuture) {\n      this._handleTimepickerDisableFuture();\n    }\n  }\n\n  _removeDatepicker() {\n    const datepicker = this._element.querySelector('.datepicker');\n    if (datepicker) {\n      datepicker.remove();\n    }\n  }\n\n  _addDatepicker() {\n    const DATEPICKER_WRAPPER = element('div');\n    DATEPICKER_WRAPPER.id = this._element.id\n      ? `datepicker-${this._element.id}`\n      : getUID('datepicker-');\n\n    const DATEPICKER_INPUT = '<input type=\"text\" class=\"form-control\">';\n    DATEPICKER_WRAPPER.innerHTML = DATEPICKER_INPUT;\n\n    Manipulator.addClass(DATEPICKER_WRAPPER, CLASSNAME_DATEPICKER);\n    this._element.appendChild(DATEPICKER_WRAPPER);\n    Manipulator.style(DATEPICKER_WRAPPER, { display: 'none' });\n\n    let datepickerOptions = {\n      ...this._options.datepicker,\n      ...{\n        container: this._options.container,\n        disablePast: this._options.disablePast,\n        disableFuture: this._options.disableFuture,\n      },\n    };\n\n    if (this._options.inline || this._options.datepicker.inline) {\n      datepickerOptions = { ...datepickerOptions, ...{ inline: true } };\n    }\n    this._datepicker = new Datepicker(DATEPICKER_WRAPPER, datepickerOptions);\n    this._datepicker._input.value = this._dateValue;\n  }\n\n  _removeTimePicker() {\n    const timepicker = this._element.querySelector('.timepicker');\n    if (timepicker) {\n      timepicker.remove();\n      this._scrollBar.reset();\n    }\n  }\n\n  _addTimePicker() {\n    const TIMEPICKER_WRAPPER = element('div');\n    TIMEPICKER_WRAPPER.id = this._element.id\n      ? `timepicker-${this._element.id}`\n      : getUID('timepicker-');\n\n    const TIMEPICKER_INPUT = '<input type=\"text\" class=\"form-control\">';\n    TIMEPICKER_WRAPPER.innerHTML = TIMEPICKER_INPUT;\n\n    Manipulator.addClass(TIMEPICKER_WRAPPER, CLASSNAME_TIMEPICKER);\n    this._element.appendChild(TIMEPICKER_WRAPPER);\n    Manipulator.style(TIMEPICKER_WRAPPER, { display: 'none' });\n\n    let timepickerOptions = {\n      ...this._options.timepicker,\n      ...{ container: this._options.container },\n    };\n\n    if (this._options.inline || this._options.timepicker.inline) {\n      timepickerOptions = { timepickerOptions, ...{ inline: true } };\n    }\n\n    this._timepicker = new Timepicker(TIMEPICKER_WRAPPER, timepickerOptions);\n    this._timepicker.input.value = this._timeValue;\n  }\n\n  _addIconButtons() {\n    Manipulator.addClass(BUTTONS_WRAPPER, 'buttons-container');\n    BUTTONS_WRAPPER.innerHTML = ICON_BUTTONS;\n\n    if (this._options.inline || this._options.datepicker.inline) {\n      return;\n    }\n\n    this._scrollBar.hide();\n\n    if (this._datepicker._isOpen) {\n      const headerDate = SelectorEngine.findOne(`${SELECTOR_DATEPICKER}-header`, document.body);\n      headerDate.appendChild(BUTTONS_WRAPPER);\n    } else if (this._timepicker._modal && !this._options.timepicker.inline) {\n      const header = SelectorEngine.findOne(`${SELECTOR_TIMEPICKER}-elements`, document.body);\n      const headerTime = SelectorEngine.findOne(\n        `${SELECTOR_TIMEPICKER}-clock-wrapper`,\n        document.body\n      );\n      header.insertBefore(BUTTONS_WRAPPER, headerTime);\n    }\n  }\n\n  _enableOrDisableToggleButton() {\n    if (this._options.disabled) {\n      this.toggleButton.disabled = true;\n      this.toggleButton.style.pointerEvents = 'none';\n    } else {\n      this.toggleButton.disabled = false;\n      this.toggleButton.style.pointerEvents = 'pointer';\n    }\n  }\n\n  _appendToggleButton() {\n    if (!this._options.toggleButton) {\n      return;\n    }\n    this._element.insertAdjacentHTML('beforeend', TOGGLE_BUTTON);\n\n    this._enableOrDisableToggleButton();\n  }\n\n  _appendValidationInfo() {\n    const { invalidLabel, appendValidationInfo } = this._options;\n\n    if (appendValidationInfo) {\n      this._validationInfo = element('div');\n      Manipulator.addClass(this._validationInfo, CLASSNAME_INVALID_FEEDBACK);\n      this._validationInfo.innerHTML = invalidLabel;\n\n      Manipulator.addStyle(this._input, { marginBottom: 0 });\n      Manipulator.addStyle(this._validationInfo, { bottom: '-23px' });\n    }\n  }\n\n  _applyFormatPlaceholder() {\n    if (this._options.showFormat) {\n      this._input.placeholder = this._format;\n    }\n  }\n\n  _listenToCancelClick() {\n    const DATEPICKER_CANCEL_BTN = SelectorEngine.findOne(\n      `${SELECTOR_DATEPICKER}-cancel-btn`,\n      document.body\n    );\n\n    EventHandler.one(DATEPICKER_CANCEL_BTN, 'mousedown', () => {\n      this._cancel = true;\n      this._scrollBar.reset();\n      EventHandler.off(DATEPICKER_CANCEL_BTN, 'mousedown');\n    });\n  }\n\n  _listenToToggleClick() {\n    EventHandler.on(this._element, 'click', SELECTOR_DATA_TOGGLE, (event) => {\n      event.preventDefault();\n      this._openDatePicker();\n    });\n  }\n\n  _listenToUserInput() {\n    EventHandler.on(this._input, 'input', (event) => {\n      this._handleInput(event.target.value);\n    });\n  }\n\n  _disableInput() {\n    if (this._options.disabled) {\n      this._input.disabled = 'true';\n    }\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n    config = {\n      ...Default,\n      ...dataAttributes,\n      ...config,\n    };\n\n    typeCheckConfig(NAME, config, DefaultType);\n    return config;\n  }\n\n  _handleInput(input) {\n    const dateTimeSplited = input.split(', ');\n    const dateDelimeters = getDelimeters(this._format);\n\n    const inputFirstValue = dateTimeSplited[0];\n    const inputSecondValue = dateTimeSplited[1] || '';\n\n    const date = parseDate(\n      inputFirstValue,\n      this._format,\n      dateDelimeters,\n      this._datepicker._options\n    );\n\n    if (!inputFirstValue) {\n      this._removeInvalidClass(this._input);\n    } else if (dateTimeSplited.length === 2) {\n      const isInputValid = isValidDate(date) && isValidTime(inputSecondValue);\n\n      if (isInputValid) {\n        this._dateValue = inputFirstValue;\n        this._timeValue = inputSecondValue;\n        this._removeInvalidClass(this._input);\n        this._datepicker._input.value = this._dateValue;\n        this._datepicker._activeDate = this._dateValue;\n        this._datepicker._selectedYear = getYear(date);\n        this._datepicker._selectedMonth = getMonth(date);\n        this._datepicker._headerDate = date;\n        this._timepicker.input.value = this._timeValue;\n        this._timepicker._isInvalidTimeFormat = false;\n      } else {\n        this._datepicker._activeDate = new Date();\n        this._datepicker._selectedDate = null;\n        this._datepicker._selectedMonth = null;\n        this._datepicker._selectedYear = null;\n        this._datepicker._headerDate = null;\n        this._datepicker._headerMonth = null;\n        this._datepicker._headerYear = null;\n        this._timepicker._isInvalidTimeFormat = true;\n        this._addInvalidClass(this._input, this._validationInfo);\n      }\n    } else {\n      this._addInvalidClass(this._input, this._validationInfo);\n    }\n  }\n\n  _addInvalidClass() {\n    const { appendValidationInfo } = this._options;\n    if (appendValidationInfo) {\n      Manipulator.addClass(this._input, CLASSNAME_IS_INVALID);\n\n      if (!SelectorEngine.findOne(SELECTOR_INVALID_FEEDBACK)) {\n        this._input.parentNode.insertBefore(this._validationInfo, this._input.nextSibling);\n      }\n    }\n  }\n\n  _removeInvalidClass(input) {\n    Manipulator.removeClass(input, CLASSNAME_IS_INVALID);\n    this._isInvalidTimeFormat = false;\n    const allInvalid = SelectorEngine.findOne(SELECTOR_INVALID_FEEDBACK);\n\n    if (allInvalid === null) {\n      return;\n    }\n    allInvalid.remove();\n  }\n\n  _openDatePicker() {\n    const openEvent = EventHandler.trigger(this._element, EVENT_OPEN);\n\n    if (openEvent.defaultPrevented) {\n      return;\n    }\n\n    this._datepicker.open();\n\n    if (!this._options.inline) {\n      this._scrollBar.hide();\n    }\n\n    if (this._options.inline || this._options.datepicker.inline) {\n      this._openDropdownDate();\n    }\n    this._addIconButtons();\n\n    this._listenToCancelClick();\n\n    if (this._options.inline && this._datepicker._isOpen) {\n      this.toggleButton.style.pointerEvents = 'none';\n    }\n\n    EventHandler.one(this._datepicker._element, EVENT_CLOSE_DATEPICKER, () => {\n      this._dateValue = this._datepicker._input.value;\n      this._updateInputValue();\n\n      if (this._cancel) {\n        this._cancel = false;\n        return;\n      }\n\n      EventHandler.on(this._datepicker.container, 'click', (e) => {\n        if (!this._datepicker._selectedDate && e.target.classList.contains('datepicker-ok-btn')) {\n          return;\n        }\n        this._openTimePicker();\n      });\n      setTimeout(() => {\n        const timepicker = SelectorEngine.findOne(`${SELECTOR_TIMEPICKER}-wrapper`, document.body);\n        if (!timepicker) {\n          this._scrollBar.reset();\n        }\n      }, 10);\n      if (this._options.inline) {\n        this.toggleButton.style.pointerEvents = 'auto';\n      }\n    });\n\n    const CLOCK_BTN = SelectorEngine.findOne(`${SELECTOR_TIMEPICKER}-button-toggle`, document.body);\n    EventHandler.on(CLOCK_BTN, 'click', () => {\n      this._datepicker.close();\n      this._scrollBar.hide();\n      EventHandler.trigger(this._datepicker._element, EVENT_CLOSE_DATEPICKER);\n    });\n  }\n\n  _handleTimepickerDisablePast() {\n    const currentDate = new Date();\n    currentDate.setHours(0, 0, 0, 0);\n\n    EventHandler.on(this._datepicker._element, 'dateChange.mdb.datepicker', () => {\n      if (this._datepicker._selectedDate.getTime() === currentDate.getTime()) {\n        this._timepicker.update({ disablePast: true });\n      } else {\n        this._timepicker.update({ disablePast: false });\n      }\n    });\n  }\n\n  _handleTimepickerDisableFuture() {\n    const currentDate = new Date();\n    currentDate.setHours(0, 0, 0, 0);\n\n    EventHandler.on(this._datepicker._element, 'dateChange.mdb.datepicker', () => {\n      if (this._datepicker._selectedDate.getTime() === currentDate.getTime()) {\n        this._timepicker.update({ disableFuture: true });\n      } else {\n        this._timepicker.update({ disableFuture: false });\n      }\n    });\n  }\n\n  _handleEscapeKey() {\n    EventHandler.one(document.body, 'keyup', () => {\n      setTimeout(() => {\n        const timepicker = SelectorEngine.findOne(`${SELECTOR_TIMEPICKER}-wrapper`, document.body);\n        if (!timepicker) {\n          this._scrollBar.reset();\n        }\n      }, 250);\n    });\n  }\n\n  _handleCancelButton() {\n    const CANCEL_BTN = SelectorEngine.findOne(`${SELECTOR_TIMEPICKER}-cancel`, document.body);\n    EventHandler.one(CANCEL_BTN, 'mousedown', () => {\n      this._scrollBar.reset();\n    });\n  }\n\n  _openDropdownDate() {\n    const datePopper = this._datepicker._popper;\n    datePopper.state.elements.reference = this._input;\n    this._scrollBar.reset();\n  }\n\n  _openTimePicker() {\n    EventHandler.trigger(this._timepicker.elementToggle, 'click');\n    setTimeout(() => {\n      this._addIconButtons();\n\n      if (this._options.inline || this._options.timepicker.inline) {\n        this._openDropdownTime();\n      }\n      if (this._timepicker._modal) {\n        const CANCEL_BTN = SelectorEngine.findOne(`${SELECTOR_TIMEPICKER}-cancel`, document.body);\n        this._handleEscapeKey();\n        this._handleCancelButton();\n        EventHandler.on(this._timepicker._modal, 'click', (e) => {\n          if (\n            e.target.classList.contains(`${CLASSNAME_TIMEPICKER}-wrapper`) ||\n            e.target.classList.contains(`${CLASSNAME_TIMEPICKER}-submit`)\n          ) {\n            setTimeout(() => {\n              this._scrollBar.reset();\n            }, 200);\n          }\n          if (e.target.classList.contains(`${CLASSNAME_TIMEPICKER}-clear`)) {\n            EventHandler.trigger(this._timepicker._element, EVENT_VALUE_CHANGED_TIMEPICKER);\n          }\n          if (e.target.classList.contains(`${CLASSNAME_DATEPICKER}-button-toggle`)) {\n            EventHandler.trigger(CANCEL_BTN, 'click');\n            setTimeout(() => {\n              this._openDatePicker();\n              this._scrollBar.hide();\n            }, 200);\n          }\n        });\n      }\n    });\n\n    EventHandler.one(this._timepicker._element, EVENT_VALUE_CHANGED_TIMEPICKER, () => {\n      this._timeValue = this._timepicker.input.value;\n      this._updateInputValue();\n      EventHandler.trigger(this._element, EVENT_CLOSE);\n    });\n  }\n\n  _openDropdownTime() {\n    const timePopper = this._timepicker._popper;\n    timePopper.state.elements.reference = this._input;\n    timePopper.update();\n    this._scrollBar.reset();\n  }\n\n  _setInitialDefaultInput() {\n    const shouldUpdate = this._options.defaultDate || this._options.defaultTime;\n\n    if (shouldUpdate) {\n      this._updateInputValue();\n    }\n  }\n\n  _updateInputValue() {\n    const isDateTimeFilled = this._timeValue && this._dateValue;\n\n    if (isDateTimeFilled) {\n      this._input.value = `${this._dateValue}, ${this._timeValue}`;\n      this._removeInvalidClass(this._input);\n\n      const changeEvent = EventHandler.trigger(this._element, EVENT_VALUE_CHANGED);\n\n      if (changeEvent.defaultPrevented) {\n        return;\n      }\n    }\n\n    EventHandler.trigger(this._input, 'focus');\n  }\n\n  // static\n\n  static jQueryInterface(config, options) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY);\n      const _config = typeof config === 'object' && config;\n\n      if (!data && /dispose/.test(config)) {\n        return;\n      }\n\n      if (!data) {\n        data = new Datetimepicker(this, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](options);\n      }\n    });\n  }\n}\n\nexport default Datetimepicker;\n","import EventHandler from '../../mdb/dom/event-handler';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport {\n  isDisabled,\n  getElementFromSelector,\n  isVisible,\n  getSelectorFromElement,\n} from '../../mdb/util';\nimport { enableDismissTrigger } from '../../bootstrap/mdb-prefix/util/component-functions';\n\nconst alertCallback = (component, initSelector) => {\n  const Alert = component;\n\n  enableDismissTrigger(Alert, 'close');\n\n  // MDB init\n  SelectorEngine.find(initSelector).forEach((element) => {\n    return Alert.getOrCreateInstance(element);\n  });\n};\n\nconst buttonCallback = (component, initSelector) => {\n  const Button = component;\n  const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n\n  // BS init\n  EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, (event) => {\n    event.preventDefault();\n\n    const button = event.target.closest(initSelector);\n    const data = Button.getOrCreateInstance(button);\n\n    data.toggle();\n  });\n\n  // MDB init\n  SelectorEngine.find(initSelector).forEach((element) => {\n    return Button.getOrCreateInstance(element);\n  });\n};\n\nconst carouselCallback = (component, initSelector) => {\n  const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n  const SELECTOR_DATA_SLIDE = '[data-mdb-slide], [data-mdb-slide-to]';\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const Carousel = component;\n  const EVENT_LOAD_DATA_API = `load.bs.${component.name}.data-api`;\n  const SELECTOR_DATA_RIDE = initSelector;\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    event.preventDefault();\n\n    const carousel = Carousel.getOrCreateInstance(target);\n    const slideIndex = this.getAttribute('data-mdb-slide-to');\n\n    if (slideIndex) {\n      carousel.to(slideIndex);\n      carousel._maybeEnableCycle();\n      return;\n    }\n\n    if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n      carousel.next();\n      carousel._maybeEnableCycle();\n      return;\n    }\n\n    carousel.prev();\n    carousel._maybeEnableCycle();\n  });\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    carousels.forEach((carousel) => {\n      Carousel.getOrCreateInstance(carousel);\n    });\n  });\n};\n\nconst collapseCallback = (component, initSelector) => {\n  const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n  const SELECTOR_DATA_TOGGLE = initSelector;\n  const Collapse = component;\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (\n      event.target.tagName === 'A' ||\n      (event.delegateTarget && event.delegateTarget.tagName === 'A')\n    ) {\n      event.preventDefault();\n    }\n\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n\n    selectorElements.forEach((element) => {\n      Collapse.getOrCreateInstance(element, { toggle: false }).toggle();\n    });\n  });\n\n  SelectorEngine.find(SELECTOR_DATA_TOGGLE).forEach((el) => {\n    const selector = getSelectorFromElement(el);\n    const selectorElements = SelectorEngine.find(selector);\n\n    selectorElements.forEach((element) => {\n      Collapse.getOrCreateInstance(element, { toggle: false });\n    });\n  });\n};\n\nconst dropdownCallback = (component, initSelector) => {\n  const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n  const EVENT_KEYDOWN_DATA_API = `keydown.bs.${component.name}.data-api`;\n  const EVENT_KEYUP_DATA_API = `keyup.bs.${component.name}.data-api`;\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_DATA_TOGGLE = `[data-mdb-${component.NAME}-initialized]`;\n  const Dropdown = component;\n\n  EventHandler.on(\n    document,\n    EVENT_KEYDOWN_DATA_API,\n    SELECTOR_DATA_TOGGLE,\n    Dropdown.dataApiKeydownHandler\n  );\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    event.preventDefault();\n    Dropdown.getOrCreateInstance(this).toggle();\n  });\n\n  SelectorEngine.find(initSelector).forEach((el) => {\n    Dropdown.getOrCreateInstance(el);\n  });\n};\n\nconst inputCallback = (component, initSelector) => {\n  const SELECTOR_DATA_INIT = initSelector;\n  const SELECTOR_OUTLINE_INPUT = `${SELECTOR_DATA_INIT} input`;\n  const SELECTOR_OUTLINE_TEXTAREA = `${SELECTOR_DATA_INIT} textarea`;\n  const Input = component;\n\n  EventHandler.on(document, 'focus', SELECTOR_OUTLINE_INPUT, Input.activate(new Input()));\n  EventHandler.on(document, 'input', SELECTOR_OUTLINE_INPUT, Input.activate(new Input()));\n  EventHandler.on(document, 'blur', SELECTOR_OUTLINE_INPUT, Input.deactivate(new Input()));\n\n  EventHandler.on(document, 'focus', SELECTOR_OUTLINE_TEXTAREA, Input.activate(new Input()));\n  EventHandler.on(document, 'input', SELECTOR_OUTLINE_TEXTAREA, Input.activate(new Input()));\n  EventHandler.on(document, 'blur', SELECTOR_OUTLINE_TEXTAREA, Input.deactivate(new Input()));\n\n  EventHandler.on(window, 'shown.bs.modal', (e) => {\n    SelectorEngine.find(SELECTOR_OUTLINE_INPUT, e.target).forEach((element) => {\n      const instance = Input.getInstance(element.parentNode);\n      if (!instance) {\n        return;\n      }\n      instance.update();\n    });\n    SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, e.target).forEach((element) => {\n      const instance = Input.getInstance(element.parentNode);\n      if (!instance) {\n        return;\n      }\n      instance.update();\n    });\n  });\n\n  EventHandler.on(window, 'shown.bs.dropdown', (e) => {\n    const target = e.target.parentNode.querySelector('.dropdown-menu');\n    if (target) {\n      SelectorEngine.find(SELECTOR_OUTLINE_INPUT, target).forEach((element) => {\n        const instance = Input.getInstance(element.parentNode);\n        if (!instance) {\n          return;\n        }\n        instance.update();\n      });\n      SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, target).forEach((element) => {\n        const instance = Input.getInstance(element.parentNode);\n        if (!instance) {\n          return;\n        }\n        instance.update();\n      });\n    }\n  });\n\n  EventHandler.on(window, 'shown.bs.tab', (e) => {\n    let targetId;\n\n    if (e.target.href) {\n      targetId = e.target.href.split('#')[1];\n    } else {\n      targetId = Manipulator.getDataAttribute(e.target, 'target').split('#')[1];\n    }\n\n    const target = SelectorEngine.findOne(`#${targetId}`);\n    SelectorEngine.find(SELECTOR_OUTLINE_INPUT, target).forEach((element) => {\n      const instance = Input.getInstance(element.parentNode);\n      if (!instance) {\n        return;\n      }\n      instance.update();\n    });\n    SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, target).forEach((element) => {\n      const instance = Input.getInstance(element.parentNode);\n      if (!instance) {\n        return;\n      }\n      instance.update();\n    });\n  });\n\n  // auto-init\n  SelectorEngine.find(SELECTOR_DATA_INIT).map((element) => new Input(element));\n\n  // form reset handler\n  EventHandler.on(window, 'reset', (e) => {\n    SelectorEngine.find(SELECTOR_OUTLINE_INPUT, e.target).forEach((element) => {\n      const instance = Input.getInstance(element.parentNode);\n      if (!instance) {\n        return;\n      }\n      instance.forceInactive();\n    });\n    SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, e.target).forEach((element) => {\n      const instance = Input.getInstance(element.parentNode);\n      if (!instance) {\n        return;\n      }\n      instance.forceInactive();\n    });\n  });\n\n  // auto-fill\n  EventHandler.on(window, 'onautocomplete', (e) => {\n    const instance = Input.getInstance(e.target.parentNode);\n    if (!instance || !e.cancelable) {\n      return;\n    }\n    instance.forceActive();\n  });\n};\n\nconst modalCallback = (component, initSelector) => {\n  const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n  const OPEN_SELECTOR = '.modal.show';\n  const Modal = component;\n  const EVENT_SHOW = `show.bs.${component.name}`;\n  const EVENT_HIDDEN = `hidden.bs.${component.name}`;\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW, (showEvent) => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n\n    // avoid conflict when clicking modal toggler while another one is open\n    const alreadyOpenedModals = SelectorEngine.find(OPEN_SELECTOR);\n    alreadyOpenedModals.forEach((modal) => {\n      if (!modal.classList.contains('modal-non-invasive-show')) {\n        Modal.getInstance(modal).hide();\n      }\n    });\n\n    const data = Modal.getOrCreateInstance(target);\n\n    data.toggle(this);\n  });\n\n  enableDismissTrigger(Modal);\n\n  SelectorEngine.find(initSelector).forEach((el) => {\n    const selector = getSelectorFromElement(el);\n    const selectorElement = SelectorEngine.findOne(selector);\n\n    Modal.getOrCreateInstance(selectorElement);\n  });\n};\n\nconst popoverCallback = (component, initSelector) => {\n  const Popover = component;\n  const SELECTOR_DATA_TOGGLE = initSelector;\n\n  SelectorEngine.find(SELECTOR_DATA_TOGGLE).forEach((el) => {\n    Popover.getOrCreateInstance(el);\n  });\n};\n\nconst offcanvasCallback = (component, initSelector) => {\n  const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const Offcanvas = component;\n  const EVENT_HIDDEN = `hidden.bs.${component.name}`;\n  const EVENT_LOAD_DATA_API = `load.bs.${component.name}.data-api`;\n  const EVENT_RESIZE = `resize.bs.${component.name}`;\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n\n    // avoid conflict when clicking a toggler of an offcanvas, while another is open\n    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n    if (alreadyOpen && alreadyOpen !== target) {\n      Offcanvas.getInstance(alreadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(OPEN_SELECTOR).forEach((selector) => {\n      Offcanvas.getOrCreateInstance(selector).show();\n    });\n  });\n\n  EventHandler.on(window, EVENT_RESIZE, () => {\n    SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]').forEach((element) => {\n      if (getComputedStyle(element).position !== 'fixed') {\n        Offcanvas.getOrCreateInstance(element).hide();\n      }\n    });\n  });\n\n  enableDismissTrigger(Offcanvas);\n};\n\nconst scrollspyCallback = (component, initSelector) => {\n  const EVENT_LOAD_DATA_API = `load.bs.${component.name}.data-api`;\n  const ScrollSpy = component;\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(initSelector).forEach((el) => {\n      ScrollSpy.getOrCreateInstance(el);\n    });\n  });\n};\n\nconst tabCallback = (component, initSelector) => {\n  const EVENT_LOAD_DATA_API = `load.bs.${component.name}.data-api`;\n  const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n  const CLASS_NAME_ACTIVE = 'active';\n  const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-mdb-tab-init], .${CLASS_NAME_ACTIVE}[data-mdb-pill-init], .${CLASS_NAME_ACTIVE}[data-mdb-toggle=\"list\"]`;\n  const Tab = component;\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    Tab.getOrCreateInstance(this).show();\n  });\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE).forEach((element) => {\n      Tab.getOrCreateInstance(element);\n    });\n  });\n};\n\nconst toastCallback = (component, initSelector) => {\n  const Toast = component;\n\n  enableDismissTrigger(Toast);\n\n  // MDB init\n  SelectorEngine.find(initSelector).forEach((element) => {\n    return Toast.getOrCreateInstance(element);\n  });\n};\n\nconst rippleCallback = (component, initSelector) => {\n  const Ripple = component;\n\n  EventHandler.one(document, 'mousedown', initSelector, Ripple.autoInitial(new Ripple()));\n};\n\nexport {\n  alertCallback,\n  buttonCallback,\n  carouselCallback,\n  collapseCallback,\n  dropdownCallback,\n  inputCallback,\n  modalCallback,\n  offcanvasCallback,\n  tabCallback,\n  toastCallback,\n  popoverCallback,\n  rippleCallback,\n  scrollspyCallback,\n};\n","import {\n  alertCallback,\n  lightboxCallback,\n  sidenavCallback,\n  modalCallback,\n  toastCallback,\n} from '../callbacks/pro';\nimport * as freeSelectors from './free';\nimport chartsCallback from '../callbacks/charts';\n\nconst defaultInitSelectors = {\n  ...freeSelectors.default,\n  chart: {\n    name: 'Chart',\n    selector: '[data-mdb-chart-init]',\n    isToggler: false,\n    advanced: chartsCallback,\n  },\n  chips: {\n    name: 'ChipsInput',\n    selector: '[data-mdb-chips-input-init]',\n    isToggler: false,\n  },\n  chip: {\n    name: 'Chip',\n    selector: '[data-mdb-chip-init]',\n    isToggler: false,\n    onInit: 'init',\n  },\n  datatable: {\n    name: 'Datatable',\n    selector: '[data-mdb-datatable-init]',\n    isToggler: false,\n  },\n  datetimepicker: {\n    name: 'Datetimepicker',\n    selector: '[data-mdb-datetimepicker-init]',\n    isToggler: false,\n  },\n  datepicker: {\n    name: 'Datepicker',\n    selector: '[data-mdb-datepicker-init]',\n    isToggler: false,\n  },\n  loading: {\n    name: 'Loading',\n    selector: '[data-mdb-loading-init]',\n    isToggler: false,\n  },\n  multiRangeSlider: {\n    name: 'MultiRangeSlider',\n    selector: '[data-mdb-multi-range-slider-init]',\n    isToggler: false,\n  },\n  select: {\n    name: 'Select',\n    selector: '[data-mdb-select-init]',\n    isToggler: false,\n  },\n  timepicker: {\n    name: 'Timepicker',\n    selector: '[data-mdb-timepicker-init]',\n    isToggler: false,\n  },\n  touch: {\n    name: 'Touch',\n    selector: '[data-mdb-touch-init]',\n    isToggler: false,\n  },\n  alert: {\n    name: 'Alert',\n    selector: '[data-mdb-alert-init]',\n    isToggler: true,\n    callback: alertCallback,\n  },\n  animation: {\n    name: 'Animate',\n    selector: '[data-mdb-animation-init]',\n    isToggler: false,\n    onInit: 'init',\n  },\n  clipboard: {\n    name: 'Clipboard',\n    selector: '[data-mdb-clipboard-init]',\n    isToggler: false,\n  },\n  infiniteScroll: {\n    name: 'InfiniteScroll',\n    selector: '[data-mdb-infinite-scroll-init]',\n    isToggler: false,\n  },\n  lazyLoad: {\n    name: 'LazyLoad',\n    selector: '[data-mdb-lazy-load-init]',\n    isToggler: false,\n  },\n  lightbox: {\n    name: 'Lightbox',\n    selector: '[data-mdb-lightbox-init]',\n    isToggler: true,\n    callback: lightboxCallback,\n  },\n  modal: {\n    name: 'Modal',\n    selector: '[data-mdb-modal-init]',\n    isToggler: true,\n    callback: modalCallback,\n  },\n  navbar: {\n    name: 'Navbar',\n    selector: '[data-mdb-navbar-init]',\n    isToggler: false,\n  },\n  perfectScrollbar: {\n    name: 'PerfectScrollbar',\n    selector: '[data-mdb-perfect-scrollbar-init]',\n    isToggler: false,\n  },\n  popconfirm: {\n    name: 'Popconfirm',\n    selector: '[data-mdb-popconfirm-init]',\n    isToggler: false,\n  },\n  rating: {\n    name: 'Rating',\n    selector: '[data-mdb-rating-init]',\n    isToggler: false,\n  },\n  sidenav: {\n    name: 'Sidenav',\n    selector: '[data-mdb-sidenav-init]',\n    isToggler: true,\n    callback: sidenavCallback,\n  },\n  smoothScroll: {\n    name: 'SmoothScroll',\n    selector: '[data-mdb-smooth-scroll-init]',\n    isToggler: false,\n  },\n  stepper: {\n    name: 'Stepper',\n    selector: '[data-mdb-stepper-init]',\n    isToggler: false,\n  },\n  sticky: {\n    name: 'Sticky',\n    selector: '[data-mdb-sticky-init]',\n    isToggler: false,\n  },\n  toast: {\n    name: 'Toast',\n    selector: '[data-mdb-toast-init]',\n    isToggler: true,\n    callback: toastCallback,\n  },\n};\n\nexport default defaultInitSelectors;\n","import {\n  alertCallback,\n  dropdownCallback,\n  offcanvasCallback,\n  tabCallback,\n  buttonCallback,\n  modalCallback,\n  rippleCallback,\n  collapseCallback,\n  carouselCallback,\n  scrollspyCallback,\n  toastCallback,\n  inputCallback,\n} from '../callbacks/free';\n\nconst defaultInitSelectors = {\n  // Bootstrap Components\n  alert: {\n    name: 'Alert',\n    selector: '[data-mdb-alert-init]',\n    isToggler: true,\n    callback: alertCallback,\n  },\n  button: {\n    name: 'Button',\n    selector: '[data-mdb-button-init]',\n    isToggler: true,\n    callback: buttonCallback,\n  },\n  carousel: {\n    name: 'Carousel',\n    selector: '[data-mdb-carousel-init]',\n    isToggler: true,\n    callback: carouselCallback,\n  },\n  collapse: {\n    name: 'Collapse',\n    selector: '[data-mdb-collapse-init]',\n    isToggler: true,\n    callback: collapseCallback,\n  },\n  dropdown: {\n    name: 'Dropdown',\n    selector: '[data-mdb-dropdown-init]',\n    isToggler: true,\n    callback: dropdownCallback,\n  },\n  modal: {\n    name: 'Modal',\n    selector: '[data-mdb-modal-init]',\n    isToggler: true,\n    callback: modalCallback,\n  },\n  offcanvas: {\n    name: 'Offcanvas',\n    selector: '[data-mdb-offcanvas-init]',\n    isToggler: true,\n    callback: offcanvasCallback,\n  },\n  scrollspy: {\n    name: 'ScrollSpy',\n    selector: '[data-mdb-scrollspy-init]',\n    isToggler: true,\n    callback: scrollspyCallback,\n  },\n  tab: {\n    name: 'Tab',\n    selector: '[data-mdb-tab-init], [data-mdb-pill-init], [data-mdb-list-init]',\n    isToggler: true,\n    callback: tabCallback,\n  },\n  toast: {\n    name: 'Toast',\n    selector: '[data-mdb-toast-init]',\n    isToggler: true,\n    callback: toastCallback,\n  },\n  tooltip: {\n    name: 'Tooltip',\n    selector: '[data-mdb-tooltip-init]',\n    isToggler: false,\n  },\n  input: {\n    name: 'Input',\n    selector: '[data-mdb-input-init]',\n    isToggler: true,\n    callback: inputCallback,\n  },\n  range: {\n    name: 'Range',\n    selector: '[data-mdb-range-init]',\n    isToggler: false,\n  },\n  ripple: {\n    name: 'Ripple',\n    selector: '[data-mdb-ripple-init]',\n    isToggler: true,\n    callback: rippleCallback,\n  },\n  popover: {\n    name: 'Popover',\n    selector: '[data-mdb-popover-init]',\n    isToggler: false,\n    callback: rippleCallback,\n  },\n};\n\nexport default defaultInitSelectors;\n","import Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport DEFAULT_OPTIONS from '../../pro/charts/chartsDefaults';\n\nconst chartsCallback = (Component, initSelector) => {\n  // eslint-disable-next-line consistent-return\n  const IS_COMPLEX = (data) => {\n    return (\n      (data[0] === '{' && data[data.length - 1] === '}') ||\n      (data[0] === '[' && data[data.length - 1] === ']')\n    );\n  };\n\n  const CONVERT_DATA_TYPE = (data) => {\n    if (typeof data !== 'string') return data;\n    if (IS_COMPLEX(data)) {\n      return JSON.parse(data.replace(/'/g, '\"'));\n    }\n    return data;\n  };\n\n  const PARSE_DATA = (data) => {\n    const dataset = {};\n    Object.keys(data).forEach((property) => {\n      if (property.match(/dataset.*/)) {\n        const chartProperty = property.slice(7, 8).toLowerCase().concat(property.slice(8));\n        dataset[chartProperty] = CONVERT_DATA_TYPE(data[property]);\n      }\n    });\n    return dataset;\n  };\n\n  SelectorEngine.find(initSelector).forEach((el) => {\n    if (\n      !Component.getInstance(el) &&\n      Manipulator.getDataAttribute(el, 'chart') !== 'bubble' &&\n      Manipulator.getDataAttribute(el, 'chart') !== 'scatter'\n    ) {\n      const dataSet = Manipulator.getDataAttributes(el);\n      const dataAttr = {\n        data: {\n          datasets: [PARSE_DATA(dataSet)],\n        },\n      };\n      if (dataSet.chart) {\n        dataAttr.type = dataSet.chart;\n      }\n      if (dataSet.labels) {\n        dataAttr.data.labels = JSON.parse(dataSet.labels.replace(/'/g, '\"'));\n      }\n\n      return new Component(el, {\n        ...dataAttr,\n        ...DEFAULT_OPTIONS[dataAttr.type],\n      });\n    }\n    return null;\n  });\n};\n\nexport default chartsCallback;\n","import EventHandler from '../../mdb/dom/event-handler';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport { getElementFromSelector, isVisible, getSelectorFromElement } from '../../mdb/util';\nimport { enableDismissTrigger } from '../../bootstrap/mdb-prefix/util/component-functions';\nimport {\n  buttonCallback,\n  carouselCallback,\n  collapseCallback,\n  dropdownCallback,\n  offcanvasCallback,\n  scrollspyCallback,\n  tabCallback,\n} from './free';\n\nconst alertCallback = (component, initSelector) => {\n  const Alert = component;\n\n  enableDismissTrigger(Alert, 'close');\n  // MDB init\n  SelectorEngine.find(initSelector).forEach((element) => {\n    return Alert.getOrCreateInstance(element);\n  });\n};\n\nconst lightboxCallback = (component, initSelector) => {\n  const EVENT_CLICK_DATA_API = `click.mdb.${component.name}.data-api`;\n  const SELECTOR_DATA_INIT = initSelector;\n  const SELECTOR_TOGGLE = `${SELECTOR_DATA_INIT} img:not(.lightbox-disabled)`;\n  const Lightbox = component;\n\n  SelectorEngine.find(SELECTOR_DATA_INIT).forEach((el) => new Lightbox(el));\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_TOGGLE, Lightbox.toggle());\n};\n\nconst modalCallback = (component, initSelector) => {\n  const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n  const OPEN_SELECTOR = '.modal.show';\n  const Modal = component;\n  const EVENT_SHOW = `show.bs.${component.name}`;\n  const EVENT_HIDDEN = `hidden.bs.${component.name}`;\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW, (showEvent) => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n\n    // avoid conflict when clicking modal toggler while another one is open\n    const alreadyOpenedModals = SelectorEngine.find(OPEN_SELECTOR);\n    alreadyOpenedModals.forEach((modal) => {\n      if (!modal.classList.contains('modal-non-invasive-show')) {\n        Modal.getInstance(modal).hide();\n      }\n    });\n\n    const data = Modal.getOrCreateInstance(target);\n\n    data.toggle(this);\n  });\n\n  enableDismissTrigger(Modal);\n\n  SelectorEngine.find(initSelector).forEach((el) => {\n    const selector = getSelectorFromElement(el);\n    const selectorElement = SelectorEngine.findOne(selector);\n\n    Modal.getOrCreateInstance(selectorElement);\n  });\n};\n\nconst sidenavCallback = (component, initSelector) => {\n  const SELECTOR_DATA_INIT = initSelector;\n  const SELECTOR_TOGGLE = '[data-mdb-toggle=\"sidenav\"]';\n  const Sidenav = component;\n\n  EventHandler.on(document, 'click', SELECTOR_TOGGLE, Sidenav.toggleSidenav());\n\n  SelectorEngine.find(SELECTOR_DATA_INIT).forEach((sidenav) => {\n    return Sidenav.getOrCreateInstance(sidenav);\n  });\n};\n\nconst toastCallback = (component, initSelector) => {\n  const SELECTOR_DATA_INIT = initSelector;\n  const Toast = component;\n\n  enableDismissTrigger(Toast);\n\n  SelectorEngine.find(SELECTOR_DATA_INIT).forEach((toast) => {\n    return Toast.getOrCreateInstance(toast);\n  });\n};\n\nexport {\n  alertCallback,\n  lightboxCallback,\n  buttonCallback,\n  carouselCallback,\n  collapseCallback,\n  dropdownCallback,\n  modalCallback,\n  offcanvasCallback,\n  scrollspyCallback,\n  sidenavCallback,\n  tabCallback,\n  toastCallback,\n};\n","import defaultInitSelectors from './initSelectors/pro';\nimport { InitMDB } from './init';\n\nconst initMDBInstance = new InitMDB(defaultInitSelectors);\nconst initMDB = initMDBInstance.initMDB;\n\nexport default initMDB;\n","// BOOTSTRAP CORE COMPONENTS\nimport Button from './free/button';\nimport Offcanvas from './bootstrap/mdb-prefix/offcanvas';\nimport Carousel from './free/carousel';\nimport Popover from './free/popover';\nimport ScrollSpy from './free/scrollspy';\nimport Tab from './free/tab';\nimport Tooltip from './free/tooltip';\n\n// MDB FREE COMPONENTS\nimport Input from './free/input';\nimport Collapse from './free/collapse';\nimport Dropdown from './free/dropdown';\nimport Ripple from './free/ripple';\nimport Range from './free/range';\n\n// MDB PRO COMPONENTS\nimport Animate from './pro/animate';\nimport Chart from './pro/charts/charts';\nimport Lightbox from './pro/lightbox';\nimport Rating from './pro/rating';\nimport Sidenav from './pro/sidenav';\nimport Alert from './pro/alert';\nimport Toast from './pro/toast';\nimport Timepicker from './pro/timepicker';\nimport Navbar from './pro/navbar';\nimport InfiniteScroll from './pro/infinite-scroll';\nimport LazyLoad from './pro/lazy-load';\nimport Datepicker from './pro/datepicker';\nimport Popconfirm from './pro/popconfirm';\nimport Datatable from './pro/datatable';\nimport Stepper from './pro/stepper';\nimport Sticky from './pro/sticky';\nimport Select from './pro/select';\nimport Touch from './pro/touch';\nimport SmoothScroll from './pro/smooth-scroll';\nimport PerfectScrollbar from './pro/perfect-scrollbar';\nimport Loading from './pro/loading-management';\nimport Autocomplete from './pro/autocomplete';\nimport Modal from './pro/modal';\nimport Clipboard from './pro/clipboard';\nimport ChipsInput from './pro/chips';\nimport Chip from './pro/chips/chip';\nimport MultiRangeSlider from './pro/multi-range';\nimport Datetimepicker from './pro/date-time-picker';\n\nimport initMDB from './autoinit/index.pro';\n\nconst mdb = {\n  // FREE\n  Button,\n  Carousel,\n  Collapse,\n  Offcanvas,\n  Dropdown,\n  Input,\n  Modal,\n  Popover,\n  ScrollSpy,\n  Ripple,\n  Tab,\n  Tooltip,\n  Range,\n  // PRO\n  Alert,\n  Animate,\n  Chart,\n  Datepicker,\n  Datatable,\n  Lightbox,\n  Navbar,\n  Popconfirm,\n  Rating,\n  Sidenav,\n  SmoothScroll,\n  Timepicker,\n  Toast,\n  InfiniteScroll,\n  LazyLoad,\n  Stepper,\n  Sticky,\n  Select,\n  Touch,\n  PerfectScrollbar,\n  Loading,\n  Autocomplete,\n  Clipboard,\n  ChipsInput,\n  Chip,\n  MultiRangeSlider,\n  Datetimepicker,\n};\n\ninitMDB(mdb);\n\nexport {\n  // FREE\n  Button,\n  Carousel,\n  Collapse,\n  Offcanvas,\n  Dropdown,\n  Input,\n  Modal,\n  Popover,\n  ScrollSpy,\n  Ripple,\n  Tab,\n  Tooltip,\n  Range,\n  // PRO\n  Alert,\n  Animate,\n  Chart,\n  Datepicker,\n  Datatable,\n  Lightbox,\n  Navbar,\n  Popconfirm,\n  Rating,\n  Sidenav,\n  SmoothScroll,\n  Timepicker,\n  Toast,\n  InfiniteScroll,\n  LazyLoad,\n  Stepper,\n  Sticky,\n  Select,\n  Touch,\n  PerfectScrollbar,\n  Loading,\n  Autocomplete,\n  Clipboard,\n  ChipsInput,\n  Chip,\n  MultiRangeSlider,\n  Datetimepicker,\n  initMDB,\n};\n"],"names":["mapData","storeData","id","element","key","data","keyProperties","Data","instance","MAX_UID","toType","obj","getUID","prefix","getSelector","selector","hrefAttr","getSelectorFromElement","getElementFromSelector","isElement","getElement","typeCheckConfig","componentName","config","configTypes","property","expectedTypes","value","valueType","isVisible","elementStyle","parentNodeStyle","isDisabled","getjQuery","jQuery","onDOMContentLoaded","callback","isRTL","array","collection","tag","defineJQueryPlugin","plugin","$","name","JQUERY_NO_CONFLICT","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","nativeEvents","getUidEvent","uid","getEvent","bootstrapHandler","fn","handler","event","EventHandler","bootstrapDelegationHandler","domElements","target","i","findHandler","events","delegationSelector","uidEventList","len","normalizeParams","originalTypeEvent","delegationFn","delegation","originalHandler","typeEvent","custom","addHandler","oneOff","handlers","previousFn","removeHandler","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","e","eventParameters","param","inNamespace","isNamespace","elementEvent","keyHandlers","args","isNative","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","evt","EventHandlerMulti","eventsName","normalizeData","val","normalizeDataKey","chr","Manipulator","attributes","pureKey","rect","style","className","NODE_TEXT","SelectorEngine","child","parents","ancestor","previous","next","elementMap","instanceMap","MILLISECONDS_MULTIPLIER","TRANSITION_END","parseSelector","match","object","getTransitionDurationFromElement","transitionDuration","transitionDelay","floatTransitionDuration","floatTransitionDelay","triggerTransitionEnd","elementIsVisible","closedDetails","summary","findShadowRoot","root","noop","reflow","execute","possibleCallback","defaultValue","executeAfterTransition","transitionElement","waitForTransition","durationPadding","emulatedDuration","called","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","makeEventUid","getElementEvents","hydrateObj","domElement","callable","normalizeParameters","delegationFunction","isDelegated","getTypeEvent","previousFunction","meta","mdbKeys","Config$1","jsonConfig","VERSION","Config","propertyName","isAnimated","NAME","CLASS_NAME_ACTIVE","Button","BaseComponent","mapComponentsData","componentsData","InitializedComponents","isInitialized","bindCallbackEventsIfNeeded","component","initComponent","manualInit","thisComponent","_defaultInitSelectors","isToggler","InitMDB","defaultInitSelectors","__publicField","components","checkOtherImports","componentList","DATA_KEY","EVENT_KEY","EVENT_CLICK","EVENT_TRANSITIONEND","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","CLASS_NAME_SHOWN","CLASS_NAME_FIXED_ACTION_BTN","SELECTOR_ACTION_BUTTON","SELECTOR_LIST_ELEMENT","SELECTOR_LIST","BSButton","options","_config","action","listTranslate","el","computed","hrefAttribute","focusables","CLASS_NAME_FADE","CLASS_NAME_SHOW","EVENT_MOUSEDOWN","Default","DefaultType","Backdrop","backdrop","enableDismissTrigger","method","clickEvent","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_KEY","TAB_NAV_FORWARD","TAB_NAV_BACKWARD","trapElement","elements","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","documentWidth","width","calculatedValue","styleProperty","scrollbarWidth","manipulationCallBack","actualValue","callBack","sel","ESCAPE_KEY","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","CLASS_NAME_BACKDROP","EVENT_HIDE_PREVENTED","EVENT_KEYDOWN_DISMISS","Offcanvas","relatedTarget","completeCallBack","completeCallback","clickCallback","FocusTrap","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","POINTER_TYPE_TOUCH","POINTER_TYPE_PEN","CLASS_NAME_POINTER_EVENT","SWIPE_THRESHOLD","Swipe","absDeltaX","direction","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","TOUCHEVENT_COMPAT_WAIT","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_DRAG_START","CLASS_NAME_CAROUSEL","CLASS_NAME_SLIDE","CLASS_NAME_END","CLASS_NAME_START","CLASS_NAME_NEXT","CLASS_NAME_PREV","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM_IMG","SELECTOR_INDICATORS","KEY_TO_DIRECTION","Carousel","items","activeIndex","order","img","swipeConfig","activeIndicator","newActiveIndicator","elementInterval","isNext","nextElement","nextElementIndex","triggerEvent","eventName","isCycling","directionalClassName","orderClassName","EVENT_SLIDE_BS","EVENT_SLID_BS","EXTENDED_EVENTS","BSCarousel","top","bottom","right","left","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","getWindow","node","ownerDocument","OwnElement","isHTMLElement","isShadowRoot","applyStyles","_ref","state","effect","_ref2","initialStyles","styleProperties","attribute","applyStyles$1","getBasePlacement","max","min","round","getUAString","uaData","item","isLayoutViewport","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","visualViewport","addVisualOffsets","x","y","height","getLayoutRect","contains","parent","rootNode","getComputedStyle","isTableElement","getDocumentElement","getParentNode","getTrueOffsetParent","getContainingBlock","isFirefox","isIE","elementCss","currentNode","css","getOffsetParent","window","offsetParent","getMainAxisFromPlacement","within","mathMax","mathMin","withinMaxClamp","v","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","keys","hashMap","toPaddingObject","padding","arrow","_state$modifiersData$","arrowElement","popperOffsets","basePlacement","axis","isVertical","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","center","offset","axisProp","_options$element","arrow$1","getVariation","unsetSides","roundOffsetsByDPR","win","dpr","mapToStyles","_Object$assign2","popperRect","variation","offsets","position","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","heightProp","widthProp","offsetY","offsetX","commonStyles","_ref4","_Object$assign","computeStyles","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","computeStyles$1","passive","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","eventListeners","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","scrollTop","getWindowScrollBarX","getViewportRect","strategy","html","layoutViewport","getDocumentRect","_element$ownerDocumen","winScroll","body","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","isBody","updatedList","rectToClientRect","getInnerBoundingClientRect","getClientRectFromMixedType","clippingParent","getClippingParents","canEscapeClipping","clipperElement","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","a","getExpandedFallbackPlacements","oppositePlacement","flip","_options$mainAxis","checkMainAxis","_options$altAxis","checkAltAxis","specifiedFallbackPlacements","_options$flipVariatio","preferredPlacement","isBasePlacement","fallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","mainVariationSide","altVariationSide","checks","check","numberOfChecks","_loop","_i","fittingPlacement","_ret","flip$1","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","hide","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","hide$1","distanceAndSkiddingToXY","rects","invertDistance","skidding","distance","_options$offset","_data$state$placement","offset$1","popperOffsets$1","getAltAxis","preventOverflow","_options$tether","tether","_options$tetherOffset","tetherOffset","altAxis","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","preventOverflow$1","getHTMLElementScroll","getNodeScroll","isElementScaled","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","documentElement","modifiers","map","visited","result","modifier","sort","requires","dep","depModifier","orderModifiers","orderedModifiers","phase","debounce","pending","resolve","mergeByName","merged","current","existing","DEFAULT_OPTIONS","areValidElements","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","effectCleanupFns","isDestroyed","setOptionsAction","cleanupModifierEffects","m","runModifierEffects","_state$elements","_state$orderedModifie","_state$orderedModifie2","_ref$options","cleanupFn","noopFn","createPopper","DefaultAllowlist","uriAttributes","SAFE_URL_PATTERN","allowedAttribute","allowedAttributeList","attributeName","attributeRegex","regex","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","createdDocument","elementName","attributeList","allowedAttributes","DefaultContentType","TemplateFactory","content","templateWrapper","text","template","extraClass","arg","templateElement","DISALLOWED_ATTRIBUTES","CLASS_NAME_MODAL","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","EVENT_INSERTED","EVENT_FOCUSOUT","AttachmentMap","Tooltip","Popper","showEvent","isInTheDom","tip","container","complete","tipId","attachment","Popper.createPopper","popperData","defaultBsPopperConfig","triggers","trigger","eventIn","eventOut","context","title","timeout","dataAttributes","dataAttribute","SELECTOR_TITLE","SELECTOR_CONTENT","Popover","EVENT_SHOW_BS","EVENT_SHOWN_BS","EVENT_HIDE_BS","EVENT_HIDDEN_BS","EVENT_INSERTED_BS","BSPopover","EVENT_ACTIVATE","CLASS_NAME_DROPDOWN_ITEM","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","ScrollSpy","section","observableSection","entries","targetElement","entry","activate","parentScrollTop","userScrollsDown","entryIsLowerThanPrevious","targetLinks","anchor","listGroup","activeNodes","EVENT_ACTIVATE_BS","CLASS_COLLAPSIBLE","CLASS_ACTIVE","SELECTOR_COLLAPSIBLE_SCROLLSPY","BSScrollSpy","itemsToHide","destinedHeight","collapsibleElements","collapsibleElement","listParent","listHeight","active","collapsible","unactive","ARROW_UP_KEY","ARROW_DOWN_KEY","HOME_KEY","END_KEY","CLASS_DROPDOWN","SELECTOR_DROPDOWN_MENU","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_TAB_PANEL","SELECTOR_OUTER","SELECTOR_INNER_ELEM","Tab","innerElem","hideEvent","relatedElem","children","nextActiveElement","isActive","outerElem","open","toggle","elem","BSTab","hideEventMdb","showEventMdb","BSTooltip","t","n","o","r","u","c","l","s","d","f","p","CLASSNAME_ACTIVE","CLASSNAME_NOTCH","CLASSNAME_NOTCH_LEADING","CLASSNAME_NOTCH_MIDDLE","CLASSNAME_NOTCH_TRAILING","CLASSNAME_PLACEHOLDER_ACTIVE","CLASSNAME_HELPER","CLASSNAME_COUNTER","SELECTOR_NOTCH","SELECTOR_NOTCH_LEADING","SELECTOR_NOTCH_MIDDLE","SELECTOR_HELPER","Input","actualLength","input","allNotchWrappers","notchWrapper","border","prevLabelWidth","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","CLASS_NAME_DEEPER_CHILDREN","CLASS_NAME_HORIZONTAL","WIDTH","HEIGHT","SELECTOR_ACTIVES","SELECTOR_DATA_TOGGLE","Collapse","toggleList","filterElement","foundElement","activeChildren","activeInstance","dimension","scrollSize","selected","triggerArray","isOpen","BSCollapse","RIGHT_MOUSE_BUTTON","CLASS_NAME_DROPUP","CLASS_NAME_DROPEND","CLASS_NAME_DROPSTART","CLASS_NAME_DROPUP_CENTER","CLASS_NAME_DROPDOWN_CENTER","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","SELECTOR_NAVBAR","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","PLACEMENT_TOPCENTER","PLACEMENT_BOTTOMCENTER","Dropdown","referenceElement","popperConfig","parentDropdown","isEnd","openToggles","composedPath","isMenuTarget","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","EVENT_HIDE_MDB","EVENT_HIDDEN_MDB","EVENT_SHOW_MDB","EVENT_SHOWN_MDB","ANIMATION_CLASS","ANIMATION_SHOW_CLASS","ANIMATION_HIDE_CLASS","BSDropdown","isPrefersReducedMotionSet","CLASSNAME_RIPPLE","CLASSNAME_RIPPLE_WAVE","CLASSNAME_RIPPLE_WRAPPER","SELECTOR_COMPONENT","CLASSNAME_UNBOUND","GRADIENT","DEFAULT_RIPPLE_COLOR","BOOTSTRAP_COLORS","TRANSITION_BREAK_OPACITY","Ripple","shadow","btn","wrapper","layerX","layerY","duration","diameterOptions","diameter","radiusValue","opacity","styles","rippleHTML","ripple","rippleEl","time","pythagorean","sideA","sideB","positionCenter","quadrant","getCorner","color","rgbValue","gradientImage","REGEXP_CLASS_COLOR","hexToRgb","namedColorsToRgba","tempElem","flag","rgbaToRgb","CLASSNAME_THUMB","SELECTOR_THUMB_VALUE","SELECTOR_THUMB","Range","RANGE_THUMB","rangeInput","inputValue","minValue","maxValue","thumbValue","newValue","Animate","animation","targetId","elementOffsetTop","elementHeight","windowHeight","shouldBeVisible","isElementVisible","isNullOrUndef","isArray","type","isObject","isNumberFinite","finiteOrDefault","valueOrDefault","toPercentage","toDimension","thisArg","each","loopable","reverse","_elementsEqual","a0","a1","ilen","v0","v1","clone$1","source","klen","k","isValidKey","_merger","tval","sval","merge","sources","merger","mergeIf","_mergerIf","keyResolvers","resolveObjectKey","_getKeyResolver","_splitKey","parts","tmp","part","_capitalize","str","defined","isFunction","setsEqual","b","_isClickEvent","PI","TAU","PITAU","INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","niceNum","range","roundedRange","almostEquals","niceRange","fraction","_factorize","sqrt","isNumber","epsilon","almostWhole","rounded","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","table","cmp","hi","lo","mid","_lookupByKey","last","_rlookupByKey","_filterBetween","values","arrayEvents","listenArrayEvents","listener","base","res","unlistenArrayEvents","stub","listeners","_arrayUnique","set","requestAnimFrame","throttled","updateFn","updateArgs","ticking","rest","delay","_toLeftRightCenter","align","_alignStartEnd","_textX","rtl","_getStartAndCountOfVisiblePoints","points","animationsDisabled","pointCount","count","iScale","_parsed","minDefined","maxDefined","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","changed","atEdge","elasticIn","elasticOut","effects","lim","h","p2b","n2b","b2n","n2p","map$1","hex","h1","h2","eq","isShort","hexParse","ret","alpha","hexString","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","hueValue","g","rgb2hsl","calln","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","p1","p2","rotate","deg","hslString","names$1","unpack","unpacked","tkeys","j","ok","nk","names","nameParse","RGB_RE","rgbParse","rgbString","to","from","interpolate","rgb1","rgb2","modHSL","ratio","clone","proto","fromObject","functionParse","Color","weight","c1","c2","w2","w1","index_esm","isPatternOrGradient","getHoverColor","overrides","descriptors","getScope$1","scope","Defaults","_descriptors","ctx","targetScope","targetName","scopeObject","targetScopeObject","privateName","local","defaults","toFontString","font","_measureText","gc","longest","string","textWidth","_longestText","arrayOfThings","cache","jlen","thing","nestedThing","gcLen","_alignPixel","chart","pixel","devicePixelRatio","halfWidth","clearCanvas","canvas","drawPoint","drawPointLegend","xOffset","yOffset","size","cornerRadius","rotation","radius","rad","_isPointInArea","point","area","margin","clipArea","unclipArea","_steppedLineTo","mode","midpoint","_bezierCurveTo","renderText","opts","lines","stroke","line","setRenderOpts","decorateText","metrics","yDecoration","addRoundedRectPath","LINE_HEIGHT","FONT_STYLE","toLineHeight","matches","numberOrZero","_readValueToProps","props","objProps","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","inputs","info","cacheable","_addGrace","minmax","grace","beginAtZero","change","keepZero","add","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","_resolve","_cached","_resolveWithPrefixes","getKeysFromAllScopes","storage","_attachContext","proxy","subProxy","descriptorDefaults","receiver","_resolveWithContext","_scriptable","_indexable","_allKeys","readKey","needsSubResolver","_proxy","_context","_subProxy","_resolveScriptable","_resolveArray","_stack","createSubResolver","isIndexable","arr","resolver","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","parsed","EPSILON","getPoint","getValueAxis","indexAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","delta","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","pt","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","loop","controlPoints","prev","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","getStyle","positions","getPositionedStyle","suffix","pos","useOffsetPos","getCanvasPosition","touches","box","getRelativePosition","currentDevicePixelRatio","borderBox","paddings","borders","getContainerSize","maxWidth","maxHeight","containerStyle","containerBorder","containerPadding","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","supportsEventListenerOptions","passiveSupported","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","getNumberFormat","locale","cacheKey","formatter","formatNumber","num","getRightToLeftAdapter","rectX","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","original","restoreTextDirection","propertyFn","normalizeSegment","getSegment","segment","bounds","startBound","endBound","between","normalize","_boundSegment","compare","inside","subStart","prevValue","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","spanGaps","solidSegments","cur","_computeSegments","segmentOptions","splitByStyles","completeLoop","doSplitByStyles","chartContext","baseStyle","readStyle","datasetIndex","prevStyle","addStyle","st","dir","styleChanged","Animator","anims","date","callbacks","numSteps","remaining","draw","charts","cb","animator","transparent","interpolators","factor","c0","Animation","cfg","currentValue","elapsed","remain","promises","rej","resolved","numbers","colors","animationOptions","Animations","animatedProps","option","newOptions","resolveTargetOptions","animations","awaitAll","running","properties","anim","scaleClip","scale","allowedOverflow","defaultClip","toClip","getSortedDatasetIndices","filterVisible","metasets","applyStack","stack","dsIndex","singleMode","otherValue","convertObjectDataToArray","adata","isStacked","stacked","getStackKey","indexScale","valueScale","getUserBounds","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","updateStacks","controller","iAxis","vAxis","itemStacks","getFirstScaleId","scales","createDatasetContext","createDataContext","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","createStack","canStack","DatasetController","dataset","chooseId","xid","yid","rid","iid","vid","scaleID","_data","resetNewElements","stackChanged","oldStacked","scopeKeys","_stacked","sorted","isNotInOrderComparedToPrev","labels","singleScale","xAxisKey","yAxisKey","parsedValue","otherScale","otherMin","otherMax","_skip","drawActiveElementsOnTop","elementType","sharing","transition","sharedOptions","firstOpts","previouslySharedOptions","includeOptions","arg1","arg2","numMeta","numData","move","removed","newCount","getAllScaleValues","visibleMetas","computeMinSampleSize","curr","updateMinAndPrev","computeFitCategoryTraits","ruler","stackCount","thickness","computeFlexCategoryTraits","pixels","percent","parseFloatBar","startValue","endValue","barStart","barEnd","parseValue","parseArrayOrPrimitive","isFloatBar","barSign","actualBase","borderProps","setBorderSkipped","edge","parseEdge","swap","startEnd","orig","v2","setInflateAmount","inflateAmount","BarController","iAxisKey","vAxisKey","bars","reset","horizontal","vpixels","ipixels","dataIndex","skipNull","barThickness","baseValue","minBarLength","floating","length","head","startPixel","endPixel","halfGrid","maxBarThickness","stackIndex","BubbleController","getRatioAndOffset","circumference","cutout","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","DoughnutController","getter","chartArea","arcs","spacing","maxSize","chartWeight","maxRadius","outerRadius","innerRadius","radiusLength","animationOpts","centerX","centerY","animateScale","arc","metaData","total","ringWeightOffset","pointStyle","label","legendItem","legend","tooltipItem","dataLabel","LineController","_dataset","maxGapLength","directUpdate","prevParsed","nullData","lastPoint","PolarAreaController","minSize","datasetStartAngle","defaultAngle","PieController","RadarController","pointPosition","Element$1","useFinalPosition","final","Element","formatters","tickValue","ticks","notation","maxTick","calculateDelta","logDelta","numDecimal","Ticks","_ctx","autoSkip","tickOpts","ticksLimit","determineMaxTicks","majorIndices","getMajorIndices","numMajorIndices","first","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","skip","tickLength","maxScale","maxChart","evenMajorSpacing","getEvenSpacing","factors","majorStart","majorEnd","diff","reverseAlign","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","garbageCollect","caches","getTickMarkLength","getTitleHeight","createScaleContext","createTickContext","tick","titleAlign","titleArgs","titleX","titleY","positionAxisID","Scale","raw","_userMin","_userMax","_suggestedMin","_suggestedMax","metas","sampleSize","samplingEnabled","reversePixels","numTicks","minRotation","maxRotation","labelRotation","tickWidth","maxLabelDiagonal","labelSizes","maxLabelWidth","maxLabelHeight","titleOpts","gridOpts","display","isHorizontal","titleHeight","widest","highest","tickPadding","angleRadians","cos","sin","labelHeight","labelWidth","isRotated","labelsBelowTicks","offsetLeft","offsetRight","paddingLeft","paddingRight","paddingTop","paddingBottom","widths","heights","widestLabelSize","highestLabelSize","tickFont","fontString","lineHeight","nestedLabel","valueAt","idx","decimal","optionTicks","rot","grid","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","limit","step","optsAtIndex","lineWidth","lineColor","borderDash","borderDashOffset","tickColor","tickBorderDash","tickBorderDashOffset","crossAlign","mirror","tickAndPadding","hTickAndPadding","textAlign","lineCount","textOffset","textBaseline","halfCount","strokeColor","strokeWidth","tickTextAlign","labelPadding","backgroundColor","drawLine","lastLineWidth","tz","gz","axisID","fontSize","TypedRegistry","override","parentScope","isIChartComponent","registerDefaults","itemDefaults","routeDefaults","routes","propertyParts","sourceName","sourceScope","Registry","typedRegistry","reg","itemReg","registry","camelMethod","ScatterController","showLine","abstract","DateAdapter","chartOptions","format","timestamp","amount","unit","weekday","members","adapters","binarySearch","metaset","intersect","_sorted","lookupMethod","evaluateInteractionItems","getDistanceMetricForAxis","useX","useY","deltaX","deltaY","getIntersectItems","includeInvisible","getNearestRadialItems","evaluationFunc","getNearestCartesianItems","distanceMetric","minDistance","inRange","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","wrap","setLayoutDims","params","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","buildLayoutBoxes","centerHorizontal","centerVertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","newWidth","newHeight","widthChanged","heightChanged","handleMaxPadding","updatePos","getMargins","marginForPositions","fitBoxes","refitBoxes","refit","same","other","setBoxDims","placeBoxes","userPadding","layoutItem","minPadding","availableWidth","availableHeight","verticalBoxes","horizontalBoxes","visibleVerticalBoxCount","BasePlatform","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","isNullOrEmpty","initCanvas","renderHeight","renderWidth","displayWidth","displayHeight","eventListenerOptions","addListener","removeListener","fromNativeEvent","nodeListContains","nodeList","createAttachObserver","observer","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","releaseObserver","createProxyAndListen","DomPlatform","initial","proxies","_detectPlatform","PluginService","hook","filter","descriptor","all","plugins","allPlugins","createDescriptors","previousDescriptors","localIds","getOpts","pluginOpts","getIndexAxis","datasetDefaults","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","axisFromPosition","determineAxis","scaleOptions","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","defaultScaleOptions","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","generate","addIfFound","datasetType","mainScope","resetCache","_scopeCache","keyLists","subPrefixes","getResolver","needContext","subResolver","resolverCache","hasFunction","isScriptable","scriptable","indexable","version","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onAnimationProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","Chart$1","userConfig","initialCanvas","existingChart","maintainAspectRatio","_aspectRatio","newSize","newRatio","scalesOptions","axisOptions","scaleOpts","updated","isRadial","scaleType","scaleClass","hasUpdated","datasets","newControllers","ControllerClass","datasetElementType","dataElementType","animsDisabled","_active","_lastEvent","existingEvents","newEvents","_hiddenIndices","changes","_dataChanges","datasetCount","makeSet","changeSet","noArea","layers","clip","useClip","visible","platform","_add","_remove","detached","attached","enabled","activeElements","lastActive","replay","hoverOptions","deactivated","activated","eventFilter","invalidatePlugins","Chart","enumerable","clipArc","pixelMargin","angleMargin","toRadiusCorners","parseBorderRadius$1","angleDelta","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","rThetaToXY","theta","pathArc","circular","innerR","spacingOffset","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStart","outerEnd","innerStart","innerEnd","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","p8","outerStartX","outerStartY","outerEndX","outerEndY","drawArc","fullCircles","drawFullCircleBorders","inner","drawBorder","borderWidth","borderJoinStyle","ArcElement","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","setStyle","lineTo","getLineMethod","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","avgX","countX","prevX","lastY","pointIndex","drawX","truncX","_getSegmentMethod","_getInterpolationMethod","strokePathWithCache","path","strokePathDirect","segmentMethod","usePath2D","LineElement","_interpolate","interpolated","inRange$1","PointElement","mouseX","mouseY","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","parseBorderRadius","enableBorderRadius","maxR","enableBorder","boundingRects","skipX","skipY","hasRadius","addNormalRectPath","inflateRect","refRect","BarElement","borderColor","outer","addRectPath","lttbDecimation","samples","decimated","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","minMaxDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","cleanDecimatedDataset","cleanDecimatedData","getStartAndCountOfVisiblePointsSimplified","plugin_decimation","xAxis","threshold","_segments","tpoints","_findSegmentEnd","_getBounds","targetSegments","tgt","subBounds","fillSources","fillSource","_getEdge","_pointsFromSegments","linePoints","_createBoundaryLine","_shouldApplyFill","_resolveTarget","propagate","fill","_decodeFill","parseFillOption","decodeTargetIndex","firstCh","_getTargetPixel","_getTargetValue","fillOption","_buildStackLine","sourcePoints","linesBelow","getLinesBelow","addPointsBelow","below","sourcePoint","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","_getTarget","getLineByIndex","computeBoundary","computeCircularBoundary","computeLinearBoundary","_drawfill","lineOpts","above","doFill","clipVertical","clipY","lineLoop","src","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","_args","getBoxSize","labelOpts","boxHeight","boxWidth","itemsEqual","Legend","legendItems","labelFont","itemHeight","hitboxes","lineWidths","totalHeight","row","columnSizes","heightLimit","totalWidth","currentColWidth","currentColHeight","col","rtlHelper","hitbox","defaultColor","fontColor","halfFontSize","cursor","drawLegendBox","drawOptions","yBoxTop","xBoxLeft","borderRadius","fillText","realX","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","isListened","hoveredItem","sameItem","plugin_legend","ci","usePointStyle","Title","textSize","fontOpts","createTitle","plugin_title","titleBlock","plugin_subtitle","positioners","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","getTooltipSize","tooltip","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","bodyLineHeight","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","caretSize","caretPadding","topLeft","topRight","bottomLeft","bottomRight","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","beforeTitle","afterTitle","bodyItems","scoped","beforeFooter","afterFooter","labelColors","labelPointStyles","labelTextColors","positionAndSize","backgroundPoint","tooltipPoint","caretPosition","ptX","ptY","x3","y3","titleSpacing","labelPointStyle","colorX","rtlColorX","yOffSet","colorY","outerX","innerX","bodySpacing","bodyAlign","displayColors","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","tooltipSize","animX","animY","hasTooltipContent","positionChanged","caretX","caretY","plugin_tooltip","labelCount","addIfString","addedLabels","findOrAddLabel","CategoryScale","added","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","decimalPlaces","relativeLabelSize","LinearScaleBase","setMin","setMax","minSign","maxSign","maxTicksLimit","stepSize","numericGeneratorOptions","LinearScale","isMajor","tickVal","generateTicks","endExp","endSignificand","exp","significand","lastTick","LogarithmicScale","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","limits","valueCount","pointLabelOpts","additionalAngle","plFont","hLimits","vLimits","updateLimits","buildPointLabelItems","extra","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","drawPointLabels","pointLabels","backdropColor","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","drawRadiusLine","gridLineOpts","createPointLabelContext","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","scaledDistance","pointLabel","distanceFromCenter","angleLines","INTERVALS","UNITS","sorter","parse","adapter","parser","isoWeekday","determineUnitForAutoTicks","minUnit","capacity","interval","determineUnitForFormatting","determineMajorUnit","addTick","timestamps","setMajorTicks","majorUnit","major","ticksFromTimestamps","TimeScale","_applyBounds","timeOpts","minor","hasWeekday","formats","minorFormat","majorFormat","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","displayFormats","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","isMergeableObject","isNonNullObject","isSpecial","stringValue","isReactElement","canUseSymbol","REACT_ELEMENT_TYPE","emptyTarget","cloneUnlessOtherwiseSpecified","deepmerge","defaultArrayMerge","getMergeFunction","customMerge","getEnumerableOwnPropertySymbols","symbol","getKeys","propertyIsOnObject","propertyIsUnsafe","mergeObject","destination","sourceIsArray","targetIsArray","sourceAndTargetTypesMatch","deepmerge_1","cjs","DEFAULT_LEGEND_COLOR","Chartjs","Decimation","Filler","SubTitle","CLASSNAME_CHARTS","GENERATE_DATA","defaultType","mergeObjects","DEFAULT_DARK_OPTIONS","DARK_OPTIONS_TYPE","darkOptions","configOptions","MyType","theme","dataAttr","xyScale","rScale","radials","opt","systemColor","mutationList","mutation","dark","chartData","EVENT_CLICK_DATA_API","CLASSNAME_LIGHTBOX","CLASSNAME_GALLERY","CLASSNAME_TOOLBAR","CLASSNAME_GALLERY_CONTENT","CLASSNAME_FULLSCREEN_BTN","CLASSNAME_ZOOM_BTN","CLASSNAME_LEFT_TOOLS","CLASSNAME_RIGHT_TOOLS","CLASSNAME_CLOSE_BTN","CLASSNAME_LOADER","CLASSNAME_ARROW_LEFT","CLASSNAME_ARROW_RIGHT","CLASSNAME_CAPTION_WRAPPER","CLASSNAME_CAPTION","CLASSNAME_IMG","SELECTOR_TOGGLE","OPTIONS_TYPE","Lightbox","images","lightboxImages","image","leftTools","rightTools","closeBtn","spinner","spinnerContent","leftArrow","captionWrapper","caption","promiseArray","imageArray","positionLeft","newImg","newImgWrapper","newPositionLeft","touch","initialDistance","finalDistance","distanceChange","screenWidth","movement","tapLength","currentImg","startEvent","completeEvent","lightbox","EVENT_SELECT","EVENT_HOVER","EVENT_KEYUP","Rating","indexBeforeChange","hasOwnTooltips","after","before","classList","get","div","elMatches","query","remove","queryChildren","cls","scrollingClassTimeout","addScrollingClass","removeScrollingClass","setScrollingClassInstantly","EventElement$1","EventManager$1","ee","EventElement","onceHandler","createEvent","processScrollDiff$2","useScrollingClass","forceFireReachEvent","fields","processScrollDiff","contentHeight","containerHeight","up","down","toInt","isEditable","DOM.matches","outerWidth","CSS.get","env","updateGeometry$1","roundedScrollTop","DOM.queryChildren","DOM.remove","getThumbSize","updateCss","thumbSize","xRailOffset","CSS.set","yRailOffset","clickRail$1","updateGeometry","dragThumb$1","bindMouseScrollHandler","pageY","railYHeight","scrollbarY","scrollbarYHeight","scrollbarYRail","startingScrollTop","startingMousePageY","scrollBy","mouseMoveHandler","mouseUpHandler","bindMoves","touchMode","keyboard$1","elementHovered","scrollbarFocused","shouldPreventDefault","wheel$1","isTop","isBottom","isLeft","isRight","hitsBound","getDeltaFromEvent","shouldBeConsumedByChild","maxScrollTop","maxScrollLeft","mousewheelHandler","shouldPrevent","touch$1","magnitudeX","magnitudeY","applyTouchMove","differenceX","differenceY","startOffset","startTime","speed","easingLoop","getTouch","shouldHandle","touchStart","touchMove","currentOffset","currentTime","timeGap","touchEnd","defaultSettings","clickRail","dragThumb","keyboard","wheel","PerfectScrollbar$1","userSettings","focus","blur","originalScrollLeft","EventManager","DOM.div","railXStyle","railYStyle","handlerName","toggler","ancestors","allElements","hasDisabledAttribute","LEFT_ARROW","UP_ARROW","RIGHT_ARROW","DOWN_ARROW","HOME","END","PAGE_UP","PAGE_DOWN","ENTER","SPACE","ESCAPE","TAB","BACKSPACE","DELETE","Swipe$1","displacement","swipe","Touch$1","ARROW_CLASS","BACKDROP_CLASS","SELECTOR_TOGGLE_COLLAPSE","SELECTOR_SHOW_SLIM","SELECTOR_HIDE_SLIM","SELECTOR_NAVIGATION","SELECTOR_COLLAPSE","SELECTOR_LINK","TRANSLATION_LEFT","TRANSLATION_RIGHT","instanceCount","Sidenav","findContainer","containerStart","containerEnd","boundry","scrollBarWidth","menu","classes","show","initialValue","inverseDirecion","link","menuIndex","ID","marginLeft","marginRight","siblingsHeight","PerfectScrollbar","wave","Touch","collapse","category","collapseToggler","optionColor","slim","slimCollapsedElements","fullWidthElements","toggleElements","translation","paddingPosition","marginPosition","elementSelector","EVENT_CLOSE","EVENT_CLOSED","Alert","TYPE_OPTIONS","Stack","basicCondition","parentTopOffset","parentBottomBoundry","parentRect","previousElement","SELECTOR_ALERT","EVENT_CLOSE_BS","EVENT_CLOSED_BS","BSAlert","updatedData","oppositeY","oppositeX","EVENT_MOUSEOVER","EVENT_MOUSEOUT","CLASS_NAME_HIDE","Toast","isInteracting","SELECTOR_TOAST","SELECTOR_HEADER","BSToast","header","toasts","getTimepickerTemplate","format24","okLabel","cancelLabel","headId","footerId","bodyId","pickerId","clearLabel","inline","showClearBtn","amLabel","pmLabel","normalTemplate","inlineTemplate","getToggleButtonTemplate","iconClass","formatToAmPm","hours","minutes","amOrPm","originalHours","isValidDate","takeValue","formatNormalHours","toggleClassHandler","findMousePosition","clientX","clientY","isMobile","checkBrowser","valueInput","compareTimes","time1","time2","time1Hour","time1Minutes","time1maxTimeFormat","time2Hour","time2Minutes","time2maxTimeFormat","bothFormatsEqual","getCurrentTime","currentHours","currentMinutes","setMinTime","minTime","disabledPast","format12","setMaxTime","maxTime","disabledFuture","checkValueBeforeAccept","disablePast","disableFuture","hourHeader","minutesHeader","minute","maxTimeHour","maxTimeMin","maxTimeFormat","minTimeHour","minTimeMin","minTimeFormat","_verifyMaxTimeHourAndAddDisabledClass","tips","_verifyMinTimeHourAndAddDisabledClass","_verifyMaxTimeMinutesTipsAndAddDisabledClass","maxMinutes","maxHour","currHour","_verifyMinTimeMinutesTipsAndAddDisabledClass","minMinutes","minHour","_convertHourToNumber","hour","DATA_API_KEY","EVENT_KEYDOWN_DATA_API","EVENT_MOUSEDOWN_DATA_API","EVENT_MOUSEUP_DATA_API","EVENT_MOUSEMOVE_DATA_API","EVENT_MOUSELEAVE_DATA_API","EVENT_MOUSEOVER_DATA_API","EVENT_TOUCHMOVE_DATA_API","EVENT_TOUCHEND_DATA_API","EVENT_TOUCHSTART_DATA_API","EVENT_VALUE_CHANGED","ACTIVE_CLASS","AM_CLASS","BUTTON_CANCEL_CLASS","BUTTON_CLEAR_CLASS","BUTTON_SUBMIT_CLASS","CIRCLE_CLASS","CLOCK_ANIMATION_CLASS","CLOCK_CLASS","CLOCK_INNER_CLASS","CLOCK_WRAPPER_CLASS","CURRENT_CLASS","CURRENT_INLINE_CLASS","WRAPPER_OPEN_ANIMATION_CLASS","WRAPPER_CLOSE_ANIMATION_CLASS","HAND_CLASS","HOUR_CLASS","HOUR_MODE_CLASS","ICON_DOWN_CLASS","ICON_INLINE_HOUR_CLASS","ICON_INLINE_MINUTE_CLASS","ICON_UP_CLASS","ICONS_HOUR_INLINE","MIDDLE_DOT_CLASS","MINUTE_CLASS","MODAL_CLASS","PM_CLASS","TIPS_ELEMENT_CLASS","TIPS_HOURS_CLASS","TIPS_INNER_ELEMENT_CLASS","TIPS_INNER_HOURS_CLASS","TIPS_MINUTES_CLASS","TRANSFORM_CLASS","WRAPPER_CLASS","INPUT_CLASS","Timepicker","textContent","findInArray","clockClass","tipsClass","maxTimeMinutes","minTimeMinutes","clock","clockWidth","clockHeight","currentFormat","spanToTips","zero","hoursFormat","_amOrPm","toggleButton","maxFormat","minFormat","_isAmEnabled","_isPmEnabled","_isMouseOnInnerClock","maxHourDegrees","minHourDegrees","_handleKeyboardEvents","innerTips","currentHour","nextHourTip","numberToAdd","nextHour","innerTip","_handle24FormatMouseEvents","minInnerHourDegrees","maxInnerHourDegrees","minFormatAndCurrentFormatEqual","maxFormatAndCurrentFormatEqual","isMinHourValid","isMaxHourValid","innerHour","hoursView","innerHoursExist","allTipsMinutes","allTipsHours","allInnerTips","hourTime","hourObjDegrees","addDegrees","minHourMinutes","minObjDegrees","addMinDegrees","innerHourDegrees","cancelBtn","rotateDegrees","fixForInput","checkInputValue","modalId","selectedHour","minuteNumber","countMinutes","countHours","incrementHours","counteredNumber","incrementMinutes","addHours","addMinutes","subHours","subMinutes","_clearAsyncs","_clearAndSetThisInterval","addHoursOrAddMinutes","isEventTypeMousedownOrTouchstart","isHourBtnFocused","isMinuteBtnFocused","isBodyFocused","closeModalOnBackdropClick","runRemoveFunction","readOnly","focusInputAfterApprove","hourModeActive","selectedMinutes","isHourLessThanMinHour","isHourGreaterThanMaxHour","hourEqualToMaxAndMinutesGreaterThanMax","hourEqualToMinAndMinutesLessThanMin","allIconsInlineHour","allIconsInlineMinute","icon","hourValue","minuteValue","switchTips","toggleActiveClass","allTipsInnerHours","selectedFormat","outerHoursTips","innerHoursTips","allTipsHour","clockWrapper","closeModalOnMinutesClick","switchHoursToMinutesOnClick","innerHours","mouseClick","rds","touchClick","xPos","yPos","elFromPoint","isHourLessThanMinOrGreaterThanMax","submitBtn","minDegrees","minTimeObj","_degrees","minuteTimes","changeMinutes","makeDegrees","touchDegrees","touchHours","movedDegrees","movedHours","allTipsInner","maxMin","minMin","maxHourTime","minHourTime","maxMinDegrees","minMinDegrees","isToRemove","number","regexAMFormat","regexNormalFormat","testedAMRegex","Navbar","EVENT_COMPLETED","InfiniteScroll","CLASSNAME_LAZYLOAD","SELECTOR_LAZYLOAD","SELECTOR_ELEMENTS","EVENT_LOADED","EVENT_ERROR","LazyLoad","attr","getDate","getDayNumber","getMonth","getYear","getFirstDayOfWeek","year","month","firstDayIndex","sundayIndex","getDaysInMonth","getMonthEnd","createDate","getToday","addYears","years","addMonths","months","dayOfPreviousMonth","dayOfNewMonth","addDays","days","day","convertStringToDate","dateString","dateArr","compareDates","date1","date2","isSameDate","getYearsOffset","activeDate","yearsInView","yearsDifference","getStartYear","modulo","minDate","maxDate","startYear","isDateDisabled","currentDate","isBeforeMin","isAfterMax","isDisabledPast","isDisabledFuture","isMonthDisabled","maxYear","maxMonth","minYear","minMonth","currentYear","currentMonth","isMonthAndYearAfterMax","isMonthAndYearBeforeMin","isMonthAndYearDisabledPast","isMonthAndYearDisabledFuture","isYearDisabled","isNextDateDisabled","view","lastYearInView","firstYearInView","areDatesInSameView","isPreviousDateDisabled","getDatepickerTemplate","selectedDate","selectedYear","selectedMonth","monthsInRow","yearsInRow","dayNumber","inlineContent","createMainContent","modalContent","createHeader","getBackdropTemplate","createCustomHeader","weekdaysShort","weekdaysFull","monthsShort","headerTemplateModifier","headerTemplate","mainContentTemplate","createControls","createViewTemplate","createFooter","viewTemplate","createDayViewTemplate","createMonthViewTemplate","createYearViewTemplate","okBtn","cancelButton","clearButton","headerDate","dates","getDatesArray","tableHeadContent","tableBodyContent","week","previousMonth","nextMonth","firstDay","daysInMonth","daysInPreviousMonth","daysInWeek","isCurrentMonth","previousMonthDay","daysLeft","getMonthsArray","monthIndex","monthsRow","getYearsArray","activeYear","yearsOffset","yearsRow","YEARS_IN_VIEW","YEARS_IN_ROW","MONTHS_IN_ROW","EVENT_OPEN","BACKDROP_OPEN_ANIMATION_CLASS","BACKDROP_CLOSE_ANIMATION_CLASS","CONTAINER_OPEN_ANIMATION_CLASS","CONTAINER_CLOSE_ANIMATION_CLASS","CLASS_FORM_ICON_TRAILING","SELECTOR_MODAL_CONTAINER","SELECTOR_DROPDOWN_CONTAINER","SELECTOR_VIEW_CHANGE_BUTTON","SELECTOR_PREVIOUS_BUTTON","SELECTOR_NEXT_BUTTON","SELECTOR_OK_BUTTON","SELECTOR_CANCEL_BUTTON","SELECTOR_CLEAR_BUTTON","SELECTOR_DATES_CONTAINER","Datepicker","activeCell","sortedWeekdaysNarrow","weekdaysNarrow","openEvent","cell","monthNames","dayNames","headerDateEl","datepickerHeaderContainer","isContainer","isContainerContent","oldActiveDate","previousActiveCell","cells","cellDate","cellYear","cellMonth","yearsPerRow","yearsPerPage","closeEvent","datepicker","generatedToggleButton","currentSelected","currentFocused","dd","ddd","dddd","mm","mmm","mmmm","yy","yyyy","preformatted","formatted","datePart","newDate","nextYear","previousYear","delimeters","delimeterPattern","regExp","dateParts","formatParts","isMonthString","datesArray","monthsNames","monthValue","monthLabels","monthLabel","SELECTOR_POPCONFIRM_BODY","EVENT_CANCEL","EVENT_CONFIRM","Popconfirm","tempElement","confirmButton","popoverTemplate","popover","popconfirmTemplate","modal","isElementContent","pagination","entriesOptions","fullPagination","rowsText","allText","loading","columns","selectable","multi","checkboxHeader","headers","column","fixedOffset","rows","noFoundMessage","edit","rowsTemplate","checkbox","innerRow","tableTemplate","loadingMessage","loaderClass","generateRows","columnsTemplate","generateColumns","paginationTemplate","field","fieldA","fieldB","search","paginate","activePage","firstVisibleEntry","SELECTOR_FORM_CHECK_INPUT","CLASS_NAME_SELECTED","CLASS_NAME_ACITVE","SelectOption","nativeOption","multiple","disabled","hidden","secondaryText","groupId","SelectionModel","optionIndex","selection","allOptionsSelected","preventKeydown","getWrapperTemplate","formOutline","role","multiselectable","validFeedback","validFeedBackText","invalidFeedback","invalidFeedBackText","clearBtn","clearBtnText","getDropdownTemplate","selectAllOption","customContent","dropdownContainer","dropdown","optionsWrapper","optionsList","getOptionsListTemplate","getFilterTemplate","optionsNodes","getMultipleOptionsNodes","getSingleOptionsNodes","placeholder","inputGroup","getOptionsNodes","selectAllNode","createSelectAllNode","nodes","group","createOptionGroupTemplate","createOptionTemplate","isSelected","optionNode","getOptionContentTemplate","getOptionIconTemplate","getCheckboxTemplate","getSecondaryTextTemplate","optionGroup","getFakeValueTemplate","fakeValue","EVENT_SELECTED","EVENT_DESELECTED","EVENT_CHANGE_NATIVE","EVENT_OPENED","SELECTOR_LABEL","SELECTOR_INPUT","SELECTOR_FILTER_INPUT","SELECTOR_OPTIONS_WRAPPER","SELECTOR_OPTIONS_LIST","SELECTOR_OPTION","SELECTOR_CUSTOM_CONTENT","SELECTOR_NO_RESULTS","SELECTOR_FORM_OUTLINE","CLASS_NAME_INITIALIZED","CLASS_NAME_OPEN","CLASS_NAME_FOCUSED","CLASS_NAME_OPTION_GROUP_LABEL","CLASS_NAME_SELECT_ALL_OPTION","ANIMATION_TRANSITION_TIME","Select","select","optionsToRender","nestedOption","groupDisabled","availableOptions","containerSelector","inputWrapper","isCloseKey","visibleOptions","groupsNumber","scrollToIndex","optionHeight","optionOffset","isBelow","groupsList","newActiveOption","currentActiveOption","isValueEmpty","selectAllSelected","allSelected","inputWidth","currentActive","firstSelected","searchTerm","debounceTime","filtered","filterFn","isOptionGroup","isValidOption","hasNoResultsText","hasFilteredOptions","noResultsTemplate","optionsWrapperContent","optionsListTemplate","filterValue","isSelectContent","isDropdown","isDropdownContent","isButton","button","hasFilterValue","wrapperParent","selectionValue","correspondingOption","CLASS_DATATABLE","CLASS_FIXED_CELL","SELECTOR_BODY","SELECTOR_CELL","SELECTOR_HEADER_CHECKBOX","SELECTOR_PAGINATION_RIGHT","SELECTOR_PAGINATION_LEFT","SELECTOR_PAGINATION_START","SELECTOR_PAGINATION_END","SELECTOR_PAGINATION_NAV","SELECTOR_SELECT","SELECTOR_SORT_ICON","SELECTOR_ROW","SELECTOR_ROW_CHECKBOX","EVENT_RENDER","EVENT_ROW_CLICKED","EVENT_UPDATE","EVENT_VALUE_CHANGED_SELECT","TYPE_COLUMN_FIELDS","DEFAUL_COLUMN","Datatable","output","headerRow","entriesOptionsAsArray","datatableBody","rowIndex","navigation","columnIndex","param1","param2","STEPPER_HORIZONTAL","STEPPER_VERTICAL","STEPPER_MOBILE","EVENT_SUBMIT","EVENT_RESIZE","EVENT_ANIMATIONEND","EVENT_CHANGE_STEP","EVENT_CHANGED_STEP","EVENT_INVALID","EVENT_VALID","STEP_CLASS","HEAD_CLASS","HEAD_TEXT_CLASS","CONTENT_CLASS","COMPLETED_CLASS","INVALID_CLASS","DISABLED_CLASS","VERTICAL_CLASS","CONTENT_HIDE_CLASS","HORIZONTAL_CLASS","MOBILE_CLASS","MOBILE_HEAD_CLASS","MOBILE_FOOTER_CLASS","MOBILE_PROGRESS_BAR_CLASS","MOBILE_PROGRESS_CLASS","NEXT_BTN_CLASS","BACK_BTN_CLASS","MOBILE_ACTIVE_STEP_ID","MOBILE_NUMBER_OF_STEPS_ID","MOBILE_BUTTON_NEXT","MOBILE_BUTTON_BACK","MOBILE_STEPPER_HEAD","MOBILE_PROGRESS_BAR","MOBILE_FOOTER","Stepper","activeStep","stepHead","stepIndex","shouldBeHorizontal","shouldBeVertical","shouldBeMobile","stepContent","numberOfSteps","isValid","activeStepIndex","activeStepElement","inputNotches","stepComputed","stepHeight","isActiveStep","stepContentHeight","allStepsElement","ActiveStepsElement","focusedStep","nextStep","prevStep","focusedStepHead","activeStepHead","nextStepHead","prevStepHead","firstStepHead","lastStep","lastStepHead","btnBack","btnNext","focusedElement","newTarget","changeStepEvent","stepsToCheck","nextStepToValidate","progressBar","form","stepElement","stepFooter","contentStyle","footerStyle","headStyle","stepHeadHeight","stepFooterHeight","isForward","nextStepContent","activeStepContent","nextStepAnimation","activeStepAnimation","ANIMATED_CLASS","EVENT_ACTIVATED","EVENT_DEACTIVATED","Sticky","stickyAnimationUnsticky","animationDuration","doc","stickyDirection","isCorrectScrollDirection","isPushPointReached","shouldBeSticky","shouldNotBeSticky","isScrollUp","isUnstickyAnimationInProgress","isScrolledAboveElement","stickyActiveClass","stickyAnimationSticky","stickyOffset","stickyPosition","stickyBoundary","parentOffset","stopPoint","stopper","isStickyTop","isStickyBottom","isStickyBoundary","isBelowStopPoint","isBelowParentElementEnd","addClass","removeClass","offsetElement","rectElement","itemToCopy","COPIED_ITEM","TouchUtil","rightMost","t1","t2","_position","EVENT_UP","Press","pointers","EVENT_START","EVENT_END","EVENT_MOVE","LEFT","RIGHT","Pan","postion","movedPosition","displacementMoved","pan","movedDirection","Pinch","origin","Tap","taps","Rotate","EVENT_SCROLL_START","EVENT_SCROLL_END","EVENT_SCROLL_CANCEL","SmoothScroll","heightFromTop","elY","containerY","easing","motionName","linkExist","isHashInLink","scrollingContainer","positionFrom","positionTo","scrollProgress","progressWrongValue","scrollEnd","speedWrongValue","supportsPassive","wheelOpt","wheelEvent","prototypeAccessors","this$1","processScrollDiff$1","ref","positionTop","CLASSNAME_PS","MDB_NAME","PS_NAME","EVENTS","PerfectScrollbars","ps","mdb","backdropID","backdropOpacity","CLASS_SPINNER","SELECTOR_LOADING_ICON","SELECTOR_LOADING_TEXT","SHOW_EVENT","Loading","spinnerCloned","loadingCloned","uriAttrs","ARIA_ATTRIBUTE_PATTERN","DATA_URL_PATTERN","attrName","attrRegex","DefaultWhitelist","whiteList","sanitizeFn","whitelistKeys","elName","whitelistedAttributes","CLASS_NAME_AUTOCOMPLETE_DROPDOWN_CONTAINER","CLASS_NAME_AUTOCOMPLETE_DROPDOWN","CLASS_NAME_AUTOCOMPLETE_ITEMS_LIST","CLASS_NAME_AUTOCOMPLETE_ITEM","CLASS_NAME_LOADER","CLASS_NAME_SPINNER_BORDER","CLASS_NAME_NO_RESULTS","settings","itemsList","itemsListTemplate","getItemsTemplate","displayValue","itemContent","getLoaderTemplate","getNoResultsTemplate","message","CLASS_NAME_CUSTOM_INPUT","CLASS_NAME_CUSTOM_LABEL","CLASS_NAME_FOCUSING","SELECTOR_ITEMS_LIST","SELECTOR_LOADER","LOADER_CLOSE_DELAY","Autocomplete","sanitizedCustomContent","newTemplate","newActiveItem","currentActiveItem","itemIndex","itemOffset","targetIndex","selectEvent","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","CLASS_NAME_STATIC","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","Modal","modalBody","transitionComplete","event2","isModalOverflowing","initialOverflowY","isBodyOverflowing","_resetElementAttributes","styleProp","MODAL_CSS_BREAKPOINT","NON_INVASIVE_CLASS","NON_INVASIVE_SHOW_CLASS","SHOW_CLASS","MODAL_OPEN_CLASS","MODAL_CONTENT_CLASS","MODAL_BOTTOM_CLASS","MODAL_BOTTOM_RIGHT_CLASS","MODAL_BOTTOM_LEFT_CLASS","MODAL_TOP_RIGHT_CLASS","MODAL_TOP_LEFT_CLASS","MODAL_DIALOG_SCROLLABLE_CLASS","MODAL_DIALOG_CLASS","SELECTOR_MODAL_CONTENT","SELECTOR_MODAL_BOTTOM","SELECTOR_MODAL_BOTTOM_RIGHT","SELECTOR_MODAL_BOTTOM_LEFT","SELECTOR_MODAL_TOP_RIGHT","SELECTOR_MODAL_TOP_LEFT","SELECTOR_MODAL_DIALOG_SCROLLABLE","SELECTOR_MODAL_DIALOG","EVENT_SHOW_BS_MODAL","EVENT_SHOWN_BS_MODAL","EVENT_HIDDEN_BS_MODAL","EVENT_HIDE_BS_MODAL","EVENT_HIDE_PREVENTED_BS_MODAL","BSModal","sideOffset","topOffset","isNonInvasiveModalOpen","scrollBarReset","leftOffset","isAboveBreakpoint","EVENT_COPIED","Clipboard","clipboardTextExist","targetText","inputToCopy","newInput","getInputField","inputID","labelText","getChip","SELECTOR_CLOSE","EVENT_DELETE","Chip","closeIcon","createIcon","CLASSNAME_CHIPS_INITIAL","CLASSNAME_CHIPS_PLACEHOLDER","CLASSNAME_CLOSE_OPACITY","CLASSNAME_CHIP_OPACITY","CLASSNAME_CHIPS_PADDING","CLASSNAME_CHIPS_TANSITION","CLASSNAME_CHIPS_WRAPPER","SELECTOR_CHIP","SELECTOR_CHIP_ACTIVE","EVENT_ADD","EVENT_ADDED","EVENT_ARROW_DOWN","EVENT_ARROW_LEFT","EVENT_ARROW_RIGHT","EVENT_ARROW_UP","ChipsInput","chip","activeChipAfter","keyCode","ctrlKey","editable","close","chipText","chipIndex","filterActive","initialValues","inputField","divElement","divWithChips","chipsContainer","getConnectsTemplate","getHandleTemplate","getTooltipTemplate","getEventTypeClientX","ev","SELECTOR_MULTI","CLASSNAME_HAND","CLASSNAME_CONNECT","CLASSNAME_TOOLTIP","SELECTOR_HORIZONTAL","SELECTOR_VERTICAL","MultiRangeSlider","hand","startValues","numberOfRanges","handActiveHandle","handActiveTranslation","handleDataHandle","handleDataTranslate","isValidTime","AmPmReg","timeReg","getDelimeters","parseDate","getMonthNumberByMonthName","ICON_BUTTONS","TOGGLE_BUTTON","CLASSNAME_DATEPICKER","CLASSNAME_TIMEPICKER","CLASSNAME_TOGGLE_BUTTON","CLASSNAME_INVALID_FEEDBACK","CLASSNAME_IS_INVALID","SELECTOR_TIMEPICKER","SELECTOR_DATEPICKER","SELECTOR_TOGGLE_BUTTON","SELECTOR_INVALID_FEEDBACK","EVENT_CLOSE_DATEPICKER","EVENT_VALUE_CHANGED_TIMEPICKER","BUTTONS_WRAPPER","Datetimepicker","tempOptions","DATEPICKER_WRAPPER","DATEPICKER_INPUT","datepickerOptions","timepicker","TIMEPICKER_WRAPPER","TIMEPICKER_INPUT","timepickerOptions","headerTime","invalidLabel","appendValidationInfo","DATEPICKER_CANCEL_BTN","dateTimeSplited","dateDelimeters","inputFirstValue","inputSecondValue","allInvalid","CLOCK_BTN","CANCEL_BTN","datePopper","timePopper","alertCallback","initSelector","buttonCallback","carouselCallback","SELECTOR_DATA_SLIDE","EVENT_LOAD_DATA_API","SELECTOR_DATA_RIDE","carousel","slideIndex","collapseCallback","dropdownCallback","EVENT_KEYUP_DATA_API","inputCallback","SELECTOR_DATA_INIT","SELECTOR_OUTLINE_INPUT","SELECTOR_OUTLINE_TEXTAREA","modalCallback","OPEN_SELECTOR","selectorElement","offcanvasCallback","alreadyOpen","scrollspyCallback","tabCallback","SELECTOR_DATA_TOGGLE_ACTIVE","toastCallback","rippleCallback","Component","IS_COMPLEX","CONVERT_DATA_TYPE","PARSE_DATA","chartProperty","dataSet","sidenav","toast","initMDB"],"mappings":"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","x_google_ignoreList":[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,88,98,99,100,160]}