{"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/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.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/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/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.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/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.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/drag-thumb.js","../../src/js/mdb/perfect-scrollbar/index.js","../../src/js/mdb/perfect-scrollbar/handlers/click-rail.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/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/table.js","../../src/js/pro/datatable/html/rows.js","../../src/js/pro/datatable/html/columns.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","../../src/js/pro/perfect-scrollbar.js","../../src/js/pro/loading-management/index.js","../../src/js/pro/loading-management/templates.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/index.js","../../src/js/pro/date-time-picker/templates.js","../../src/js/autoinit/callbacks/free.js","../../src/js/autoinit/callbacks/pro.js","../../src/js/autoinit/initSelectors/pro.js","../../src/js/autoinit/initSelectors/free.js","../../src/js/autoinit/callbacks/charts.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/twmdb/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.3';\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  if (!manualInit) {\n    InitializedComponents.set(component.NAME);\n  }\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 !== '#' ? hrefAttribute.trim() : null;\n  }\n\n  return selector\n    ? selector\n        .split(',')\n        .map((sel) => parseSelector(sel))\n        .join(',')\n    : null;\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 = SelectorEngine.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}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\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 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 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 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 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 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 { 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};","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 getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\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 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}","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\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}","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 };","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 { 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  dd: [],\n  div: [],\n  dl: [],\n  dt: [],\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 type = input.getAttribute('type');\n    const typesWithPlaceholder = ['date', 'time', 'datetime-local', 'month', 'week'];\n\n    if (!typesWithPlaceholder.includes(type)) {\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\n      if (!this._element) {\n        return;\n      }\n\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    let initialized;\n    if (event) {\n      this._element = event.target.parentNode;\n      this._label = SelectorEngine.findOne('label', this._element);\n\n      initialized = Manipulator.getDataAttribute(\n        this._element,\n        `${this.constructor.NAME}-initialized`\n      );\n    }\n\n    if (!initialized) {\n      return;\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 (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\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(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\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  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  dropdownAnimation: 'on',\n};\n\nconst DefaultType = {\n  offset: '(array|string|function)',\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            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  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  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 = options;\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  _getLightTheme(type) {\n    const defaultOptions = DEFAULT_OPTIONS[`${type}`] ? DEFAULT_OPTIONS[`${type}`].options : {};\n    const prevConfig = this._prevConfig || {};\n\n    return merge(defaultOptions, prevConfig);\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      // reset options before setting light theme\n      this._options = null;\n      this.update(null, this._getLightTheme(this._type));\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._preloadedImages = [];\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 nextImage() {\n    return this._activeImg === this._images.length - 1 ? 0 : this._activeImg + 1;\n  }\n\n  get previousImage() {\n    return this._activeImg === 0 ? this._images.length - 1 : this._activeImg - 1;\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._triggerEvents('open', 'opened');\n\n    this._loadImages().then((images) => {\n      this._preloadedImages = 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\n    super.dispose();\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  async _loadImages() {\n    const promiseArray = [];\n    const imageArray = [];\n\n    this._galleryContent.innerHTML = '';\n    let positionLeft = -100; // -100% so current image will be in the middle with 0% left\n\n    const activeIndexes = [this.previousImage, this._activeImg, this.nextImage];\n\n    activeIndexes.forEach((key) => {\n      promiseArray.push(\n        new Promise((resolve) => {\n          const img = this._createImage(key, positionLeft, 'right');\n          img.onload = () => {\n            imageArray.push(img);\n            resolve(img);\n          };\n        })\n      );\n      positionLeft += 100;\n    });\n\n    await Promise.all(promiseArray);\n    return imageArray;\n  }\n\n  _createImage(index, positionLeft, direction) {\n    const img = this._images[index];\n    const newImg = new Image();\n    const newImgWrapper = element('div');\n    Manipulator.addClass(newImgWrapper, CLASSNAME_IMG);\n\n    this._addImgStyles(newImg, newImgWrapper, positionLeft, img);\n\n    newImgWrapper.append(newImg);\n    if (direction === 'right') {\n      this._galleryContent.append(newImgWrapper);\n    } else {\n      this._galleryContent.prepend(newImgWrapper);\n    }\n\n    newImg.src = img.dataset.mdbImg || img.src;\n\n    return newImg;\n  }\n\n  _updatePreloadedImages(direction) {\n    const isDirectionRight = direction === 'right';\n    const targetChild = isDirectionRight\n      ? this._galleryContent.firstChild\n      : this._galleryContent.lastChild;\n    const targetImage = targetChild?.querySelector('img');\n\n    this._removeImageEvents(targetImage);\n    this._galleryContent.removeChild(targetChild);\n\n    const newIndex = isDirectionRight ? this.nextImage : this.previousImage;\n    const positionLeft = isDirectionRight ? 200 : -200;\n    const addedImage = this._createImage(newIndex, positionLeft, direction);\n\n    this._addImageEvents(addedImage);\n    this._preloadedImages = SelectorEngine.find('img', this._galleryContent);\n  }\n\n  _addImgStyles(newImg, newImgWrapper, positionLeft, 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\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._preloadedImages.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._updateActiveImg(direction);\n    this._updatePreloadedImages(direction);\n    this._resizeImages(this._preloadedImages);\n\n    this._preloadedImages = SelectorEngine.find('img', this._galleryContent);\n\n    this._slidePreloadedImages();\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  _slidePreloadedImages() {\n    let positionLeft = -100;\n    this._preloadedImages.forEach((image) => {\n      this._slideImg(image, positionLeft);\n\n      positionLeft += 100;\n    });\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\n    Manipulator.style(this.currentImg.parentNode, { transform: 'scale(0.25)', opacity: 0 });\n\n    setTimeout(() => {\n      this._loadImages().then((images) => {\n        this._preloadedImages = 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      this._activeImg = this.nextImage;\n    }\n\n    if (direction === 'left') {\n      this._activeImg = this.previousImage;\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._onWheel.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      this._addImageEvents(img);\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  _addImageEvents(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  _removeEvents() {\n    const images = SelectorEngine.find('img', this._galleryContent);\n\n    images.forEach((img) => {\n      this._removeImageEvents(img);\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  _removeImageEvents(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  _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  _onWheel(e) {\n    const delta = Math.max(-1, Math.min(1, e.deltaY));\n    this._zoomOnWheel(e.x, e.y, delta);\n  }\n\n  _zoomOnWheel(x, y, delta) {\n    if (-delta > 0) {\n      this._triggerEvents('zoomIn');\n    } else {\n      this._triggerEvents('zoomOut');\n    }\n\n    if (this._zoom === 1) {\n      this._positionX = 0;\n      this._positionY = 0;\n    }\n\n    Manipulator.style(this.currentImg, { transition: 'none' });\n\n    const activeImageClientRect = this.currentImg.getBoundingClientRect();\n\n    const pointerX = (x - activeImageClientRect.left) / this._zoom;\n    const pointerY = (y - activeImageClientRect.top) / this._zoom;\n\n    const targetX = (pointerX - this._positionX) / this._zoom;\n    const targetY = (pointerY - this._positionY) / this._zoom;\n\n    this._zoom += -delta * this.options.zoomLevel;\n\n    const maxZoom = 3;\n    const minZoom = 1;\n\n    this._zoom = Math.max(minZoom, Math.min(maxZoom, this._zoom));\n\n    if (this._zoom === 1) {\n      this._positionX = 0;\n      this._positionY = 0;\n    } else {\n      this._positionX = -targetX * this._zoom + pointerX;\n      this._positionY = -targetY * this._zoom + pointerY;\n    }\n\n    Manipulator.style(this.currentImg, { transition: '' });\n    Manipulator.style(this.currentImg, {\n      transform: `translate(${this._positionX}px,${this._positionY}px) scale(${this._zoom})`,\n    });\n\n    this._updateZoomBtn();\n\n    if (-delta > 0) {\n      this._triggerEvents('zoomedIn');\n    } else {\n      this._triggerEvents('zoomedOut');\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      Manipulator.style(this.currentImg, {\n        transform: `scale(${this._zoom})`,\n      });\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(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  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","import cls, { addScrollingClass, removeScrollingClass } from '../lib/class-names';\nimport updateGeometry from '../update-geometry';\n\nlet activeSlider = null; // Variable to track the currently active slider\n\nexport default function setupScrollHandlers(i) {\n  bindMouseScrollHandler(i, [\n    'containerHeight',\n    'contentHeight',\n    'pageY',\n    'railYHeight',\n    'scrollbarY',\n    'scrollbarYHeight',\n    'scrollTop',\n    'y',\n    'scrollbarYRail',\n  ]);\n\n  bindMouseScrollHandler(i, [\n    'containerWidth',\n    'contentWidth',\n    'pageX',\n    'railXWidth',\n    'scrollbarX',\n    'scrollbarXWidth',\n    'scrollLeft',\n    'x',\n    'scrollbarXRail',\n  ]);\n}\n\nfunction bindMouseScrollHandler(\n  i,\n  [\n    containerDimension,\n    contentDimension,\n    pageAxis,\n    railDimension,\n    scrollbarAxis,\n    scrollbarDimension,\n    scrollAxis,\n    axis,\n    scrollbarRail,\n  ]\n) {\n  const element = i.element;\n  let startingScrollPosition = null;\n  let startingMousePagePosition = null;\n  let scrollBy = null;\n\n  function moveHandler(e) {\n    if (e.touches && e.touches[0]) {\n      e[pageAxis] = e.touches[0][`page${axis.toUpperCase()}`];\n    }\n\n    // Only move if the active slider is the one we started with\n    if (activeSlider === scrollbarAxis) {\n      element[scrollAxis] =\n        startingScrollPosition + scrollBy * (e[pageAxis] - startingMousePagePosition);\n      addScrollingClass(i, axis);\n      updateGeometry(i);\n\n      e.stopPropagation();\n      e.preventDefault();\n    }\n  }\n\n  function endHandler() {\n    removeScrollingClass(i, axis);\n    i[scrollbarRail].classList.remove(cls.state.clicking);\n    document.removeEventListener('mousemove', moveHandler);\n    document.removeEventListener('mouseup', endHandler);\n    document.removeEventListener('touchmove', moveHandler);\n    document.removeEventListener('touchend', endHandler);\n    activeSlider = null; // Reset active slider when interaction ends\n  }\n\n  function bindMoves(e) {\n    if (activeSlider === null) {\n      // Only bind if no slider is currently active\n      activeSlider = scrollbarAxis; // Set current slider as active\n\n      startingScrollPosition = element[scrollAxis];\n      if (e.touches) {\n        e[pageAxis] = e.touches[0][`page${axis.toUpperCase()}`];\n      }\n      startingMousePagePosition = e[pageAxis];\n      scrollBy =\n        (i[contentDimension] - i[containerDimension]) / (i[railDimension] - i[scrollbarDimension]);\n\n      if (!e.touches) {\n        document.addEventListener('mousemove', moveHandler);\n        document.addEventListener('mouseup', endHandler);\n      } else {\n        document.addEventListener('touchmove', moveHandler, { passive: false });\n        document.addEventListener('touchend', endHandler);\n      }\n\n      i[scrollbarRail].classList.add(cls.state.clicking);\n    }\n\n    e.stopPropagation();\n    if (e.cancelable) {\n      e.preventDefault();\n    }\n  }\n\n  i[scrollbarAxis].addEventListener('mousedown', bindMoves);\n  i[scrollbarAxis].addEventListener('touchstart', bindMoves);\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","/* 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 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","import 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  const state = {\n    startOffset: {},\n    startTime: 0,\n    speed: {},\n    easingLoop: null,\n  };\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      if (\n        (deltaY < 0 && scrollTop === i.contentHeight - i.containerHeight) ||\n        (deltaY > 0 && scrollTop === 0)\n      ) {\n        return window.scrollY === 0 && deltaY > 0 && env.isChrome;\n      }\n    } else if (magnitudeX > magnitudeY) {\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  function getTouch(e) {\n    if (e.targetTouches) {\n      return e.targetTouches[0];\n    }\n    // Maybe IE pointer\n    return e;\n  }\n\n  function shouldHandle(e) {\n    if (e.target === i.scrollbarX || e.target === i.scrollbarY) {\n      return false;\n    }\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    state.startOffset.pageX = touch.pageX;\n    state.startOffset.pageY = touch.pageY;\n\n    state.startTime = new Date().getTime();\n\n    if (state.easingLoop !== null) {\n      clearInterval(state.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 - state.startOffset.pageX;\n      const differenceY = currentOffset.pageY - state.startOffset.pageY;\n\n      if (shouldBeConsumedByChild(e.target, differenceX, differenceY)) {\n        return;\n      }\n\n      applyTouchMove(differenceX, differenceY);\n      state.startOffset = currentOffset;\n\n      const currentTime = new Date().getTime();\n\n      const timeGap = currentTime - state.startTime;\n      if (timeGap > 0) {\n        state.speed.x = differenceX / timeGap;\n        state.speed.y = differenceY / timeGap;\n        state.startTime = currentTime;\n      }\n\n      if (shouldPrevent(differenceX, differenceY)) {\n        // Prevent the default behavior if the event is cancelable\n        if (e.cancelable) {\n          e.preventDefault();\n        }\n      }\n    }\n  }\n\n  function touchEnd() {\n    if (i.settings.swipeEasing) {\n      clearInterval(state.easingLoop);\n      state.easingLoop = setInterval(() => {\n        if (i.isInitialized) {\n          clearInterval(state.easingLoop);\n          return;\n        }\n\n        if (!state.speed.x && !state.speed.y) {\n          clearInterval(state.easingLoop);\n          return;\n        }\n\n        if (Math.abs(state.speed.x) < 0.01 && Math.abs(state.speed.y) < 0.01) {\n          clearInterval(state.easingLoop);\n          return;\n        }\n\n        applyTouchMove(state.speed.x * 30, state.speed.y * 30);\n\n        state.speed.x *= 0.8;\n        state.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","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      const trimmedLink = window.location.href.split(/#|\\?/)[0];\n      const strippedRequests = window.location.href.split('?')[0];\n      return (\n        new URL(link, window.location.href).href === trimmedLink ||\n        new URL(link, window.location.href).href === strippedRequests\n      );\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 DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_CLOSE_BS = 'close.bs.alert';\nconst EVENT_CLOSED_BS = 'closed.bs.alert';\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}`;\n\nconst EXTENDED_EVENTS = [{ name: 'close' }, { name: 'closed' }];\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\nclass Alert extends BSAlert {\n  constructor(element, data = {}) {\n    super(element, data);\n    this._options = this._getConfig(data);\n    this._isOpen = true;\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    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (!this._isOpen || hideEvent.defaultPrevented) {\n      return;\n    }\n\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        EventHandler.trigger(this._element, EVENT_HIDDEN);\n\n        this._isOpen = false;\n      };\n\n      EventHandler.on(this._element, 'transitionend', handler);\n    }\n  }\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (this._isOpen || showEvent.defaultPrevented) {\n      return;\n    }\n\n    if (this._options.autohide) {\n      this._setupAutohide();\n    }\n\n    if (this._options.stacking) {\n      this._updateAlertStack();\n    }\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          EventHandler.trigger(this._element, EVENT_SHOWN);\n\n          this._isOpen = true;\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      // needed for show method to work properly if alert is hidden on init\n      Manipulator.removeClass(this._element, 'show');\n\n      this._isOpen = false;\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 && !this._options.hidden) {\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, EVENT_CLOSED_BS, () => {\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  container: '(string|null)',\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  container: '',\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\n    this._bindMdbEvents();\n    this._setupDisplay();\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    if (!this._config.container && this._config.appendToBody) {\n      this._appendToBody();\n    }\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 || 'defaultY']: `${this.verticalOffset + this._config?.offset}px`,\n        [this.position?.x || 'defaultX']: `${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  {\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    isRTL,\n  },\n  id\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 timepicker-container-${id}\">\n        <div class=\"d-flex flex-column timepicker-elements justify-content-around\">\n          ${createHead(headId, format24, amLabel, pmLabel, okLabel, inline, isRTL)}\n          ${createTimepickerClockWrapper(bodyId, format24)}\n        </div>\n        ${createFooter(footerId, showClearBtn, clearLabel, cancelLabel, okLabel)}\n\n      </div>\n    </div>`;\n\n  const inlineTemplate = `\n    <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 timepicker-container-${id}\">\n\n        <div class=\"d-flex flex-column timepicker-elements justify-content-around timepicker-elements-inline\">\n\n        ${createHead(headId, format24, amLabel, pmLabel, okLabel, inline, isRTL)}\n\n        </div>\n\n      </div>\n    </div>\n  `;\n\n  return inline ? inlineTemplate : normalTemplate;\n};\n\nfunction createFooter(footerId, showClearBtn, clearLabel, cancelLabel, okLabel) {\n  return `\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' tabindex=\"0\">${clearLabel}</button>`\n          : ''\n      }\n      <button type='button' class='timepicker-button timepicker-cancel' tabindex=\"0\">${cancelLabel}</button>\n      <button type='button' class='timepicker-button timepicker-submit' tabindex=\"0\">${okLabel}</button>\n    </div>\n  </div>`;\n}\n\nfunction createTimepickerClockWrapper(bodyId, format24) {\n  return `\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\nfunction createModeWrapper(inline, format24, amLabel, pmLabel, okLabel) {\n  const submitBtn = `<button type='button' class='timepicker-button timepicker-submit timepicker-submit-inline py-1 px-2 mb-0' tabindex=\"0\">${okLabel}</button>`;\n\n  if (format24) {\n    return inline ? `${submitBtn}` : '';\n  } else {\n    return `\n      <div class=\"d-flex ${\n        !inline ? 'flex-column ' : ''\n      }justify-content-center timepicker-mode-wrapper\">\n        <button type='button' class=\"timepicker-hour-mode timepicker-am${\n          inline ? ' me-2 ms-4' : ''\n        }\" tabindex=\"0\">${amLabel}</button>\n        <button type='button' class=\"timepicker-hour-mode timepicker-pm\" tabindex=\"0\">${pmLabel}</button>\n        ${inline ? `${submitBtn}` : ''}\n      </div>`;\n  }\n}\n\nfunction createHead(headId, format24, amLabel, pmLabel, okLabel, inline, isRTL) {\n  return `\n  <div id='${headId}' class='timepicker-head d-flex flex-row align-items-center justify-content-center ${\n    inline ? 'timepicker-head-inline' : ''\n  }'\n  style='padding-${isRTL ? 'left' : 'right'}:${format24 && !inline ? 50 : 0}px'>\n    <div class='timepicker-head-content d-flex w-100 justify-content-evenly'>\n    ${!inline ? `${createCurrentWrapperNormal()}` : `${createCurrentWrapperInline()}`}\n      ${createModeWrapper(inline, format24, amLabel, pmLabel, okLabel)}\n    </div>\n  </div>\n  `;\n}\n\nfunction createCurrentWrapperNormal() {\n  return `\n    <div class=\"timepicker-current-wrapper\">\n      <span class=\"position-relative h-100\">\n        <button type='button' class='timepicker-current timepicker-hour active' 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' tabindex=\"0\">21</button>\n      </span>\n    </div>\n  `;\n}\n\nfunction createCurrentWrapperInline() {\n  return `\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 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 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}\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, isRTL } 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';\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`;\nconst EVENT_OPEN = `open${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_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}`;\nconst EVENT_CLEAR = `clear${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 SELECTOR_DATA_TOGGLE = '[data-mdb-toggle]';\nconst SELECTOR_CONTAINER = '.timepicker-container';\n\nconst Default = {\n  bodyId: '',\n  cancelLabel: 'Cancel',\n  clearLabel: 'Clear',\n  closeModalOnBackdropClick: true,\n  closeModalOnMinutesClick: false,\n  container: 'body',\n  defaultTime: '',\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  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  disablePast: 'boolean',\n  disableFuture: 'boolean',\n  footerId: 'string',\n  format12: 'boolean',\n  format24: 'boolean',\n  headId: 'string',\n  increment: 'boolean',\n  inline: 'boolean',\n  maxTime: '(string|date|null)',\n  minTime: '(string|date|null)',\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\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._isOpen = false;\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      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    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  get container() {\n    return SelectorEngine.findOne(`${SELECTOR_CONTAINER}-${this._toggleButtonId}`);\n  }\n\n  get toggleButton() {\n    return SelectorEngine.findOne('[data-mdb-toggle]', this._element);\n  }\n\n  get customIcon() {\n    return SelectorEngine.findOne('.timepicker-toggle-button', this._element);\n  }\n\n  // Public\n\n  init() {\n    if (!this.toggleButton && !this.customIcon && this._options.withIcon) {\n      this._appendToggleButton(this._options);\n    }\n\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    if (this._isOpen) {\n      this.close();\n    }\n\n    this._removeInputAndToggleListeners();\n\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  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n    if (!this._isOpen || closeEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removePicker();\n\n    this._isOpen = false;\n\n    if (this.toggleButton) {\n      this.toggleButton.focus();\n    } else if (this._input && focusInputAfterApprove) {\n      this._input.focus();\n    }\n  }\n\n  open() {\n    if (this._input.readOnly || this._input.disabled) {\n      return;\n    }\n\n    const openEvent = EventHandler.trigger(this._element, EVENT_OPEN);\n\n    if (this._isOpen || openEvent.defaultPrevented) {\n      return;\n    }\n\n    const container = this._getContainer();\n\n    Manipulator.addStyle(this.toggleButton, {\n      pointerEvents: 'none',\n    });\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    div.innerHTML = getTimepickerTemplate(this._options, this._toggleButtonId);\n    Manipulator.addClass(div, MODAL_CLASS);\n    Manipulator.addClass(div, `${MODAL_CLASS}-${this._toggleButtonId}`);\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\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._setFocusTrap(this.container);\n\n    this._isOpen = true;\n  }\n\n  // private\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  _appendToggleButton() {\n    const toggleButton = getToggleButtonTemplate(this._options, this._toggleButtonId);\n\n    this._input.insertAdjacentHTML('afterend', toggleButton);\n  }\n\n  _getDomElements() {\n    this._modal = SelectorEngine.findOne(`.${MODAL_CLASS}-${this._toggleButtonId}`);\n    this._hour = SelectorEngine.findOne(`.${HOUR_CLASS}`, this._modal);\n    this._minutes = SelectorEngine.findOne(`.${MINUTE_CLASS}`, this._modal);\n    this._AM = SelectorEngine.findOne(`.${AM_CLASS}`, this._modal);\n    this._PM = SelectorEngine.findOne(`.${PM_CLASS}`, this._modal);\n    this._wrapper = SelectorEngine.findOne(`.${WRAPPER_CLASS}`, this._modal);\n    this._hand = SelectorEngine.findOne(`.${HAND_CLASS}`, this._modal);\n    this._circle = SelectorEngine.findOne(`.${CIRCLE_CLASS}`, this._modal);\n    this._clock = SelectorEngine.findOne(`.${CLOCK_CLASS}`, this._modal);\n    this._clockInner = SelectorEngine.findOne(`.${CLOCK_INNER_CLASS}`, this._modal);\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 = () => {\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', SELECTOR_DATA_TOGGLE, (e) => {\n      if (e.keyCode === ENTER) {\n        this.open();\n      }\n    });\n  }\n\n  _handleOpen() {\n    EventHandler.on(this._element, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, () => {\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        this.open();\n      }, fixForInput);\n    });\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  _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        if (Manipulator.hasClass(target, BUTTON_CLEAR_CLASS)) {\n          this._toggleAmPm('PM');\n          this._input.value = '';\n\n          EventHandler.trigger(this._input, EVENT_CLEAR);\n\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          this.close();\n        } else if (Manipulator.hasClass(target, WRAPPER_CLASS) && closeModalOnBackdropClick) {\n          this.close();\n        }\n      }\n    );\n  }\n\n  _removePicker() {\n    Manipulator.addStyle(this.toggleButton, {\n      pointerEvents: 'auto',\n    });\n\n    if (this._animations) {\n      this._toggleBackdropAnimation(true);\n    }\n\n    this._removeModal();\n  }\n\n  _removeFocusTrap() {\n    if (this._focusTrap) {\n      this._focusTrap.disable();\n      this._focusTrap = null;\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, disablePast, disableFuture } = 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.toggleButton, {\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 (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      this.close();\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 (this._modal && !this._modal.contains(target)) {\n        clearInterval(this._interval);\n        this.close();\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      if (format24 && (hourValue > 12 || hourValue === 0)) {\n        this._isInner = true;\n      }\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 || this._hour.textContent === '00') {\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    const timeout = this._animations ? 300 : 0;\n\n    setTimeout(() => {\n      this._removeModalElements();\n      if (!this._options.inline) {\n        this._scrollBar.reset();\n      }\n    }, timeout);\n\n    this._removeFocusTrap();\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      isRTL,\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  // Static\n  static jQueryInterface(config) {\n    this.each(function () {\n      const data = Navbar.getOrCreateInstance(this);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config]();\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._elementScrollHandler = 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', this._elementScrollHandler);\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._elementScrollHandler);\n  }\n\n  _scrollHandler() {\n    if (this.condition) {\n      EventHandler.trigger(this._element, EVENT_COMPLETED);\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 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._handleScroll.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  _handleScroll() {\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 isInRange(date, range) {\n  if (range.length === 2) {\n    return compareDates(date, range[0]) > 0 && compareDates(date, range[1]) < 0;\n  }\n  return false;\n}\n\nexport function isEdgeOfRange(date, range) {\n  if (range.length === 2) {\n    if (isSameDate(range[0], range[1])) return false;\n    if (isSameDate(date, range[0])) return 'first';\n    if (isSameDate(date, range[1])) return 'last';\n  }\n  return false;\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  isInRange,\n  getToday,\n  getYearsOffset,\n  isDateDisabled,\n  isMonthDisabled,\n  isYearDisabled,\n  isEdgeOfRange,\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  selectedRange\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\n  if (options.inline) {\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      selectedRange\n    )}\n`;\n    Manipulator.addClass(template, 'datepicker-dropdown-container');\n    Manipulator.addClass(template, `datepicker-dropdown-container-${id}`);\n\n    template.innerHTML = inlineContent;\n  } else {\n    const modalContent = `\n    ${createHeader(day, dayNumber, month, options, date, selectedRange)}\n    ${createMainContent(\n      date,\n      month,\n      year,\n      selectedDate,\n      selectedYear,\n      selectedMonth,\n      options,\n      monthsInRow,\n      yearsInView,\n      yearsInRow,\n      selectedRange\n    )}\n  `;\n    Manipulator.addClass(template, 'datepicker-modal-container');\n    Manipulator.addClass(template, `datepicker-modal-container-${id}`);\n\n    template.innerHTML = modalContent;\n  }\n\n  if (options.dateRange) {\n    Manipulator.addClass(template, 'datepicker-date-range');\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, selectedRange) {\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\">${createTitle(selected, selectedRange, options)}</span>\n        </div>\n        `\n      }\n      </div>\n    `;\n}\n\nexport function createTitle(selected, selectedRange, options) {\n  const { dateRange, weekdaysShort, monthsShort } = options;\n\n  const formatDate = (date) => {\n    const month = getMonth(date);\n    const day = getDate(date);\n    const dayNumber = getDayNumber(date);\n    return `${weekdaysShort[dayNumber]}, ${monthsShort[month]} ${day}`;\n  };\n\n  if (dateRange) {\n    let endDate;\n    let startDate;\n    if (!selectedRange || selectedRange.length === 0) {\n      startDate = selected;\n      endDate = selected;\n    } else {\n      [startDate, endDate] = selectedRange;\n    }\n    return `${formatDate(startDate)} - ${endDate ? formatDate(endDate) : ''}`;\n  }\n\n  return formatDate(selected);\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  selectedRange\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          selectedRange\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            selectedRange\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  selectedRange\n) {\n  let viewTemplate;\n  if (options.view === 'days') {\n    viewTemplate = createDayViewTemplate(date, selectedDate, options, selectedRange);\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, selectedRange) {\n  const dates = getDatesArray(date, headerDate, options, selectedRange, 1);\n  const nextMonthDates = options.dateRange\n    ? getDatesArray(addMonths(date, 1), headerDate, options, selectedRange, 2)\n    : null;\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    dates\n      .map(\n        (week) => `\n          <tr>\n            ${week\n              .map((day) => {\n                const dayLabel = `${options.weekdaysFull[getDayNumber(day.date)]}, ${\n                  options.monthsFull[getMonth(day.date)]\n                } ${getDate(day.date)}, ${getYear(day.date)}`;\n                const currentDate = `${getYear(day.date)}-${getMonth(day.date)}-${getDate(\n                  day.date\n                )}`;\n                const isFirst = day.isEdgeOfRange === 'first';\n                const isLast = day.isEdgeOfRange === 'last';\n\n                const classNames = [\n                  'datepicker-cell',\n                  'datepicker-small-cell',\n                  'datepicker-day-cell',\n                  day.currentMonth ? '' : 'disabled',\n                  day.disabled ? 'disabled' : '',\n                  day.isToday ? 'current' : '',\n                  day.isSelected ? 'selected' : '',\n                  day.isInRange ? 'in-range' : '',\n                  isFirst ? 'first-in-range' : '',\n                  isLast ? 'last-in-range' : '',\n                ]\n                  .filter(Boolean) // Remove empty or false values\n                  .join(' ');\n\n                return `\n                  <td\n                    class=\"${classNames}\"\n                    data-mdb-date=\"${day.currentMonth ? currentDate : ''}\"\n                    aria-label=\"${dayLabel}\"\n                    aria-selected=\"${day.isSelected}\"\n                    ${day.disabled ? 'aria-disabled=\"true\"' : ''}>\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  const dayViewTemplate = (dates, month) => `\n    <table class=\"datepicker-table\">\n        <thead class=\"text-center\">\n          ${\n            options.dateRange\n              ? `\n          <tr class=\"datepicker-month-header\">\n            <th colspan=\"7\">${options.monthsFull[month]}</th>\n          </tr>\n          `\n              : ''\n          }\n          ${tableHeadContent}\n        </thead>\n        <tbody class=\"datepicker-table-body\">\n         ${tableBodyContent(dates)}\n        </tbody>\n      </table>\n    `;\n\n  const rangeTemplate = () => `\n    ${dayViewTemplate(dates, getMonth(date))}\n    <div class=\"vr\"></div>\n    ${dayViewTemplate(nextMonthDates, getMonth(addMonths(date, 1)))}\n    `;\n\n  return options.dateRange ? rangeTemplate() : dayViewTemplate(dates, getMonth(date));\n}\n\nfunction getDatesArray(activeDate, headerDate, options, selectedRange = [], visibleMonth) {\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\n  const firstVisibleMonth = visibleMonth === 1 ? month : previousMonth;\n  const secondVisibleMonth = visibleMonth === 1 ? nextMonth : month;\n  const isVisible = options.dateRange\n    ? month === firstVisibleMonth || month === secondVisibleMonth\n    : month === firstVisibleMonth;\n\n  const isSelected = (date, selectedRange) => {\n    if (!selectedRange || selectedRange?.length === 0) return false;\n    if (options.dateRange) {\n      return selectedRange.length === 1\n        ? isSameDate(date, selectedRange[0])\n        : isSameDate(date, selectedRange[0]) || isSameDate(date, selectedRange[1]);\n    }\n\n    return isSameDate(date, selectedRange);\n  };\n\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: isSelected(date, headerDate) && isCurrentMonth,\n          isInRange: isInRange(date, selectedRange) && isCurrentMonth,\n          isEdgeOfRange: isCurrentMonth ? isEdgeOfRange(date, selectedRange) : false,\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: isSelected(date, headerDate) && isVisible,\n          isInRange: isInRange(date, selectedRange) && isCurrentMonth,\n          isEdgeOfRange: isCurrentMonth ? isEdgeOfRange(date, selectedRange) : false,\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: isSelected(date, headerDate) && isCurrentMonth,\n          isInRange: isInRange(date, selectedRange) && isCurrentMonth,\n          isEdgeOfRange: isCurrentMonth ? isEdgeOfRange(date, selectedRange) : false,\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              const isDisabled = isMonthDisabled(\n                monthIndex,\n                year,\n                options.min,\n                options.max,\n                options.disablePast,\n                options.disableFuture\n              );\n              return `\n                <td class=\"datepicker-cell datepicker-large-cell datepicker-month-cell \n                ${isDisabled ? 'disabled' : ''} ${\n                monthIndex === selectedMonth && year === selectedYear ? 'selected' : ''\n              } ${\n                monthIndex === currentMonth && year === currentYear ? 'current' : ''\n              }\" data-mdb-month=\"${monthIndex}\" data-mdb-year=\"${year}\" aria-label=\"${month}, ${year}\"  ${\n                isDisabled ? 'aria-disabled=true' : ''\n              }>\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({ monthsShort }, monthsInRow) {\n  return monthsShort.reduce((months, month, index) => {\n    const rowIndex = Math.floor(index / monthsInRow);\n    if (!months[rowIndex]) months[rowIndex] = [];\n    months[rowIndex].push(month);\n    return months;\n  }, []);\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              const isDisabled = isYearDisabled(\n                year,\n                options.min,\n                options.max,\n                options.disablePast,\n                options.disableFuture\n              );\n              return `\n              <td class=\"datepicker-cell datepicker-large-cell datepicker-year-cell\n              ${isDisabled ? 'disabled' : ''} ${year === selectedYear ? 'selected' : ''} ${\n                year === currentYear ? 'current' : ''\n              }\" aria-label=\"${year}\" data-mdb-year=\"${year}\" ${\n                isDisabled ? 'aria-disabled=\"true\"' : ''\n              }>\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  compareDates,\n  isInRange,\n} from './date-utils';\nimport {\n  getBackdropTemplate,\n  getDatepickerTemplate,\n  createDayViewTemplate,\n  createMonthViewTemplate,\n  createYearViewTemplate,\n  getToggleButtonTemplate,\n  createCustomHeader,\n  createTitle,\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_VIEW_CHANGED = `viewChanged${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  dateRange: false,\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  dateRange: 'boolean',\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._selectedRange = [];\n    this._selectedYear = null;\n    this._selectedMonth = null;\n    this._firstVisibleMonth = 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  get isSelectionCompleted() {\n    return !this.options.dateRange || this.isRangeComplete;\n  }\n\n  get isRangeComplete() {\n    return this._selectedRange.length === 2;\n  }\n\n  get hasPartialRange() {\n    return this._selectedRange.length === 1;\n  }\n\n  get visibleDates() {\n    return SelectorEngine.find('td', this.datesContainer);\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    }\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      this._selectedRange\n    );\n    this._firstVisibleMonth = this._activeDate;\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    if (!dataset) {\n      return;\n    }\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      if (!this.options.dateRange) {\n        this._updateHeaderDate(this._activeDate, this._selectedRange);\n      } else {\n        this._updateHeaderDate(this._selectedRange[0], this._selectedRange);\n      }\n    }\n  }\n\n  _updateHeaderDate(date, selectedRange) {\n    const headerDateEl = SelectorEngine.findOne('.datepicker-date-text', this.container);\n    const datepickerHeaderContainer = SelectorEngine.findOne('.datepicker-header', this.container);\n\n    if (this._options.headerTemplate && datepickerHeaderContainer) {\n      const day = getDate(date);\n      const dayNumber = getDayNumber(date);\n      const month = getMonth(date);\n      datepickerHeaderContainer.innerHTML = createCustomHeader(\n        day,\n        dayNumber,\n        month,\n        date,\n        this._options\n      );\n      return;\n    }\n\n    headerDateEl.innerHTML = createTitle(date, selectedRange, this._options);\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?.contains(e.target);\n\n      if (!isContainer && !isContainerContent) {\n        this._options.dateRange ? this._interruptDateRangeSelection() : this.close();\n      }\n    });\n  }\n\n  _listenToEscapeClick() {\n    EventHandler.on(document, 'keydown', (event) => {\n      if (event.keyCode === ESCAPE && this._isOpen) {\n        this._options.dateRange ? this._interruptDateRangeSelection() : this.close();\n      }\n    });\n  }\n\n  _interruptDateRangeSelection() {\n    if (this._options.inline && this.hasPartialRange) {\n      this._handleSingleDayRange();\n      this.close();\n\n      return;\n    }\n    this.handleCancel();\n  }\n\n  _handleSingleDayRange() {\n    this._selectedRange.push(this._selectedRange[0]);\n    this._confirmSelection(this._selectedRange[0]);\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    const isDateInSameView =\n      areDatesInSameView(oldActiveDate, this._activeDate, this._view) ||\n      (this._options.dateRange &&\n        areDatesInSameView(addMonths(this._firstVisibleMonth, 1), this._activeDate, this._view));\n\n    if (!isDateInSameView) {\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    if (this.hasPartialRange) {\n      this._handleSingleDayRange();\n    } else if (this.isRangeComplete) {\n      this._confirmSelection(this._selectedRange[0]);\n    } else {\n      this._confirmSelection(this._headerDate);\n    }\n    this.close();\n  }\n\n  _selectDate(date, cell = this.activeCell) {\n    const { min, max, filter, disablePast, disableFuture, inline, confirmDateOnSelect, dateRange } =\n      this._options;\n\n    if (isDateDisabled(date, min, max, filter, disablePast, disableFuture)) {\n      return;\n    }\n\n    this._removeCurrentFocusStyles();\n    dateRange\n      ? this._handleDateRangeSelection(date, cell)\n      : this._handleSingleDateSelection(date, cell);\n\n    if (inline || confirmDateOnSelect) {\n      this._confirmSelection(date);\n      if (this.isSelectionCompleted) {\n        this.close();\n      }\n    }\n  }\n\n  _handleSingleDateSelection(date, cell) {\n    this._removeCurrentStyle('selected');\n    this._selectedDate = date;\n    this._selectedYear = getYear(date);\n    this._selectedMonth = getMonth(date);\n    this._addSelectedStyles(cell);\n    this._headerDate = date;\n  }\n\n  _handleDateRangeSelection(date, cell) {\n    if (this.isRangeComplete) {\n      this._resetDateRangeStyles();\n      this._selectedRange = [];\n      this._selectedRange.push(date);\n    } else if (this.hasPartialRange) {\n      this._selectedRange.push(date);\n      this._selectedRange.sort(compareDates);\n      this._addDateRangeStyles();\n    } else if (this._selectedRange.length === 0) {\n      this._selectedRange.push(date);\n      this._headerDate = [date];\n    }\n    this._addSelectedStyles(cell);\n  }\n\n  _resetDateRangeStyles() {\n    const stylesToRemove = ['selected', 'in-range', 'first-in-range', 'last-in-range'];\n    stylesToRemove.forEach((style) => this._removeCurrentStyle(style));\n  }\n\n  _selectYear(year, cell = this.activeCell) {\n    this._removeCurrentStyle('selected');\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._removeCurrentStyle('selected');\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  _addDateRangeStyles() {\n    const firstDate = this._selectedRange[0];\n    const lastDate = this._selectedRange[1];\n\n    if (isSameDate(firstDate, lastDate)) {\n      return;\n    }\n\n    this.visibleDates.forEach((cell) => {\n      const cellDate = convertStringToDate(cell.dataset.mdbDate);\n      if (isSameDate(cellDate, firstDate)) {\n        Manipulator.addClass(cell, 'first-in-range');\n      }\n      if (isSameDate(cellDate, lastDate)) {\n        Manipulator.addClass(cell, 'last-in-range');\n      }\n      if (isInRange(cellDate, [firstDate, lastDate])) {\n        Manipulator.addClass(cell, 'in-range');\n      }\n    });\n  }\n\n  _confirmSelection(date) {\n    if (date) {\n      let dateString;\n      if (this._options.dateRange) {\n        if (this.hasPartialRange) {\n          dateString = `${this.formatDate(this._selectedRange[0])} - `;\n        } else if (this.isRangeComplete) {\n          dateString = `${this.formatDate(this._selectedRange[0])} - ${this.formatDate(\n            this._selectedRange[1]\n          )}`;\n        }\n      } else {\n        dateString = this.formatDate(date);\n      }\n      this._input.value = dateString;\n      Manipulator.addClass(this._input, 'active');\n      if (this.isSelectionCompleted) {\n        EventHandler.trigger(this._element, EVENT_VALUE_CHANGED, {\n          date: this._options.dateRange ? this._selectedRange : date,\n        });\n      }\n    }\n  }\n\n  handleCancel() {\n    this._selectedRange = [];\n    this._selectedDate = null;\n    this._selectedYear = null;\n    this._selectedMonth = null;\n    this.close();\n  }\n\n  handleClear() {\n    this._selectedRange = [];\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._removeCurrentStyle('selected');\n    if (this.options.dateRange) {\n      this._resetDateRangeStyles();\n    }\n    this._input.value = '';\n    this._input.classList.remove('active');\n    this._setInitialDate();\n    this._changeView('days');\n    this._updateHeaderDate(this._activeDate, this._selectedRange);\n  }\n\n  _removeCurrentStyle(style) {\n    const currentSelected = SelectorEngine.find(`.${style}`, this.container);\n\n    if (currentSelected) {\n      currentSelected.forEach((el) => {\n        el.classList.remove(`${style}`);\n      });\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 = this.options.dateRange\n      ? addMonths(this._firstVisibleMonth, 1)\n      : addMonths(this._activeDate, 1);\n    this._activeDate = nextMonth;\n    this._firstVisibleMonth = nextMonth;\n    const headerDate = this.options.dateRange ? this._selectedRange : this._headerDate;\n    const template = createDayViewTemplate(\n      nextMonth,\n      headerDate,\n      this._options,\n      this._selectedRange\n    );\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 = this.options.dateRange\n      ? addMonths(this._firstVisibleMonth, -1)\n      : addMonths(this._activeDate, -1);\n    this._activeDate = previousMonth;\n    this._firstVisibleMonth = previousMonth;\n    const headerDate = this.options.dateRange ? this._selectedRange : this._headerDate;\n    const template = createDayViewTemplate(\n      previousMonth,\n      headerDate,\n      this._options,\n      this._selectedRange\n    );\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    const selectedDate = this.options.dateRange ? this._selectedRange : this._headerDate;\n\n    if (view === 'days') {\n      this.datesContainer.innerHTML = createDayViewTemplate(\n        this._activeDate,\n        selectedDate,\n        this._options,\n        this._selectedRange\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._firstVisibleMonth = this._activeDate;\n\n    this.datesContainer.focus();\n    this._updateViewControlsAndAttributes(view);\n    this._updateControlsDisabledState();\n\n    EventHandler.trigger(this._element, EVENT_VIEW_CHANGED, { view: this._view });\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    let areDatesChronological;\n    let dates;\n    let firstDateValid;\n    let secondDateValid;\n    if (this.options.dateRange) {\n      dates = input.split(' - ');\n      dates = dates.map((date) => this._parseDate(date, this._options.format, delimeters));\n\n      firstDateValid = isValidDate(dates[0]);\n      secondDateValid = dates?.length > 1 ? isValidDate(dates[1]) : false;\n      if (firstDateValid && dates.length === 1) {\n        dates.push(dates[0]);\n        secondDateValid = true;\n      }\n      if (firstDateValid && secondDateValid) {\n        areDatesChronological = compareDates(dates[0], dates[1]) <= 0;\n      }\n    }\n    const date = this._parseDate(input, this._options.format, delimeters);\n\n    if (isValidDate(date) && !this.options.dateRange) {\n      this._setDate(date);\n    } else if (firstDateValid && secondDateValid && areDatesChronological) {\n      this._setDate(dates);\n    } else {\n      this._activeDate = this._options.startDate ? new Date(this._options.startDate) : new Date();\n      this._selectedRange = [];\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  _setDate(dateOrDates) {\n    if (this.options.dateRange) {\n      const [startDate, endDate] = dateOrDates;\n      this._activeDate = startDate;\n      this._selectedDate = [startDate, endDate];\n      this._selectedYear = [getYear(startDate), getYear(endDate)];\n      this._selectedMonth = [getMonth(startDate), getMonth(endDate)];\n      this._selectedRange = [startDate, endDate];\n    } else {\n      this._activeDate = dateOrDates;\n      this._selectedDate = dateOrDates;\n      this._selectedYear = getYear(dateOrDates);\n      this._selectedMonth = getMonth(dateOrDates);\n      this._headerDate = dateOrDates;\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  cancelClass: 'string',\n  popconfirmIcon: 'string',\n  cancelLabel: 'string',\n  confirmLabel: 'string',\n  position: 'string',\n};\n\nconst Default = {\n  popconfirmMode: 'inline',\n  message: 'Are you sure?',\n  cancelText: 'Cancel',\n  okText: 'OK',\n  okClass: 'btn-primary',\n  cancelClass: 'btn-secondary',\n  popconfirmIcon: '',\n  cancelLabel: 'Cancel',\n  confirmLabel: 'Confirm',\n  position: 'bottom',\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\n    this._escapeKeydownHandler = this._handleEscapeKey.bind(this);\n    this._outsideClickHandler = this._handleOutsideClick.bind(this);\n\n    EventHandler.on(this._element, 'click', this._clickHandler);\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 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\n    EventHandler.off(this._element, 'click', this._clickHandler);\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    // timeout is needed to avoid the issue with popper\n    const timeout = this._isOpen && this._options.popconfirmMode === 'inline' ? 155 : 0;\n    setTimeout(() => {\n      super.dispose();\n    }, timeout);\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._outsideClickHandler);\n    EventHandler.off(document, 'keydown', this._escapeKeydownHandler);\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 ${this._options.cancelClass} 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._escapeKeydownHandler);\n  }\n\n  _handleEscapeKey(event) {\n    if (event.keyCode === ESCAPE) {\n      if (this._isOpen) {\n        EventHandler.trigger(this._element, EVENT_CANCEL);\n      }\n      this.close();\n    }\n  }\n\n  _listenToOutsideClick() {\n    EventHandler.on(document, 'click', this._outsideClickHandler);\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      if (this._isOpen) {\n        EventHandler.trigger(this._element, EVENT_CANCEL);\n      }\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      const optionToLowerCase = typeof option === 'string' ? option.toLowerCase() : option;\n      if (optionToLowerCase === '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 */\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","/* 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 */\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","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) {\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, dropdownContainerId) {\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 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', 'combobox');\n  input.setAttribute('aria-disabled', disabled);\n  input.setAttribute('aria-haspopup', 'listbox');\n  input.setAttribute('aria-expanded', false);\n  input.setAttribute('aria-controls', dropdownContainerId);\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    const labelId = label.getAttribute('id');\n    if (labelId) {\n      input.setAttribute('aria-labelledby', labelId);\n    }\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, label) {\n  const optionsList = element('div');\n  Manipulator.addClass(optionsList, 'select-options-list');\n\n  if (label?.id) {\n    optionsList.setAttribute('aria-labelledby', label.id);\n  }\n\n  const multiselectable = config.multiple ? 'true' : 'false';\n  const role = config.filter ? 'combobox' : 'listbox';\n\n  optionsList.setAttribute('role', role);\n  optionsList.setAttribute('aria-multiselectable', multiselectable);\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 {\n  ESCAPE,\n  ENTER,\n  DOWN_ARROW,\n  UP_ARROW,\n  HOME,\n  END,\n  TAB,\n  SPACE,\n} 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}`;\nconst EVENT_SEARCH = `search${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\n    this._inputHandler = this._handleInput.bind(this);\n\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(\n      this._wrapperId,\n      this._config,\n      this._label,\n      this._dropdownContainerId\n    );\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  _updateOutlineInput() {\n    const inputWrapper = SelectorEngine.findOne(SELECTOR_FORM_OUTLINE, this._wrapper);\n    Input.getInstance(inputWrapper).update();\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    this._wrapperKeydownHandler = this._handleKeydown.bind(this);\n\n    EventHandler.on(this._wrapper, 'keydown', this._wrapperKeydownHandler);\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 || key === SPACE) {\n      event.preventDefault();\n    }\n    const isOpenKey =\n      key === ENTER ||\n      key === SPACE ||\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\n    if (this._optionsToRender[0].hidden === true) {\n      this._singleOptionSelect(this._optionsToRender[0]);\n    } else {\n      this._emitValueChangeEvent(null);\n      this._emitNativeChangeEvent();\n    }\n\n    this._updateInputValue();\n    this._updateFakeLabelPosition();\n    this._updateLabelPosition();\n    this._updateClearButtonVisibility();\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    this._updateOutlineInput();\n  }\n\n  _handleAutoSelection(option) {\n    this._singleOptionSelect(option);\n    this._updateInputValue();\n    this._updateFakeLabelPosition();\n    this._updateLabelPosition();\n    this._updateClearButtonVisibility();\n    this._updateOutlineInput();\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._config.placeholder ? (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 (\n      !this._selectionModel.selection ||\n      this._selectionModel._multiple ||\n      this._config.placeholder\n    ) {\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    if (\n      (this._optionsToRender[0]?.hidden && this._optionsToRender[0]?.selected) ||\n      !this.hasSelection\n    ) {\n      Manipulator.addStyle(this.clearButton, { display: 'none' });\n    } else {\n      Manipulator.addStyle(this.clearButton, { display: 'block' });\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        this._filterOptions(this.filterInput.value);\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    this._input.setAttribute('aria-expanded', 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    this._windowResizeHandler = this._handleWindowResize.bind(this);\n\n    EventHandler.on(window, 'resize', this._windowResizeHandler);\n  }\n\n  _handleWindowResize() {\n    if (this._dropdownContainer) {\n      this._updateDropdownWidth();\n      this._popper.forceUpdate();\n    }\n  }\n\n  _listenToSelectSearch() {\n    EventHandler.on(this.filterInput, 'input', this._inputHandler);\n  }\n\n  _handleInput(event) {\n    const searchTerm = event.target.value;\n    const debounceTime = this._config.filterDebounce;\n\n    const searchEvent = EventHandler.trigger(this._element, EVENT_SEARCH, { value: searchTerm });\n\n    if (searchEvent.defaultPrevented) {\n      return;\n    }\n\n    this._debounceFilter(searchTerm, debounceTime);\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      this._label\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) && !option.hidden);\n    }\n    const filterValue = value.toLowerCase();\n    return options.filter(\n      (option) => option.label.toLowerCase().includes(filterValue) && !option.hidden\n    );\n  }\n\n  _listenToDropdownKeydown() {\n    this._dropdownKeydownHandler = this._handleOpenKeydown.bind(this);\n\n    EventHandler.on(this.dropdown, 'keydown', this._dropdownKeydownHandler);\n  }\n\n  _listenToOutsideClick() {\n    this._outsideClickHandler = this._handleOutSideClick.bind(this);\n\n    EventHandler.on(document, 'click', this._outsideClickHandler);\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) {\n      EventHandler.off(this.filterInput, 'input', this._inputHandler);\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      this._input.setAttribute('aria-expanded', 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._outsideClickHandler);\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._wrapperKeydownHandler);\n    EventHandler.off(this.clearButton, 'click');\n    EventHandler.off(this.clearButton, 'keydown');\n    EventHandler.off(window, 'resize', this._windowResizeHandler);\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    // Preventing from bugging dropdown while search input was left with some text\n    if (this._config.filter && this.filterInput.value) {\n      this._resetFilterState();\n      EventHandler.trigger(this.filterInput, 'input');\n    }\n\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 (!this.multiple) {\n      const option = this.options.find((option) => option.value === value);\n      option.select();\n    }\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    this._updateOutlineInput();\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, { EventHandlerMulti } 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};\n\nconst DEFAULT_OPTIONS = {\n  bordered: false,\n  borderless: false,\n  borderColor: null,\n  clickableRows: false,\n  color: null,\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 DEFAULT_COLUMN = {\n  label: '',\n  field: '',\n  fixed: false,\n  format: null,\n  width: null,\n  sort: true,\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    this._tableId = null;\n    this._hasFixedColumns = null;\n\n    if (this._element) {\n      this._perfectScrollbar = null;\n      this._setup();\n\n      // Preventing from disappearing borders in datatables with fixed columns\n      this._hasFixedColumns = this._columns.some((column) => column.hasOwnProperty('fixed'));\n      if (this._hasFixedColumns) {\n        this._listenToWindowResize();\n      }\n\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        ...DEFAULT_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._optionToLowerCase(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._optionToLowerCase(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._optionToLowerCase(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.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._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  _optionToLowerCase(option) {\n    return typeof option === 'string' ? option.toLowerCase() : option;\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    ['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.replaceAll(\"'\", '\"')); //eslint-disable-line\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  _listenToWindowResize() {\n    this._windowResizeHandler = this._handleWindowResize.bind(this);\n\n    EventHandlerMulti.on(window, 'resize DOMContentLoaded', this._windowResizeHandler);\n  }\n\n  _handleWindowResize() {\n    this._renderRows();\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._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      EventHandlerMulti.off(window, 'resize DOMContentLoaded', this._windowResizeHandler);\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    const userTable = SelectorEngine.findOne('table', this._element);\n    this._tableId = userTable?.getAttribute('id');\n    this._element.innerHTML = tableTemplate(this.tableOptions).table;\n\n    if (this._tableId) {\n      const renderedTable = SelectorEngine.findOne('table', this._element);\n      renderedTable.setAttribute('id', this._tableId);\n    }\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 columnsMap = new Map(\n      this.columns.map((obj) => {\n        return [obj.field, obj];\n      })\n    );\n\n    const rows = SelectorEngine.find(SELECTOR_ROW, this._element);\n    const rowsData = this.computedRows;\n    const cellsToFormat = [];\n\n    rows.forEach((row, index) => {\n      const cells = SelectorEngine.find(SELECTOR_CELL, row);\n\n      cells.forEach((cell) => {\n        const field = Manipulator.getDataAttribute(cell, 'field');\n        const column = columnsMap.get(field);\n\n        if (column && column.format !== null) {\n          const cellData = rowsData[index][field];\n          cellsToFormat.push({ cell, column, cellData });\n        }\n      });\n    });\n\n    cellsToFormat.forEach(({ cell, column, cellData }) => column.format(cell, cellData));\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","/* eslint-disable no-restricted-globals */\nimport PerfectScrollbar from '../mdb/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","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  backdropID: 'string',\n  delay: '(null|number)',\n  loader: 'string',\n  parentSelector: '(null|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","/* 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","/**\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    this._windowResizeHandler = this._handleWindowResize.bind(this);\n\n    EventHandler.on(window, 'resize', this._windowResizeHandler);\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 (event.shiftKey) {\n          const start = 0;\n          const end = this._input.selectionStart;\n          this._input.setSelectionRange(start, end);\n        } else 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 (event.shiftKey) {\n          const start = this._input.selectionStart;\n          const end = this._input.value.length;\n          this._input.setSelectionRange(start, end);\n        } else 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._input.setAttribute('aria-expanded', 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    // Handler is not needed in this case\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    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      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._windowResizeHandler);\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      this._input.setAttribute('aria-expanded', 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 moddal 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    EventHandler.off(window, 'resize', this._windowResizeHandler);\n\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    this._windowResizeHandler = this._handleWindowResize.bind(this);\n\n    EventHandler.on(window, 'resize', this._windowResizeHandler);\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._initCopyHandler = 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._initCopyHandler);\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._initCopyHandler);\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    </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 Input from '../../free/input';\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    this._inputInstance = 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 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._initializeInput();\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    if (this._inputInstance) {\n      this._inputInstance.dispose();\n    }\n    this.chipsInputWrapper.remove();\n    EventHandler.off(this._element, 'click');\n    EventHandler.off(this._element, 'keypress');\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    super.dispose();\n  }\n\n  // Private\n\n  _initializeInput() {\n    const formOutline = this._element.querySelector('.form-outline');\n\n    this._inputInstance = new Input(formOutline).init();\n  }\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      event.preventDefault();\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, 'keypress', placeholder, (e) =>\n      this._handleKeysInputToElement(e)\n    );\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}`;\nconst EVENT_END = `end${EVENT_KEY}`;\n\nconst CLASSNAME_HAND = '.multi-range-slider-hand';\nconst CLASSNAME_CONNECT = '.multi-range-slider-connect';\nconst CLASSNAME_TOOLTIP = '.multi-range-slider-tooltip';\nconst CLASSNAME_TOOLTIP_VALUE = '.multi-range-slider-tooltip-value';\n\nconst SELECTOR_ACTIVE = 'active';\nconst SELECTOR_HORIZONTAL = 'multi-range-slider-horizontal';\n\nconst DefaultType = {\n  max: 'number',\n  min: 'number',\n  numberOfRanges: 'number',\n  startValues: 'array',\n  step: '(string||null||number)',\n  tooltip: 'boolean',\n};\n\nconst Default = {\n  max: 100,\n  min: 0,\n  numberOfRanges: 2,\n  startValues: [0, 100],\n  step: null,\n  tooltip: 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    this._movingHand = 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 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`, this._element);\n  }\n\n  get activeTooltip() {\n    return SelectorEngine.findOne(CLASSNAME_TOOLTIP, this._element);\n  }\n\n  get activeTooltipValue() {\n    const handTooltip = SelectorEngine.findOne(`${CLASSNAME_HAND}.active`, this._element);\n    return SelectorEngine.findOne(`${CLASSNAME_TOOLTIP_VALUE}`, handTooltip);\n  }\n\n  // Public\n\n  init() {\n    this._setClassHorizontalOrVertical();\n    this._setRangeConnectsElement();\n    this._setRangeHandleElements();\n    this._setTransformationOnStart();\n    this._setTooltipToHand();\n    this._addEventListeners();\n  }\n\n  dispose() {\n    Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n    Manipulator.removeClass(this._element, SELECTOR_HORIZONTAL);\n\n    this._removeEventListeners();\n\n    this._removeSliderElements();\n\n    super.dispose();\n  }\n\n  // Private\n  _removeSliderElements() {\n    this.hands.forEach((hand) => {\n      hand.remove();\n    });\n\n    this.connect.parentNode.remove();\n  }\n\n  _addEventListeners() {\n    this._onWindowResize = this._handleWindowResize.bind(this);\n\n    this._onConnectMousedown = this._handleClickOnRange.bind(this);\n    this._onHandMouseDown = this._handleClickEventOnHand.bind(this);\n    this._onDocumentMouseUp = this._handleEndMoveEventDocument.bind(this);\n\n    EventHandlerMulti.on(this.connect, 'mousedown touchstart', this._onConnectMousedown);\n    EventHandlerMulti.on(document, 'mouseup touchend', this._onDocumentMouseUp);\n    this.hands.forEach((hand) => {\n      EventHandlerMulti.on(hand, 'mousedown touchstart', this._onHandMouseDown);\n    });\n\n    EventHandler.on(window, 'resize', this._onWindowResize);\n  }\n\n  _removeEventListeners() {\n    EventHandlerMulti.off(this.connect, 'mousedown touchstart', this._onConnectMousedown);\n    EventHandlerMulti.off(document, 'mouseup touchend', this._onDocumentMouseUp);\n    this.hands.forEach((hand) => {\n      EventHandlerMulti.off(hand, 'mousedown touchstart', this._onHandMouseDown);\n    });\n    EventHandler.off(window, 'resize', this._onWindowResize);\n  }\n\n  _handleWindowResize() {\n    this._setTransformationOnStart();\n  }\n\n  _setTransformationOnStart() {\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(ev) {\n    const hand = ev.target.closest(CLASSNAME_HAND);\n\n    const { max, min } = this._options;\n\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._movingHand = hand;\n\n    this._onDocumentMouseMove = this._handleMouseMoveEventDocument.bind(this);\n    this._onHandMouseUp = this._handleEndMoveEvent.bind(this);\n\n    EventHandlerMulti.on(document, 'mousemove touchmove', this._onDocumentMouseMove);\n    EventHandlerMulti.on(hand, 'mouseup touchend', this._onHandMouseUp);\n\n    EventHandler.trigger(hand, EVENT_START, { hand });\n  }\n\n  _setClassHorizontalOrVertical() {\n    if (this._element) {\n      Manipulator.addClass(this._element, SELECTOR_MULTI);\n    }\n\n    Manipulator.addClass(this._element, SELECTOR_HORIZONTAL);\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', 'horizontal');\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  _handleMouseMoveEventDocument(ev) {\n    const { tooltip, step } = this._options;\n\n    const hand = this._movingHand;\n\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  _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    const hand = this._movingHand;\n\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    EventHandler.trigger(hand, EVENT_END, { hand });\n    this._movingHand = null;\n\n    EventHandlerMulti.off(document, 'mousemove touchmove', this._onDocumentMouseMove);\n  }\n\n  _handleEndMoveEvent(ev) {\n    const hand = ev.target.closest(CLASSNAME_HAND);\n\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  _handleClickOnRange(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  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","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`;\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}`;\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_DATEPICKER = 'valueChanged.mdb.datepicker';\nconst EVENT_VALUE_CHANGED_TIMEPICKER = 'valueChanged.mdb.timepicker';\n\nconst BUTTONS_WRAPPER = element('div');\n\nconst Default = {\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  showFormat: false,\n};\n\nconst DefaultType = {\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  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._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\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._applyFormatPlaceholder();\n\n    if (this._options.disablePast) {\n      this._handleTimepickerDisablePast();\n    }\n    if (this._options.disableFuture) {\n      this._handleTimepickerDisableFuture();\n    }\n\n    if (this._input.value) {\n      this._handleInput(this._input.value);\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  _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 (dateTimeSplited.length === 2) {\n      const isInputValid = isValidDate(date) && isValidTime(inputSecondValue);\n\n      if (isInputValid) {\n        this._dateValue = inputFirstValue;\n        this._timeValue = inputSecondValue;\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      }\n    }\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._confirmSelection(this._datepicker._headerDate);\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, EVENT_VALUE_CHANGED_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, EVENT_VALUE_CHANGED_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  _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.toggleButton, '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        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\n      const changeEvent = EventHandler.trigger(this._element, EVENT_VALUE_CHANGED, {\n        value: this._input.value,\n      });\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","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 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 callbackInitState = new Map();\n\nconst alertCallback = (component, initSelector) => {\n  const Alert = component;\n\n  if (!callbackInitState.has(component.name)) {\n    enableDismissTrigger(Alert);\n    callbackInitState.set(component.name, true);\n  }\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  if (!callbackInitState.has(component.name)) {\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    callbackInitState.set(component.name, true);\n  }\n\n  // MDB init\n  SelectorEngine.find(initSelector).forEach((element) => {\n    return Button.getOrCreateInstance(element);\n  });\n};\n\nconst carouselCallback = (component, initSelector) => {\n  if (callbackInitState.has(component.name)) {\n    return;\n  }\n\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  callbackInitState.set(component.name, true);\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  if (!callbackInitState.has(component.name)) {\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    callbackInitState.set(component.name, true);\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  if (!callbackInitState.has(component.name)) {\n    EventHandler.on(\n      document,\n      EVENT_KEYDOWN_DATA_API,\n      SELECTOR_DATA_TOGGLE,\n      Dropdown.dataApiKeydownHandler\n    );\n    EventHandler.on(\n      document,\n      EVENT_KEYDOWN_DATA_API,\n      SELECTOR_MENU,\n      Dropdown.dataApiKeydownHandler\n    );\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  callbackInitState.set(component.name, true);\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  if (!callbackInitState.has(component.name)) {\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    // 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    callbackInitState.set(component.name, true);\n  }\n\n  // auto-init\n  SelectorEngine.find(SELECTOR_DATA_INIT).map((element) => Input.getOrCreateInstance(element));\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  if (!callbackInitState.has(component.name)) {\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    callbackInitState.set(component.name, true);\n  }\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  if (callbackInitState.has(component.name)) {\n    return;\n  }\n\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  callbackInitState.set(component.name, true);\n};\n\nconst scrollspyCallback = (component, initSelector) => {\n  if (callbackInitState.has(component.name)) {\n    return;\n  }\n\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  callbackInitState.set(component.name, true);\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  if (!callbackInitState.has(component.name)) {\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    callbackInitState.set(component.name, true);\n  }\n};\n\nconst toastCallback = (component, initSelector) => {\n  const Toast = component;\n\n  if (!callbackInitState.has(component.name)) {\n    enableDismissTrigger(Toast);\n    callbackInitState.set(component.name, true);\n  }\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  if (!callbackInitState.has(component.name)) {\n    EventHandler.one(document, 'mousedown', initSelector, Ripple.autoInitial(new Ripple()));\n    callbackInitState.set(component.name, true);\n  }\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 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 callbackInitState = new Map();\n\nconst alertCallback = (component, initSelector) => {\n  const Alert = component;\n\n  if (!callbackInitState.has(component.name)) {\n    enableDismissTrigger(Alert);\n    callbackInitState.set(component.name, true);\n  }\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_TOGGLE = `[data-mdb-${component.NAME}-initialized]`;\n  const SELECTOR_TOGGLE = `${SELECTOR_DATA_TOGGLE} img:not(.lightbox-disabled)`;\n  const Lightbox = component;\n\n  SelectorEngine.find(initSelector).forEach((element) => {\n    return Lightbox.getOrCreateInstance(element);\n  });\n\n\n  if (callbackInitState.has(component.name)) {\n    return;\n  }\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_TOGGLE, (event) => {\n    event.preventDefault();\n    Lightbox.toggle(event);\n  });\n  callbackInitState.set(component.name, true);\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  if (!callbackInitState.has(component.name)) {\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    callbackInitState.set(component.name, true);\n  }\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  if (!callbackInitState.has(component.name)) {\n    EventHandler.on(document, 'click', SELECTOR_TOGGLE, Sidenav.toggleSidenav());\n    callbackInitState.set(component.name, true);\n  }\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  if (!callbackInitState.has(component.name)) {\n    enableDismissTrigger(Toast);\n    callbackInitState.set(component.name, true);\n  }\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 {\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  select: {\n    name: 'Select',\n    selector: '[data-mdb-select-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  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    onInit: 'init',\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 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","set","element","key","data","get","keyProperties","Data","setData","instance","getData","removeData","delete","getUID","prefix","Math","floor","random","document","getElementById","getSelector","selector","getAttribute","hrefAttr","trim","getSelectorFromElement","querySelector","getElementFromSelector","isElement","obj","jquery","nodeType","getElement","length","typeCheckConfig","componentName","config","configTypes","Object","keys","forEach","property","expectedTypes","value","valueType","toString","call","match","toLowerCase","RegExp","test","Error","toUpperCase","isVisible","style","parentNode","elementStyle","getComputedStyle","parentNodeStyle","display","visibility","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","getjQuery","jQuery","window","body","onDOMContentLoaded","callback","readyState","addEventListener","isRTL","documentElement","dir","tag","createElement","defineJQueryPlugin","plugin","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","getUidEvent","uid","getEvent","findHandler","events","handler","delegationSelector","uidEventList","i","len","event","originalHandler","normalizeParams","originalTypeEvent","delegationFn","delegation","typeEvent","replace","custom","indexOf","addHandler","oneOff","handlers","previousFn","bootstrapDelegationHandler","domElements","querySelectorAll","target","this","delegateTarget","EventHandler","off","type","apply","bootstrapHandler","removeHandler","removeEventListener","Boolean","on","one","extend","EventHandler$1","e","eventParameters","parametersToCopy","param","trigger","defaultPrevented","preventDefault","inNamespace","isNamespace","charAt","elementEvent","namespace","storeElementEvent","handlerKey","removeNamespacedHandlers","slice","keyHandlers","args","isNative","jQueryEvent","bubbles","nativeDispatch","evt","Event","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","createEvent","initEvent","CustomEvent","cancelable","defineProperty","dispatchEvent","EventHandlerMulti","eventsName","split","normalizeData","val","Number","normalizeDataKey","chr","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","dataset","filter","startsWith","pureKey","getDataAttribute","offset","rect","getBoundingClientRect","top","scrollTop","left","scrollLeft","position","offsetTop","offsetLeft","assign","toggleClass","className","remove","add","addClass","addStyle","removeClass","hasClass","SelectorEngine","closest","matches","find","concat","Element","prototype","findOne","children","child","parents","ancestor","push","prev","previous","previousElementSibling","next","nextElementSibling","elementMap","Map","has","instanceMap","size","console","error","Array","from","TRANSITION_END","parseSelector","CSS","escape","triggerTransitionEnd","object","getClientRects","elementIsVisible","getPropertyValue","closedDetails","summary","findShadowRoot","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","execute","possibleCallback","defaultValue","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","transitionDuration","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","getTransitionDurationFromElement","called","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","max","min","Set","makeEventUid","getElementEvents","callable","values","normalizeParameters","delegationFunction","isDelegated","getTypeEvent","relatedTarget","wrapFunction","previousFunction","domElement","hydrateObj","entries","includes","meta","configurable","JSON","parse","decodeURIComponent","mdbKeys","Config$1","Default","DefaultType","_getConfig","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","TypeError","Config","_element","_config","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","getInstance","getOrCreateInstance","VERSION","eventName","Button","BaseComponent","toggle","each","mapComponentsData","componentsData","InitializedComponents","bindCallbackEventsIfNeeded","component","initComponent","manualInit","thisComponent","_defaultInitSelectors","isToggler","advanced","onInit","EVENT_CLICK","EVENT_TRANSITIONEND","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","CLASS_NAME_ACTIVE","CLASS_NAME_FIXED_ACTION_BTN","BSButton","super","_fn","_init","Manipulator$1","options","_actionButton","_buttonListElements","_buttonList","_isTouchDevice","show","_bindListOpenTransitionEnd","height","_fullContainerHeight","_toggleVisibility","hide","_bindListHideTransitionEnd","_saveInitialHeights","_setInitialStyles","_bindInitialEvents","_bindMouseEnter","_bindMouseLeave","_bindClick","_initialContainerHeight","action","listTranslate","transform","el","_getHeight","computed","_initialListHeight","marginBottom","hrefAttribute","map","sel","join","focusableChildren","focusables","getMultipleElementsFromSelector","CLASS_NAME_SHOW","EVENT_MOUSEDOWN","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","append","enableDismissTrigger","method","clickEvent","tagName","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_NAV_BACKWARD","autofocus","trapElement","_isActive","_lastTabNavDirection","activate","focus","_handleFocusin","_handleKeydown","deactivate","elements","shiftKey","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","clientWidth","abs","innerWidth","width","_disableOverFlow","_setElementAttributes","calculatedValue","reset","_resetElementAttributes","isOverflowing","_saveInitialAttribute","overflow","styleProperty","scrollbarWidth","_applyManipulationCallback","setProperty","actualValue","removeProperty","callBack","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","EVENT_HIDE_PREVENTED","EVENT_KEYDOWN_DISMISS","keyboard","scroll","Offcanvas","_isShown","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_addEventListeners","blur","FocusTrap","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","_eventIsPointerPenTouch","clientX","touches","_end","_handleSwipe","_move","absDeltaX","direction","pointerType","navigator","maxTouchPoints","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_DRAG_START","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","KEY_TO_DIRECTION","ArrowLeft","ArrowRight","interval","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","swipeConfig","_directionToOrder","clearTimeout","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","_orderToDirection","isCycling","directionalClassName","orderClassName","_isAnimated","clearInterval","EXTENDED_EVENTS","BSCarousel","_bindMdbEvents","bottom","right","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","reduce","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","nodeName","getWindow","node","ownerDocument","defaultView","isHTMLElement","HTMLElement","isShadowRoot","applyStyles$1","enabled","phase","_ref","state","styles","effect","_ref2","initialStyles","strategy","margin","arrow","hasOwnProperty","attribute","requires","getBasePlacement","round","getUAString","uaData","userAgentData","brands","isArray","item","brand","version","userAgent","isLayoutViewport","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","visualViewport","addVisualOffsets","x","y","getLayoutRect","parent","rootNode","isSameNode","host","isTableElement","getDocumentElement","getParentNode","assignedSlot","getTrueOffsetParent","offsetParent","getOffsetParent","isFirefox","currentNode","css","perspective","contain","willChange","getContainingBlock","getMainAxisFromPlacement","within","mathMax","mathMin","mergePaddingObject","paddingObject","expandToHashMap","hashMap","arrow$1","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","axis","padding","rects","toPaddingObject","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","centerToReference","center","axisProp","centerOffset","_options$element","requiresIfExists","getVariation","unsetSides","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","win","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","roundOffsetsByDPR","computeStyles$1","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","passive","eventListeners","_options$scroll","_options$resize","resize","scrollParents","scrollParent","update","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","pageXOffset","pageYOffset","getWindowScrollBarX","isScrollParent","_getComputedStyle","overflowX","overflowY","getScrollParent","listScrollParents","_element$ownerDocumen","isBody","updatedList","rectToClientRect","getClientRectFromMixedType","clippingParent","html","layoutViewport","getViewportRect","clientTop","clientLeft","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","getDocumentRect","getClippingRect","boundary","rootBoundary","mainClippingParents","clipperElement","getClippingParents","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","contextElement","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","flip$1","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","_options$allowedAutoP","allPlacements","allowedPlacements","overflows","sort","a","b","computeAutoPlacement","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","getSideOffsets","preventedOffsets","isAnySideFullyClipped","some","side","hide$1","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","offset$1","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","popperOffsets$1","preventOverflow$1","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","v","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","modifiers","visited","result","modifier","dep","depModifier","DEFAULT_OPTIONS","areValidElements","arguments","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","pending","orderedModifiers","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","merged","orderModifiers","current","existing","m","_ref$options","cleanupFn","noopFn","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","Promise","resolve","then","destroy","cleanupModifierEffects","onFirstUpdate","createPopper","computeStyles","applyStyles","flip","DefaultAllowlist","area","br","col","code","dd","div","dl","dt","em","hr","h1","h2","h3","h4","h5","h6","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","uriAttributes","SAFE_URL_PATTERN","allowedAttribute","allowedAttributeList","attributeName","nodeValue","attributeRegex","regex","allowList","content","extraClass","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","innerHTML","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","sanitizeHtml","unsafeHtml","sanitizeFunction","createdDocument","DOMParser","parseFromString","elementName","attributeList","allowedAttributes","DISALLOWED_ATTRIBUTES","CLASS_NAME_FADE","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","popperConfig","title","Tooltip","Popper","_isEnabled","_timeout","_isHovered","_activeTrigger","_popper","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","showEvent","isInTheDom","_getTipElement","_createPopper","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","Popper.createPopper","_getPopperConfig","_getOffset","popperData","defaultBsPopperConfig","triggers","eventIn","eventOut","context","_setTimeout","timeout","dataAttributes","dataAttribute","Popover","_getContent","BSPopover","EVENT_ACTIVATE","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LINKS","SELECTOR_LINK_ITEMS","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","scrollTo","behavior","IntersectionObserver","_observerCallback","targetElement","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","decodeURI","_activateParents","listGroup","activeNodes","EVENT_ACTIVATE_BS","CLASS_COLLAPSIBLE","SELECTOR_LIST","SELECTOR_COLLAPSIBLE_SCROLLSPY","BSScrollSpy","_collapsibles","_scrollElement","_bindActivateEvent","_getCollapsibles","_showSubsection","_hideSubsection","_hide","itemsToHide","_show","destinedHeight","collapsibleElements","collapsibleElement","listParent","listHeight","active","collapsible","unactive","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","HOME_KEY","END_KEY","SELECTOR_DROPDOWN_TOGGLE","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_INNER_ELEM","Tab","_parent","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","_getActiveElem","hideEvent","_deactivate","_activate","relatedElem","_toggleDropDown","stopPropagation","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","elem","EVENT_SHOW_BS","EVENT_SHOWN_BS","BSTab","hideEventMdb","showEventMdb","BSTooltip","t","n","d","Z","r","o","exports","c","initCustomEvent","detail","HTMLIFrameElement","contentDocument","head","identifier","base","l","f","media","sourceMap","references","updater","nonce","nc","insert","appendChild","styleSheet","cssText","createTextNode","childNodes","removeChild","insertBefore","btoa","unescape","encodeURIComponent","stringify","firstChild","singleton","bind","all","atob","splice","__esModule","default","enumerable","locals","animationName","inputType","CLASSNAME_ACTIVE","CLASSNAME_NOTCH","CLASSNAME_NOTCH_LEADING","CLASSNAME_NOTCH_MIDDLE","SELECTOR_NOTCH","SELECTOR_NOTCH_LEADING","SELECTOR_NOTCH_MIDDLE","Input","_label","_labelWidth","_labelMarginLeft","_notchLeading","_notchMiddle","_notchTrailing","_initiated","_helper","_counter","_counterElement","_maxLength","_leadingIcon","init","input","_getLabelData","_applyDivs","_applyNotch","_getHelper","_getCounter","_getNotchData","forceActive","forceInactive","_removeBorder","_showPlaceholder","_getLabelWidth","_getLabelPositionInInputGroup","_toggleDefaultDatePlaceholder","maxLength","_showCounter","actualLength","_bindCounter","opacity","allNotchWrappers","notchWrapper","marginLeft","border","_getElements","initialized","prevLabelWidth","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_DEEPER_CHILDREN","SELECTOR_DATA_TOGGLE","Collapse","_isTransitioning","_triggerArray","toggleList","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","activeChildren","_getFirstLevelChildren","activeInstance","dimension","_getDimension","scrollSize","selected","triggerArray","isOpen","BSCollapse","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","autoClose","Dropdown","_menu","_inNavbar","_detectNavbar","_completeHide","referenceElement","_getPlacement","parentDropdown","isEnd","_selectMenuItem","clearMenus","button","openToggles","composedPath","isMenuTarget","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","dropdownAnimation","EVENT_HIDE_MDB","EVENT_HIDDEN_MDB","EVENT_SHOW_MDB","EVENT_SHOWN_MDB","ANIMATION_CLASS","ANIMATION_SHOW_CLASS","ANIMATION_HIDE_CLASS","BSDropdown","_menuStyle","_popperPlacement","_mdbPopperConfig","isPrefersReducedMotionSet","matchMedia","_bindShowEvent","_bindShownEvent","_bindHideEvent","_bindHiddenEvent","_dropdownAnimationStart","_bindAnimationEnd","CLASSNAME_RIPPLE","CLASSNAME_RIPPLE_WAVE","CLASSNAME_RIPPLE_WRAPPER","SELECTOR_COMPONENT","CLASSNAME_UNBOUND","DEFAULT_RIPPLE_COLOR","BOOTSTRAP_COLORS","rippleCentered","rippleColor","rippleDuration","rippleRadius","rippleUnbound","Ripple","_clickHandler","_createRipple","_rippleTimer","_isMinWidthSet","_rippleInSpan","_addClickEvent","_autoInit","rippleInit","shadow","boxShadow","btn","wrapper","replaceChild","minWidth","_getEventLayer","layerX","layerY","clientY","offsetX","offsetY","duration","_durationToMsNumber","diameterOptions","diameter","_getDiameter","radiusValue","rippleHTML","_createHTMLRipple","ripple","_removeHTMLRipple","_removeOldColorClasses","_addColor","_toggleUnbound","_appendRipple","SelectorEngine$1","rippleEl","_removeWrapperSpan","replaceWith","time","pythagorean","sideA","sideB","sqrt","positionCenter","quadrant","getCorner","topLeft","topRight","bottomLeft","bottomRight","color","rgbValue","_colorToRGB","gradientImage","backgroundImage","REGEXP_CLASS_COLOR","substr","tempElem","flag","namedColorsToRgba","rgbaToRgb","autoInitial","CLASSNAME_THUMB","SELECTOR_THUMB","Range","_thumb","rangeInput","_addThumb","_thumbUpdate","_handleEvents","_disposeEvents","RANGE_THUMB","_showThumb","_hideThumb","inputValue","minValue","maxValue","newValue","animationStart","animationShowOnLoad","onStart","onEnd","onHide","onShow","animationOnScroll","animationOffset","animationDelay","animationDuration","animationReverse","animationInterval","animationRepeat","animationReset","Animate","_animateElement","_getAnimateElement","_isFirstScroll","_repeatAnimateOnScroll","startAnimation","_startAnimation","stopAnimation","_clearAnimationClass","changeAnimationType","_bindHoverEvents","_bindScrollEvents","_bindClickEvents","_bindTriggerOnEndCallback","_bindResetAnimationAfterFinish","targetId","_animateOnScroll","elementOffsetTop","elementHeight","windowHeight","innerHeight","shouldBeVisible","isElementVisible","_hideAnimateElement","_callback","_showAnimateElement","_addAnimatedClass","_removeInvisibleClass","_setAnimationRepeat","_setAnimationReverse","_setAnimationDelay","_setAnimationDuration","_setAnimationInterval","animationIterationCount","animationDirection","Function","autoInit","isNullOrUndef","isObject","isNumberFinite","isFinite","finiteOrDefault","valueOrDefault","toDimension","endsWith","thisArg","loopable","reverse","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","clone$1","source","create","klen","k","isValidKey","_merger","tval","sval","merge$1","merge","sources","merger","mergeIf","_mergerIf","keyResolvers","resolveObjectKey","resolver","parts","tmp","part","_splitKey","_getKeyResolver","_capitalize","str","defined","isFunction","setsEqual","PI","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","niceNum","range","roundedRange","almostEquals","niceRange","pow","fraction","isNumber","isNaN","epsilon","_setMinAndMaxByKey","array","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","_lookup","table","cmp","mid","hi","lo","_lookupByKey","last","_rlookupByKey","arrayEvents","unlistenArrayEvents","listener","stub","_chartjs","listeners","_arrayUnique","requestAnimFrame","requestAnimationFrame","throttled","updateFn","updateArgs","ticking","rest","_toLeftRightCenter","align","_alignStartEnd","_getStartAndCountOfVisiblePoints","points","animationsDisabled","pointCount","count","_sorted","iScale","_parsed","minDefined","maxDefined","getUserBounds","getPixelForValue","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","atEdge","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","lim","h","p2b","n2b","b2n","n2p","map$1","A","B","C","D","E","F","hex","eq","hexString","g","isShort","alpha","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","rgb2hsl","hueValue","calln","hsl2rgb","hue","hueParse","exec","p1","p2","hwb2rgb","hsv2rgb","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","names","nameParse","unpacked","tkeys","j","ok","nk","unpack","transparent","RGB_RE","modHSL","ratio","clone","proto","fromObject","functionParse","rgbParse","Color","ret","_rgb","_valid","valid","rgbString","hslString","mix","weight","c1","c2","w2","w1","interpolate","rgb1","rgb2","clearer","greyscale","opaquer","negate","lighten","darken","saturate","desaturate","rotate","deg","index_esm","isPatternOrGradient","getHoverColor","overrides","descriptors","getScope$1","scope","defaults","_descriptors","backgroundColor","borderColor","datasets","chart","platform","getDevicePixelRatio","font","family","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","describe","override","route","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","local","_scriptable","_indexable","_fallback","_measureText","gc","longest","string","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","fill","borderWidth","stroke","_isPointInArea","point","clipArea","clip","unclipArea","_steppedLineTo","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","renderText","opts","lines","strokeWidth","strokeColor","line","translation","fillStyle","textAlign","textBaseline","setRenderOpts","strokeStyle","lineWidth","strokeText","maxWidth","fillText","decorateText","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","addRoundedRectPath","LINE_HEIGHT","FONT_STYLE","toLineHeight","numberOrZero","_readValueToProps","props","objProps","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","warn","toFontString","inputs","info","cacheable","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","_resolve","Symbol","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","proxy","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getOwnPropertyDescriptor","Reflect","getPrototypeOf","getKeysFromAllScopes","ownKeys","storage","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","isScriptable","_resolveScriptable","isIndexable","arr","_resolveArray","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","parsed","EPSILON","getPoint","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","splineCurveMonotone","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","delta","iPixel","vPixel","monotoneCompute","capControlPoint","pt","_updateBezierControlPoints","loop","controlPoints","spanGaps","cubicInterpolationMode","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","positions","getPositionedStyle","suffix","pos","useOffsetPos","shadowRoot","getRelativePosition","borderBox","boxSizing","paddings","borders","box","getCanvasPosition","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","maxHeight","containerSize","containerStyle","containerBorder","containerPadding","getContainerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","readUsedSize","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","formatNumber","num","locale","cacheKey","formatter","Intl","NumberFormat","getNumberFormat","format","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","original","getPropertyPriority","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","_boundSegment","segment","bounds","startBound","endBound","getSegment","prevValue","inside","subStart","shouldStart","shouldStop","_boundSegments","segments","splitByStyles","segmentOptions","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","st","p0","p0DataIndex","p1DataIndex","styleChanged","doSplitByStyles","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","animator","_request","_charts","_running","_lastDate","_notify","anims","date","callbacks","numSteps","initial","currentStep","_refresh","_update","Date","now","remaining","running","draw","_active","_total","tick","pop","_getAnims","charts","complete","progress","listen","cb","cur","_duration","stop","cancel","interpolators","boolean","factor","c0","number","Animation","cfg","currentValue","_easing","easing","_target","_prop","_from","_to","_promises","elapsed","remain","wait","promises","res","rej","resolved","animationOptions","colors","properties","numbers","animations","visible","Animations","_properties","configure","animatedProps","option","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","awaitAll","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","singleMode","otherValue","isStacked","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","controller","_cachedMeta","_stacks","iAxis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","getFirstScaleId","shift","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","_ctx","_cachedDataOpts","getMeta","_type","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","initialize","linkScales","_stacked","addElements","updateIndex","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","_destroy","_dataCheck","adata","convertObjectDataToArray","isExtensible","datasetElementType","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","canStack","otherScale","createStack","NEGATIVE_INFINITY","otherMin","otherMax","getAllParsedValues","getMaxOverflow","getLabelAndValue","label","getLabelForValue","_clip","toClip","defaultClip","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","dataElementType","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","freeze","_resolveAnimations","transition","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_dataChanges","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","_cache","$bar","visibleMetas","getAllScaleValues","curr","_length","updateMinAndPrev","ticks","getPixelForTick","parseValue","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","setBorderSkipped","edge","borderSkipped","horizontal","borderProps","enableBorderRadius","parseEdge","orig","v2","startEnd","setInflateAmount","inflateAmount","BarController","iAxisKey","vAxisKey","bars","getBasePixel","isHorizontal","ruler","_getRuler","vpixels","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","_getStacks","grouped","skipNull","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","categoryPercentage","barPercentage","baseValue","minBarLength","actualBase","floating","getDataVisibility","barSign","startPixel","getPixelForDecimal","endPixel","halfGrid","getLineWidthForValue","maxBarThickness","Infinity","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","_index_","grid","_value_","beginAtZero","BubbleController","tooltip","DoughnutController","innerRadius","outerRadius","getter","_getRotation","_getCircumference","circumference","_getRotationExtents","isDatasetVisible","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","cutout","chartWeight","_getRingWeight","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","_circumference","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","legend","generateLabels","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","LineController","_dataset","_decimated","animated","maxGapLength","directUpdate","prevParsed","nullData","lastPoint","updateControlPoints","PolarAreaController","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","circular","pointLabels","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","Element$1","tooltipPosition","useFinalPosition","getProps","hasValue","final","defaultRoutes","formatters","numeric","tickValue","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","Ticks","autoSkip","tickOpts","ticksLimit","maxTicksLimit","tickLength","_tickSize","maxScale","maxChart","determineMaxTicks","majorIndices","major","getMajorIndices","numMajorIndices","first","newTicks","ceil","skipMajors","evenMajorSpacing","diff","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","majorStart","majorEnd","grace","drawBorder","drawOnChartArea","drawTicks","tickWidth","tickColor","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkipPadding","labelOffset","minor","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_reversePixels","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getPadding","getTicks","xLabels","yLabels","beforeLayout","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","change","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetRight","isFullSize","fullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","idx","getValueForPixel","decimal","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","positionAxisID","limit","step","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","_computeLabelItems","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","fillRect","findIndex","drawGrid","drawLine","setLineDash","lineDashOffset","lastLineWidth","drawLabels","drawTitle","titleX","titleY","titleArgs","_layers","tz","z","gz","getSortedVisibleDatasetMetas","axisID","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","register","parentScope","isIChartComponent","itemDefaults","routes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","unregister","registry","controllers","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","reg","_getRegistryForType","_exec","itemReg","camelMethod","ScatterController","abstract","DateAdapter","chartOptions","formats","timestamp","amount","unit","startOf","weekday","endOf","members","adapters","_date","binarySearch","metaset","lookupMethod","getRange","evaluateInteractionItems","getIntersectItems","isPointInArea","inRange","getNearestCartesianItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestItems","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","setLayoutDims","layouts","params","stackWeight","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","layout","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","setBoxDims","placeBoxes","userPadding","autoPadding","addBox","removeBox","layoutItem","minPadding","layoutBoxes","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","visibleVerticalBoxCount","updatePos","handleMaxPadding","BasePlatform","acquireContext","releaseContext","isAttached","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","removeListener","nodeListContains","nodeList","createAttachObserver","observer","MutationObserver","addedNodes","removedNodes","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","unlistenDevicePixelRatioChanges","createProxyAndListen","native","fromNativeEvent","addListener","DomPlatform","renderHeight","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","attach","detach","isConnected","PluginService","notify","hook","_createDescriptors","descriptor","invalidate","_oldCache","_notifyStateChanges","localIds","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","pluginScopeKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","initConfig","_scopeCache","_resolverCache","clearCache","clear","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","Chart$1","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","debounce","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","render","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","replay","hoverOptions","deactivated","activated","inChartArea","eventFilter","_handleEvent","_getActiveElements","isClick","_isClickEvent","lastEvent","determineLastEvent","invalidatePlugins","Chart","clipArc","pixelMargin","angleMargin","parseBorderRadius$1","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","p8","outerStartX","outerStartY","outerEndX","outerEndY","inner","lineJoin","fullCircles","drawFullCircleBorders","ArcElement","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","drawArc","setStyle","lineCap","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","path","_path","strokePathWithCache","segmentMethod","strokePathDirect","LineElement","_points","_segments","_pointsUpdated","findStartAndEnd","solidSegments","_computeSegments","_interpolate","_getInterpolationMethod","interpolated","inRange$1","hitRadius","PointElement","mouseX","mouseY","inXRange","inYRange","hoverRadius","getBarBounds","bar","half","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","outer","skipX","skipY","addNormalRectPath","inflateRect","refRect","BarElement","addRectPath","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","getStartAndCountOfVisiblePointsSimplified","decimated","samples","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","minMaxDecimation","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","linePoints","_pointsFromSegments","_shouldApplyFill","_resolveTarget","propagate","_decodeFill","fillOption","parseFillOption","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","findPoint","unshift","pointValue","firstValue","lastValue","simpleArc","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_getTargetPixel","computeLinearBoundary","computeBoundary","_drawfill","lineOpts","above","clipVertical","doFill","clipY","lineLoop","tpoints","targetSegments","tgt","subBounds","fillSources","fillSource","src","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","_args","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","heightLimit","totalWidth","currentColWidth","currentColHeight","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","fontColor","halfFontSize","cursor","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","handleEvent","onLeave","isListened","hoveredItem","sameItem","plugin_legend","afterEvent","ci","Title","_padding","textSize","_drawArgs","fontOpts","plugin_title","createTitle","titleBlock","WeakMap","plugin_subtitle","positioners","average","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","String","createTooltipItem","getTooltipSize","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","getTitle","beforeTitle","afterTitle","getBeforeBody","getBody","bodyItems","scoped","beforeLabel","afterLabel","getAfterBody","getFooter","beforeFooter","afterFooter","_createItems","itemSort","labelColor","labelPointStyle","labelTextColor","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","bodyColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","labelCount","findOrAddLabel","addedLabels","addIfString","lastIndexOf","CategoryScale","_startValue","_valueRange","_addedLabels","added","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","rounded","almostWhole","decimalPlaces","relativeLabelSize","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","getTickLimit","stepSize","computeTickLimit","LinearScale","isMajor","tickVal","LogarithmicScale","_zero","exp","endExp","endSignificand","significand","lastTick","generateTicks","getTickBackdropHeight","determineLimits","fitWithPointLabels","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","updateLimits","setCenterPoint","_pointLabelItems","extra","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","buildPointLabelItems","hLimits","vLimits","pathRadiusLine","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","gridLineOpts","drawRadiusLine","animate","INTERVALS","millisecond","common","steps","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","adapter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","addTick","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","_unit","_majorUnit","_offsets","_normalized","displayFormats","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","_tickFormatFunction","minorFormat","majorFormat","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","isMergeableObject","isNonNullObject","stringValue","$$typeof","REACT_ELEMENT_TYPE","isReactElement","isSpecial","for","cloneUnlessOtherwiseSpecified","deepmerge","defaultArrayMerge","getKeys","getOwnPropertySymbols","symbol","propertyIsEnumerable","getEnumerableOwnPropertySymbols","propertyIsOnObject","_","mergeObject","destination","propertyIsUnsafe","customMerge","getMergeFunction","arrayMerge","sourceIsArray","DEFAULT_LEGEND_COLOR","tooltips","zeroLineColor","zeroLineBorderDash","zeroLineBorderDashOffset","pie","doughnut","polarArea","radar","scatter","bubble","Decimation","Filler","SubTitle","GENERATE_DATA","defaultType","DEFAULT_DARK_OPTIONS","darkTicksColor","darkLabelColor","darkGridLinesColor","darkmodeOff","darkMode","darkBgColor","darkBgColorLight","DARK_OPTIONS_TYPE","darkOptions","_canvas","_darkOptions","_getDarkConfig","_darkModeClassContainer","_prevConfig","_chartConstructor","systemColorMode","_handleMode","localStorage","theme","Data$1","configOptions","MyType","Chartjs","setTheme","dataAttr","xyScale","opt","_getLightTheme","prevConfig","_createCanvas","systemColor","_changeDatasetBorderColor","mutationList","mutation","dark","chartData","EVENT_CLICK_DATA_API","CLASSNAME_CAPTION","SELECTOR_TOGGLE","OPTIONS_TYPE","zoomLevel","Lightbox","_getContainer","_id","_activeImg","_images","_preloadedImages","_zoom","_gallery","_galleryToolbar","_galleryContent","_loader","_imgCounter","_animating","_fullscreen","_zoomBtn","_fullscreenBtn","_toolsToggleTimer","_mousedown","_mousedownPositionX","_mousedownPositionY","_originalPositionX","_originalPositionY","_positionX","_positionY","_zoomTimer","_tapCounter","_tapTime","_rightArrow","_leftArrowWrapper","_rightArrowWrapper","_multitouch","_touchZoomPosition","activeImg","currentImg","nextImage","previousImage","_appendTemplate","_getImages","_setActiveImg","_triggerEvents","_loadImages","images","_resizeImages","_toggleTemplate","_addEvents","_focusFullscreenBtn","close","_removeEvents","slide","_beforeSlideEvents","_slideHorizontally","_slideToTarget","_afterSlideEvents","zoomIn","_updateZoomBtn","zoomOut","_updateImgPosition","toggleFullscreen","requestFullscreen","exitFullscreen","_restoreDefaultFullscreen","_restoreDefaultPosition","_restoreDefaultZoom","_doubleTapTimer","lightboxImages","image","_container","_appendLoader","_appendToolbar","_appendContent","_appendArrows","_appendCaption","leftTools","rightTools","closeBtn","_toggleZoom","spinner","spinnerContent","leftArrow","captionWrapper","caption","promiseArray","imageArray","positionLeft","_createImage","onload","newImg","Image","newImgWrapper","_addImgStyles","prepend","mdbImg","_updatePreloadedImages","isDirectionRight","targetChild","lastChild","targetImage","_removeImageEvents","newIndex","addedImage","_addImageEvents","alt","draggable","mdbCaption","_calculateImgSize","_onResize","_onFullscreenChange","webkitIsFullScreen","mozFullScreen","msFullscreenElement","_animationStart","_resetDoubleTap","_updateActiveImg","_slidePreloadedImages","_slideImg","_showLoader","_updateCaption","_hideLoader","_updateCounter","_hideGallery","_enableScroll","_showGallery","_disableScroll","_setToolsToggleTimout","pointerEvents","_onWindowTouchmove","_onWindowTouchstart","_onImgMousedown","_onMousedown","_onImgMousemove","_onMousemove","_onImgWheel","_onWheel","_onImgMouseup","_onMouseup","_onImgTouchend","_onTouchend","_onImgDoubleClick","_onDoubleClick","_onWindowResize","_onWindowFullscreenChange","_onAnyImgAction","_resetToolsToggler","_onGalleryClick","_onBackdropClick","_onKeyupEvent","_onKeyup","_onRightArrowKeydownEvent","_onRightArrowKeydown","_onFullscreenBtnKeydownEvent","_onFullscreenBtnKeydown","_moveImg","targetTouches","_checkDoubleTap","_calculateTouchZoom","initialDistance","hypot","pageX","pageY","finalDistance","view","screen","keyCode","_focusRightArrow","movement","tapLength","getTime","_setNewPositionOnZoomIn","_zoomOnWheel","activeImageClientRect","pointerX","pointerY","targetX","targetY","_showTools","_hideTools","startEvent","completeEvent","lightbox","readonly","dynamic","EVENT_SELECT","EVENT_HOVER","EVENT_KEYUP","EVENT_FOCUSOUT","Rating","_icons","_index","_savedIndex","_originalClassList","_tooltips","_bindMouseDown","_bindKeyDown","_bindKeyUp","_bindFocusLost","_saveOriginalClassList","_setCustomText","_setCustomColor","_setToolTips","_updateRating","_clearRating","_setElementOutline","tabIndex","_updateAfterKeyDown","outline","indexBeforeChange","_restoreOriginalIcon","hasOwnTooltips","insertAdjacentHTML","elMatches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","query","queryChildren","cls","thumb","rail","consuming","clicking","scrolling","scrollingClassTimeout","addScrollingClass","removeScrollingClass","isAlive","settings","scrollingThreshold","EventElement","unbind","unbindAll","isEmpty","EventManager","eventElements","eventElement","ee","once","onceHandler","processScrollDiff","useScrollingClass","forceFireReachEvent","fields","contentHeight","containerHeight","up","down","reach","setScrollingClassInstantly","toInt","env","isWebKit","supportsTouch","DocumentTouch","supportsIePointer","msMaxTouchPoints","isChrome","updateGeometry","roundedScrollTop","containerWidth","contentWidth","scrollbarXRail","DOM.queryChildren","DOM.remove","scrollbarYRail","suppressScrollX","scrollXMarginOffset","scrollbarXActive","railXWidth","railXMarginWidth","railXRatio","scrollbarXWidth","getThumbSize","scrollbarXLeft","negativeScrollAdjustment","suppressScrollY","scrollYMarginOffset","scrollbarYActive","railYHeight","railYMarginHeight","railYRatio","scrollbarYHeight","scrollbarYTop","xRailOffset","isRtl","isScrollbarXUsingBottom","scrollbarXBottom","scrollbarXTop","yRailOffset","isScrollbarYUsingRight","scrollbarYRight","scrollbarYOuterWidth","scrollbarYLeft","CSS.set","scrollbarX","railBorderXWidth","scrollbarY","railBorderYWidth","updateCss","thumbSize","minScrollbarLength","maxScrollbarLength","activeSlider","bindMouseScrollHandler","containerDimension","contentDimension","pageAxis","railDimension","scrollbarAxis","scrollbarDimension","scrollAxis","scrollbarRail","startingScrollPosition","startingMousePagePosition","scrollBy","moveHandler","endHandler","bindMoves","DOM.matches","which","metaKey","altKey","wheelPropagation","shouldPreventDefault","wheel","mousewheelHandler","wheelDeltaX","wheelDeltaY","deltaMode","wheelDelta","getDeltaFromEvent","CSS.get","maxScrollTop","maxScrollLeft","shouldBeConsumedByChild","shouldPrevent","useBothWheelAxes","wheelSpeed","isTop","isBottom","isLeft","isRight","hitsBound","ctrlKey","onwheel","onmousewheel","startOffset","startTime","speed","easingLoop","applyTouchMove","differenceX","differenceY","getTouch","shouldHandle","buttons","MSPOINTER_TYPE_MOUSE","touchStart","touchMove","currentOffset","currentTime","timeGap","magnitudeX","magnitudeY","scrollY","touchEnd","swipeEasing","isInitialized","MSPointerEvent","PerfectScrollbar","userSettings","isNegativeScroll","originalScrollLeft","DOM.div","railXStyle","borderLeftWidth","borderRightWidth","marginRight","railYStyle","borderTopWidth","borderBottomWidth","marginTop","handlerName","lastScrollTop","lastScrollLeft","onScroll","removePsClasses","toggler","_toggler","_event","_condition","condition","_selector","_onlyVisible","onlyVisible","_focusableElements","_firstElement","_lastElement","trap","_setElements","_setFocusTrap","_filterVisible","ancestors","allElements","hasDisabledAttribute","LEFT_ARROW","UP_ARROW","RIGHT_ARROW","DOWN_ARROW","HOME","END","ENTER","SPACE","ESCAPE","Swipe$1","_startPosition","handleTouchStart","_getCoordinates","handleTouchMove","displacement","swipe","_getDirection","handleTouchEnd","Touch$1","_touchStartHandler","_handleTouchStart","_touchMoveHandler","_handleTouchMove","_touchEndHandler","_handleTouchEnd","ARROW_CLASS","SELECTOR_COLLAPSE","SELECTOR_LINK","TRANSLATION_LEFT","TRANSLATION_RIGHT","instanceCount","accordion","backdropClass","closeOnEsc","expandable","expandOnHover","focusTrap","scrollContainer","slim","slimCollapsed","slimWidth","Sidenav","_ID","_content","_initialContentStyle","_slimCollapsed","_activeNode","_tempSlim","_focusTrap","_perfectScrollbar","_touch","escHandler","hashHandler","_setActiveElements","_setup","findContainer","containerStart","containerEnd","boundry","scrollBarWidth","links","navigation","sidenavStyle","transitionProperty","transitionTimingFunction","changeMode","_setMode","_removeBackdrop","_setVisibility","toggleSlim","_setSlim","_appendArrow","_collapseItems","menu","Collapse$1","_setupBackdrop","classes","_getOffsetValue","_getPxValue","_getProperty","inverseDirecion","link","href","trimmedLink","location","strippedRequests","URL","_isAllToBeCollapsed","_isAllCollapsed","_setupTouch","_setupFocusTrap","_appendBackdrop","_setupCollapse","_setupSlim","_setupInitialStyling","_setupScrolling","_setupContent","_setupActiveState","_setupRippleEffect","_updateOffsets","menuIndex","_setupCollapseList","_generateCollpaseID","ID","_rotateArrow","_toggleCategory","_setColor","siblingsHeight","collection","_toggleSlimDisplay","wave","Touch","_setActive","collapse","_setActiveCategory","category","collapseToggler","optionColor","_setContentOffsets","_setTabindex","_toggleBackdrop","slimCollapsedElements","fullWidthElements","toggleElements","_updateTogglerAria","_updateDisplay","_updateFocus","paddingPosition","marginPosition","toggleSidenav","elementSelector","EVENT_CLOSE","EVENT_CLOSED","Alert","_destroyElement","TYPE_OPTIONS","Stack","stackableElements","basicCondition","_getBoundryOffset","nextElements","parentTopOffset","parentBottomBoundry","parentRect","calculateOffset","previousElement","EVENT_CLOSED_BS","autohide","stacking","appendToBody","BSAlert","_isOpen","verticalOffset","stackUtil","updatedData","_updateAlertStack","_setupAutohide","_setupAlignment","_setupStacking","_setupWidth","_appendToBody","_setupPosition","oppositeY","oppositeX","_updatePosition","EVENT_MOUSEOVER","EVENT_MOUSEOUT","CLASS_NAME_HIDE","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting","EVENT_HIDDEN_BS","BSToast","_setupColor","_updateToastStack","_setupDisplay","header","toasts","_a","_b","_c","_d","_e","_f","_g","createHead","headId","format24","amLabel","pmLabel","okLabel","inline","submitBtn","createModeWrapper","getToggleButtonTemplate","formatToAmPm","hours","minutes","amOrPm","originalHours","isValidDate","getHours","getMinutes","takeValue","formatNormalHours","findMousePosition","isMobile","checkBrowser","valueInput","compareTimes","time1","time2","time1Hour","time1Minutes","time1maxTimeFormat","time2Hour","time2Minutes","time2maxTimeFormat","getCurrentTime","currentHours","currentMinutes","setMinTime","minTime","disabledPast","format12","setMaxTime","maxTime","disabledFuture","_verifyMaxTimeHourAndAddDisabledClass","tips","maxTimeHour","_verifyMinTimeHourAndAddDisabledClass","minTimeHour","DATA_API_KEY","EVENT_OPEN","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","EVENT_CLEAR","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","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","bodyId","cancelLabel","clearLabel","closeModalOnBackdropClick","closeModalOnMinutesClick","defaultTime","disablePast","disableFuture","focusInputAfterApprove","footerId","modalId","overflowHidden","pickerId","readOnly","showClearBtn","switchHoursToMinutesOnClick","iconClass","withIcon","Timepicker","__publicField","_isPmEnabled","_isAmEnabled","_modal","_circle","findInArray","addDegrees","_hasTargetInnerClass","clockClass","tipsClass","maxTimeMinutes","maxTimeFormat","minTimeMinutes","minTimeFormat","_isInvalidTimeFormat","_AM","_PM","clock","clockWidth","clockHeight","currentFormat","_handleDisablingTipsMinTime","_handleDisablingTipsMaxTime","spanToTips","_document","_currentTime","_toggleButtonId","hoursArray","innerHours","minutesArray","_input","_hour","_minutes","_wrapper","_hand","_timeoutInterval","_inputValue","_scrollBar","_animations","_isHours","_isMinutes","_isMouseMove","_isInner","_objWithDataOnChange","toggleButton","customIcon","_appendToggleButton","zero","hoursFormat","_amOrPm","_listenToUserInput","_handleOpen","_listenToToggleKeydown","_removeInputAndToggleListeners","closeEvent","_removePicker","openEvent","checkInputValue","normalTemplate","createTimepickerClockWrapper","createFooter","inlineTemplate","getTimepickerTemplate","_getDomElements","_toggleBackdropAnimation","_appendTimes","_setActiveClassToTipsOnOpen","_setTipsAndTimesDependOnInputValue","allTipsHours","_addActiveClassToTip","_handleSwitchTimeMode","_handleOkButton","_handleClose","_handleHoverInlineBtn","_handleDocumentClickInline","_handleInlineClicks","_handleSwitchHourMinute","_handleClockClick","_handleKeyboard","_clock","_clockInner","_handlerMaxMinHoursOptions","maxHour","minHour","maxFormat","minFormat","_isMouseOnInnerClock","maxHourDegrees","minHourDegrees","_handleKeyboardEvents","innerTips","nextHourTip","numberToAdd","nextHour","currentHour","_convertHourToNumber","innerText","innerTip","parentElement","minInnerHourDegrees","maxInnerHourDegrees","_handle24FormatMouseEvents","hoursView","innerHoursExist","allTipsMinutes","allInnerTips","hourTime","_makeHourDegrees","hourObjDegrees","minHourMinutes","minObjDegrees","_makeMinutesDegrees","addMinDegrees","innerHourDegrees","_makeInnerHoursDegrees","innerHour","cancelBtn","_setHourOrMinute","_toggleClassActive","_toggleBackgroundColorCircle","rotateDegrees","fixForInput","selectedHour","minuteNumber","countMinutes","countHours","incrementHours","counteredNumber","incrementMinutes","addHours","addMinutes","subHours","subMinutes","_clearAsyncs","_clearAndSetThisInterval","addHoursOrAddMinutes","isEventTypeMousedownOrTouchstart","isHourBtnFocused","isMinuteBtnFocused","isBodyFocused","_toggleAmPm","_removeModal","_removeFocusTrap","showValueInput","hourModeActive","selectedMinutes","isHourLessThanMinHour","isHourGreaterThanMaxHour","maxFormatAndCurrentFormatEqual","minFormatAndCurrentFormatEqual","hourEqualToMaxAndMinutesGreaterThanMax","hourEqualToMinAndMinutesLessThanMin","hourHeader","minutesHeader","maxTimeMin","minTimeMin","checkValueBeforeAccept","allIconsInlineHour","allIconsInlineMinute","icon","hourValue","minuteValue","switchTips","_getAppendClock","toggleActiveClass","allTipsInnerHours","selectedFormat","outerHoursTips","innerHoursTips","maxMinutes","currHour","minMinutes","allTipsHour","clockWrapper","mouseClick","rds","touchClick","xPos","yPos","elFromPoint","elementFromPoint","isHourLessThanMinOrGreaterThanMax","trunc","minDegrees","minTimeObj","_handlerMaxMinMinutesOptions","_degrees","minuteTimes","changeMinutes","degreesMinutes","makeDegrees","touchDegrees","touchHours","_handleMoveHand","movedDegrees","movedHours","degreesHours","allTipsInner","maxMin","minMin","maxHourTime","minHourTime","maxMinDegrees","minMinDegrees","_removeModalElements","isToRemove","_handleUserInput","testedAMRegex","Navbar","_onScroll","_addEvent","_removeEvent","EVENT_COMPLETED","infiniteDirection","InfiniteScroll","_elementScrollHandler","_scrollHandler","CLASSNAME_LAZYLOAD","SELECTOR_ELEMENTS","EVENT_LOADED","EVENT_ERROR","lazySrc","lazyDelay","lazyAnimation","lazyOffset","lazyPlaceholder","lazyError","LazyLoad","_handleScroll","_errorHandler","_setElementError","_childrenInstances","offsetValues","inViewport","isContainer","_animation","_setupContainer","_setupElement","_setPlaceholder","_setSrc","_removeAttrs","attr","getDate","getDayNumber","getDay","getMonth","getYear","getFullYear","getDaysInMonth","createDate","getMonthEnd","getToday","addYears","years","addMonths","months","setDate","addDays","days","setFullYear","convertStringToDate","dateString","dateArr","isInRange","compareDates","isEdgeOfRange","isSameDate","date1","date2","setHours","getYearsOffset","activeDate","yearsInView","yearsDifference","minDate","maxDate","startYear","getStartYear","isDateDisabled","currentDate","isBeforeMin","isAfterMax","isDisabledPast","isDisabledFuture","isMonthDisabled","maxYear","maxMonth","minYear","minMonth","currentYear","currentMonth","isYearDisabled","areDatesInSameView","lastYearInView","firstYearInView","getDatepickerTemplate","selectedDate","selectedYear","selectedMonth","monthsInRow","yearsInRow","selectedRange","dayNumber","inlineContent","createMainContent","modalContent","headerTemplate","createCustomHeader","createHeader","dateRange","weekdaysShort","weekdaysFull","monthsShort","headerTemplateModifier","replaceAll","formatDate","endDate","startDate","mainContentTemplate","createControls","createViewTemplate","okBtn","okBtnLabel","okBtnText","cancelButton","cancelBtnLabel","cancelBtnText","clearButton","clearBtnLabel","clearBtnText","removeClearBtn","removeCancelBtn","removeOkBtn","viewTemplate","createDayViewTemplate","createMonthViewTemplate","createYearViewTemplate","switchToMultiYearViewLabel","monthsFull","prevMonthLabel","nextMonthLabel","headerDate","dates","getDatesArray","nextMonthDates","tableHeadContent","weekdaysNarrow","dayViewTemplate","dayLabel","isFirst","isLast","isToday","isSelected","tableBodyContent","visibleMonth","previousMonth","nextMonth","firstDay","firstDayIndex","startDay","sundayIndex","getFirstDayOfWeek","daysInMonth","daysInPreviousMonth","isCurrentMonth","firstVisibleMonth","secondVisibleMonth","daysLeft","rowIndex","getMonthsArray","monthIndex","activeYear","yearsOffset","yearsRow","getYearsArray","YEARS_IN_VIEW","EVENT_VIEW_CHANGED","nextYearLabel","prevYearLabel","nextMultiYearLabel","prevMultiYearLabel","switchToDayViewLabel","disableToggleButton","disableInput","confirmDateOnSelect","Datepicker","_activeDate","_selectedDate","_selectedRange","_selectedYear","_selectedMonth","_firstVisibleMonth","_headerDate","_headerYear","_headerMonth","_view","disableToggle","activeCell","_getActiveDayCell","_getActiveMonthCell","_getActiveYearCell","activeDay","activeMonth","viewChangeButton","previousButton","nextButton","okButton","datesContainer","isSelectionCompleted","isRangeComplete","hasPartialRange","visibleDates","sortedWeekdaysNarrow","_getNewDaysOrderArray","_listenToToggleClick","_setInitialDate","getBackdropTemplate","_openDropdown","_openModal","_listenToDateSelection","_addControlsListeners","_updateControlsDisabledState","_listenToEscapeClick","_listenToKeyboardNavigation","_listenToDatesContainerFocus","_listenToDatesContainerBlur","_asyncFocusDatesContainer","_updateViewControlsAndAttributes","_listenToOutsideClick","_handleDateSelection","cell","mdbDate","_pickDay","mdbMonth","mdbYear","_pickMonth","_pickYear","_updateHeaderDate","headerDateEl","datepickerHeaderContainer","nextYears","nextYear","previousYears","previousYear","_changeView","_listenToFooterButtonsClick","handleOk","handleCancel","handleClear","isContainerContent","_interruptDateRangeSelection","_handleSingleDayRange","_confirmSelection","_focusActiveCell","_removeCurrentFocusStyles","_handleDaysViewKeydown","_handleMonthsViewKeydown","_handleYearsViewKeydown","oldActiveDate","previousActiveCell","_selectDate","_removeHighlightFromCell","cells","_selectMonth","cellYear","cellMonth","_selectYear","_removeDatepickerListeners","_closeDropdown","_closeModal","datepicker","generatedToggleButton","_handleDateRangeSelection","_handleSingleDateSelection","_removeCurrentStyle","_addSelectedStyles","_resetDateRangeStyles","_addDateRangeStyles","_asyncChangeView","_removeSelectedStyles","firstDate","lastDate","cellDate","currentSelected","currentFocused","_addLeadingZero","ddd","dddd","mm","mmm","mmmm","yy","yyyy","preformatted","formatted","datePart","newDate","isNextDateDisabled","isPreviousDateDisabled","delimeters","_getDelimeters","areDatesChronological","firstDateValid","secondDateValid","_parseDate","_setDate","dateOrDates","delimeterPattern","regExp","dateParts","formatParts","isMonthString","datesArray","monthsNames","getMonthNumberByMonthName","monthValue","monthLabels","monthLabel","EVENT_CANCEL","EVENT_CONFIRM","popconfirmMode","message","cancelText","okText","okClass","cancelClass","popconfirmIcon","confirmLabel","Popconfirm","_cancelButtonTemplate","_getCancelButtonTemplate","_cancelButton","_confirmButton","_uid","_escapeKeydownHandler","_handleEscapeKey","_outsideClickHandler","_handleOutsideClick","popconfirmBody","_openPopover","_getPopoverTemplate","_getModalTemplate","_handleCancelButtonClick","_handleConfirmButtonClick","_listenToEscapeKey","_handlePopconfirmTransitionEnd","tempElement","confirmButton","popoverTemplate","popover","popconfirmTemplate","_getPopconfirmTemplate","modal","_getMessageIcon","_translatePositionValue","isElementContent","tableTemplate","columns","rows","noFoundMessage","edit","multi","selectable","loading","loadingMessage","loaderClass","pagination","rowsTemplate","checkbox","innerRow","column","fixed","fixedOffset","field","generateRows","columnsTemplate","generateColumns","entriesOptions","fullPagination","rowsText","allText","paginationTemplate","paginate","activePage","firstVisibleEntry","SELECTOR_FORM_CHECK_INPUT","CLASS_NAME_SELECTED","CLASS_NAME_ACITVE","SelectOption","nativeOption","multiple","secondaryText","groupId","select","_selectMultiple","_selectSingle","checked","deselect","_deselectMultiple","_deselectSingle","setNode","setActiveStyles","removeActiveStyles","SelectionModel","_multiple","_selections","optionIndex","selection","selections","allOptionsSelected","preventKeydown","getDropdownTemplate","selectAllOption","customContent","dropdownContainer","dropdown","optionsWrapper","optionsList","getOptionsListTemplate","placeholder","inputGroup","getFilterTemplate","searchPlaceholder","multiselectable","role","optionsNodes","selectAllNode","selectAll","optionNode","optionHeight","getOptionContentTemplate","createSelectAllNode","getOptionsNodes","nodes","getMultipleOptionsNodes","getSingleOptionsNodes","group","optionGroup","createOptionTemplate","createOptionGroupTemplate","getOptionIconTemplate","getCheckboxTemplate","getSecondaryTextTemplate","autoSelect","displayedLabels","formWhite","optionsSelectedLabel","selectAllLabel","visibleOptions","filterDebounce","noResultText","validation","validFeedback","invalidFeedback","filterFn","EVENT_SELECTED","EVENT_DESELECTED","EVENT_OPENED","EVENT_SEARCH","SELECTOR_INPUT","SELECTOR_OPTIONS_LIST","SELECTOR_FORM_OUTLINE","CLASS_NAME_INITIALIZED","CLASS_NAME_OPEN","CLASS_NAME_FOCUSED","Select","_optionsToRender","_getOptionsToRender","_plainOptions","_getPlainOptions","_filteredOptionsList","_selectionModel","_activeOptionIndex","_activeOption","_wrapperId","_dropdownContainerId","_selectAllId","_debounceTimeoutId","_dropdownHeight","_fakeValue","_isFakeValueActive","_customContent","_toggleButton","_elementToggle","_inputEl","_dropdownContainer","_selectAllOption","_mutationObserver","_addMutationObserver","_inputHandler","_handleInput","filterInput","hasSelectAll","hasSelection","_createOptionObject","optionsToRender","nestedOption","groupDisabled","_getNavigationOptions","availableOptions","_renderMaterialWrapper","containerSelector","_initOutlineInput","_setDefaultSelections","_updateInputValue","_appendFakeValue","_updateFakeLabelPosition","_updateLabelPosition","_updateClearButtonVisibility","_bindComponentEvents","_createSelectAllOption","_setFirstActiveOption","dropdownContainerId","formOutline","validFeedBackText","invalidFeedBackText","clearBtn","labelId","getWrapperTemplate","inputWrapper","_updateOutlineInput","_listenToComponentKeydown","_listenToWrapperClick","_listenToClearBtnClick","_listenToClearBtnKeydown","_wrapperKeydownHandler","_handleOpenKeydown","_handleClosedKeydown","isCloseKey","_handleAutoSelection","_setNextOptionActive","_scrollToOption","_setPreviousOptionActive","_setFirstOptionActive","_setLastOptionActive","_handleSelectAll","_handleSelection","scrollToIndex","_getNumberOfGroupsBeforeOption","optionOffset","isBelow","isAbove","groupsList","groupsNumber","_updateActiveOption","newActiveOption","currentActiveOption","_handleClear","_deselectAllOptions","_updateSelectAllState","_singleOptionSelect","_emitValueChangeEvent","_emitNativeChangeEvent","_listenToOptionsClick","mdbId","_selectAllOptions","_handleMultiSelection","_handleSingleSelection","_isSelectionValid","_isLabelEmpty","fakeValue","getFakeValueTemplate","isValueEmpty","_updateLabelPositionWhileClosing","selectAllSelected","allSelected","_updateDropdownWidth","_filterOptions","_listenToSelectSearch","_listenToDropdownKeydown","_listenToWindowResize","_setInputActiveStyles","inputWidth","currentActive","firstSelected","_windowResizeHandler","_handleWindowResize","searchTerm","debounceTime","_debounceFilter","filtered","isOptionGroup","isValidOption","_filter","hasNoResultsText","hasFilteredOptions","_updateOptionsListTemplate","noResultsTemplate","_getNoResultTemplate","optionsWrapperContent","optionsListTemplate","filterValue","_dropdownKeydownHandler","_handleOutSideClick","isSelectContent","isDropdown","isDropdownContent","isButton","_resetFilterState","_removeDropdownEvents","_updateSelections","_updateDisabledState","_observeMutationObserver","hasFilterValue","characterData","_disconnectMutationObserver","_removeComponentEvents","_destroyMaterialSelect","_destroyMaterialTemplate","wrapperParent","setValue","isMultipleValue","selectionValue","_selectByValue","correspondingOption","CLASS_DATATABLE","CLASS_FIXED_CELL","SELECTOR_CELL","SELECTOR_SORT_ICON","SELECTOR_ROW","SELECTOR_ROW_CHECKBOX","EVENT_RENDER","EVENT_ROW_CLICKED","EVENT_UPDATE","EVENT_VALUE_CHANGED_SELECT","bordered","borderless","clickableRows","sm","sortField","sortOrder","fixedHeader","striped","ofText","forceSort","TYPE_COLUMN_FIELDS","DEFAULT_COLUMN","Datatable","_getOptions","_sortReverse","_activePage","_search","_searchColumn","_paginationLeft","_paginationRight","_paginationStart","_paginationEnd","_select","_selectInstance","_selected","_checkboxes","_headerCheckbox","_rows","_getRows","_columns","_getColumns","_tableId","_hasFixedColumns","columnIndex","output","searchResult","search","computedRows","fieldA","fieldB","_optionToLowerCase","pages","navigationText","classNames","tableOptions","_clearClassList","_performSort","_removeEventListeners","_toggleDisableState","_renderRows","_setActiveSortIcon","setActivePage","_changeActivePage","_emitSelectEvent","selectedRows","selectedIndexes","headerRow","_getCSSValue","entriesOptionsAsArray","_setActiveRows","_setEntries","_setSelected","_setClassNames","_renderTable","_setupPagination","_setupEditable","_setupClickableRows","_setupSelectable","_setupScroll","_setupSort","_updateRow","datatableBody","headers","zIndex","_toggleSelectAll","_toggleSelectRow","_setupPaginationSelect","editable","userTable","_formatCells","columnsMap","rowsData","cellsToFormat","cellData","param1","param2","STEPPER_HORIZONTAL","STEPPER_VERTICAL","STEPPER_MOBILE","stepperType","stepperLinear","stepperNoEditable","stepperActive","stepperCompleted","stepperInvalid","stepperDisabled","stepperVerticalBreakpoint","stepperMobileBreakpoint","stepperMobileBarBreakpoint","stepperHeadClick","stepperMobileNextBtn","stepperMobileBackBtn","stepperMobileStepTxt","stepperMobileOfTxt","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","NEXT_BTN_CLASS","BACK_BTN_CLASS","MOBILE_ACTIVE_STEP_ID","MOBILE_NUMBER_OF_STEPS_ID","MOBILE_PROGRESS_BAR","MOBILE_FOOTER","Stepper","_elementHeight","_steps","_currentView","_activeStepIndex","_verticalStepperStyles","activeStep","activeStepIndex","_unbindMouseDown","changeStep","_toggleStep","nextStep","prevStep","resizeStepper","_setSingleStepHeight","_setHeight","_toggleStepperView","_toggleStepClass","_setOptional","_bindKeysNavigation","_toggleVertical","_toggleMobile","_toggleHorizontal","_setValidation","_bindResize","stepHead","stepIndex","shouldBeHorizontal","shouldBeVertical","shouldBeMobile","stepContent","_resetStepperHeight","_showElement","numberOfSteps","isValid","_validateStep","_toggleDisabled","_toggleActive","_toggleCompleted","_animateHorizontalStep","_animateVerticalStep","_toggleStepTabIndex","_updateProgressBar","inputNotches","mdb","_setStepsHeight","stepComputed","stepHeight","isActiveStep","stepContentHeight","_createMobileElements","MOBILE_BUTTON_NEXT","MOBILE_STEPPER_HEAD","_toggleStepperClass","_bindMobileButtons","_hideInactiveSteps","_deleteMobileElements","_unbindMobileButtons","focusedStep","currentTarget","focusedStepHead","activeStepHead","nextStepHead","prevStepHead","_toggleOutlineStyles","firstStepHead","lastStep","lastStepHead","btnBack","btnNext","focusedElement","newTarget","_validateActiveStepRequiredElements","checkValidity","changeStepEvent","stepsToCheck","nextStepToValidate","_toggleInvalid","_hideElement","form","stepElement","stepFooter","contentStyle","footerStyle","headStyle","stepHeadHeight","stepFooterHeight","isForward","nextStepContent","activeStepContent","nextStepAnimation","activeStepAnimation","_clearStepAnimation","ANIMATED_CLASS","EVENT_ACTIVATED","EVENT_DEACTIVATED","stickyActiveClass","stickyAnimationSticky","stickyAnimationUnsticky","stickyBoundary","stickyDelay","stickyDirection","stickyMedia","stickyOffset","stickyPosition","Sticky","_hiddenElement","_elementPositionStyles","_scrollDirection","_isSticked","_elementOffsetTop","_scrollTop","_pushPoint","_manuallyDeactivated","_disableSticky","_createHiddenElement","_enableSticky","_changeBoundaryPosition","_userActivityListener","_updateElementPosition","_updateElementOffset","doc","_updatePushPoint","_updateScrollDirection","_clearInProgressAnimations","isCorrectScrollDirection","isPushPointReached","shouldBeSticky","shouldNotBeSticky","isScrollUp","isUnstickyAnimationInProgress","isScrolledAboveElement","_removeUnstickyAnimation","_resetStyles","_removeHiddenElement","_toggleClass","parentOffset","stopPoint","stopper","isStickyTop","isStickyBottom","isStickyBoundary","isBelowStopPoint","isBelowParentElementEnd","_copyElement","offsetElement","rectElement","itemToCopy","COPIED_ITEM","cloneNode","TouchUtil","_getOrigin","_getDistanceBetweenTwoPoints","_getMidPoint","_getVectorLength","_getRightMostTouch","rightMost","MIN_VALUE","_getAngle","_getAngularDistance","_getCenterXY","_getPinchTouchOrigin","t1","t2","_position","_getPosition","pointers","Press","_timer","EVENT_START","EVENT_END","EVENT_MOVE","Pan","_startTouch","_movedTouch","postion","movedPosition","displacementMoved","pan","movedDirection","Pinch","_origin","_math","_ratio","origin","taps","Tap","_tapCount","Rotate","currentAngle","initialAngle","previousAngle","press","pinch","tap","EVENT_SCROLL_START","EVENT_SCROLL_END","EVENT_SCROLL_CANCEL","SmoothScroll","_href","isCancel","isWindow","containerToScroll","elFromHrefExist","offsetFromEl","heightFromTop","easingFunction","motionName","_motionLinear","cancelScroll","_inViewport","linkExist","isHashInLink","_scrollOnClickEvent","_preventNativeScroll","_handleClick","scrollingContainer","positionFrom","positionTo","_scrollOnNextTick","scrollProgress","isInViewport","_preventDefault","supportsPassive","_scrollError","wheelOpt","wheelEvent","_deleteScrollOnStart","_addScrollOnEnd","_addScrollOnCancel","_motionEaseInQuad","_motionEaseInCubic","_motionEaseInQuart","_motionEaseInQuint","_motionEaseInOutQuad","_motionEaseInOutCubic","_motionEaseInOutQuart","_motionEaseInOutQuint","_motionEaseOutQuad","_motionEaseOutCubic","_motionEaseOutQuart","_motionEaseOutQuint","MDB_NAME","PS_NAME","EVENTS","ps","PerfectScrollbars","perfectScrollbar","removeEvent","CLASS_SPINNER","backdropOpacity","backdropID","loader","parentSelector","loadingIcon","loadingText","Loading","_backdropElement","_parentElement","_loadingIcon","_loadingText","spinnerCloned","loadingCloned","_removeElementsOnStart","_setBackdrop","_setLoadingIcon","_setLoadingText","_setScrollOption","uriAttrs","DATA_URL_PATTERN","attrName","attrRegex","DefaultWhitelist","whiteList","whitelistKeys","elName","whitelistedAttributes","CLASS_NAME_AUTOCOMPLETE_ITEM","getItemsTemplate","displayValue","itemContent","noResults","CLASS_NAME_FOCUSING","SELECTOR_ITEMS_LIST","Autocomplete","getLoaderTemplate","_loaderTimeout","_activeItemIndex","_activeItem","_filteredResults","_lastQueryValue","_canOpenOnFocus","_inputFocusHandler","_handleInputFocus","_userInputHandler","_keydownHandler","itemsList","_filterResults","_initDropdown","_setInputAndLabelClasses","_setInputAriaAttributes","_listenToInputFocus","_listenToKeydown","itemsListTemplate","sanitizedCustomContent","_isPromise","_asyncUpdateResults","_updateResults","_resetActiveItem","results","newTemplate","_selectActiveItem","_setActiveItem","_scrollToItem","selectionStart","setSelectionRange","_updateActiveItem","newActiveItem","currentActiveItem","itemIndex","itemOffset","_listenToItemsClick","_handleItemsClick","targetIndex","_handleDropdownTransitionEnd","_removeInputAndElementEvents","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","CLASS_NAME_STATIC","Modal","_dialog","_adjustDialog","_hideModal","handleUpdate","modalNonInvasive","modalBody","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","initialOverflowY","isBodyOverflowing","styleProp","NON_INVASIVE_CLASS","NON_INVASIVE_SHOW_CLASS","SELECTOR_MODAL_CONTENT","EVENT_SHOW_BS_MODAL","EVENT_SHOWN_BS_MODAL","EVENT_HIDDEN_BS_MODAL","BSModal","_modalContentRect","_modalContentComputedStyles","_isNonInvasive","_isScrollable","_isBottomRight","_isBottomLeft","_isTopRight","_isTopLeft","_isSideTopModal","_isSideBottomModal","_isSideModal","_isModalBottom","_isBodyOverflowing","_onModalShow","_onModalShown","_onModalHidden","_addNonInvasiveClass","_modalDialogComputedStyles","_topOffset","_leftOffset","_rightOffset","_bottomOffset","_addOpenClass","_setStyles","sideOffset","topOffset","_showBackdrop","isNonInvasiveModalOpen","stopImmediatePropagation","_removeOpenClass","_removeNonInvasiveClass","leftOffset","isAboveBreakpoint","clipboardTarget","EVENT_COPIED","Clipboard","_initCopyHandler","_initCopy","copyText","clipboardTextExist","targetText","inputToCopy","_createNewInput","_selectInput","newInput","execCommand","SELECTOR_CLOSE","closeIcon","Chip","_appendCloseIcon","_handleDelete","_handleTextChip","_handleClickOnChip","appendChip","chip","getChip","createIcon","insertAdjacentElement","CLASSNAME_CHIPS_INITIAL","CLASSNAME_CHIPS_PLACEHOLDER","CLASSNAME_CHIP_OPACITY","CLASSNAME_CHIPS_PADDING","CLASSNAME_CHIPS_TANSITION","CLASSNAME_CHIPS_WRAPPER","SELECTOR_CHIP","SELECTOR_CHIP_ACTIVE","EVENT_DELETE","inputID","initialValues","labelText","ChipsInput","numberClicks","_inputInstance","activeChip","allChips","chipsInputWrapper","_setChipsClass","_appendInputToElement","_handleInitialValue","_initializeInput","_handleInputText","_handleChipsOnSelect","_handleEditable","_handleChipsFocus","_handleClicksOnChips","_handleDeleteEvents","activeChipAfter","_handleActiveChipAfterRemove","_handleUpEvents","_handleRightKeyboardArrow","_handleDownEvents","_handleLeftKeyboardArrow","_keyboardEvents","_handleAddActiveClass","contentEditable","chipText","_handleRemoveActiveClass","_handleAddActiveClassWithKeyboard","chipIndex","_handleTextContent","filterActive","arrOfObjects","activeObj","_handleCreateChip","_handleKeysInputToElement","_handleBlurInput","inputField","getInputField","divElement","divWithChips","chipsContainer","getEventTypeClientX","ev","CLASSNAME_HAND","SELECTOR_HORIZONTAL","numberOfRanges","startValues","MultiRangeSlider","_mousemove","_movingHand","hands","connect","leftConnectRect","handsNoActive","hand","handActive","activeTooltip","activeTooltipValue","handTooltip","_setClassHorizontalOrVertical","_setRangeConnectsElement","_setRangeHandleElements","_setTransformationOnStart","_setTooltipToHand","_removeSliderElements","_onConnectMousedown","_handleClickOnRange","_onHandMouseDown","_handleClickEventOnHand","_onDocumentMouseUp","_handleEndMoveEventDocument","_onDocumentMouseMove","_handleMouseMoveEventDocument","_onHandMouseUp","_handleEndMoveEvent","handActiveHandle","handActiveTranslation","handleDataHandle","handleDataTranslate","_handleMultiValuesOnRange","CLASSNAME_DATEPICKER","CLASSNAME_TIMEPICKER","SELECTOR_TIMEPICKER","SELECTOR_DATEPICKER","SELECTOR_TOGGLE_BUTTON","EVENT_CLOSE_DATEPICKER","EVENT_VALUE_CHANGED_DATEPICKER","EVENT_VALUE_CHANGED_TIMEPICKER","BUTTONS_WRAPPER","defaultDate","timepicker","showFormat","Datetimepicker","_timepicker","_datepicker","_dateValue","_timeValue","_format","_cancel","_openDatePicker","_removeTimePicker","_removeDatepicker","tempOptions","_addDatepicker","_addTimePicker","_disableInput","_setInitialDefaultInput","_applyFormatPlaceholder","_handleTimepickerDisablePast","_handleTimepickerDisableFuture","DATEPICKER_WRAPPER","datepickerOptions","TIMEPICKER_WRAPPER","timepickerOptions","_addIconButtons","headerTime","_enableOrDisableToggleButton","_listenToCancelClick","DATEPICKER_CANCEL_BTN","dateTimeSplited","dateDelimeters","inputFirstValue","inputSecondValue","parseDate","isInputValid","_openDropdownDate","_openTimePicker","CLOCK_BTN","_openDropdownTime","CANCEL_BTN","timePopper","callbackInitState","rippleCallback","initSelector","callbackInitState$1","defaultInitSelectors","alert","carousel","EVENT_LOAD_DATA_API","SELECTOR_DATA_RIDE","slideIndex","EVENT_KEYUP_DATA_API","selectorElement","offcanvas","OPEN_SELECTOR","alreadyOpen","scrollspy","tab","SELECTOR_DATA_TOGGLE_ACTIVE","toast","SELECTOR_DATA_INIT","SELECTOR_OUTLINE_INPUT","SELECTOR_OUTLINE_TEXTAREA","Component","PARSE_DATA","chartProperty","IS_COMPLEX","CONVERT_DATA_TYPE","dataSet","chips","datatable","datetimepicker","multiRangeSlider","clipboard","infiniteScroll","lazyLoad","navbar","popconfirm","rating","sidenav","stepper","sticky","initMDB","components","checkOtherImports","componentList"],"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]}