{"version":3,"file":"mdb.umd.min.js","sources":["../../src/js/mdb/dom/data.js","../../src/js/mdb/util/index.js","../../src/js/mdb/dom/event-handler.js","../../src/js/mdb/dom/manipulator.js","../../src/js/mdb/dom/selector-engine.js","../../src/js/bootstrap/mdb-prefix/dom/data.js","../../src/js/bootstrap/mdb-prefix/util/index.js","../../src/js/bootstrap/mdb-prefix/dom/event-handler.js","../../src/js/bootstrap/mdb-prefix/dom/manipulator.js","../../src/js/bootstrap/mdb-prefix/util/config.js","../../src/js/bootstrap/mdb-prefix/base-component.js","../../src/js/bootstrap/mdb-prefix/button.js","../../src/js/autoinit/init.js","../../src/js/free/button.js","../../src/js/bootstrap/mdb-prefix/dom/selector-engine.js","../../src/js/bootstrap/mdb-prefix/util/backdrop.js","../../src/js/bootstrap/mdb-prefix/util/component-functions.js","../../src/js/bootstrap/mdb-prefix/util/focustrap.js","../../src/js/bootstrap/mdb-prefix/util/scrollbar.js","../../src/js/bootstrap/mdb-prefix/offcanvas.js","../../src/js/bootstrap/mdb-prefix/util/swipe.js","../../src/js/bootstrap/mdb-prefix/carousel.js","../../src/js/free/carousel.js","../../node_modules/@popperjs/core/lib/enums.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../node_modules/@popperjs/core/lib/utils/math.js","../../node_modules/@popperjs/core/lib/utils/userAgent.js","../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../node_modules/@popperjs/core/lib/utils/within.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/popper-lite.js","../../node_modules/@popperjs/core/lib/popper.js","../../src/js/bootstrap/mdb-prefix/util/sanitizer.js","../../src/js/bootstrap/mdb-prefix/util/template-factory.js","../../src/js/bootstrap/mdb-prefix/tooltip.js","../../src/js/bootstrap/mdb-prefix/popover.js","../../src/js/free/popover.js","../../src/js/bootstrap/mdb-prefix/scrollspy.js","../../src/js/free/scrollspy.js","../../src/js/bootstrap/mdb-prefix/tab.js","../../src/js/free/tab.js","../../src/js/free/tooltip.js","../../node_modules/detect-autofill/dist/detect-autofill.js","../../src/js/free/base-component.js","../../src/js/free/input.js","../../src/js/bootstrap/mdb-prefix/collapse.js","../../src/js/free/collapse.js","../../src/js/bootstrap/mdb-prefix/dropdown.js","../../src/js/free/dropdown.js","../../src/js/free/ripple.js","../../src/js/free/range.js","../../src/js/pro/animate.js","../../node_modules/chart.js/dist/chunks/helpers.segment.mjs","../../node_modules/chart.js/dist/chart.mjs","../../node_modules/deepmerge/dist/cjs.js","../../src/js/pro/charts/chartsDefaults.js","../../src/js/pro/charts/charts.js","../../src/js/pro/lightbox.js","../../src/js/pro/rating.js","../../src/js/mdb/perfect-scrollbar/lib/css.js","../../src/js/mdb/perfect-scrollbar/lib/dom.js","../../src/js/mdb/perfect-scrollbar/lib/class-names.js","../../src/js/mdb/perfect-scrollbar/lib/event-manager.js","../../src/js/mdb/perfect-scrollbar/process-scroll-diff.js","../../src/js/mdb/perfect-scrollbar/lib/util.js","../../src/js/mdb/perfect-scrollbar/update-geometry.js","../../src/js/mdb/perfect-scrollbar/handlers/click-rail.js","../../src/js/mdb/perfect-scrollbar/handlers/drag-thumb.js","../../src/js/mdb/perfect-scrollbar/handlers/keyboard.js","../../src/js/mdb/perfect-scrollbar/handlers/mouse-wheel.js","../../src/js/mdb/perfect-scrollbar/handlers/touch.js","../../src/js/mdb/perfect-scrollbar/index.js","../../src/js/mdb/util/focusTrap.js","../../src/js/mdb/util/keycodes.js","../../src/js/mdb/util/touch/swipe.js","../../src/js/mdb/util/touch/index.js","../../src/js/pro/sidenav.js","../../src/js/bootstrap/mdb-prefix/alert.js","../../src/js/mdb/util/stack.js","../../src/js/pro/alert.js","../../src/js/bootstrap/mdb-prefix/toast.js","../../src/js/pro/toast.js","../../src/js/pro/timepicker/templates.js","../../src/js/pro/timepicker/utils.js","../../src/js/pro/timepicker/index.js","../../src/js/pro/navbar.js","../../src/js/pro/infinite-scroll.js","../../src/js/pro/lazy-load.js","../../src/js/pro/datepicker/date-utils.js","../../src/js/pro/datepicker/templates.js","../../src/js/pro/datepicker/index.js","../../src/js/pro/popconfirm.js","../../src/js/pro/datatable/html/pagination.js","../../src/js/pro/datatable/html/columns.js","../../src/js/pro/datatable/html/rows.js","../../src/js/pro/datatable/html/table.js","../../src/js/pro/datatable/util.js","../../src/js/pro/select/select-option.js","../../src/js/pro/select/selection-model.js","../../src/js/pro/select/util.js","../../src/js/pro/select/templates.js","../../src/js/pro/select/index.js","../../src/js/pro/datatable/index.js","../../src/js/pro/stepper.js","../../src/js/pro/sticky.js","../../src/js/pro/touch/touchUtil.js","../../src/js/pro/touch/press.js","../../src/js/pro/touch/swipe.js","../../src/js/pro/touch/pan.js","../../src/js/pro/touch/pinch.js","../../src/js/pro/touch/tap.js","../../src/js/pro/touch/rotate.js","../../src/js/pro/touch/index.js","../../src/js/pro/smooth-scroll.js","../../node_modules/perfect-scrollbar/dist/perfect-scrollbar.esm.js","../../src/js/pro/perfect-scrollbar.js","../../src/js/pro/loading-management/templates.js","../../src/js/pro/loading-management/index.js","../../src/js/mdb/util/sanitizer.js","../../src/js/pro/autocomplete/templates.js","../../src/js/pro/autocomplete/index.js","../../src/js/bootstrap/mdb-prefix/modal.js","../../src/js/mdb/util/scrollbar.js","../../src/js/pro/modal.js","../../src/js/pro/clipboard.js","../../src/js/pro/chips/templates.js","../../src/js/pro/chips/chip.js","../../src/js/pro/chips/index.js","../../src/js/pro/multi-range/template.js","../../src/js/pro/multi-range/utils.js","../../src/js/pro/multi-range/index.js","../../src/js/pro/date-time-picker/utils.js","../../src/js/pro/date-time-picker/templates.js","../../src/js/pro/date-time-picker/index.js","../../src/js/autoinit/callbacks/free.js","../../src/js/autoinit/initSelectors/pro.js","../../src/js/autoinit/initSelectors/free.js","../../src/js/autoinit/callbacks/charts.js","../../src/js/autoinit/callbacks/pro.js","../../src/js/autoinit/index.pro.js","../../src/js/mdb.pro.umd.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst mapData = (() => {\n const storeData = {};\n let id = 1;\n return {\n set(element, key, data) {\n if (typeof element[key] === 'undefined') {\n element[key] = {\n key,\n id,\n };\n id++;\n }\n\n storeData[element[key].id] = data;\n },\n get(element, key) {\n if (!element || typeof element[key] === 'undefined') {\n return null;\n }\n\n const keyProperties = element[key];\n if (keyProperties.key === key) {\n return storeData[keyProperties.id];\n }\n\n return null;\n },\n delete(element, key) {\n if (typeof element[key] === 'undefined') {\n return;\n }\n\n const keyProperties = element[key];\n if (keyProperties.key === key) {\n delete storeData[keyProperties.id];\n delete element[key];\n }\n },\n };\n})();\n\nconst Data = {\n setData(instance, key, data) {\n mapData.set(instance, key, data);\n },\n getData(instance, key) {\n return mapData.get(instance, key);\n },\n removeData(instance, key) {\n mapData.delete(instance, key);\n },\n};\n\nexport default Data;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nconst toType = (obj) => {\n if (obj === null || obj === undefined) {\n return `${obj}`;\n }\n\n return {}.toString\n .call(obj)\n .match(/\\s([a-z]+)/i)[1]\n .toLowerCase();\n};\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst getUID = (prefix) => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID);\n } while (document.getElementById(prefix));\n\n return prefix;\n};\n\nconst getSelector = (element) => {\n let selector = element.getAttribute('data-mdb-target');\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href');\n\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n }\n\n return selector;\n};\n\nconst getSelectorFromElement = (element) => {\n const selector = getSelector(element);\n\n if (selector) {\n return document.querySelector(selector) ? selector : null;\n }\n\n return null;\n};\n\nconst getElementFromSelector = (element) => {\n const selector = getSelector(element);\n\n return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = (element) => {\n if (!element) {\n return 0;\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element);\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n\n return (\n (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) *\n MILLISECONDS_MULTIPLIER\n );\n};\n\nconst triggerTransitionEnd = (element) => {\n element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = (obj) => {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n\n if (typeof obj.jquery !== 'undefined') {\n obj = obj[0];\n }\n\n return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = (obj) => {\n if (isElement(obj)) {\n // it's a jQuery object or a node element\n return obj.jquery ? obj[0] : obj;\n }\n\n if (typeof obj === 'string' && obj.length > 0) {\n return document.querySelector(obj);\n }\n\n return null;\n};\n\nconst emulateTransitionEnd = (element, duration) => {\n let called = false;\n const durationPadding = 5;\n const emulatedDuration = duration + durationPadding;\n\n function listener() {\n called = true;\n element.removeEventListener(TRANSITION_END, listener);\n }\n\n element.addEventListener(TRANSITION_END, listener);\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(element);\n }\n }, emulatedDuration);\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n Object.keys(configTypes).forEach((property) => {\n const expectedTypes = configTypes[property];\n const value = config[property];\n const valueType = value && isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`\n );\n }\n });\n};\n\nconst isVisible = (element) => {\n if (!element) {\n return false;\n }\n\n if (element.style && element.parentNode && element.parentNode.style) {\n const elementStyle = getComputedStyle(element);\n const parentNodeStyle = getComputedStyle(element.parentNode);\n\n return (\n elementStyle.display !== 'none' &&\n parentNodeStyle.display !== 'none' &&\n elementStyle.visibility !== 'hidden'\n );\n }\n\n return false;\n};\n\nconst isDisabled = (element) => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true;\n }\n\n if (element.classList.contains('disabled')) {\n return true;\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled;\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = (element) => {\n if (!document.documentElement.attachShadow) {\n return null;\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n\n if (element instanceof ShadowRoot) {\n return element;\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null;\n }\n\n return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => function () {};\n\nconst reflow = (element) => element.offsetHeight;\n\nconst getjQuery = () => {\n const { jQuery } = window;\n\n if (jQuery && !document.body.hasAttribute('data-mdb-no-jquery')) {\n return jQuery;\n }\n\n return null;\n};\n\nconst onDOMContentLoaded = (callback) => {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', callback);\n } else {\n callback();\n }\n};\n\nconst isRTL = document.documentElement.dir === 'rtl';\n\nconst array = (collection) => {\n return Array.from(collection);\n};\n\nconst element = (tag) => {\n return document.createElement(tag);\n};\n\nconst defineJQueryPlugin = (plugin) => {\n onDOMContentLoaded(() => {\n const $ = getjQuery();\n\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME;\n const JQUERY_NO_CONFLICT = $.fn[name];\n $.fn[name] = plugin.jQueryInterface;\n $.fn[name].Constructor = plugin;\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT;\n return plugin.jQueryInterface;\n };\n }\n });\n};\n\nexport {\n getjQuery,\n TRANSITION_END,\n getUID,\n getSelectorFromElement,\n getElementFromSelector,\n getTransitionDurationFromElement,\n triggerTransitionEnd,\n isElement,\n getElement,\n emulateTransitionEnd,\n typeCheckConfig,\n isVisible,\n isDisabled,\n findShadowRoot,\n noop,\n reflow,\n array,\n element,\n onDOMContentLoaded,\n isRTL,\n defineJQueryPlugin,\n};\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst $ = getjQuery();\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout',\n};\nconst nativeEvents = [\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll',\n];\n\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n const uid = getUidEvent(element);\n\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n\n return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n event.delegateTarget = element;\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n\n return fn.apply(element, [event]);\n };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector);\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (let i = domElements.length; i--; '') {\n if (domElements[i] === target) {\n event.delegateTarget = target;\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n\n return fn.apply(target, [event]);\n }\n }\n }\n\n // To please ESLint\n return null;\n };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n const uidEventList = Object.keys(events);\n\n for (let i = 0, len = uidEventList.length; i < len; i++) {\n const event = events[uidEventList[i]];\n\n if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n return event;\n }\n }\n\n return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n const delegation = typeof handler === 'string';\n const originalHandler = delegation ? delegationFn : handler;\n\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n let typeEvent = originalTypeEvent.replace(stripNameRegex, '');\n const custom = customEvents[typeEvent];\n\n if (custom) {\n typeEvent = custom;\n }\n\n const isNative = nativeEvents.indexOf(typeEvent) > -1;\n\n if (!isNative) {\n typeEvent = originalTypeEvent;\n }\n\n return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n\n if (!handler) {\n handler = delegationFn;\n delegationFn = null;\n }\n\n const [delegation, originalHandler, typeEvent] = normalizeParams(\n originalTypeEvent,\n handler,\n delegationFn\n );\n const events = getEvent(element);\n const handlers = events[typeEvent] || (events[typeEvent] = {});\n const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n if (previousFn) {\n previousFn.oneOff = previousFn.oneOff && oneOff;\n\n return;\n }\n\n const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n const fn = delegation\n ? bootstrapDelegationHandler(element, handler, delegationFn)\n : bootstrapHandler(element, handler);\n\n fn.delegationSelector = delegation ? handler : null;\n fn.originalHandler = originalHandler;\n fn.oneOff = oneOff;\n fn.uidEvent = uid;\n handlers[uid] = fn;\n\n element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n if (!fn) {\n return;\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {};\n\n Object.keys(storeElementEvent).forEach((handlerKey) => {\n if (handlerKey.indexOf(namespace) > -1) {\n const event = storeElementEvent[handlerKey];\n\n removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n }\n });\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFn) {\n addHandler(element, event, handler, delegationFn, false);\n },\n\n one(element, event, handler, delegationFn) {\n addHandler(element, event, handler, delegationFn, true);\n },\n\n extend(element, events, componentName) {\n events.forEach((event) => {\n EventHandler.on(element, `${event.name}.bs.${componentName}`, (e) => {\n const eventParameters = {};\n if (event.parametersToCopy) {\n event.parametersToCopy.forEach((param) => {\n eventParameters[param] = e[param];\n });\n }\n\n const mdbEvent = EventHandler.trigger(\n element,\n `${event.name}.mdb.${componentName}`,\n eventParameters\n );\n\n if (mdbEvent.defaultPrevented) {\n e.preventDefault();\n }\n });\n });\n },\n\n off(element, originalTypeEvent, handler, delegationFn) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n\n const [delegation, originalHandler, typeEvent] = normalizeParams(\n originalTypeEvent,\n handler,\n delegationFn\n );\n const inNamespace = typeEvent !== originalTypeEvent;\n const events = getEvent(element);\n const isNamespace = originalTypeEvent.charAt(0) === '.';\n\n if (typeof originalHandler !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!events || !events[typeEvent]) {\n return;\n }\n\n removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n return;\n }\n\n if (isNamespace) {\n Object.keys(events).forEach((elementEvent) => {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n });\n }\n\n const storeElementEvent = events[typeEvent] || {};\n Object.keys(storeElementEvent).forEach((keyHandlers) => {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n if (!inNamespace || originalTypeEvent.indexOf(handlerKey) > -1) {\n const event = storeElementEvent[keyHandlers];\n\n removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n }\n });\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n\n const typeEvent = event.replace(stripNameRegex, '');\n const inNamespace = event !== typeEvent;\n const isNative = nativeEvents.indexOf(typeEvent) > -1;\n\n let jQueryEvent;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n let evt = null;\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args);\n\n $(element).trigger(jQueryEvent);\n bubbles = !jQueryEvent.isPropagationStopped();\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n defaultPrevented = jQueryEvent.isDefaultPrevented();\n }\n\n if (isNative) {\n evt = document.createEvent('HTMLEvents');\n evt.initEvent(typeEvent, bubbles, true);\n } else {\n evt = new CustomEvent(event, {\n bubbles,\n cancelable: true,\n });\n }\n\n // merge custom informations in our event\n if (typeof args !== 'undefined') {\n Object.keys(args).forEach((key) => {\n Object.defineProperty(evt, key, {\n get() {\n return args[key];\n },\n });\n });\n }\n\n if (defaultPrevented) {\n evt.preventDefault();\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt);\n }\n\n if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n jQueryEvent.preventDefault();\n }\n\n return evt;\n },\n};\n\nexport const EventHandlerMulti = {\n on(element, eventsName, handler, delegationFn) {\n const events = eventsName.split(' ');\n\n for (let i = 0; i < events.length; i++) {\n EventHandler.on(element, events[i], handler, delegationFn);\n }\n },\n off(element, originalTypeEvent, handler, delegationFn) {\n const events = originalTypeEvent.split(' ');\n\n for (let i = 0; i < events.length; i++) {\n EventHandler.off(element, events[i], handler, delegationFn);\n }\n },\n};\n\nexport default EventHandler;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(val) {\n if (val === 'true') {\n return true;\n }\n\n if (val === 'false') {\n return false;\n }\n\n if (val === Number(val).toString()) {\n return Number(val);\n }\n\n if (val === '' || val === 'null') {\n return null;\n }\n\n return val;\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-mdb-${normalizeDataKey(key)}`, value);\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-mdb-${normalizeDataKey(key)}`);\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {};\n }\n\n const attributes = {\n ...element.dataset,\n };\n\n Object.keys(attributes)\n .filter((key) => key.startsWith('mdb'))\n .forEach((key) => {\n let pureKey = key.replace(/^mdb/, '');\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n attributes[pureKey] = normalizeData(attributes[key]);\n });\n\n return attributes;\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-mdb-${normalizeDataKey(key)}`));\n },\n\n offset(element) {\n const rect = element.getBoundingClientRect();\n\n return {\n top: rect.top + document.body.scrollTop,\n left: rect.left + document.body.scrollLeft,\n };\n },\n\n position(element) {\n return {\n top: element.offsetTop,\n left: element.offsetLeft,\n };\n },\n\n style(element, style) {\n Object.assign(element.style, style);\n },\n\n toggleClass(element, className) {\n if (!element) {\n return;\n }\n\n if (element.classList.contains(className)) {\n element.classList.remove(className);\n } else {\n element.classList.add(className);\n }\n },\n\n addClass(element, className) {\n if (element.classList.contains(className)) return;\n element.classList.add(className);\n },\n\n addStyle(element, style) {\n Object.keys(style).forEach((property) => {\n element.style[property] = style[property];\n });\n },\n\n removeClass(element, className) {\n if (!element.classList.contains(className)) return;\n element.classList.remove(className);\n },\n\n hasClass(element, className) {\n return element.classList.contains(className);\n },\n};\n\nexport default Manipulator;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NODE_TEXT = 3;\n\nconst SelectorEngine = {\n closest(element, selector) {\n return element.closest(selector);\n },\n\n matches(element, selector) {\n return element.matches(selector);\n },\n\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector);\n },\n\n children(element, selector) {\n const children = [].concat(...element.children);\n\n return children.filter((child) => child.matches(selector));\n },\n\n parents(element, selector) {\n const parents = [];\n\n let ancestor = element.parentNode;\n\n while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n if (this.matches(ancestor, selector)) {\n parents.push(ancestor);\n }\n\n ancestor = ancestor.parentNode;\n }\n\n return parents;\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling;\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous];\n }\n\n previous = previous.previousElementSibling;\n }\n\n return [];\n },\n\n next(element, selector) {\n let next = element.nextElementSibling;\n\n while (next) {\n if (this.matches(next, selector)) {\n return [next];\n }\n\n next = next.nextElementSibling;\n }\n\n return [];\n },\n};\n\nexport default SelectorEngine;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map());\n }\n\n const instanceMap = elementMap.get(element);\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(\n `Bootstrap doesn't allow more than one instance per element. Bound instance: ${\n Array.from(instanceMap.keys())[0]\n }.`\n );\n return;\n }\n\n instanceMap.set(key, instance);\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null;\n }\n\n return null;\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return;\n }\n\n const instanceMap = elementMap.get(element);\n\n instanceMap.delete(key);\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element);\n }\n },\n};\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = (selector) => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n }\n\n return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = (object) => {\n if (object === null || object === undefined) {\n return `${object}`;\n }\n\n return Object.prototype.toString\n .call(object)\n .match(/\\s([a-z]+)/i)[1]\n .toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = (prefix) => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID);\n } while (document.getElementById(prefix));\n\n return prefix;\n};\n\nconst getTransitionDurationFromElement = (element) => {\n if (!element) {\n return 0;\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element);\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n\n return (\n (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) *\n MILLISECONDS_MULTIPLIER\n );\n};\n\nconst triggerTransitionEnd = (element) => {\n element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = (object) => {\n if (!object || typeof object !== 'object') {\n return false;\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0];\n }\n\n return typeof object.nodeType !== 'undefined';\n};\n\nconst getElement = (object) => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object;\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object));\n }\n\n return null;\n};\n\nconst isVisible = (element) => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false;\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])');\n\n if (!closedDetails) {\n return elementIsVisible;\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary');\n if (summary && summary.parentNode !== closedDetails) {\n return false;\n }\n\n if (summary === null) {\n return false;\n }\n }\n\n return elementIsVisible;\n};\n\nconst isDisabled = (element) => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true;\n }\n\n if (element.classList.contains('disabled')) {\n return true;\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled;\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = (element) => {\n if (!document.documentElement.attachShadow) {\n return null;\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n\n if (element instanceof ShadowRoot) {\n return element;\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null;\n }\n\n return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = (element) => {\n element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-mdb-no-jquery')) {\n return window.jQuery;\n }\n\n return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = (callback) => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback();\n }\n });\n }\n\n DOMContentLoadedCallbacks.push(callback);\n } else {\n callback();\n }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = (plugin) => {\n onDOMContentLoaded(() => {\n const $ = getjQuery();\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME;\n const JQUERY_NO_CONFLICT = $.fn[name];\n $.fn[name] = plugin.jQueryInterface;\n $.fn[name].Constructor = plugin;\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT;\n return plugin.jQueryInterface;\n };\n }\n });\n};\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback);\n return;\n }\n\n const durationPadding = 5;\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n\n let called = false;\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return;\n }\n\n called = true;\n transitionElement.removeEventListener(TRANSITION_END, handler);\n execute(callback);\n };\n\n transitionElement.addEventListener(TRANSITION_END, handler);\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement);\n }\n }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length;\n let index = list.indexOf(activeElement);\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n }\n\n index += shouldGetNext ? 1 : -1;\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength;\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType,\n};\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js';\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout',\n};\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll',\n]);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++;\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element);\n\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n\n return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element });\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n\n return fn.apply(element, [event]);\n };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector);\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue;\n }\n\n hydrateObj(event, { delegateTarget: target });\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn);\n }\n\n return fn.apply(target, [event]);\n }\n }\n };\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events).find(\n (event) => event.callable === callable && event.delegationSelector === delegationSelector\n );\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string';\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n let typeEvent = getTypeEvent(originalTypeEvent);\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent;\n }\n\n return [isDelegated, callable, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(\n originalTypeEvent,\n handler,\n delegationFunction\n );\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = (fn) => {\n return function (event) {\n if (\n !event.relatedTarget ||\n (event.relatedTarget !== event.delegateTarget &&\n !event.delegateTarget.contains(event.relatedTarget))\n ) {\n return fn.call(this, event);\n }\n };\n };\n\n callable = wrapFunction(callable);\n }\n\n const events = getElementEvents(element);\n const handlers = events[typeEvent] || (events[typeEvent] = {});\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff;\n\n return;\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n const fn = isDelegated\n ? bootstrapDelegationHandler(element, handler, callable)\n : bootstrapHandler(element, callable);\n\n fn.delegationSelector = isDelegated ? handler : null;\n fn.callable = callable;\n fn.oneOff = oneOff;\n fn.uidEvent = uid;\n handlers[uid] = fn;\n\n element.addEventListener(typeEvent, fn, isDelegated);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n if (!fn) {\n return;\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {};\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '');\n return customEvents[event] || event;\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false);\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true);\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(\n originalTypeEvent,\n handler,\n delegationFunction\n );\n const inNamespace = typeEvent !== originalTypeEvent;\n const events = getElementEvents(element);\n const storeElementEvent = events[typeEvent] || {};\n const isNamespace = originalTypeEvent.startsWith('.');\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return;\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n return;\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n\n const $ = getjQuery();\n const typeEvent = getTypeEvent(event);\n const inNamespace = event !== typeEvent;\n\n let jQueryEvent = null;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args);\n\n $(element).trigger(jQueryEvent);\n bubbles = !jQueryEvent.isPropagationStopped();\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n defaultPrevented = jQueryEvent.isDefaultPrevented();\n }\n\n const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args);\n\n if (defaultPrevented) {\n evt.preventDefault();\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt);\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault();\n }\n\n return evt;\n },\n};\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value;\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value;\n },\n });\n }\n }\n\n return obj;\n}\n\nexport default EventHandler;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true;\n }\n\n if (value === 'false') {\n return false;\n }\n\n if (value === Number(value).toString()) {\n return Number(value);\n }\n\n if (value === '' || value === 'null') {\n return null;\n }\n\n if (typeof value !== 'string') {\n return value;\n }\n\n try {\n return JSON.parse(decodeURIComponent(value));\n } catch {\n return value;\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-mdb-${normalizeDataKey(key)}`, value);\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-mdb-${normalizeDataKey(key)}`);\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {};\n }\n\n const attributes = {};\n const mdbKeys = Object.keys(element.dataset).filter(\n (key) => key.startsWith('mdb') && !key.startsWith('mdbConfig')\n );\n\n for (const key of mdbKeys) {\n let pureKey = key.replace(/^mdb/, '');\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n attributes[pureKey] = normalizeData(element.dataset[key]);\n }\n\n return attributes;\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-mdb-${normalizeDataKey(key)}`));\n },\n};\n\nexport default Manipulator;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js';\nimport { isElement, toType } from './index.js';\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {};\n }\n\n static get DefaultType() {\n return {};\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!');\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n\n _configAfterMerge(config) {\n return config;\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {}),\n };\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property];\n const valueType = isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n );\n }\n }\n }\n}\n\nexport default Config;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js';\nimport EventHandler from './dom/event-handler.js';\nimport Config from './util/config.js';\nimport { executeAfterTransition, getElement } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.2';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super();\n\n element = getElement(element);\n if (!element) {\n return;\n }\n\n this._element = element;\n this._config = this._getConfig(config);\n\n Data.set(this._element, this.constructor.DATA_KEY, this);\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY);\n EventHandler.off(this._element, this.constructor.EVENT_KEY);\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null;\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated);\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY);\n }\n\n static getOrCreateInstance(element, config = {}) {\n return (\n this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n );\n }\n\n static get VERSION() {\n return VERSION;\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`;\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`;\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`;\n }\n}\n\nexport default BaseComponent;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport { defineJQueryPlugin } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'button';\nconst DATA_KEY = 'bs.button';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst CLASS_NAME_ACTIVE = 'active';\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME;\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE));\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this);\n\n if (config === 'toggle') {\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, (event) => {\n// event.preventDefault();\n\n// const button = event.target.closest(SELECTOR_DATA_TOGGLE);\n// const data = Button.getOrCreateInstance(button);\n\n// data.toggle();\n// });\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Button);\n\nexport default Button;\n","import SelectorEngine from '../mdb/dom/selector-engine';\nimport { defineJQueryPlugin } from '../mdb/util/index';\n\nconst mapComponentsData = (() => {\n const componentsData = [];\n return {\n set(componentName) {\n componentsData.push(componentName);\n },\n get(componentName) {\n return componentsData.includes(componentName);\n },\n };\n})();\n\nexport const InitializedComponents = {\n set(componentName) {\n mapComponentsData.set(componentName);\n },\n get(componentName) {\n return mapComponentsData.get(componentName);\n },\n};\n\nconst isInitialized = (componentName) => {\n return InitializedComponents.get(componentName);\n};\n\nexport const bindCallbackEventsIfNeeded = (component) => {\n if (!isInitialized(component.NAME)) {\n const manualInit = true;\n initComponent(component, manualInit);\n }\n};\n\nconst initComponent = (component, manualInit = false) => {\n if (!component || InitializedComponents.get(component.NAME)) {\n return;\n }\n\n InitializedComponents.set(component.NAME);\n\n const thisComponent = _defaultInitSelectors[component.NAME] || null;\n const isToggler = thisComponent?.isToggler || false;\n\n defineJQueryPlugin(component);\n if (thisComponent?.advanced) {\n thisComponent.advanced(component, thisComponent?.selector);\n return;\n }\n\n if (isToggler) {\n thisComponent.callback(component, thisComponent?.selector);\n\n return;\n }\n\n if (manualInit) {\n return;\n }\n\n SelectorEngine.find(thisComponent?.selector).forEach((element) => {\n let instance = component.getInstance(element);\n if (!instance) {\n instance = new component(element); // eslint-disable-line\n if (thisComponent?.onInit) {\n instance[thisComponent.onInit]();\n }\n }\n });\n};\n\nlet _defaultInitSelectors;\nexport class InitMDB {\n constructor(defaultInitSelectors) {\n _defaultInitSelectors = defaultInitSelectors;\n }\n\n init = (components) => {\n components.forEach((component) => initComponent(component));\n };\n\n initMDB = (components, checkOtherImports = false) => {\n const componentList = Object.keys(_defaultInitSelectors).map((element) => {\n const requireAutoInit = Boolean(\n document.querySelector(_defaultInitSelectors[element].selector)\n );\n\n if (requireAutoInit) {\n const component = components[_defaultInitSelectors[element].name];\n if (!component && !InitializedComponents.get(element) && checkOtherImports) {\n // eslint-disable-next-line no-console\n console.warn(\n `Please import ${_defaultInitSelectors[element].name} from \"MDB\" package and add it to a object parameter inside \"initMDB\" function`\n );\n }\n return component;\n }\n\n return null;\n });\n\n this.init(componentList);\n };\n}\n","import Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\n\nimport BSButton from '../bootstrap/mdb-prefix/button';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\nconst NAME = 'button';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_CLICK = `click${EVENT_KEY}`;\nconst EVENT_TRANSITIONEND = 'transitionend';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\n\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_SHOWN = 'shown';\nconst CLASS_NAME_FIXED_ACTION_BTN = 'fixed-action-btn';\n\nconst SELECTOR_ACTION_BUTTON = '.fixed-action-btn:not(.smooth-scroll) > .btn-floating';\nconst SELECTOR_LIST_ELEMENT = 'ul .btn';\nconst SELECTOR_LIST = 'ul';\n\nclass Button extends BSButton {\n constructor(element) {\n super(element);\n this._fn = {};\n\n if (this._element) {\n Data.setData(this._element, DATA_KEY, this);\n this._init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n }\n\n // Static\n static get NAME() {\n return NAME;\n }\n\n static jQueryInterface(config, options) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n if (!data && /dispose/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Button(this, _config);\n }\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](options);\n }\n });\n }\n\n // Getters\n get _actionButton() {\n return SelectorEngine.findOne(SELECTOR_ACTION_BUTTON, this._element);\n }\n\n get _buttonListElements() {\n return SelectorEngine.find(SELECTOR_LIST_ELEMENT, this._element);\n }\n\n get _buttonList() {\n return SelectorEngine.findOne(SELECTOR_LIST, this._element);\n }\n\n get _isTouchDevice() {\n return 'ontouchstart' in document.documentElement;\n }\n\n // Public\n show() {\n if (Manipulator.hasClass(this._element, CLASS_NAME_FIXED_ACTION_BTN)) {\n EventHandler.off(this._buttonList, EVENT_TRANSITIONEND);\n EventHandler.trigger(this._element, EVENT_SHOW);\n // EventHandler.on(this._buttonList, EVENT_TRANSITIONEND, this._bindListOpenTransitionEnd);\n this._bindListOpenTransitionEnd();\n Manipulator.addStyle(this._element, { height: `${this._fullContainerHeight}px` });\n this._toggleVisibility(true);\n }\n }\n\n hide() {\n if (Manipulator.hasClass(this._element, CLASS_NAME_FIXED_ACTION_BTN)) {\n EventHandler.off(this._buttonList, EVENT_TRANSITIONEND);\n EventHandler.trigger(this._element, EVENT_HIDE);\n // EventHandler.on(this._buttonList, EVENT_TRANSITIONEND, this._bindListHideTransitionEnd);\n this._bindListHideTransitionEnd();\n this._toggleVisibility(false);\n }\n }\n\n dispose() {\n if (Manipulator.hasClass(this._element, CLASS_NAME_FIXED_ACTION_BTN)) {\n EventHandler.off(this._actionButton, EVENT_CLICK);\n this._actionButton.removeEventListener(EVENT_MOUSEENTER, this._fn.mouseenter);\n this._element.removeEventListener(EVENT_MOUSELEAVE, this._fn.mouseleave);\n }\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Private\n _init() {\n if (Manipulator.hasClass(this._element, CLASS_NAME_FIXED_ACTION_BTN)) {\n this._saveInitialHeights();\n this._setInitialStyles();\n this._bindInitialEvents();\n }\n }\n\n _bindMouseEnter() {\n this._actionButton.addEventListener(\n EVENT_MOUSEENTER,\n // prettier-ignore\n this._fn.mouseenter = () => {\n if (!this._isTouchDevice) {\n this.show();\n }\n }\n // prettier-ignore\n );\n }\n\n _bindMouseLeave() {\n this._element.addEventListener(\n EVENT_MOUSELEAVE,\n // prettier-ignore\n this._fn.mouseleave = () => {\n this.hide();\n }\n // prettier-ignore\n );\n }\n\n _bindClick() {\n EventHandler.on(this._actionButton, EVENT_CLICK, () => {\n if (Manipulator.hasClass(this._element, CLASS_NAME_ACTIVE)) {\n this.hide();\n } else {\n this.show();\n }\n });\n }\n\n _bindListHideTransitionEnd() {\n EventHandler.on(this._buttonList, EVENT_TRANSITIONEND, (event) => {\n if (event.propertyName === 'transform') {\n EventHandler.off(this._buttonList, EVENT_TRANSITIONEND);\n this._element.style.height = `${this._initialContainerHeight}px`;\n EventHandler.trigger(this._element, EVENT_HIDDEN);\n }\n });\n }\n\n _bindListOpenTransitionEnd() {\n EventHandler.on(this._buttonList, EVENT_TRANSITIONEND, (event) => {\n if (event.propertyName === 'transform') {\n EventHandler.off(this._buttonList, EVENT_TRANSITIONEND);\n EventHandler.trigger(this._element, EVENT_SHOWN);\n }\n });\n }\n\n _toggleVisibility(isVisible) {\n const action = isVisible ? 'addClass' : 'removeClass';\n const listTranslate = isVisible ? 'translate(0)' : `translateY(${this._fullContainerHeight}px)`;\n Manipulator.addStyle(this._buttonList, { transform: listTranslate });\n\n if (this._buttonListElements) {\n this._buttonListElements.forEach((el) => Manipulator[action](el, CLASS_NAME_SHOWN));\n }\n Manipulator[action](this._element, CLASS_NAME_ACTIVE);\n }\n\n _getHeight(element) {\n const computed = window.getComputedStyle(element);\n const height = parseFloat(computed.getPropertyValue('height'));\n return height;\n }\n\n _saveInitialHeights() {\n this._initialContainerHeight = this._getHeight(this._element);\n this._initialListHeight = this._getHeight(this._buttonList);\n this._fullContainerHeight = this._initialContainerHeight + this._initialListHeight;\n }\n\n _bindInitialEvents() {\n this._bindClick();\n this._bindMouseEnter();\n this._bindMouseLeave();\n }\n\n _setInitialStyles() {\n this._buttonList.style.marginBottom = `${this._initialContainerHeight}px`;\n this._buttonList.style.transform = `translateY(${this._fullContainerHeight}px)`;\n\n this._element.style.height = `${this._initialContainerHeight}px`;\n }\n}\n\nexport default Button;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js';\n\nconst getSelector = (element) => {\n let selector = element.getAttribute('data-mdb-target');\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href');\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null;\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null;\n }\n\n return selector;\n};\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector);\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter((child) => child.matches(selector));\n },\n\n parents(element, selector) {\n const parents = [];\n let ancestor = element.parentNode.closest(selector);\n\n while (ancestor) {\n parents.push(ancestor);\n ancestor = ancestor.parentNode.closest(selector);\n }\n\n return parents;\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling;\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous];\n }\n\n previous = previous.previousElementSibling;\n }\n\n return [];\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling;\n\n while (next) {\n if (next.matches(selector)) {\n return [next];\n }\n\n next = next.nextElementSibling;\n }\n\n return [];\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]',\n ]\n .map((selector) => `${selector}:not([tabindex^=\"-\"])`)\n .join(',');\n\n return this.find(focusables, element).filter((el) => !isDisabled(el) && isVisible(el));\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element);\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null;\n }\n\n return null;\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element);\n\n return selector ? SelectorEngine.findOne(selector) : null;\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element);\n\n return selector ? SelectorEngine.find(selector) : [];\n },\n};\n\nexport default SelectorEngine;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js';\nimport Config from './config.js';\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop';\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`;\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body', // give the choice to place backdrop under different elements\n};\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)',\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isAppended = false;\n this._element = null;\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n\n static get DefaultType() {\n return DefaultType;\n }\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n\n this._append();\n\n const element = this._getElement();\n if (this._config.isAnimated) {\n reflow(element);\n }\n\n element.classList.add(CLASS_NAME_SHOW);\n\n this._emulateAnimation(() => {\n execute(callback);\n });\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW);\n\n this._emulateAnimation(() => {\n this.dispose();\n execute(callback);\n });\n }\n\n dispose() {\n if (!this._isAppended) {\n return;\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n this._element.remove();\n this._isAppended = false;\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div');\n backdrop.className = this._config.className;\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE);\n }\n\n this._element = backdrop;\n }\n\n return this._element;\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement);\n return config;\n }\n\n _append() {\n if (this._isAppended) {\n return;\n }\n\n const element = this._getElement();\n this._config.rootElement.append(element);\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback);\n });\n\n this._isAppended = true;\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n }\n}\n\nexport default Backdrop;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js';\nimport SelectorEngine from '../dom/selector-engine.js';\nimport { isDisabled } from './index.js';\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n const name = component.NAME;\n\n EventHandler.on(document, clickEvent, `[data-mdb-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n\n if (isDisabled(this)) {\n return;\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n const instance = component.getOrCreateInstance(target);\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]();\n });\n};\n\nexport { enableDismissTrigger };\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js';\nimport SelectorEngine from '../dom/selector-engine.js';\nimport Config from './config.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap';\nconst DATA_KEY = 'bs.focustrap';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`;\n\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\n\nconst Default = {\n autofocus: true,\n trapElement: null, // The element to trap focus inside of\n};\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element',\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isActive = false;\n this._lastTabNavDirection = null;\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n\n static get DefaultType() {\n return DefaultType;\n }\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return;\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus();\n }\n\n EventHandler.off(document, EVENT_KEY); // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, (event) => this._handleFocusin(event));\n EventHandler.on(document, EVENT_KEYDOWN_TAB, (event) => this._handleKeydown(event));\n\n this._isActive = true;\n }\n\n deactivate() {\n if (!this._isActive) {\n return;\n }\n\n this._isActive = false;\n EventHandler.off(document, EVENT_KEY);\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config;\n\n if (\n event.target === document ||\n event.target === trapElement ||\n trapElement.contains(event.target)\n ) {\n return;\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement);\n\n if (elements.length === 0) {\n trapElement.focus();\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus();\n } else {\n elements[0].focus();\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return;\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n }\n}\n\nexport default FocusTrap;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js';\nimport SelectorEngine from '../dom/selector-engine.js';\nimport { isElement } from './index.js';\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body;\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n }\n\n hide() {\n const width = this.getWidth();\n this._disableOverFlow();\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(\n this._element,\n PROPERTY_PADDING,\n (calculatedValue) => calculatedValue + width\n );\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(\n SELECTOR_FIXED_CONTENT,\n PROPERTY_PADDING,\n (calculatedValue) => calculatedValue + width\n );\n this._setElementAttributes(\n SELECTOR_STICKY_CONTENT,\n PROPERTY_MARGIN,\n (calculatedValue) => calculatedValue - width\n );\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow');\n this._resetElementAttributes(this._element, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n }\n\n isOverflowing() {\n return this.getWidth() > 0;\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow');\n this._element.style.overflow = 'hidden';\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth();\n const manipulationCallBack = (element) => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return;\n }\n\n this._saveInitialAttribute(element, styleProperty);\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n };\n\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty);\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue);\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = (element) => {\n const value = Manipulator.getDataAttribute(element, styleProperty);\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty);\n return;\n }\n\n Manipulator.removeDataAttribute(element, styleProperty);\n element.style.setProperty(styleProperty, value);\n };\n\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector);\n return;\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel);\n }\n }\n}\n\nexport default ScrollBarHelper;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport Backdrop from './util/backdrop.js';\nimport { enableDismissTrigger } from './util/component-functions.js';\nimport FocusTrap from './util/focustrap.js';\nimport { defineJQueryPlugin, isDisabled, isVisible } from './util/index.js';\nimport ScrollBarHelper from './util/scrollbar.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas';\nconst DATA_KEY = 'bs.offcanvas';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;\nconst ESCAPE_KEY = 'Escape';\n\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\n\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;\n\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-toggle=\"offcanvas\"]';\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false,\n};\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean',\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n this._isShown = false;\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n\n static get DefaultType() {\n return DefaultType;\n }\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return;\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget });\n\n if (showEvent.defaultPrevented) {\n return;\n }\n\n this._isShown = true;\n this._backdrop.show();\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide();\n }\n\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.classList.add(CLASS_NAME_SHOWING);\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate();\n }\n\n this._element.classList.add(CLASS_NAME_SHOW);\n this._element.classList.remove(CLASS_NAME_SHOWING);\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget });\n };\n\n this._queueCallback(completeCallBack, this._element, true);\n }\n\n hide() {\n if (!this._isShown) {\n return;\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n this._focustrap.deactivate();\n this._element.blur();\n this._isShown = false;\n this._element.classList.add(CLASS_NAME_HIDING);\n this._backdrop.hide();\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset();\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN);\n };\n\n this._queueCallback(completeCallback, this._element, true);\n }\n\n dispose() {\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n return;\n }\n\n this.hide();\n };\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop);\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null,\n });\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element,\n });\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, (event) => {\n if (event.key !== ESCAPE_KEY) {\n return;\n }\n\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n });\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n// const target = SelectorEngine.getElementFromSelector(this);\n\n// if (['A', 'AREA'].includes(this.tagName)) {\n// event.preventDefault();\n// }\n\n// if (isDisabled(this)) {\n// return;\n// }\n\n// EventHandler.one(target, EVENT_HIDDEN, () => {\n// // focus on trigger when it is closed\n// if (isVisible(this)) {\n// this.focus();\n// }\n// });\n\n// // avoid conflict when clicking a toggler of an offcanvas, while another is open\n// const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n// if (alreadyOpen && alreadyOpen !== target) {\n// Offcanvas.getInstance(alreadyOpen).hide();\n// }\n\n// const data = Offcanvas.getOrCreateInstance(target);\n// data.toggle(this);\n// });\n\n// EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n// for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n// Offcanvas.getOrCreateInstance(selector).show();\n// }\n// });\n\n// EventHandler.on(window, EVENT_RESIZE, () => {\n// for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n// if (getComputedStyle(element).position !== 'fixed') {\n// Offcanvas.getOrCreateInstance(element).hide();\n// }\n// }\n// });\n\n// enableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Offcanvas);\n\nexport default Offcanvas;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js';\nimport Config from './config.js';\nimport { execute } from './index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe';\nconst EVENT_KEY = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null,\n};\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)',\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super();\n this._element = element;\n\n if (!element || !Swipe.isSupported()) {\n return;\n }\n\n this._config = this._getConfig(config);\n this._deltaX = 0;\n this._supportPointerEvents = Boolean(window.PointerEvent);\n this._initEvents();\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n\n static get DefaultType() {\n return DefaultType;\n }\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY);\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX;\n\n return;\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX;\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX;\n }\n\n this._handleSwipe();\n execute(this._config.endCallback);\n }\n\n _move(event) {\n this._deltaX =\n event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX);\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return;\n }\n\n const direction = absDeltaX / this._deltaX;\n\n this._deltaX = 0;\n\n if (!direction) {\n return;\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, (event) => this._start(event));\n EventHandler.on(this._element, EVENT_POINTERUP, (event) => this._end(event));\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, (event) => this._start(event));\n EventHandler.on(this._element, EVENT_TOUCHMOVE, (event) => this._move(event));\n EventHandler.on(this._element, EVENT_TOUCHEND, (event) => this._end(event));\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return (\n this._supportPointerEvents &&\n (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n );\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n }\n}\n\nexport default Swipe;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport Manipulator from './dom/manipulator.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport {\n defineJQueryPlugin,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd,\n} from './util/index.js';\nimport Swipe from './util/swipe.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel';\nconst DATA_KEY = 'bs.carousel';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`;\nconst EVENT_SLID = `slid${EVENT_KEY}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\n\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-mdb-slide], [data-mdb-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-mdb-ride=\"carousel\"]';\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT,\n};\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true,\n};\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean',\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n this._interval = null;\n this._activeElement = null;\n this._isSliding = false;\n this.touchTimeout = null;\n this._swipeHelper = null;\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n this._addEventListeners();\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle();\n }\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n\n static get DefaultType() {\n return DefaultType;\n }\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT);\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next();\n }\n }\n\n prev() {\n this._slide(ORDER_PREV);\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element);\n }\n\n this._clearInterval();\n }\n\n cycle() {\n this._clearInterval();\n this._updateInterval();\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return;\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n return;\n }\n\n this.cycle();\n }\n\n to(index) {\n const items = this._getItems();\n if (index > items.length - 1 || index < 0) {\n return;\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n return;\n }\n\n const activeIndex = this._getItemIndex(this._getActive());\n if (activeIndex === index) {\n return;\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n this._slide(order, items[index]);\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose();\n }\n\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval;\n return config;\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, (event) => this._keydown(event));\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause());\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle());\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners();\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, (event) => event.preventDefault());\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return;\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause();\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout);\n }\n\n this.touchTimeout = setTimeout(\n () => this._maybeEnableCycle(),\n TOUCHEVENT_COMPAT_WAIT + this._config.interval\n );\n };\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack,\n };\n\n this._swipeHelper = new Swipe(this._element, swipeConfig);\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n const direction = KEY_TO_DIRECTION[event.key];\n if (direction) {\n event.preventDefault();\n this._slide(this._directionToOrder(direction));\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element);\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return;\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE);\n activeIndicator.removeAttribute('aria-current');\n\n const newActiveIndicator = SelectorEngine.findOne(\n `[data-mdb-slide-to=\"${index}\"]`,\n this._indicatorsElement\n );\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE);\n newActiveIndicator.setAttribute('aria-current', 'true');\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive();\n\n if (!element) {\n return;\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-mdb-interval'), 10);\n\n this._config.interval = elementInterval || this._config.defaultInterval;\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return;\n }\n\n const activeElement = this._getActive();\n const isNext = order === ORDER_NEXT;\n const nextElement =\n element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n\n if (nextElement === activeElement) {\n return;\n }\n\n const nextElementIndex = this._getItemIndex(nextElement);\n\n const triggerEvent = (eventName) => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex,\n });\n };\n\n const slideEvent = triggerEvent(EVENT_SLIDE);\n\n if (slideEvent.defaultPrevented) {\n return;\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return;\n }\n\n const isCycling = Boolean(this._interval);\n this.pause();\n\n this._isSliding = true;\n\n this._setActiveIndicatorElement(nextElementIndex);\n this._activeElement = nextElement;\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n nextElement.classList.add(orderClassName);\n\n reflow(nextElement);\n\n activeElement.classList.add(directionalClassName);\n nextElement.classList.add(directionalClassName);\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName);\n nextElement.classList.add(CLASS_NAME_ACTIVE);\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName);\n\n this._isSliding = false;\n\n triggerEvent(EVENT_SLID);\n };\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n\n if (isCycling) {\n this.cycle();\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE);\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element);\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config);\n\n if (typeof config === 'number') {\n data.to(config);\n return;\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n// const target = getElementFromSelector(this);\n\n// if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n// return;\n// }\n\n// event.preventDefault();\n\n// const carousel = Carousel.getOrCreateInstance(target);\n// const slideIndex = this.getAttribute('data-mdb-slide-to');\n\n// if (slideIndex) {\n// carousel.to(slideIndex);\n// carousel._maybeEnableCycle();\n// return;\n// }\n\n// if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n// carousel.next();\n// carousel._maybeEnableCycle();\n// return;\n// }\n\n// carousel.prev();\n// carousel._maybeEnableCycle();\n// });\n\n// EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n// const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n// for (const carousel of carousels) {\n// Carousel.getOrCreateInstance(carousel);\n// }\n// });\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Carousel);\n\nexport default Carousel;\n","import EventHandler from '../mdb/dom/event-handler';\nimport BSCarousel from '../bootstrap/mdb-prefix/carousel';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel';\n\nconst EVENT_SLIDE_BS = 'slide.bs.carousel';\nconst EVENT_SLID_BS = 'slid.bs.carousel';\n\nconst EXTENDED_EVENTS = [\n { name: 'slide', parametersToCopy: ['relatedTarget', 'direction', 'from', 'to'] },\n { name: 'slid', parametersToCopy: ['relatedTarget', 'direction', 'from', 'to'] },\n];\n\nclass Carousel extends BSCarousel {\n constructor(element, data) {\n super(element, data);\n\n this._init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n dispose() {\n EventHandler.off(this._element, EVENT_SLIDE_BS);\n EventHandler.off(this._element, EVENT_SLID_BS);\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n // Private\n _init() {\n this._bindMdbEvents();\n }\n\n _bindMdbEvents() {\n EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n }\n}\n\nexport default Carousel;\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: [],\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href',\n]);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n }\n\n return true;\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList\n .filter((attributeRegex) => attributeRegex instanceof RegExp)\n .some((regex) => regex.test(attributeName));\n};\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml);\n }\n\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase();\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n continue;\n }\n\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n }\n }\n\n return createdDocument.body.innerHTML;\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js';\nimport Config from './config.js';\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js';\nimport { execute, getElement, isElement } from './index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory';\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>',\n};\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string',\n};\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)',\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n\n static get DefaultType() {\n return DefaultType;\n }\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map((config) => this._resolvePossibleFunction(config))\n .filter(Boolean);\n }\n\n hasContent() {\n return this.getContent().length > 0;\n }\n\n changeContent(content) {\n this._checkContent(content);\n this._config.content = { ...this._config.content, ...content };\n return this;\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div');\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector);\n }\n\n const template = templateWrapper.children[0];\n const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '));\n }\n\n return template;\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config);\n this._checkContent(config.content);\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType);\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template);\n\n if (!templateElement) {\n return;\n }\n\n content = this._resolvePossibleFunction(content);\n\n if (!content) {\n templateElement.remove();\n return;\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement);\n return;\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content);\n return;\n }\n\n templateElement.textContent = content;\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize\n ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn)\n : arg;\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this]);\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = '';\n templateElement.append(element);\n return;\n }\n\n templateElement.textContent = element.textContent;\n }\n}\n\nexport default TemplateFactory;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core';\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport Manipulator from './dom/manipulator.js';\nimport {\n defineJQueryPlugin,\n execute,\n findShadowRoot,\n getElement,\n getUID,\n isRTL,\n noop,\n} from './util/index.js';\nimport { DefaultAllowlist } from './util/sanitizer.js';\nimport TemplateFactory from './util/template-factory.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW = 'show';\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\n\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n\nconst EVENT_HIDE = 'hide';\nconst EVENT_HIDDEN = 'hidden';\nconst EVENT_SHOW = 'show';\nconst EVENT_SHOWN = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK = 'click';\nconst EVENT_FOCUSIN = 'focusin';\nconst EVENT_FOCUSOUT = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left',\n};\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template:\n '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus',\n};\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError(\"Bootstrap's tooltips require Popper (https://popper.js.org)\");\n }\n\n super(element, config);\n\n // Private\n this._isEnabled = true;\n this._timeout = 0;\n this._isHovered = null;\n this._activeTrigger = {};\n this._popper = null;\n this._templateFactory = null;\n this._newContent = null;\n\n // Protected\n this.tip = null;\n\n this._setListeners();\n\n if (!this._config.selector) {\n this._fixTitle();\n }\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n\n static get DefaultType() {\n return DefaultType;\n }\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n enable() {\n this._isEnabled = true;\n }\n\n disable() {\n this._isEnabled = false;\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n }\n\n toggle() {\n if (!this._isEnabled) {\n return;\n }\n\n this._activeTrigger.click = !this._activeTrigger.click;\n if (this._isShown()) {\n this._leave();\n return;\n }\n\n this._enter();\n }\n\n dispose() {\n clearTimeout(this._timeout);\n\n EventHandler.off(\n this._element.closest(SELECTOR_MODAL),\n EVENT_MODAL_HIDE,\n this._hideModalHandler\n );\n\n if (this._element.getAttribute('data-mdb-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-mdb-original-title'));\n }\n\n this._disposePopper();\n super.dispose();\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return;\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW));\n const shadowRoot = findShadowRoot(this._element);\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(\n this._element\n );\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return;\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper();\n\n const tip = this._getTipElement();\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n\n const { container } = this._config;\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip);\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n }\n\n this._popper = this._createPopper(tip);\n\n tip.classList.add(CLASS_NAME_SHOW);\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN));\n\n if (this._isHovered === false) {\n this._leave();\n }\n\n this._isHovered = false;\n };\n\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n\n hide() {\n if (!this._isShown()) {\n return;\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE));\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n const tip = this._getTipElement();\n tip.classList.remove(CLASS_NAME_SHOW);\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n this._isHovered = null; // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return;\n }\n\n if (!this._isHovered) {\n this._disposePopper();\n }\n\n this._element.removeAttribute('aria-describedby');\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN));\n };\n\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n\n update() {\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle());\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n }\n\n return this.tip;\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml();\n\n // TODO: remove this check in v6\n if (!tip) {\n return null;\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n\n const tipId = getUID(this.constructor.NAME).toString();\n\n tip.setAttribute('id', tipId);\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE);\n }\n\n return tip;\n }\n\n setContent(content) {\n this._newContent = content;\n if (this._isShown()) {\n this._disposePopper();\n this.show();\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content);\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass),\n });\n }\n\n return this._templateFactory;\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle(),\n };\n }\n\n _getTitle() {\n return (\n this._resolvePossibleFunction(this._config.title) ||\n this._element.getAttribute('data-mdb-original-title')\n );\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE));\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW);\n }\n\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element]);\n const attachment = AttachmentMap[placement.toUpperCase()];\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n }\n\n _getOffset() {\n const { offset } = this._config;\n\n if (typeof offset === 'string') {\n return offset.split(',').map((value) => Number.parseInt(value, 10));\n }\n\n if (typeof offset === 'function') {\n return (popperData) => offset(popperData, this._element);\n }\n\n return offset;\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element]);\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements,\n },\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset(),\n },\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary,\n },\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`,\n },\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: (data) => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n },\n },\n ],\n };\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig]),\n };\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ');\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(\n this._element,\n this.constructor.eventName(EVENT_CLICK),\n this._config.selector,\n (event) => {\n const context = this._initializeOnDelegatedTarget(event);\n context.toggle();\n }\n );\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn =\n trigger === TRIGGER_HOVER\n ? this.constructor.eventName(EVENT_MOUSEENTER)\n : this.constructor.eventName(EVENT_FOCUSIN);\n const eventOut =\n trigger === TRIGGER_HOVER\n ? this.constructor.eventName(EVENT_MOUSELEAVE)\n : this.constructor.eventName(EVENT_FOCUSOUT);\n\n EventHandler.on(this._element, eventIn, this._config.selector, (event) => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n context._enter();\n });\n EventHandler.on(this._element, eventOut, this._config.selector, (event) => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget);\n\n context._leave();\n });\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide();\n }\n };\n\n EventHandler.on(\n this._element.closest(SELECTOR_MODAL),\n EVENT_MODAL_HIDE,\n this._hideModalHandler\n );\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title');\n\n if (!title) {\n return;\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title);\n }\n\n this._element.setAttribute('data-mdb-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title');\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true;\n return;\n }\n\n this._isHovered = true;\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show();\n }\n }, this._config.delay.show);\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return;\n }\n\n this._isHovered = false;\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide();\n }\n }, this._config.delay.hide);\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(handler, timeout);\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true);\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute];\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {}),\n };\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container);\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay,\n };\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n\n return config;\n }\n\n _getDelegateConfig() {\n const config = {};\n\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value;\n }\n }\n\n config.selector = false;\n config.trigger = 'manual';\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config;\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n\n if (this.tip) {\n this.tip.remove();\n this.tip = null;\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Tooltip);\n\nexport default Tooltip;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js';\nimport { defineJQueryPlugin } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'popover';\n\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template:\n '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click',\n};\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)',\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default;\n }\n\n static get DefaultType() {\n return DefaultType;\n }\n\n static get NAME() {\n return NAME;\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent();\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent(),\n };\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content);\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Popover);\n\nexport default Popover;\n","import EventHandler from '../mdb/dom/event-handler';\nimport BSPopover from '../bootstrap/mdb-prefix/popover';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover';\n\nconst EVENT_SHOW_BS = 'show.bs.popover';\nconst EVENT_SHOWN_BS = 'shown.bs.popover';\nconst EVENT_HIDE_BS = 'hide.bs.popover';\nconst EVENT_HIDDEN_BS = 'hidden.bs.popover';\nconst EVENT_INSERTED_BS = 'inserted.bs.popover';\n\nconst EXTENDED_EVENTS = [\n { name: 'show' },\n { name: 'shown' },\n { name: 'hide' },\n { name: 'hidden' },\n { name: 'inserted' },\n];\n\nclass Popover extends BSPopover {\n constructor(element, data) {\n super(element, data);\n\n this._init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n dispose() {\n EventHandler.off(this.element, EVENT_SHOW_BS);\n EventHandler.off(this.element, EVENT_SHOWN_BS);\n EventHandler.off(this.element, EVENT_HIDE_BS);\n EventHandler.off(this.element, EVENT_HIDDEN_BS);\n EventHandler.off(this.element, EVENT_INSERTED_BS);\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n // Private\n _init() {\n this._bindMdbEvents();\n }\n\n _bindMdbEvents() {\n EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n }\n}\n\nexport default Popover;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy';\nconst DATA_KEY = 'bs.scrollspy';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`;\nconst EVENT_CLICK = `click${EVENT_KEY}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE = 'active';\n\nconst SELECTOR_DATA_SPY = '[data-mdb-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1],\n};\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array',\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n if (!this._config.target) {\n return;\n }\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map();\n this._observableSections = new Map();\n this._rootElement =\n getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n this._activeTarget = null;\n this._observer = null;\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0,\n };\n this.refresh(); // initialize\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n\n static get DefaultType() {\n return DefaultType;\n }\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables();\n this._maybeEnableSmoothScroll();\n\n if (this._observer) {\n this._observer.disconnect();\n } else {\n this._observer = this._getNewObserver();\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section);\n }\n }\n\n dispose() {\n if (this._observer) {\n this._observer.disconnect();\n }\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body;\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map((value) => Number.parseFloat(value));\n }\n\n return config;\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return;\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK);\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, (event) => {\n const observableSection = this._observableSections.get(event.target.hash);\n if (observableSection) {\n event.preventDefault();\n const root = this._rootElement || window;\n const height = observableSection.offsetTop - this._element.offsetTop;\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' });\n return;\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height;\n }\n });\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin,\n };\n\n return new IntersectionObserver((entries) => this._observerCallback(entries), options);\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = (entry) => this._targetLinks.get(`#${entry.target.id}`);\n const activate = (entry) => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n this._process(targetElement(entry));\n };\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n this._previousScrollData.parentScrollTop = parentScrollTop;\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null;\n this._clearActiveClass(targetElement(entry));\n\n continue;\n }\n\n const entryIsLowerThanPrevious =\n entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry);\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return;\n }\n\n continue;\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry);\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map();\n this._observableSections = new Map();\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue;\n }\n\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor);\n this._observableSections.set(anchor.hash, observableSection);\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return;\n }\n\n this._clearActiveClass(this._config.target);\n this._activeTarget = target;\n target.classList.add(CLASS_NAME_ACTIVE);\n this._activateParents(target);\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target });\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(\n SELECTOR_DROPDOWN_TOGGLE,\n target.closest(SELECTOR_DROPDOWN)\n ).classList.add(CLASS_NAME_ACTIVE);\n return;\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE);\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE);\n\n const activeNodes = SelectorEngine.find(\n `${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`,\n parent\n );\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n// for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n// ScrollSpy.getOrCreateInstance(spy);\n// }\n// });\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(ScrollSpy);\n\nexport default ScrollSpy;\n","import EventHandler from '../mdb/dom/event-handler';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport Manipulator from '../mdb/dom/manipulator';\nimport BSScrollSpy from '../bootstrap/mdb-prefix/scrollspy';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_ACTIVATE_BS = 'activate.bs.scrollspy';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`;\n\nconst CLASS_COLLAPSIBLE = 'collapsible-scrollspy';\nconst CLASS_ACTIVE = 'active';\n\nconst SELECTOR_LIST = 'ul';\nconst SELECTOR_ACTIVE = `.${CLASS_ACTIVE}`;\nconst SELECTOR_COLLAPSIBLE_SCROLLSPY = `.${CLASS_COLLAPSIBLE}`;\n\nclass ScrollSpy extends BSScrollSpy {\n constructor(element, data) {\n super(element, data);\n\n this._collapsibles = [];\n this._init();\n\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n dispose() {\n EventHandler.off(this._scrollElement, EVENT_ACTIVATE_BS);\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n // Private\n _init() {\n this._bindActivateEvent();\n this._getCollapsibles();\n\n if (this._collapsibles.length === 0) {\n return;\n }\n\n this._showSubsection();\n this._hideSubsection();\n }\n\n _getHeight(element) {\n return element.offsetHeight;\n }\n\n _hide(target) {\n const itemsToHide = SelectorEngine.findOne(SELECTOR_LIST, target.parentNode);\n itemsToHide.style.overflow = 'hidden';\n itemsToHide.style.height = `${0}px`;\n }\n\n _show(target, destinedHeight) {\n target.style.height = destinedHeight;\n }\n\n _getCollapsibles() {\n const collapsibleElements = SelectorEngine.find(SELECTOR_COLLAPSIBLE_SCROLLSPY);\n\n if (!collapsibleElements) {\n return;\n }\n\n collapsibleElements.forEach((collapsibleElement) => {\n const listParent = collapsibleElement.parentNode;\n const list = SelectorEngine.findOne(SELECTOR_LIST, listParent);\n const listHeight = list.offsetHeight;\n this._collapsibles.push({\n element: list,\n relatedTarget: collapsibleElement.getAttribute('href'),\n height: `${listHeight}px`,\n });\n });\n }\n\n _showSubsection() {\n const activeElements = SelectorEngine.find(SELECTOR_ACTIVE);\n const actives = activeElements.filter((active) => {\n return Manipulator.hasClass(active, CLASS_COLLAPSIBLE);\n });\n\n actives.forEach((active) => {\n const list = SelectorEngine.findOne(SELECTOR_LIST, active.parentNode);\n const height = this._collapsibles.find((collapsible) => {\n return (collapsible.relatedTarget = active.getAttribute('href'));\n }).height;\n this._show(list, height);\n });\n }\n\n _hideSubsection() {\n const unactives = SelectorEngine.find(SELECTOR_COLLAPSIBLE_SCROLLSPY).filter((collapsible) => {\n return Manipulator.hasClass(collapsible, 'active') === false;\n });\n unactives.forEach((unactive) => {\n this._hide(unactive);\n });\n }\n\n _bindActivateEvent() {\n EventHandler.on(this._element, EVENT_ACTIVATE_BS, (e) => {\n this._showSubsection();\n this._hideSubsection();\n EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n relatedTarget: e.relatedTarget,\n });\n });\n }\n}\n\nexport default ScrollSpy;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'tab';\nconst DATA_KEY = 'bs.tab';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`;\n\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst HOME_KEY = 'Home';\nconst END_KEY = 'End';\n\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_DROPDOWN = 'dropdown';\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\nconst SELECTOR_OUTER = '.nav-item, .list-group-item';\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-tab-initialized]'; // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-mdb-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-mdb-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-mdb-toggle=\"list\"]`;\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element);\n this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n\n if (!this._parent) {\n return;\n // TODO: should throw exception in v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren());\n\n EventHandler.on(this._element, EVENT_KEYDOWN, (event) => this._keydown(event));\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n // Public\n show() {\n // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element;\n if (this._elemIsActive(innerElem)) {\n return;\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem();\n\n const hideEvent = active\n ? EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem })\n : null;\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active });\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return;\n }\n\n this._deactivate(active, innerElem);\n this._activate(innerElem, active);\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return;\n }\n\n element.classList.add(CLASS_NAME_ACTIVE);\n\n this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW);\n return;\n }\n\n element.removeAttribute('tabindex');\n element.setAttribute('aria-selected', true);\n this._toggleDropDown(element, true);\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem,\n });\n };\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return;\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE);\n element.blur();\n\n this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW);\n return;\n }\n\n element.setAttribute('aria-selected', false);\n element.setAttribute('tabindex', '-1');\n this._toggleDropDown(element, false);\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem });\n };\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n }\n\n _keydown(event) {\n if (\n ![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(\n event.key\n )\n ) {\n return;\n }\n\n event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault();\n\n const children = this._getChildren().filter((element) => !isDisabled(element));\n let nextActiveElement;\n\n if ([HOME_KEY, END_KEY].includes(event.key)) {\n nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];\n } else {\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n nextActiveElement = getNextActiveElement(children, event.target, isNext, true);\n }\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true });\n Tab.getOrCreateInstance(nextActiveElement).show();\n }\n }\n\n _getChildren() {\n // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n }\n\n _getActiveElem() {\n return this._getChildren().find((child) => this._elemIsActive(child)) || null;\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist');\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child);\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child);\n const isActive = this._elemIsActive(child);\n const outerElem = this._getOuterElement(child);\n child.setAttribute('aria-selected', isActive);\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1');\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab');\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child);\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child);\n\n if (!target) {\n return;\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element);\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return;\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem);\n if (element) {\n element.classList.toggle(className, open);\n }\n };\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW);\n outerElem.setAttribute('aria-expanded', open);\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value);\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE);\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM)\n ? elem\n : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n// if (['A', 'AREA'].includes(this.tagName)) {\n// event.preventDefault();\n// }\n\n// if (isDisabled(this)) {\n// return;\n// }\n\n// Tab.getOrCreateInstance(this).show();\n// });\n\n/**\n * Initialize on focus\n */\n// EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n// for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n// Tab.getOrCreateInstance(element);\n// }\n// });\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Tab);\n\nexport default Tab;\n","import { getElementFromSelector } from '../mdb/util/index';\nimport EventHandler from '../mdb/dom/event-handler';\nimport BSTab from '../bootstrap/mdb-prefix/tab';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_SHOW_BS = 'show.bs.tab';\nconst EVENT_SHOWN_BS = 'shown.bs.tab';\nconst EVENT_HIDE_BS = 'hide.bs.tab';\nconst EVENT_HIDDEN_BS = 'hidden.bs.tab';\n\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\n\nclass Tab extends BSTab {\n constructor(element) {\n super(element);\n\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n dispose() {\n EventHandler.off(this._element, EVENT_SHOW_BS);\n EventHandler.off(this._element, EVENT_SHOWN_BS);\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n // Override\n show() {\n // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element;\n if (this._elemIsActive(innerElem)) {\n return;\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem();\n\n let hideEvent = null;\n let hideEventMdb = null;\n\n if (active) {\n hideEvent = EventHandler.trigger(active, EVENT_HIDE_BS, { relatedTarget: innerElem });\n hideEventMdb = EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem });\n }\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW_BS, { relatedTarget: active });\n const showEventMdb = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active });\n\n if (\n showEvent.defaultPrevented ||\n showEventMdb.defaultPrevented ||\n (hideEvent && hideEvent.defaultPrevented) ||\n (hideEventMdb && hideEventMdb.defaultPrevented)\n ) {\n return;\n }\n\n this._deactivate(active, innerElem);\n this._activate(innerElem, active);\n }\n\n _activate(element, relatedElem) {\n if (!element) {\n return;\n }\n\n element.classList.add(CLASS_NAME_ACTIVE);\n\n this._activate(getElementFromSelector(element)); // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW);\n return;\n }\n\n element.focus();\n element.removeAttribute('tabindex');\n element.setAttribute('aria-selected', true);\n this._toggleDropDown(element, true);\n EventHandler.trigger(element, EVENT_SHOWN_BS, {\n relatedTarget: relatedElem,\n });\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem,\n });\n };\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return;\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE);\n element.blur();\n\n this._deactivate(getElementFromSelector(element)); // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW);\n return;\n }\n\n element.setAttribute('aria-selected', false);\n element.setAttribute('tabindex', '-1');\n this._toggleDropDown(element, false);\n EventHandler.trigger(element, EVENT_HIDDEN_BS, { relatedTarget: relatedElem });\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem });\n };\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));\n }\n}\n\nexport default Tab;\n","import EventHandler from '../mdb/dom/event-handler';\nimport BSTooltip from '../bootstrap/mdb-prefix/tooltip';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip';\n\nconst EVENT_HIDE_BS = 'hide.bs.tooltip';\nconst EVENT_HIDDEN_BS = 'hidden.bs.tooltip';\nconst EVENT_SHOW_BS = 'show.bs.tooltip';\nconst EVENT_SHOWN_BS = 'shown.bs.tooltip';\nconst EVENT_INSERTED_BS = 'inserted.bs.tooltip';\n\nconst EXTENDED_EVENTS = [\n { name: 'show' },\n { name: 'shown' },\n { name: 'hide' },\n { name: 'hidden' },\n { name: 'inserted' },\n];\n\nclass Tooltip extends BSTooltip {\n constructor(element, data) {\n super(element, data);\n\n this._init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n dispose() {\n EventHandler.off(this._element, EVENT_SHOW_BS);\n EventHandler.off(this._element, EVENT_SHOWN_BS);\n EventHandler.off(this._element, EVENT_HIDE_BS);\n EventHandler.off(this._element, EVENT_HIDDEN_BS);\n EventHandler.off(this._element, EVENT_INSERTED_BS);\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n // Private\n _init() {\n this._bindMdbEvents();\n }\n\n _bindMdbEvents() {\n EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n }\n}\n\nexport default Tooltip;\n","(()=>{var e={454:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>a});var r=n(645),o=n.n(r)()((function(e){return e[1]}));o.push([e.id,\"INPUT:-webkit-autofill,SELECT:-webkit-autofill,TEXTAREA:-webkit-autofill{animation-name:onautofillstart}INPUT:not(:-webkit-autofill),SELECT:not(:-webkit-autofill),TEXTAREA:not(:-webkit-autofill){animation-name:onautofillcancel}@keyframes onautofillstart{}@keyframes onautofillcancel{}\",\"\"]);const a=o},645:e=>{\"use strict\";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?\"@media \".concat(t[2],\" {\").concat(n,\"}\"):n})).join(\"\")},t.i=function(e,n,r){\"string\"==typeof e&&(e=[[null,e,\"\"]]);var o={};if(r)for(var a=0;a<this.length;a++){var i=this[a][0];null!=i&&(o[i]=!0)}for(var u=0;u<e.length;u++){var c=[].concat(e[u]);r&&o[c[0]]||(n&&(c[2]?c[2]=\"\".concat(n,\" and \").concat(c[2]):c[2]=n),t.push(c))}},t}},810:()=>{!function(){if(\"undefined\"!=typeof window)try{var e=new window.CustomEvent(\"test\",{cancelable:!0});if(e.preventDefault(),!0!==e.defaultPrevented)throw new Error(\"Could not prevent default\")}catch(e){var t=function(e,t){var n,r;return(t=t||{}).bubbles=!!t.bubbles,t.cancelable=!!t.cancelable,(n=document.createEvent(\"CustomEvent\")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),r=n.preventDefault,n.preventDefault=function(){r.call(this);try{Object.defineProperty(this,\"defaultPrevented\",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};t.prototype=window.Event.prototype,window.CustomEvent=t}}()},379:(e,t,n)=>{\"use strict\";var r,o=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),a=[];function i(e){for(var t=-1,n=0;n<a.length;n++)if(a[n].identifier===e){t=n;break}return t}function u(e,t){for(var n={},r=[],o=0;o<e.length;o++){var u=e[o],c=t.base?u[0]+t.base:u[0],l=n[c]||0,s=\"\".concat(c,\" \").concat(l);n[c]=l+1;var d=i(s),f={css:u[1],media:u[2],sourceMap:u[3]};-1!==d?(a[d].references++,a[d].updater(f)):a.push({identifier:s,updater:m(f,t),references:1}),r.push(s)}return r}function c(e){var t=document.createElement(\"style\"),r=e.attributes||{};if(void 0===r.nonce){var a=n.nc;a&&(r.nonce=a)}if(Object.keys(r).forEach((function(e){t.setAttribute(e,r[e])})),\"function\"==typeof e.insert)e.insert(t);else{var i=o(e.insert||\"head\");if(!i)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");i.appendChild(t)}return t}var l,s=(l=[],function(e,t){return l[e]=t,l.filter(Boolean).join(\"\\n\")});function d(e,t,n,r){var o=n?\"\":r.media?\"@media \".concat(r.media,\" {\").concat(r.css,\"}\"):r.css;if(e.styleSheet)e.styleSheet.cssText=s(t,o);else{var a=document.createTextNode(o),i=e.childNodes;i[t]&&e.removeChild(i[t]),i.length?e.insertBefore(a,i[t]):e.appendChild(a)}}function f(e,t,n){var r=n.css,o=n.media,a=n.sourceMap;if(o?e.setAttribute(\"media\",o):e.removeAttribute(\"media\"),a&&\"undefined\"!=typeof btoa&&(r+=\"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a)))),\" */\")),e.styleSheet)e.styleSheet.cssText=r;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(r))}}var v=null,p=0;function m(e,t){var n,r,o;if(t.singleton){var a=p++;n=v||(v=c(t)),r=d.bind(null,n,a,!1),o=d.bind(null,n,a,!0)}else n=c(t),r=f.bind(null,n,t),o=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)};return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){(t=t||{}).singleton||\"boolean\"==typeof t.singleton||(t.singleton=(void 0===r&&(r=Boolean(window&&document&&document.all&&!window.atob)),r));var n=u(e=e||[],t);return function(e){if(e=e||[],\"[object Array]\"===Object.prototype.toString.call(e)){for(var r=0;r<n.length;r++){var o=i(n[r]);a[o].references--}for(var c=u(e,t),l=0;l<n.length;l++){var s=i(n[l]);0===a[s].references&&(a[s].updater(),a.splice(s,1))}n=c}}}}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={id:r,exports:{}};return e[r](a,a.exports,n),a.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{\"use strict\";var e=n(379),t=n.n(e),r=n(454);function o(e){if(!e.hasAttribute(\"autocompleted\")){e.setAttribute(\"autocompleted\",\"\");var t=new window.CustomEvent(\"onautocomplete\",{bubbles:!0,cancelable:!0,detail:null});e.dispatchEvent(t)||(e.value=\"\")}}function a(e){e.hasAttribute(\"autocompleted\")&&(e.removeAttribute(\"autocompleted\"),e.dispatchEvent(new window.CustomEvent(\"onautocomplete\",{bubbles:!0,cancelable:!1,detail:null})))}t()(r.Z,{insert:\"head\",singleton:!1}),r.Z.locals,n(810),document.addEventListener(\"animationstart\",(function(e){\"onautofillstart\"===e.animationName?o(e.target):a(e.target)}),!0),document.addEventListener(\"input\",(function(e){\"insertReplacementText\"!==e.inputType&&\"data\"in e?a(e.target):o(e.target)}),!0)})()})();","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from '../mdb/dom/data';\nimport { getElement } from '../mdb/util/index';\nimport EventHandler from '../mdb/dom/event-handler';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n// const VERSION = '5.1.3';\n\nclass BaseComponent {\n constructor(element) {\n element = getElement(element);\n\n if (!element) {\n return;\n }\n\n this._element = element;\n Data.setData(this._element, this.constructor.DATA_KEY, this);\n }\n\n dispose() {\n Data.removeData(this._element, this.constructor.DATA_KEY);\n EventHandler.off(this._element, this.constructor.EVENT_KEY);\n\n Object.getOwnPropertyNames(this).forEach((propertyName) => {\n this[propertyName] = null;\n });\n }\n\n /** Static */\n\n static getInstance(element) {\n return Data.getData(getElement(element), this.DATA_KEY);\n }\n\n static getOrCreateInstance(element, config = {}) {\n return (\n this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n );\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!');\n }\n\n static get DATA_KEY() {\n return `mdb.${this.NAME}`;\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`;\n }\n}\n\nexport default BaseComponent;\n","import { element, onDOMContentLoaded } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport 'detect-autofill';\nimport BaseComponent from './base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'input';\nconst DATA_KEY = 'mdb.input';\nconst CLASSNAME_ACTIVE = 'active';\nconst CLASSNAME_NOTCH = 'form-notch';\nconst CLASSNAME_NOTCH_LEADING = 'form-notch-leading';\nconst CLASSNAME_NOTCH_MIDDLE = 'form-notch-middle';\nconst CLASSNAME_NOTCH_TRAILING = 'form-notch-trailing';\nconst CLASSNAME_PLACEHOLDER_ACTIVE = 'placeholder-active';\nconst CLASSNAME_HELPER = 'form-helper';\nconst CLASSNAME_COUNTER = 'form-counter';\n\nconst SELECTOR_NOTCH = `.${CLASSNAME_NOTCH}`;\nconst SELECTOR_NOTCH_LEADING = `.${CLASSNAME_NOTCH_LEADING}`;\nconst SELECTOR_NOTCH_MIDDLE = `.${CLASSNAME_NOTCH_MIDDLE}`;\nconst SELECTOR_HELPER = `.${CLASSNAME_HELPER}`;\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Input extends BaseComponent {\n constructor(element) {\n super(element);\n\n this._label = null;\n this._labelWidth = 0;\n this._labelMarginLeft = 0;\n this._notchLeading = null;\n this._notchMiddle = null;\n this._notchTrailing = null;\n this._initiated = false;\n this._helper = null;\n this._counter = false;\n this._counterElement = null;\n this._maxLength = 0;\n this._leadingIcon = null;\n if (this._element) {\n this.init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n get input() {\n const inputElement =\n SelectorEngine.findOne('input', this._element) ||\n SelectorEngine.findOne('textarea', this._element);\n return inputElement;\n }\n\n // Public\n init() {\n if (this._initiated) {\n return;\n }\n this._getLabelData();\n this._applyDivs();\n this._applyNotch();\n this._activate();\n this._getHelper();\n this._getCounter();\n this._initiated = true;\n }\n\n update() {\n this._getLabelData();\n this._getNotchData();\n this._applyNotch();\n this._activate();\n this._getHelper();\n this._getCounter();\n }\n\n forceActive() {\n Manipulator.addClass(this.input, CLASSNAME_ACTIVE);\n }\n\n forceInactive() {\n Manipulator.removeClass(this.input, CLASSNAME_ACTIVE);\n }\n\n dispose() {\n this._removeBorder();\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Private\n\n /*\n _getIcons() {\n this._leadingIcon = SelectorEngine.findOne('i.leading', this._element);\n\n if (this._leadingIcon !== null) {\n this._applyLeadingIcon();\n }\n }\n\n _applyLeadingIcon() {\n this._label.innerHTML = ` ${this._label.innerHTML}`;\n this._label.insertBefore(this._leadingIcon, this._label.firstChild);\n }\n */\n\n _getLabelData() {\n this._label = SelectorEngine.findOne('label', this._element);\n if (this._label === null) {\n this._showPlaceholder();\n } else {\n this._getLabelWidth();\n this._getLabelPositionInInputGroup();\n this._toggleDefaultDatePlaceholder();\n }\n }\n\n _getHelper() {\n this._helper = SelectorEngine.findOne(SELECTOR_HELPER, this._element);\n }\n\n _getCounter() {\n this._counter = Manipulator.getDataAttribute(this.input, 'showcounter');\n if (this._counter) {\n this._maxLength = this.input.maxLength;\n this._showCounter();\n }\n }\n\n _showCounter() {\n const counters = SelectorEngine.find('.form-counter', this._element);\n if (counters.length > 0) {\n return;\n }\n this._counterElement = document.createElement('div');\n Manipulator.addClass(this._counterElement, CLASSNAME_COUNTER);\n const actualLength = this.input.value.length;\n this._counterElement.innerHTML = `${actualLength} / ${this._maxLength}`;\n this._helper.appendChild(this._counterElement);\n this._bindCounter();\n }\n\n _bindCounter() {\n EventHandler.on(this.input, 'input', () => {\n const actualLength = this.input.value.length;\n this._counterElement.innerHTML = `${actualLength} / ${this._maxLength}`;\n });\n }\n\n _toggleDefaultDatePlaceholder(input = this.input) {\n const isTypeDate = input.getAttribute('type') === 'date';\n\n if (!isTypeDate) {\n return;\n }\n\n const isInputFocused = document.activeElement === input;\n\n if (!isInputFocused && !input.value) {\n input.style.opacity = 0;\n } else {\n input.style.opacity = 1;\n }\n }\n\n _showPlaceholder() {\n Manipulator.addClass(this.input, CLASSNAME_PLACEHOLDER_ACTIVE);\n }\n\n _getNotchData() {\n this._notchMiddle = SelectorEngine.findOne(SELECTOR_NOTCH_MIDDLE, this._element);\n this._notchLeading = SelectorEngine.findOne(SELECTOR_NOTCH_LEADING, this._element);\n }\n\n _getLabelWidth() {\n this._labelWidth = this._label.clientWidth * 0.8 + 8;\n }\n\n _getLabelPositionInInputGroup() {\n this._labelMarginLeft = 0;\n\n if (!this._element.classList.contains('input-group')) return;\n const input = this.input;\n const prefix = SelectorEngine.prev(input, '.input-group-text')[0];\n if (prefix === undefined) {\n this._labelMarginLeft = 0;\n } else {\n this._labelMarginLeft = prefix.offsetWidth - 1;\n }\n }\n\n _applyDivs() {\n const allNotchWrappers = SelectorEngine.find(SELECTOR_NOTCH, this._element);\n const notchWrapper = element('div');\n Manipulator.addClass(notchWrapper, CLASSNAME_NOTCH);\n this._notchLeading = element('div');\n Manipulator.addClass(this._notchLeading, CLASSNAME_NOTCH_LEADING);\n this._notchMiddle = element('div');\n Manipulator.addClass(this._notchMiddle, CLASSNAME_NOTCH_MIDDLE);\n this._notchTrailing = element('div');\n Manipulator.addClass(this._notchTrailing, CLASSNAME_NOTCH_TRAILING);\n if (allNotchWrappers.length >= 1) {\n return;\n }\n notchWrapper.append(this._notchLeading);\n notchWrapper.append(this._notchMiddle);\n notchWrapper.append(this._notchTrailing);\n this._element.append(notchWrapper);\n }\n\n _applyNotch() {\n this._notchMiddle.style.width = `${this._labelWidth}px`;\n this._notchLeading.style.width = `${this._labelMarginLeft + 9}px`;\n\n if (this._label === null) return;\n this._label.style.marginLeft = `${this._labelMarginLeft}px`;\n }\n\n _removeBorder() {\n const border = SelectorEngine.findOne(SELECTOR_NOTCH, this._element);\n if (border) border.remove();\n }\n\n _activate(event) {\n onDOMContentLoaded(() => {\n this._getElements(event);\n const input = event ? event.target : this.input;\n\n if (input.value !== '') {\n Manipulator.addClass(input, CLASSNAME_ACTIVE);\n }\n this._toggleDefaultDatePlaceholder(input);\n });\n }\n\n _getElements(event) {\n if (event) {\n this._element = event.target.parentNode;\n this._label = SelectorEngine.findOne('label', this._element);\n }\n\n if (event && this._label) {\n const prevLabelWidth = this._labelWidth;\n this._getLabelData();\n\n if (prevLabelWidth !== this._labelWidth) {\n this._notchMiddle = SelectorEngine.findOne('.form-notch-middle', event.target.parentNode);\n this._notchLeading = SelectorEngine.findOne(\n SELECTOR_NOTCH_LEADING,\n event.target.parentNode\n );\n this._applyNotch();\n }\n }\n }\n\n _deactivate(event) {\n const input = event ? event.target : this.input;\n\n if (input.value === '') {\n input.classList.remove(CLASSNAME_ACTIVE);\n }\n this._toggleDefaultDatePlaceholder(input);\n }\n\n static activate(instance) {\n return function (event) {\n instance._activate(event);\n };\n }\n\n static deactivate(instance) {\n return function (event) {\n instance._deactivate(event);\n };\n }\n\n static jQueryInterface(config, options) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n if (!data && /dispose/.test(config)) {\n return;\n }\n if (!data) {\n data = new Input(this, _config);\n }\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](options);\n }\n });\n }\n}\n\nexport default Input;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport { defineJQueryPlugin, getElement, reflow } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse';\nconst DATA_KEY = 'bs.collapse';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\n\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-collapse-init]';\n\nconst Default = {\n parent: null,\n toggle: true,\n};\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean',\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n this._isTransitioning = false;\n this._triggerArray = [];\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE);\n\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem);\n const filterElement = SelectorEngine.find(selector).filter(\n (foundElement) => foundElement === this._element\n );\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem);\n }\n }\n\n this._initializeChildren();\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n }\n\n if (this._config.toggle) {\n this.toggle();\n }\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n\n static get DefaultType() {\n return DefaultType;\n }\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return;\n }\n\n let activeChildren = [];\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter((element) => element !== this._element)\n .map((element) => Collapse.getOrCreateInstance(element, { toggle: false }));\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return;\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n if (startEvent.defaultPrevented) {\n return;\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide();\n }\n\n const dimension = this._getDimension();\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n this._element.style[dimension] = 0;\n\n this._addAriaAndCollapsedClass(this._triggerArray, true);\n this._isTransitioning = true;\n\n const complete = () => {\n this._isTransitioning = false;\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);\n\n this._element.style[dimension] = '';\n\n EventHandler.trigger(this._element, EVENT_SHOWN);\n };\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n const scrollSize = `scroll${capitalizedDimension}`;\n\n this._queueCallback(complete, this._element, true);\n this._element.style[dimension] = `${this._element[scrollSize]}px`;\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return;\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n if (startEvent.defaultPrevented) {\n return;\n }\n\n const dimension = this._getDimension();\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n\n reflow(this._element);\n\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);\n\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger);\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false);\n }\n }\n\n this._isTransitioning = true;\n\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE);\n EventHandler.trigger(this._element, EVENT_HIDDEN);\n };\n\n this._element.style[dimension] = '';\n\n this._queueCallback(complete, this._element, true);\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW);\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle); // Coerce string values\n config.parent = getElement(config.parent);\n return config;\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return;\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE);\n\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element);\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected));\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(\n (element) => !children.includes(element)\n );\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return;\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n element.setAttribute('aria-expanded', isOpen);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {};\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config);\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n// // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n// if (\n// event.target.tagName === 'A' ||\n// (event.delegateTarget && event.delegateTarget.tagName === 'A')\n// ) {\n// event.preventDefault();\n// }\n\n// for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n// Collapse.getOrCreateInstance(element, { toggle: false }).toggle();\n// }\n// });\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Collapse);\n\nexport default Collapse;\n","import EventHandler from '../mdb/dom/event-handler';\nimport BSCollapse from '../bootstrap/mdb-prefix/collapse';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse';\n\nconst EVENT_SHOW_BS = 'show.bs.collapse';\nconst EVENT_SHOWN_BS = 'shown.bs.collapse';\nconst EVENT_HIDE_BS = 'hide.bs.collapse';\nconst EVENT_HIDDEN_BS = 'hidden.bs.collapse';\n\nconst EXTENDED_EVENTS = [{ name: 'show' }, { name: 'shown' }, { name: 'hide' }, { name: 'hidden' }];\n\nclass Collapse extends BSCollapse {\n constructor(element, data = {}) {\n super(element, data);\n\n this._init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n dispose() {\n EventHandler.off(this._element, EVENT_SHOW_BS);\n EventHandler.off(this._element, EVENT_SHOWN_BS);\n EventHandler.off(this._element, EVENT_HIDE_BS);\n EventHandler.off(this._element, EVENT_HIDDEN_BS);\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n // Private\n _init() {\n this._bindMdbEvents();\n }\n\n _bindMdbEvents() {\n EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n }\n}\n\nexport default Collapse;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core';\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport Manipulator from './dom/manipulator.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport {\n defineJQueryPlugin,\n execute,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n} from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown';\nconst DATA_KEY = 'bs.dropdown';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\n\nconst ESCAPE_KEY = 'Escape';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\n\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-dropdown-initialized]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle',\n};\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)',\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n this._popper = null;\n this._parent = this._element.parentNode; // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu =\n SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n this._inNavbar = this._detectNavbar();\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n\n static get DefaultType() {\n return DefaultType;\n }\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show();\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return;\n }\n\n const relatedTarget = {\n relatedTarget: this._element,\n };\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget);\n\n if (showEvent.defaultPrevented) {\n return;\n }\n\n this._createPopper();\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n\n this._element.focus();\n this._element.setAttribute('aria-expanded', true);\n\n this._menu.classList.add(CLASS_NAME_SHOW);\n this._element.classList.add(CLASS_NAME_SHOW);\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget);\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return;\n }\n\n const relatedTarget = {\n relatedTarget: this._element,\n };\n\n this._completeHide(relatedTarget);\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy();\n }\n\n super.dispose();\n }\n\n update() {\n this._inNavbar = this._detectNavbar();\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget);\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n\n if (this._popper) {\n this._popper.destroy();\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW);\n this._element.classList.remove(CLASS_NAME_SHOW);\n this._element.setAttribute('aria-expanded', 'false');\n Manipulator.removeDataAttribute(this._menu, 'popper');\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget);\n }\n\n _getConfig(config) {\n config = super._getConfig(config);\n\n if (\n typeof config.reference === 'object' &&\n !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(\n `${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`\n );\n }\n\n return config;\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError(\"Bootstrap's dropdowns require Popper (https://popper.js.org)\");\n }\n\n let referenceElement = this._element;\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent;\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference);\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference;\n }\n\n const popperConfig = this._getPopperConfig();\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW);\n }\n\n _getPlacement() {\n const parentDropdown = this._parent;\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT;\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT;\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER;\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER;\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--mdb-position').trim() === 'end';\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null;\n }\n\n _getOffset() {\n const { offset } = this._config;\n\n if (typeof offset === 'string') {\n return offset.split(',').map((value) => Number.parseInt(value, 10));\n }\n\n if (typeof offset === 'function') {\n return (popperData) => offset(popperData, this._element);\n }\n\n return offset;\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary,\n },\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset(),\n },\n },\n ],\n };\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [\n {\n name: 'applyStyles',\n enabled: false,\n },\n ];\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig]),\n };\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter((element) =>\n isVisible(element)\n );\n\n if (!items.length) {\n return;\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n });\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return;\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle);\n if (!context || context._config.autoClose === false) {\n continue;\n }\n\n const composedPath = event.composedPath();\n const isMenuTarget = composedPath.includes(context._menu);\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue;\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (\n context._menu.contains(event.target) &&\n ((event.type === 'keyup' && event.key === TAB_KEY) ||\n /input|select|option|textarea|form/i.test(event.target.tagName))\n ) {\n continue;\n }\n\n const relatedTarget = { relatedTarget: context._element };\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n\n context._completeHide(relatedTarget);\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName);\n const isEscapeEvent = event.key === ESCAPE_KEY;\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key);\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return;\n }\n\n if (isInput && !isEscapeEvent) {\n return;\n }\n\n event.preventDefault();\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE)\n ? this\n : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode);\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton);\n\n if (isUpOrDownEvent) {\n event.stopPropagation();\n instance.show();\n instance._selectMenuItem(event);\n return;\n }\n\n if (instance._isShown()) {\n // else is escape and we check if it is shown\n event.stopPropagation();\n instance.hide();\n getToggleButton.focus();\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(\n// document,\n// EVENT_KEYDOWN_DATA_API,\n// SELECTOR_DATA_TOGGLE,\n// Dropdown.dataApiKeydownHandler\n// );\n// EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n// EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);\n// EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n// event.preventDefault();\n// Dropdown.getOrCreateInstance(this).toggle();\n// });\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Dropdown);\n\nexport default Dropdown;\n","import { typeCheckConfig } from '../mdb/util/index';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport BSDropdown from '../bootstrap/mdb-prefix/dropdown';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst Default = {\n offset: [0, 2],\n flip: true,\n boundary: 'clippingParents',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null,\n dropdownAnimation: 'on',\n};\n\nconst DefaultType = {\n offset: '(array|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element|object)',\n display: 'string',\n popperConfig: '(null|object|function)',\n dropdownAnimation: 'string',\n};\n\nconst EVENT_HIDE = 'hide.bs.dropdown';\nconst EVENT_HIDDEN = 'hidden.bs.dropdown';\nconst EVENT_SHOW = 'show.bs.dropdown';\nconst EVENT_SHOWN = 'shown.bs.dropdown';\n\nconst EVENT_HIDE_MDB = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN_MDB = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW_MDB = `show${EVENT_KEY}`;\nconst EVENT_SHOWN_MDB = `shown${EVENT_KEY}`;\n\nconst ANIMATION_CLASS = 'animation';\nconst ANIMATION_SHOW_CLASS = 'fade-in';\nconst ANIMATION_HIDE_CLASS = 'fade-out';\n\nclass Dropdown extends BSDropdown {\n constructor(element, data) {\n super(element, data);\n this._config = this._getConfig(data);\n this._menuStyle = '';\n this._popperPlacement = '';\n this._mdbPopperConfig = '';\n\n //* prevents dropdown close issue when system animation is turned off\n const isPrefersReducedMotionSet = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n if (this._config.dropdownAnimation === 'on' && !isPrefersReducedMotionSet) {\n this._init();\n }\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n dispose() {\n EventHandler.off(this._element, EVENT_SHOW);\n EventHandler.off(this._parent, EVENT_SHOWN);\n EventHandler.off(this._parent, EVENT_HIDE);\n EventHandler.off(this._parent, EVENT_HIDDEN);\n\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n // Private\n _init() {\n this._bindShowEvent();\n this._bindShownEvent();\n this._bindHideEvent();\n this._bindHiddenEvent();\n }\n\n _getConfig(options) {\n const config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...options,\n };\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n\n _getOffset() {\n const { offset } = this._config;\n\n if (typeof offset === 'string') {\n return offset.split(',').map((val) => Number.parseInt(val, 10));\n }\n\n if (typeof offset === 'function') {\n return (popperData) => offset(popperData, this._element);\n }\n\n return offset;\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: [\n {\n name: 'preventOverflow',\n options: {\n altBoundary: this._config.flip,\n boundary: this._config.boundary,\n },\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset(),\n },\n },\n ],\n };\n\n // Disable Popper if we have a static display\n if (this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n popperConfig.modifiers = [\n {\n name: 'applyStyles',\n enabled: false,\n },\n ];\n }\n\n return {\n ...popperConfig,\n /* eslint no-extra-parens: \"off\" */\n ...(typeof this._config.popperConfig === 'function'\n ? this._config.popperConfig(popperConfig)\n : this._config.popperConfig),\n };\n }\n\n _bindShowEvent() {\n EventHandler.on(this._element, EVENT_SHOW, (e) => {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW_MDB, {\n relatedTarget: e.relatedTarget,\n });\n\n if (showEvent.defaultPrevented) {\n e.preventDefault();\n return;\n }\n\n this._dropdownAnimationStart('show');\n });\n }\n\n _bindShownEvent() {\n EventHandler.on(this._parent, EVENT_SHOWN, (e) => {\n const shownEvent = EventHandler.trigger(this._parent, EVENT_SHOWN_MDB, {\n relatedTarget: e.relatedTarget,\n });\n\n if (shownEvent.defaultPrevented) {\n e.preventDefault();\n return;\n }\n });\n }\n\n _bindHideEvent() {\n EventHandler.on(this._parent, EVENT_HIDE, (e) => {\n const hideEvent = EventHandler.trigger(this._parent, EVENT_HIDE_MDB, {\n relatedTarget: e.relatedTarget,\n });\n\n if (hideEvent.defaultPrevented) {\n e.preventDefault();\n return;\n }\n\n this._menuStyle = this._menu.style.cssText;\n this._popperPlacement = this._menu.getAttribute('data-popper-placement');\n this._mdbPopperConfig = this._menu.getAttribute('data-mdb-popper');\n });\n }\n\n _bindHiddenEvent() {\n EventHandler.on(this._parent, EVENT_HIDDEN, (e) => {\n const hiddenEvent = EventHandler.trigger(this._parent, EVENT_HIDDEN_MDB, {\n relatedTarget: e.relatedTarget,\n });\n\n if (hiddenEvent.defaultPrevented) {\n e.preventDefault();\n return;\n }\n\n if (this._config.display !== 'static' && this._menuStyle !== '') {\n this._menu.style.cssText = this._menuStyle;\n }\n\n this._menu.setAttribute('data-popper-placement', this._popperPlacement);\n this._menu.setAttribute('data-mdb-popper', this._mdbPopperConfig);\n\n this._dropdownAnimationStart('hide');\n });\n }\n\n _dropdownAnimationStart(action) {\n switch (action) {\n case 'show':\n this._menu.classList.add(ANIMATION_CLASS, ANIMATION_SHOW_CLASS);\n this._menu.classList.remove(ANIMATION_HIDE_CLASS);\n break;\n default:\n // hide\n this._menu.classList.add(ANIMATION_CLASS, ANIMATION_HIDE_CLASS);\n this._menu.classList.remove(ANIMATION_SHOW_CLASS);\n break;\n }\n\n this._bindAnimationEnd();\n }\n\n _bindAnimationEnd() {\n EventHandler.one(this._menu, 'animationend', () => {\n this._menu.classList.remove(ANIMATION_CLASS, ANIMATION_HIDE_CLASS, ANIMATION_SHOW_CLASS);\n });\n }\n}\n\nexport default Dropdown;\n","import { element, typeCheckConfig } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BaseComponent from './base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'ripple';\nconst DATA_KEY = 'mdb.ripple';\nconst CLASSNAME_RIPPLE = 'ripple-surface';\nconst CLASSNAME_RIPPLE_WAVE = 'ripple-wave';\nconst CLASSNAME_RIPPLE_WRAPPER = 'input-wrapper';\nconst SELECTOR_BTN = '.btn';\nconst SELECTOR_COMPONENT = [SELECTOR_BTN, `[data-mdb-${NAME}-init]`];\n\nconst CLASSNAME_UNBOUND = 'ripple-surface-unbound';\nconst GRADIENT =\n 'rgba({{color}}, 0.2) 0, rgba({{color}}, 0.3) 40%, rgba({{color}}, 0.4) 50%, rgba({{color}}, 0.5) 60%, rgba({{color}}, 0) 70%';\nconst DEFAULT_RIPPLE_COLOR = [0, 0, 0];\nconst BOOTSTRAP_COLORS = [\n 'primary',\n 'secondary',\n 'success',\n 'danger',\n 'warning',\n 'info',\n 'light',\n 'dark',\n];\n\n// Sets value when run opacity transition\n// Hide element after 50% (0.5) time of animation and finish on 100%\nconst TRANSITION_BREAK_OPACITY = 0.5;\n\nconst Default = {\n rippleCentered: false,\n rippleColor: '',\n rippleDuration: '500ms',\n rippleRadius: 0,\n rippleUnbound: false,\n};\n\nconst DefaultType = {\n rippleCentered: 'boolean',\n rippleColor: 'string',\n rippleDuration: 'string',\n rippleRadius: 'number',\n rippleUnbound: 'boolean',\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Ripple extends BaseComponent {\n constructor(element, options) {\n super(element);\n this._options = this._getConfig(options);\n\n if (this._element) {\n Manipulator.addClass(this._element, CLASSNAME_RIPPLE);\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n this._clickHandler = this._createRipple.bind(this);\n this._rippleTimer = null;\n this._isMinWidthSet = false;\n this._rippleInSpan = false;\n\n this.init();\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n\n init() {\n this._addClickEvent(this._element);\n }\n\n dispose() {\n EventHandler.off(this._element, 'mousedown', this._clickHandler);\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Private\n\n _autoInit(event) {\n SELECTOR_COMPONENT.forEach((selector) => {\n const target = SelectorEngine.closest(event.target, selector);\n if (target) {\n this._element = SelectorEngine.closest(event.target, selector);\n }\n });\n\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n if (this._element.classList.contains('btn') && dataAttributes.rippleInit === false) {\n return;\n }\n\n this._options = this._getConfig();\n\n if (this._element.tagName.toLowerCase() === 'input') {\n const parent = this._element.parentNode;\n\n this._rippleInSpan = true;\n\n if (parent.tagName.toLowerCase() === 'span' && parent.classList.contains(CLASSNAME_RIPPLE)) {\n this._element = parent;\n } else {\n const shadow = getComputedStyle(this._element).boxShadow;\n const btn = this._element;\n const wrapper = document.createElement('span');\n\n if (btn.classList.contains('btn-block')) {\n wrapper.style.display = 'block';\n }\n\n EventHandler.one(wrapper, 'mouseup', (e) => {\n // prevent submit on click other than LMB, ripple still triggered, but submit is blocked\n if (e.button === 0) {\n btn.click();\n }\n });\n\n wrapper.classList.add(CLASSNAME_RIPPLE, CLASSNAME_RIPPLE_WRAPPER);\n\n Manipulator.addStyle(wrapper, {\n border: 0,\n 'box-shadow': shadow,\n });\n\n // Put element as child\n parent.replaceChild(wrapper, this._element);\n wrapper.appendChild(this._element);\n this._element = wrapper;\n }\n this._element.focus();\n }\n\n if (!this._element.style.minWidth) {\n Manipulator.style(this._element, { 'min-width': `${getComputedStyle(this._element).width}` });\n this._isMinWidthSet = true;\n }\n\n Manipulator.addClass(this._element, CLASSNAME_RIPPLE);\n this._createRipple(event);\n }\n\n _addClickEvent(target) {\n EventHandler.on(target, 'mousedown', this._clickHandler);\n }\n\n _getEventLayer(event) {\n const x = Math.round(event.clientX - event.target.getBoundingClientRect().x);\n const y = Math.round(event.clientY - event.target.getBoundingClientRect().y);\n return { layerX: x, layerY: y };\n }\n\n _createRipple(event) {\n if (this._element === null) {\n return;\n }\n\n if (!Manipulator.hasClass(this._element, CLASSNAME_RIPPLE)) {\n Manipulator.addClass(this._element, CLASSNAME_RIPPLE);\n }\n\n const { layerX, layerY } = this._getEventLayer(event);\n const offsetX = layerX;\n const offsetY = layerY;\n const height = this._element.offsetHeight;\n const width = this._element.offsetWidth;\n const duration = this._durationToMsNumber(this._options.rippleDuration);\n const diameterOptions = {\n offsetX: this._options.rippleCentered ? height / 2 : offsetX,\n offsetY: this._options.rippleCentered ? width / 2 : offsetY,\n height,\n width,\n };\n const diameter = this._getDiameter(diameterOptions);\n const radiusValue = this._options.rippleRadius || diameter / 2;\n\n const opacity = {\n delay: duration * TRANSITION_BREAK_OPACITY,\n duration: duration - duration * TRANSITION_BREAK_OPACITY,\n };\n\n const styles = {\n left: this._options.rippleCentered\n ? `${width / 2 - radiusValue}px`\n : `${offsetX - radiusValue}px`,\n top: this._options.rippleCentered\n ? `${height / 2 - radiusValue}px`\n : `${offsetY - radiusValue}px`,\n height: `${this._options.rippleRadius * 2 || diameter}px`,\n width: `${this._options.rippleRadius * 2 || diameter}px`,\n transitionDelay: `0s, ${opacity.delay}ms`,\n transitionDuration: `${duration}ms, ${opacity.duration}ms`,\n };\n\n const rippleHTML = element('div');\n\n this._createHTMLRipple({ wrapper: this._element, ripple: rippleHTML, styles });\n this._removeHTMLRipple({ ripple: rippleHTML, duration });\n }\n\n _createHTMLRipple({ wrapper, ripple, styles }) {\n Object.keys(styles).forEach((property) => (ripple.style[property] = styles[property]));\n ripple.classList.add(CLASSNAME_RIPPLE_WAVE);\n if (this._options.rippleColor !== '') {\n this._removeOldColorClasses(wrapper);\n this._addColor(ripple, wrapper);\n }\n\n this._toggleUnbound(wrapper);\n this._appendRipple(ripple, wrapper);\n }\n\n _removeHTMLRipple({ ripple, duration }) {\n if (this._rippleTimer) {\n clearTimeout(this._rippleTimer);\n this._rippleTimer = null;\n }\n this._rippleTimer = setTimeout(() => {\n if (ripple) {\n ripple.remove();\n if (this._element) {\n SelectorEngine.find(`.${CLASSNAME_RIPPLE_WAVE}`, this._element).forEach((rippleEl) => {\n rippleEl.remove();\n });\n if (this._isMinWidthSet) {\n Manipulator.style(this._element, { 'min-width': '' });\n this._isMinWidthSet = false;\n }\n if (this._rippleInSpan && this._element.classList.contains(CLASSNAME_RIPPLE_WRAPPER)) {\n this._removeWrapperSpan();\n } else {\n Manipulator.removeClass(this._element, CLASSNAME_RIPPLE);\n }\n }\n }\n }, duration);\n }\n\n _removeWrapperSpan() {\n const child = this._element.firstChild;\n\n this._element.replaceWith(child);\n this._element = child;\n this._element.focus();\n this._rippleInSpan = false;\n }\n\n _durationToMsNumber(time) {\n return Number(time.replace('ms', '').replace('s', '000'));\n }\n\n _getConfig(config = {}) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n config = {\n ...Default,\n ...dataAttributes,\n ...config,\n };\n\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n\n _getDiameter({ offsetX, offsetY, height, width }) {\n const top = offsetY <= height / 2;\n const left = offsetX <= width / 2;\n const pythagorean = (sideA, sideB) => Math.sqrt(sideA ** 2 + sideB ** 2);\n\n const positionCenter = offsetY === height / 2 && offsetX === width / 2;\n // mouse position on the quadrants of the coordinate system\n const quadrant = {\n first: top === true && left === false,\n second: top === true && left === true,\n third: top === false && left === true,\n fourth: top === false && left === false,\n };\n\n const getCorner = {\n topLeft: pythagorean(offsetX, offsetY),\n topRight: pythagorean(width - offsetX, offsetY),\n bottomLeft: pythagorean(offsetX, height - offsetY),\n bottomRight: pythagorean(width - offsetX, height - offsetY),\n };\n\n let diameter = 0;\n\n if (positionCenter || quadrant.fourth) {\n diameter = getCorner.topLeft;\n } else if (quadrant.third) {\n diameter = getCorner.topRight;\n } else if (quadrant.second) {\n diameter = getCorner.bottomRight;\n } else if (quadrant.first) {\n diameter = getCorner.bottomLeft;\n }\n return diameter * 2;\n }\n\n _appendRipple(target, parent) {\n const FIX_ADD_RIPPLE_EFFECT = 50; // delay for active animations\n parent.appendChild(target);\n setTimeout(() => {\n Manipulator.addClass(target, 'active');\n }, FIX_ADD_RIPPLE_EFFECT);\n }\n\n _toggleUnbound(target) {\n if (this._options.rippleUnbound === true) {\n Manipulator.addClass(target, CLASSNAME_UNBOUND);\n } else {\n target.classList.remove(CLASSNAME_UNBOUND);\n }\n }\n\n _addColor(target, parent) {\n const IS_BOOTSTRAP_COLOR = BOOTSTRAP_COLORS.find(\n (color) => color === this._options.rippleColor.toLowerCase()\n );\n\n if (IS_BOOTSTRAP_COLOR) {\n Manipulator.addClass(\n parent,\n `${CLASSNAME_RIPPLE}-${this._options.rippleColor.toLowerCase()}`\n );\n } else {\n const rgbValue = this._colorToRGB(this._options.rippleColor).join(',');\n const gradientImage = GRADIENT.split('{{color}}').join(`${rgbValue}`);\n target.style.backgroundImage = `radial-gradient(circle, ${gradientImage})`;\n }\n }\n\n _removeOldColorClasses(target) {\n const REGEXP_CLASS_COLOR = new RegExp(`${CLASSNAME_RIPPLE}-[a-z]+`, 'gi');\n const PARENT_CLASSS_COLOR = target.classList.value.match(REGEXP_CLASS_COLOR) || [];\n PARENT_CLASSS_COLOR.forEach((className) => {\n target.classList.remove(className);\n });\n }\n\n _colorToRGB(color) {\n function hexToRgb(color) {\n const HEX_COLOR_LENGTH = 7;\n const IS_SHORT_HEX = color.length < HEX_COLOR_LENGTH;\n if (IS_SHORT_HEX) {\n color = `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}`;\n }\n return [\n parseInt(color.substr(1, 2), 16),\n parseInt(color.substr(3, 2), 16),\n parseInt(color.substr(5, 2), 16),\n ];\n }\n\n function namedColorsToRgba(color) {\n const tempElem = document.body.appendChild(document.createElement('fictum'));\n const flag = 'rgb(1, 2, 3)';\n tempElem.style.color = flag;\n if (tempElem.style.color !== flag) {\n return DEFAULT_RIPPLE_COLOR;\n }\n tempElem.style.color = color;\n if (tempElem.style.color === flag || tempElem.style.color === '') {\n return DEFAULT_RIPPLE_COLOR;\n } // color parse failed\n color = getComputedStyle(tempElem).color;\n document.body.removeChild(tempElem);\n return color;\n }\n\n function rgbaToRgb(color) {\n color = color.match(/[.\\d]+/g).map((a) => +Number(a));\n color.length = 3;\n return color;\n }\n\n if (color.toLowerCase() === 'transparent') {\n return DEFAULT_RIPPLE_COLOR;\n }\n if (color[0] === '#') {\n return hexToRgb(color);\n }\n if (color.indexOf('rgb') === -1) {\n color = namedColorsToRgba(color);\n }\n if (color.indexOf('rgb') === 0) {\n return rgbaToRgb(color);\n }\n\n return DEFAULT_RIPPLE_COLOR;\n }\n\n // Static\n static autoInitial(instance) {\n return function (event) {\n instance._autoInit(event);\n };\n }\n\n static jQueryInterface(options) {\n return this.each(function () {\n const data = Data.getData(this, DATA_KEY);\n if (!data) {\n return new Ripple(this, options);\n }\n\n return null;\n });\n }\n}\n\nexport default Ripple;\n","import { element } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BaseComponent from './base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'range';\nconst DATA_KEY = 'mdb.range';\nconst CLASSNAME_THUMB = 'thumb';\nconst CLASSNAME_ACTIVE = 'thumb-active';\nconst CLASSNAME_THUMB_VALUE = 'thumb-value';\n\nconst SELECTOR_THUMB_VALUE = `.${CLASSNAME_THUMB_VALUE}`;\nconst SELECTOR_THUMB = `.${CLASSNAME_THUMB}`;\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Range extends BaseComponent {\n constructor(element) {\n super(element);\n\n this._initiated = false;\n this._thumb = null;\n\n if (this._element) {\n this.init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n get rangeInput() {\n return SelectorEngine.findOne('input[type=range]', this._element);\n }\n\n // Public\n init() {\n if (this._initiated) {\n return;\n }\n this._addThumb();\n this._thumbUpdate();\n this._handleEvents();\n this._initiated = true;\n }\n\n dispose() {\n this._disposeEvents();\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Private\n _addThumb() {\n const RANGE_THUMB = element('span');\n Manipulator.addClass(RANGE_THUMB, CLASSNAME_THUMB);\n RANGE_THUMB.innerHTML = '<span class=\"thumb-value\"></span>';\n this._element.append(RANGE_THUMB);\n this._thumb = SelectorEngine.findOne(SELECTOR_THUMB, this._element);\n }\n\n _handleEvents() {\n EventHandler.on(this.rangeInput, 'mousedown', () => this._showThumb());\n EventHandler.on(this.rangeInput, 'mouseup', () => this._hideThumb());\n EventHandler.on(this.rangeInput, 'touchstart', () => this._showThumb());\n EventHandler.on(this.rangeInput, 'touchend', () => this._hideThumb());\n EventHandler.on(this.rangeInput, 'input', () => this._thumbUpdate());\n }\n\n _disposeEvents() {\n EventHandler.off(this.rangeInput, 'mousedown');\n EventHandler.off(this.rangeInput, 'mouseup');\n EventHandler.off(this.rangeInput, 'touchstart');\n EventHandler.off(this.rangeInput, 'touchend');\n EventHandler.off(this.rangeInput, 'input');\n }\n\n _showThumb() {\n Manipulator.addClass(this._thumb, CLASSNAME_ACTIVE);\n }\n\n _hideThumb() {\n Manipulator.removeClass(this._thumb, CLASSNAME_ACTIVE);\n }\n\n _thumbUpdate() {\n const rangeInput = this.rangeInput;\n const inputValue = rangeInput.value;\n const minValue = rangeInput.min ? rangeInput.min : 0;\n const maxValue = rangeInput.max ? rangeInput.max : 100;\n const thumbValue = SelectorEngine.findOne(SELECTOR_THUMB_VALUE, this._thumb);\n thumbValue.textContent = inputValue;\n const newValue = Number(((inputValue - minValue) * 100) / (maxValue - minValue));\n Manipulator.style(this._thumb, { left: `calc(${newValue}% + (${8 - newValue * 0.15}px))` });\n }\n // Static\n\n static jQueryInterface(config, options) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n if (!data && /dispose/.test(config)) {\n return;\n }\n if (!data) {\n data = new Range(this, _config);\n }\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](options);\n }\n });\n }\n}\n\nexport default Range;\n","import { typeCheckConfig } from '../mdb/util/index';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport EventHandler from '../mdb/dom/event-handler';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'animation';\n\nconst DefaultType = {\n animation: 'string',\n animationStart: 'string',\n animationShowOnLoad: 'boolean',\n onStart: '(null|function)',\n onEnd: '(null|function)',\n onHide: '(null|function)',\n onShow: '(null|function)',\n animationOnScroll: '(string)',\n animationWindowHeight: 'number',\n animationOffset: '(number|string)',\n animationDelay: '(number|string)',\n animationDuration: '(number|string)',\n animationReverse: 'boolean',\n animationInterval: '(number|string)',\n animationRepeat: '(number|boolean)',\n animationReset: 'boolean',\n};\n\nconst Default = {\n animation: 'fade',\n animationStart: 'onClick',\n animationShowOnLoad: true,\n onStart: null,\n onEnd: null,\n onHide: null,\n onShow: null,\n animationOnScroll: 'once',\n animationWindowHeight: 0,\n animationOffset: 0,\n animationDelay: 0,\n animationDuration: 500,\n animationReverse: false,\n animationInterval: 0,\n animationRepeat: false,\n animationReset: false,\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Animate extends BaseComponent {\n constructor(element, options) {\n super(element);\n\n this._animateElement = this._getAnimateElement();\n this._isFirstScroll = true;\n this._repeatAnimateOnScroll = true;\n this._options = this._getConfig(options);\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n // Public\n init() {\n this._init();\n }\n\n startAnimation() {\n this._startAnimation();\n }\n\n stopAnimation() {\n this._clearAnimationClass();\n }\n\n changeAnimationType(animation) {\n this._options.animation = animation;\n }\n\n dispose() {\n EventHandler.off(this._element, 'mousedown');\n EventHandler.off(this._animateElement, 'animationend');\n EventHandler.off(window, 'scroll');\n EventHandler.off(this._element, 'mouseover');\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Private\n _init() {\n switch (this._options.animationStart) {\n case 'onHover':\n this._bindHoverEvents();\n break;\n case 'onLoad':\n this._startAnimation();\n break;\n case 'onScroll':\n this._bindScrollEvents();\n break;\n case 'onClick':\n this._bindClickEvents();\n break;\n default:\n break;\n }\n\n this._bindTriggerOnEndCallback();\n\n if (this._options.animationReset) {\n this._bindResetAnimationAfterFinish();\n }\n }\n\n _getAnimateElement() {\n const targetId = Manipulator.getDataAttribute(this._element, 'animation-target');\n return targetId ? SelectorEngine.find(targetId)[0] : this._element;\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._animateElement);\n\n config = {\n ...Default,\n ...dataAttributes,\n ...config,\n };\n\n typeCheckConfig(NAME, config, DefaultType);\n\n return config;\n }\n\n _animateOnScroll() {\n const elementOffsetTop = Manipulator.offset(this._animateElement).top;\n const elementHeight = this._animateElement.offsetHeight;\n const windowHeight = window.innerHeight;\n const shouldBeVisible =\n elementOffsetTop + this._options.animationOffset <= windowHeight &&\n elementOffsetTop + this._options.animationOffset + elementHeight >= 0;\n const isElementVisible = this._animateElement.style.visibility === 'visible';\n\n switch (true) {\n case shouldBeVisible && this._isFirstScroll:\n this._isFirstScroll = false;\n this._startAnimation();\n break;\n case !shouldBeVisible && this._isFirstScroll:\n this._isFirstScroll = false;\n this._hideAnimateElement();\n break;\n case shouldBeVisible && !isElementVisible && this._repeatAnimateOnScroll:\n if (this._options.animationOnScroll !== 'repeat') {\n this._repeatAnimateOnScroll = false;\n }\n this._callback(this._options.onShow);\n this._showAnimateElement();\n this._startAnimation();\n break;\n case !shouldBeVisible && isElementVisible && this._repeatAnimateOnScroll:\n this._hideAnimateElement();\n this._clearAnimationClass();\n this._callback(this._options.onHide);\n break;\n default:\n break;\n }\n }\n\n _addAnimatedClass() {\n Manipulator.addClass(this._animateElement, 'animation');\n Manipulator.addClass(this._animateElement, this._options.animation);\n }\n\n _clearAnimationClass() {\n this._animateElement.classList.remove(this._options.animation, 'animation');\n }\n\n _removeInvisibleClass() {\n Manipulator.removeClass(this._animateElement, 'invisible');\n }\n\n _startAnimation() {\n this._callback(this._options.onStart);\n\n this._removeInvisibleClass();\n this._addAnimatedClass();\n\n if (this._options.animationRepeat && !this._options.animationInterval) {\n this._setAnimationRepeat();\n }\n\n if (this._options.animationReverse) {\n this._setAnimationReverse();\n }\n\n if (this._options.animationDelay) {\n this._setAnimationDelay();\n }\n\n if (this._options.animationDuration) {\n this._setAnimationDuration();\n }\n\n if (this._options.animationInterval) {\n this._setAnimationInterval();\n }\n }\n\n _setAnimationReverse() {\n Manipulator.style(this._animateElement, {\n animationIterationCount: this._options.animationRepeat === true ? 'infinite' : '2',\n animationDirection: 'alternate',\n });\n }\n\n _setAnimationDuration() {\n Manipulator.style(this._animateElement, {\n animationDuration: `${this._options.animationDuration}ms`,\n });\n }\n\n _setAnimationDelay() {\n Manipulator.style(this._animateElement, {\n animationDelay: `${this._options.animationDelay}ms`,\n });\n }\n\n _setAnimationRepeat() {\n Manipulator.style(this._animateElement, {\n animationIterationCount:\n this._options.animationRepeat === true ? 'infinite' : this._options.animationRepeat,\n });\n }\n\n _setAnimationInterval() {\n EventHandler.on(this._animateElement, 'animationend', () => {\n this._clearAnimationClass();\n setTimeout(() => {\n this._addAnimatedClass();\n }, this._options.animationInterval);\n });\n }\n\n _hideAnimateElement() {\n Manipulator.style(this._animateElement, { visibility: 'hidden' });\n }\n\n _showAnimateElement() {\n Manipulator.style(this._animateElement, { visibility: 'visible' });\n }\n\n _bindResetAnimationAfterFinish() {\n EventHandler.on(this._animateElement, 'animationend', () => {\n this._clearAnimationClass();\n });\n }\n\n _bindTriggerOnEndCallback() {\n EventHandler.on(this._animateElement, 'animationend', () => {\n this._callback(this._options.onEnd);\n });\n }\n\n _bindScrollEvents() {\n if (!this._options.animationShowOnLoad) {\n this._animateOnScroll();\n }\n\n EventHandler.on(window, 'scroll', () => {\n this._animateOnScroll();\n });\n }\n\n _bindClickEvents() {\n EventHandler.on(this._element, 'mousedown', () => {\n this._startAnimation();\n });\n }\n\n _bindHoverEvents() {\n EventHandler.one(this._element, 'mouseover', () => {\n this._startAnimation();\n });\n EventHandler.one(this._animateElement, 'animationend', () => {\n // wait after bind hoverEvents to prevent animation looping\n setTimeout(() => {\n this._bindHoverEvents();\n }, 100);\n });\n }\n\n _callback(fn) {\n if (fn instanceof Function) {\n fn();\n }\n }\n\n // Static\n static autoInit(instance) {\n instance._init();\n }\n\n static jQueryInterface(options) {\n const animate = new Animate(this[0], options);\n animate.init();\n }\n}\n\nexport default Animate;\n","/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction noop() {}\nconst uid = (function() {\n let id = 0;\n return function() {\n return id++;\n };\n}());\nfunction isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\nfunction isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : value / dimension;\nconst toDimension = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\nfunction callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\nfunction _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\nfunction clone$1(source) {\n if (isArray(source)) {\n return source.map(clone$1);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for (; k < klen; ++k) {\n target[keys[k]] = clone$1(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n merge(tval, sval, options);\n } else {\n target[key] = clone$1(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n for (let i = 0; i < ilen; ++i) {\n source = sources[i];\n if (!isObject(source)) {\n continue;\n }\n const keys = Object.keys(source);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, source, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone$1(sval);\n }\n}\nfunction _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\nconst keyResolvers = {\n '': v => v,\n x: o => o.x,\n y: o => o.y\n};\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return obj => {\n for (const k of keys) {\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\n let tmp = '';\n for (const part of parts) {\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\nfunction _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\nfunction _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b) => a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < (-0.5 * PI)) {\n angle += TAU;\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\nfunction _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {lo, hi};\n}\nconst _lookupByKey = (table, key, value, last) =>\n _lookup(table, value, last\n ? index => table[index][key] <= value\n : index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n const set = new Set();\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n set.add(items[i]);\n }\n if (set.size === ilen) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n let ticking = false;\n let args = [];\n return function(...rest) {\n args = updateArgs(rest);\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, args);\n });\n }\n };\n}\nfunction debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\nfunction _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const {iScale, _parsed} = meta;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(\n _lookupByKey(_parsed, iScale.axis, min).lo,\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1),\n start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {start, count};\n}\nfunction _scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n linear: t => t,\n easeInQuad: t => t * t,\n easeOutQuad: t => -t * (t - 2),\n easeInOutQuad: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n easeInCubic: t => t * t * t,\n easeOutCubic: t => (t -= 1) * t * t + 1,\n easeInOutCubic: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: t => t * t * t * t,\n easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n easeInOutQuart: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: t => t * t * t * t * t,\n easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n easeInOutQuint: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n easeOutSine: t => Math.sin(t * HALF_PI),\n easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: t => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: t => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic(t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack(t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack(t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n easeOutBounce(t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n easeInOutBounce: t => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.2.1\n * https://github.com/kurkle/color#readme\n * (c) 2022 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\nfunction index_esm(input) {\n return new Color(input);\n}\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n constructor(_descriptors) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n}\nvar defaults = new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false,\n }\n});\n\nfunction toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n drawPointLegend(ctx, options, x, y, null);\n}\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch (style) {\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n case 'rectRot':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + yOffset, y - xOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n case 'cross':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'star':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n rad += QUARTER_PI;\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\nfunction _isPointInArea(point, area, margin) {\n margin = margin || 0.5;\n return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += font.lineHeight;\n }\n ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction addRoundedRectPath(ctx, rect) {\n const {x, y, w, h, radius} = rect;\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n ctx.lineTo(x, y + h - radius.bottomLeft);\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n ctx.lineTo(x + w, y + radius.topRight);\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\nfunction toTRBL(value) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\nfunction toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = '';\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\nfunction resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\nfunction _addGrace(minmax, grace, beginAtZero) {\n const {min, max} = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n if (!defined(fallback)) {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: rootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete target._keys;\n delete scopes[0][prop];\n return true;\n },\n get(target, prop) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n has(target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n set(target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value;\n delete target._keys;\n return true;\n }\n });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete proxy[prop];\n return true;\n },\n get(target, prop, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n set(target, prop, value) {\n proxy[prop] = value;\n delete target[prop];\n return true;\n }\n });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n const value = resolve();\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop];\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n value = value(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n if (defined(_context.index) && isIndexable(prop)) {\n value = value[_context.index % value.length];\n } else if (isObject(value[0])) {\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n return fallback;\n }\n } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (defined(fallback) && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n return value;\n }\n return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (defined(value)) {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (defined(value)) {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const {iScale} = meta;\n const {key = 'r'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01;\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\nfunction _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const {offsetX, offsetY} = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\nfunction getRelativePosition(evt, chart) {\n if ('native' in evt) {\n return evt;\n }\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(evt, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect();\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n height = round1(width / 2);\n }\n return {\n width,\n height\n };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = deviceHeight / pixelRatio;\n chart.width = deviceWidth / pixelRatio;\n const canvas = chart.canvas;\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\nconst supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() {\n passiveSupported = true;\n return false;\n }\n };\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n }\n return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x(x) {\n return x;\n },\n setWidth(w) {\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) {\n return x;\n },\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle,\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n let {start, end, loop} = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n return result;\n}\nfunction _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n while (start < count && points[start].skip) {\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while (end > start && points[end % count].skip) {\n end--;\n }\n end %= count;\n return {start, end};\n}\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({start: s % count, end: e % count, loop: l, style: st});\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { _isPointInArea as $, _factorize as A, finiteOrDefault as B, callback as C, _addGrace as D, _limitValue as E, toDegrees as F, _measureText as G, HALF_PI as H, _int16Range as I, _alignPixel as J, toPadding as K, clipArea as L, renderText as M, unclipArea as N, toFont as O, PI as P, each as Q, _toLeftRightCenter as R, _alignStartEnd as S, TAU as T, overrides as U, merge as V, _capitalize as W, getRelativePosition as X, _rlookupByKey as Y, _lookupByKey as Z, _arrayUnique as _, resolve as a, toLineHeight as a$, getAngleFromPoint as a0, getMaximumSize as a1, _getParentNode as a2, readUsedSize as a3, throttled as a4, supportsEventListenerOptions as a5, _isDomSupported as a6, descriptors as a7, isFunction as a8, _attachContext as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, noop as aF, distanceBetweenPoints as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, _longestText as aM, _filterBetween as aN, _lookup as aO, isPatternOrGradient as aP, getHoverColor as aQ, clone$1 as aR, _merger as aS, _mergerIf as aT, _deprecated as aU, _splitKey as aV, toFontString as aW, splineCurve as aX, splineCurveMonotone as aY, getStyle as aZ, fontString as a_, _createResolver as aa, _descriptors as ab, mergeIf as ac, uid as ad, debounce as ae, retinaScale as af, clearCanvas as ag, setsEqual as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _readValueToProps as al, _updateBezierControlPoints as am, _computeSegments as an, _boundSegments as ao, _steppedInterpolation as ap, _bezierInterpolation as aq, _pointInLine as ar, _steppedLineTo as as, _bezierCurveTo as at, drawPoint as au, addRoundedRectPath as av, toTRBL as aw, toTRBLCorners as ax, _boundSegment as ay, _normalizeAngle as az, isArray as b, PITAU as b0, INFINITY as b1, RAD_PER_DEG as b2, QUARTER_PI as b3, TWO_THIRDS_PI as b4, _angleDiff as b5, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, log10 as z };\n","/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as log10, A as _factorize, B as finiteOrDefault, C as callback, D as _addGrace, E as _limitValue, F as toDegrees, G as _measureText, I as _int16Range, J as _alignPixel, K as toPadding, L as clipArea, M as renderText, N as unclipArea, O as toFont, Q as each, R as _toLeftRightCenter, S as _alignStartEnd, U as overrides, V as merge, W as _capitalize, X as getRelativePosition, Y as _rlookupByKey, Z as _lookupByKey, $ as _isPointInArea, a0 as getAngleFromPoint, a1 as getMaximumSize, a2 as _getParentNode, a3 as readUsedSize, a4 as throttled, a5 as supportsEventListenerOptions, a6 as _isDomSupported, a7 as descriptors, a8 as isFunction, a9 as _attachContext, aa as _createResolver, ab as _descriptors, ac as mergeIf, ad as uid, ae as debounce, af as retinaScale, ag as clearCanvas, ah as setsEqual, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _readValueToProps, am as _updateBezierControlPoints, an as _computeSegments, ao as _boundSegments, ap as _steppedInterpolation, aq as _bezierInterpolation, ar as _pointInLine, as as _steppedLineTo, at as _bezierCurveTo, au as drawPoint, av as addRoundedRectPath, aw as toTRBL, ax as toTRBLCorners, ay as _boundSegment, az as _normalizeAngle, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as noop, aG as distanceBetweenPoints, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as _longestText, aN as _filterBetween, aO as _lookup } from './chunks/helpers.segment.mjs';\nexport { d as defaults } from './chunks/helpers.segment.mjs';\n\nclass Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for (; i >= 0; --i) {\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color(from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || (elapsed < duration));\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = (elapsed / duration) % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined,\n});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n },\n});\ndefaults.describe('animations', {\n _fallback: 'animation',\n});\ndefaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n },\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0\n },\n }\n }\n});\nclass Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n return value;\n}\nfunction convertObjectDataToArray(data) {\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent,\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n }\n );\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n }\n}\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n && {keys: getSortedDatasetIndices(chart, true), values: null};\nclass DatasetController {\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const {_cachedMeta: meta, _data: data} = this;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || (elements.length - start);\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context ||\n (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context ||\n (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = () => this.getContext(index, active);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {sharedOptions, includeOptions};\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n return;\n }\n const {start, end, reverse, top, bottom} = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto'\n ? ratio === 1 ? 0.33 : 0\n : inflateAmount;\n}\nclass BarController extends DatasetController {\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const {iScale} = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type)\n .filter(meta => meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const skipNull = (meta) => {\n const parsed = meta.controller.getParsed(dataIndex);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets) {\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1;\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n};\nBarController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true,\n }\n }\n};\n\nclass BubbleController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: meta.label,\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n};\nBubbleController.overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n }\n }\n }\n }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {ratioX, ratioY, offsetX, offsetY};\n}\nclass DoughnutController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i) => +data[i];\n if (isObject(data[start])) {\n const {key = 'value'} = this._parsing;\n getter = (i) => +resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n update(mode) {\n const chart = this.chart;\n const {chartArea} = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const {circumference, rotation} = this._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n },\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n _scriptable: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(tooltipItem) {\n let dataLabel = tooltipItem.label;\n const value = ': ' + tooltipItem.formattedValue;\n if (isArray(dataLabel)) {\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n return dataLabel;\n }\n }\n }\n }\n};\n\nclass LineController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\nLineController.id = 'line';\nLineController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false,\n};\nLineController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n },\n _value_: {\n type: 'linear',\n },\n }\n};\n\nclass PolarAreaController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n meta.data.forEach((element, index) => {\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - (radiusLength * this.index);\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index) => {\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n },\n },\n indexAxis: 'r',\n startAngle: 0,\n};\nPolarAreaController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(context) {\n return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n }\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n};\n\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n },\n};\nRadarController.overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear',\n }\n }\n};\n\nclass Element {\n constructor() {\n this.x = undefined;\n this.y = undefined;\n this.active = false;\n this.options = undefined;\n this.$animations = undefined;\n }\n tooltipPosition(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n return this;\n }\n const ret = {};\n props.forEach(prop => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n values(value) {\n return isArray(value) ? value : '' + value;\n },\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n if (remain === 1 || remain === 2 || remain === 5) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawBorder: true,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false,\n borderDash: [],\n borderDashOffset: 0.0,\n borderWidth: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2,\n }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n _fallback: false,\n _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',\n});\ndefaults.describe('scales', {\n _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\nclass Scale extends Element {\n constructor(cfg) {\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {min, max};\n }\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [this]);\n }\n update(maxWidth, maxHeight, margins) {\n const {beginAtZero, grace, ticks: tickOpts} = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal()\n ? this.width + margins.left + margins.right\n : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [this]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [this]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [this]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [this]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [this]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = this.ticks.length;\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [this]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [this]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const {first, last, widest, highest} = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const {ticks: {align, padding}, position} = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [this]);\n }\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for (i = 0; i < length; ++i) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const {min, max} = this;\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {grid, position} = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = grid.setContext(this.getContext());\n const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const optsAtIndex = grid.setContext(this.getContext(i));\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndex.borderDash || [];\n const borderDashOffset = optsAtIndex.borderDashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = y + textOffset - labelPadding.top;\n let left = x - labelPadding.left;\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor,\n };\n }\n items.push({\n rotation,\n label,\n font,\n color,\n strokeColor,\n strokeWidth,\n textOffset,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const {position, ticks} = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += (widest / 2);\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {textAlign, x};\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n }\n }\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, y: item.ty2},\n {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n }\n );\n }\n }\n }\n }\n drawBorder() {\n const {chart, ctx, options: {grid}} = this;\n const borderOpts = grid.setContext(this.getContext());\n const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.borderWidth;\n ctx.strokeStyle = borderOpts.borderColor;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n const tickFont = item.font;\n const label = item.label;\n if (item.backdrop) {\n ctx.fillStyle = item.backdrop.color;\n ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n }\n let y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, item);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [{\n z: tz,\n draw: (chartArea) => {\n this.draw(chartArea);\n }\n }];\n }\n return [{\n z: gz,\n draw: (chartArea) => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: gz + 1,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: (chartArea) => {\n this.drawLabels(chartArea);\n }\n }];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n this._exec(method, reg, arg);\n } else {\n each(arg, item => {\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = new Registry();\n\nclass ScatterController extends DatasetController {\n update(mode) {\n const meta = this._cachedMeta;\n const {data: points = []} = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n const {dataset: line, _dataset} = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const {showLine} = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = registry.getElement('line');\n }\n super.addElements();\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n if (!this.options.showLine) {\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n};\nScatterController.overrides = {\n interaction: {\n mode: 'point'\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(item) {\n return '(' + item.label + ', ' + item.formattedValue + ')';\n }\n }\n }\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n constructor(options) {\n this.options = options || {};\n }\n init(chartOptions) {}\n formats() {\n return abstract();\n }\n parse(value, format) {\n return abstract();\n }\n format(timestamp, format) {\n return abstract();\n }\n add(timestamp, amount, unit) {\n return abstract();\n }\n diff(a, b, unit) {\n return abstract();\n }\n startOf(timestamp, unit, weekday) {\n return abstract();\n }\n endOf(timestamp, unit) {\n return abstract();\n }\n}\nDateAdapter.override = function(members) {\n Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n _date: DateAdapter\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n return {lo: 0, hi: data.length - 1};\n}\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({element, datasetIndex, index});\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({element, datasetIndex, index});\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect\n ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\nvar Interaction = {\n evaluateInteractionItems,\n modes: {\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n return elements;\n },\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n return items;\n },\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\ndefaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n});\nvar layouts = {\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n chart.boxes.push(item);\n },\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w,\n };\n each(boxes.chartArea, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart, (args) => {\n const event = args[0];\n return [event, event.offsetX, event.offsetY];\n });\n addListener(canvas, type, proxy);\n return proxy;\n}\nclass DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass PluginService {\n constructor() {\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\nfunction allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {plugins, localIds};\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n const result = [];\n const context = chart.getContext();\n for (const plugin of plugins) {\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [''], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, scaleOptions) {\n if (id === 'x' || id === 'y') {\n return id;\n }\n return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const firstIDs = Object.create(null);\n const scales = Object.create(null);\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n firstIDs[axis] = firstIDs[axis] || id;\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const {options, type} = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {type},\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = value => isObject(value)\n && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if ((scriptable && (isFunction(value) || hasFunction(value)))\n || (indexable && isArray(value))) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"3.9.1\";\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nclass Chart {\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n );\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {size: newSize});\n callback(options.onResize, [this, newSize], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n })\n );\n }\n each(items, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale) => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const {_metasets: metasets, data: {datasets}} = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\n Object.assign(ControllerClass.prototype, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {controller} = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {mode});\n this._layers.sort(compare2Level('z', '_idx'));\n const {_active, _lastEvent} = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale) => {\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const {_hiddenIndices} = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {method, start, count} of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx) => new Set(\n _dataChanges\n .filter(c => c[0] === idx)\n .map((c, i) => i + ',' + c.splice(1).join(','))\n );\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet)\n .map(c => c.split(','))\n .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({chart: this});\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {width, height} = this._resizeBeforeDraw;\n this._resize(width, height);\n this._resizeBeforeDraw = null;\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = this.chartArea;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {visible});\n this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {canvas, ctx} = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n this.notifyPlugins('destroy');\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type) => _add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = () => {\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = () => {\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const {_active: lastActive = [], options} = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [e, active, this], this);\n if (isClick) {\n callback(options.onClick, [e, active, this], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n defaults: {\n enumerable,\n value: defaults\n },\n instances: {\n enumerable,\n value: instances\n },\n overrides: {\n enumerable,\n value: overrides\n },\n registry: {\n enumerable,\n value: registry\n },\n version: {\n enumerable,\n value: version\n },\n getChart: {\n enumerable,\n value: getChart\n },\n register: {\n enumerable,\n value: (...items) => {\n registry.add(...items);\n invalidatePlugins();\n }\n },\n unregister: {\n enumerable,\n value: (...items) => {\n registry.remove(...items);\n invalidatePlugins();\n }\n }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n };\n}\nfunction rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\nfunction pathArc(ctx, element, offset, spacing, end, circular) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n if (circular) {\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, startAngle + TAU, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + circumference % TAU;\n if (circumference % TAU === 0) {\n endAngle += TAU;\n }\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n const {x, y, startAngle, pixelMargin, fullCircles} = element;\n const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n const innerRadius = element.innerRadius + pixelMargin;\n let i;\n if (inner) {\n clipArc(ctx, element, startAngle + TAU);\n }\n ctx.beginPath();\n ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle, circular) {\n const {options} = element;\n const {borderWidth, borderJoinStyle} = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n if (element.fullCircles) {\n drawFullCircleBorders(ctx, element, inner);\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n}\nclass ArcElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = this.options.spacing / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return (betweenAngles && withinRadius);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference',\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const {options, circumference} = this;\n const offset = (options.offset || 0) / 2;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n let radiusOffset = 0;\n if (offset) {\n radiusOffset = offset / 2;\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n if (this.circumference >= PI) {\n radiusOffset = offset;\n }\n }\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n const endAngle = drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, endAngle, circular);\n ctx.restore();\n }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true,\n};\nArcElement.defaultRoutes = {\n backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let {move = true, reverse} = params || {};\n let i, point, prev;\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n constructor(cfg) {\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || (this.points.length - start);\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n};\nLineElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n return options.radius + options.hitRadius;\n }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n};\nPointElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for (i = 0; i < samples - 2; i++) {\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const {x: pointAx, y: pointAy} = data[a];\n maxArea = area = -1;\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs(\n (pointAx - avgX) * (data[j].y - pointAy) -\n (pointAx - data[j].x) * (avgY - pointAy)\n );\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX,\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {value: data});\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset) => {\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const {iScale} = meta;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {start, count};\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false,\n },\n beforeElementsUpdate: (chart, args, options) => {\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex) => {\n const {_data, indexAxis} = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments) {\n let {start, end} = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments) {\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\nfunction _pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n if (!propagate) {\n return fill;\n }\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\nfunction _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\nfunction _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\nfunction _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const {scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\n\nclass simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const {chart, fill, line} = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for (let i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const {line, scale, axis} = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {above = color, below = color} = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis});\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {line, target, color: above, scale, property});\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {line, target, color: below, scale, property});\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const {line, target, property, color, scale} = cfg;\n const segments = _segments(line, target, property);\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, bounds) {\n const {top, bottom} = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config) {\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const {options, ctx} = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxWidth, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxHeight, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const {options: opts, columnSizes, lineWidths, ctx} = this;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {color: fontColor, padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor || fontColor;\n ctx.fillStyle = legendItem.fontColor || fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right)\n && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, this], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: 0,\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n\nclass Title extends Element {\n constructor(config) {\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const {top, left, bottom, right, options} = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {titleX, titleY, maxWidth, rotation};\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start(chart, _args, options) {\n createTitle(chart, options);\n },\n stop(chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate(chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold',\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst positioners = {\n average(items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let x = 0;\n let y = 0;\n let count = 0;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {width, height};\n}\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n constructor(config) {\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart || config._chart;\n this._chart = this.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const {callbacks} = options;\n const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n const title = callbacks.title.apply(this, [context]);\n const afterTitle = callbacks.afterTitle.apply(this, [context]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n }\n getBody(tooltipItems, options) {\n const {callbacks} = options;\n const bodyItems = [];\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));\n pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n }\n getFooter(tooltipItems, options) {\n const {callbacks} = options;\n const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n const footer = callbacks.footer.apply(this, [tooltipItems]);\n const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(scoped.labelColor.call(this, context));\n labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n labelTextColors.push(scoped.labelTextColor.call(this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {chart: this.chart, tooltip: this, replay});\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {caretSize, cornerRadius} = options;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColors = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.fillStyle = labelColors.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColors.borderWidth) ? Math.max(...Object.values(labelColors.borderWidth)) : (labelColors.borderWidth || 1);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.setLineDash(labelColors.borderDash || []);\n ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n const borderRadius = toTRBLCorners(labelColors.borderRadius);\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const {body} = this;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n : 0;\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({chart, options});\n }\n },\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent(chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold',\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {\n },\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold',\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart',\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: {\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0,\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n }\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false,\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({index, label: raw});\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {index, label} of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n ticks: {\n callback: CategoryScale.prototype.getLabelForValue\n }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for (; j < numSpaces; ++j) {\n ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const {beginAtZero} = this.options;\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = 1;\n if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n offset = Math.abs(max * 0.05);\n }\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n};\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n const endExp = Math.floor(log10(dataRange.max));\n const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n const ticks = [];\n let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n let exp = Math.floor(log10(tickVal));\n let significand = Math.floor(tickVal / Math.pow(10, exp));\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n do {\n ticks.push({value: tickVal, major: isMajor(tickVal)});\n ++significand;\n if (significand === 10) {\n significand = 1;\n ++exp;\n precision = exp >= 0 ? 1 : precision;\n }\n tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n } while (exp < endExp || (exp === endExp && significand < endSignificand));\n const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n ticks.push({value: lastTick, major: isMajor(tickVal)});\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(exp(min, -1));\n setMax(exp(max, +1));\n }\n }\n if (min <= 0) {\n setMin(exp(max, -1));\n }\n if (max <= 0) {\n setMax(exp(min, +1));\n }\n if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n setMin(exp(min, -1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined\n ? '0'\n : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min\n ? 0\n : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n};\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - (size / 2),\n end: pos + (size / 2)\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\nfunction fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(\n orig.l - limits.l,\n limits.r - orig.r,\n orig.t - limits.t,\n limits.b - orig.b\n );\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const extra = getTickBackdropHeight(opts) / 2;\n const outerDistance = scale.drawingArea;\n const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n for (let i = 0; i < valueCount; i++) {\n const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const size = labelSizes[i];\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n items.push({\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n });\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= (h / 2);\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n for (let i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n const {backdropColor} = optsAtIndex;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const {color, lineWidth} = gridLineOpts;\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(gridLineOpts.borderDash);\n ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n constructor(cfg) {\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const {min, max} = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels()\n .map((value, index) => {\n const label = callback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n })\n .filter((v, i) => this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n drawBackground() {\n const {backgroundColor, grid: {circular}} = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {angleLines, grid} = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const optsAtIndex = grid.setContext(this.getContext(index - 1));\n drawRadiusLine(this, optsAtIndex, offset, labelCount);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index) => {\n if (index === 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n tickFont.size + padding.height\n );\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback(label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n};\nRadialLinearScale.defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n};\n\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n return a - b;\n}\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, parser)\n : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n constructor(props) {\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map(tick => +tick.value));\n }\n }\n initOffsets(timestamps) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n const formatter = options.ticks.callback;\n return formatter ? callback(formatter, [label, index, ticks], this) : label;\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return (this._cache.data = this.normalize(timestamps));\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n major: {\n enabled: false\n }\n }\n};\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n constructor(props) {\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","const DEFAULT_LEGEND_COLOR = {\n plugins: {\n legend: {\n labels: {\n color: 'rgb(102,102,102)',\n },\n },\n },\n};\n\n// Default options\nconst DEFAULT_OPTIONS = {\n line: {\n options: {\n ...DEFAULT_LEGEND_COLOR,\n elements: {\n line: {\n backgroundColor: 'rgba(59, 112, 202, 0.0)',\n borderColor: 'rgb(59, 112, 202)',\n borderWidth: 2,\n tension: 0.0,\n },\n point: {\n borderColor: 'rgb(59, 112, 202)',\n backgroundColor: 'rgb(59, 112, 202)',\n },\n },\n responsive: true,\n legend: {\n display: true,\n },\n tooltips: {\n intersect: false,\n mode: 'index',\n },\n datasets: {\n borderColor: 'red',\n },\n scales: {\n x: {\n stacked: true,\n grid: {\n display: false,\n },\n ticks: {\n fontColor: 'rgba(0,0,0, 0.5)',\n },\n },\n y: {\n stacked: false,\n grid: {\n borderDash: [2],\n drawBorder: false,\n zeroLineColor: 'rgba(0,0,0,0)',\n zeroLineBorderDash: [2],\n zeroLineBorderDashOffset: [2],\n },\n ticks: {\n fontColor: 'rgba(0,0,0, 0.5)',\n },\n },\n },\n },\n },\n bar: {\n options: {\n ...DEFAULT_LEGEND_COLOR,\n backgroundColor: 'rgb(59, 112, 202)',\n borderWidth: 0,\n responsive: true,\n legend: {\n display: true,\n },\n tooltips: {\n intersect: false,\n mode: 'index',\n },\n scales: {\n x: {\n stacked: true,\n grid: {\n display: false,\n },\n ticks: {\n fontColor: 'rgba(0,0,0, 0.5)',\n },\n },\n y: {\n stacked: true,\n grid: {\n borderDash: [2],\n drawBorder: false,\n zeroLineColor: 'rgba(0,0,0,0)',\n zeroLineBorderDash: [2],\n zeroLineBorderDashOffset: [2],\n },\n ticks: {\n fontColor: 'rgba(0,0,0, 0.5)',\n },\n },\n },\n },\n },\n pie: {\n options: {\n ...DEFAULT_LEGEND_COLOR,\n elements: {\n arc: { backgroundColor: 'rgb(59, 112, 202)' },\n },\n responsive: true,\n legend: {\n display: true,\n },\n },\n },\n doughnut: {\n options: {\n ...DEFAULT_LEGEND_COLOR,\n elements: {\n arc: { backgroundColor: 'rgb(59, 112, 202)' },\n },\n responsive: true,\n legend: {\n display: true,\n },\n },\n },\n polarArea: {\n options: {\n ...DEFAULT_LEGEND_COLOR,\n elements: {\n arc: { backgroundColor: 'rgba(59, 112, 202, 0.5)' },\n },\n responsive: true,\n legend: {\n display: true,\n },\n },\n },\n radar: {\n options: {\n ...DEFAULT_LEGEND_COLOR,\n elements: {\n line: {\n backgroundColor: 'rgba(59, 112, 202, 0.5)',\n borderColor: 'rgb(59, 112, 202)',\n borderWidth: 2,\n },\n point: {\n borderColor: 'rgb(59, 112, 202)',\n backgroundColor: 'rgb(59, 112, 202)',\n },\n },\n responsive: true,\n legend: {\n display: true,\n },\n },\n },\n scatter: {\n options: {\n ...DEFAULT_LEGEND_COLOR,\n elements: {\n line: {\n backgroundColor: 'rgba(59, 112, 202, 0.5)',\n borderColor: 'rgb(59, 112, 202)',\n borderWidth: 2,\n tension: 0.0,\n },\n point: {\n borderColor: 'rgb(59, 112, 202)',\n backgroundColor: 'rgba(59, 112, 202, 0.5)',\n },\n },\n responsive: true,\n legend: {\n display: true,\n },\n tooltips: {\n intersect: false,\n mode: 'index',\n },\n datasets: {\n borderColor: 'red',\n },\n scales: {\n x: {\n stacked: true,\n grid: {\n display: false,\n },\n ticks: {\n fontColor: 'rgba(0,0,0, 0.5)',\n },\n },\n y: {\n stacked: false,\n grid: {\n borderDash: [2],\n drawBorder: false,\n zeroLineColor: 'rgba(0,0,0,0)',\n zeroLineBorderDash: [2],\n zeroLineBorderDashOffset: [2],\n },\n ticks: {\n fontColor: 'rgba(0,0,0, 0.5)',\n },\n },\n },\n },\n },\n bubble: {\n options: {\n ...DEFAULT_LEGEND_COLOR,\n elements: {\n point: {\n borderColor: 'rgb(59, 112, 202)',\n backgroundColor: 'rgba(59, 112, 202, 0.5)',\n },\n },\n responsive: true,\n legend: {\n display: true,\n },\n scales: {\n x: {\n grid: {\n display: false,\n },\n ticks: {\n fontColor: 'rgba(0,0,0, 0.5)',\n },\n },\n y: {\n grid: {\n borderDash: [2],\n drawBorder: false,\n zeroLineColor: 'rgba(0,0,0,0)',\n zeroLineBorderDash: [2],\n zeroLineBorderDashOffset: [2],\n },\n ticks: {\n fontColor: 'rgba(0,0,0, 0.5)',\n },\n },\n },\n },\n },\n};\n\nexport default DEFAULT_OPTIONS;\n","import {\n Chart as Chartjs,\n ArcElement,\n LineElement,\n BarElement,\n PointElement,\n BarController,\n BubbleController,\n DoughnutController,\n LineController,\n PieController,\n PolarAreaController,\n RadarController,\n ScatterController,\n CategoryScale,\n LinearScale,\n LogarithmicScale,\n RadialLinearScale,\n TimeScale,\n TimeSeriesScale,\n Decimation,\n Filler,\n Legend,\n Title,\n Tooltip,\n SubTitle,\n} from 'chart.js';\nimport merge from 'deepmerge';\nimport { element, typeCheckConfig } from '../../mdb/util/index';\nimport Data from '../../mdb/dom/data';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\nimport DEFAULT_OPTIONS from './chartsDefaults';\n\nChartjs.register(\n ArcElement,\n LineElement,\n BarElement,\n PointElement,\n BarController,\n BubbleController,\n DoughnutController,\n LineController,\n PieController,\n PolarAreaController,\n RadarController,\n ScatterController,\n CategoryScale,\n LinearScale,\n LogarithmicScale,\n RadialLinearScale,\n TimeScale,\n TimeSeriesScale,\n Decimation,\n Filler,\n Legend,\n Title,\n Tooltip,\n SubTitle\n);\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'chart';\nconst DATA_KEY = 'mdb.chart';\nconst CLASSNAME_CHARTS = 'chart';\n\nconst GENERATE_DATA = (options, type, defaultType) => {\n const mergeObjects = (target, source, options) => {\n const destination = target.slice();\n source.forEach((item, index) => {\n if (typeof destination[index] === 'undefined') {\n destination[index] = options.cloneUnlessOtherwiseSpecified(item, options);\n } else if (options.isMergeableObject(item)) {\n destination[index] = merge(target[index], item, options);\n } else if (target.indexOf(item) === -1) {\n destination.push(item);\n }\n });\n return destination;\n };\n return merge(defaultType[type], options, {\n arrayMerge: mergeObjects,\n });\n};\n\nconst DEFAULT_DARK_OPTIONS = {\n darkTicksColor: '#fff',\n darkLabelColor: '#fff',\n darkGridLinesColor: '#555',\n darkmodeOff: 'undefined',\n darkMode: null,\n darkBgColor: '#262626',\n darkBgColorLight: '#fff',\n options: null,\n};\n\nconst DARK_OPTIONS_TYPE = {\n darkTicksColor: 'string',\n darkLabelColor: 'string',\n darkGridLinesColor: 'string',\n darkmodeOff: '(string|null)',\n darkMode: '(string|null)',\n darkBgColor: 'string',\n darkBgColorLight: 'string',\n options: '(object|null)',\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n//\nclass Chart extends BaseComponent {\n constructor(element, data, options = {}, darkOptions = {}) {\n super(element);\n this._data = data;\n this._options = options;\n this._type = data.type;\n this._canvas = null;\n this._chart = null;\n this._darkOptions = this._getDarkConfig(darkOptions);\n this._darkModeClassContainer = document.querySelector('html');\n this._prevConfig = null;\n this._observer = null;\n\n if (this._element) {\n Manipulator.addClass(this._element, CLASSNAME_CHARTS);\n this._chartConstructor();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n if (this._element && this._darkOptions.darkmodeOff !== null) {\n // check mode on start\n let mode;\n\n switch (this._darkOptions.darkMode) {\n case 'dark':\n mode = 'dark';\n break;\n case 'light':\n mode = 'light';\n break;\n default:\n mode = this.systemColorMode;\n break;\n }\n\n this._handleMode(mode);\n // observe darkmode class container change\n this._observer = new MutationObserver(this._observerCallback.bind(this));\n this._observer.observe(this._darkModeClassContainer, {\n attributes: true,\n });\n }\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n get systemColorMode() {\n return (\n localStorage.theme ||\n Manipulator.getDataAttribute(this._darkModeClassContainer, 'theme') ||\n 'light'\n );\n }\n\n static get BarController() {\n return BarController;\n }\n\n static get BubbleController() {\n return BubbleController;\n }\n\n static get DoughnutController() {\n return DoughnutController;\n }\n\n static get LineController() {\n return LineController;\n }\n\n static get PieController() {\n return PieController;\n }\n\n static get PolarAreaController() {\n return PolarAreaController;\n }\n\n static get RadarController() {\n return RadarController;\n }\n\n static get ScatterController() {\n return ScatterController;\n }\n\n // Public\n dispose() {\n this._observer.disconnect();\n Data.removeData(this._element, DATA_KEY);\n\n this._chart.destroy();\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n update(data, config) {\n if (data) {\n this._data = { ...this._data, ...data };\n this._chart.data = this._data;\n }\n\n const configOptions = Object.prototype.hasOwnProperty.call(config, 'options')\n ? config\n : { options: { ...config } };\n\n this._options = merge(this._options, configOptions);\n\n this._chart.options = GENERATE_DATA(this._options, this._type, DEFAULT_OPTIONS).options;\n\n this._chart.update();\n }\n\n static register(MyType) {\n Chartjs.register(MyType);\n }\n\n setTheme(theme) {\n if ((theme !== 'dark' && theme !== 'light') || !this._data) {\n return;\n }\n this._handleMode(theme);\n }\n\n // Private\n _getDarkConfig(config) {\n let dataAttributes = {};\n const dataAttr = Manipulator.getDataAttributes(this._element);\n Object.keys(dataAttr).forEach(\n (key) => key.startsWith('dark') && (dataAttributes[key] = dataAttr[key])\n );\n\n dataAttributes = {\n ...DEFAULT_DARK_OPTIONS,\n ...dataAttributes,\n };\n\n const xyScale = {\n y: {\n ticks: {\n color: dataAttributes.darkTicksColor,\n },\n grid: {\n color: dataAttributes.darkGridLinesColor,\n },\n },\n x: {\n ticks: {\n color: dataAttributes.darkTicksColor,\n },\n grid: {\n color: dataAttributes.darkGridLinesColor,\n },\n },\n };\n\n const rScale = {\n r: {\n ticks: {\n color: dataAttributes.darkTicksColor,\n backdropColor: dataAttributes.darkBgColor,\n },\n grid: {\n color: dataAttributes.darkGridLinesColor,\n },\n pointLabels: {\n color: dataAttributes.darkTicksColor,\n },\n },\n };\n\n const radials = ['pie', 'doughnut', 'polarArea', 'radar'];\n\n let scales = {};\n\n if (!radials.includes(this._type)) {\n scales = xyScale;\n } else if (['polarArea', 'radar'].includes(this._type)) {\n scales = rScale;\n }\n\n const opt = {\n scales,\n plugins: {\n legend: {\n labels: {\n color: dataAttributes.darkLabelColor,\n },\n },\n },\n };\n\n // combine config\n config = {\n ...dataAttributes,\n options: {\n ...opt,\n },\n ...config,\n };\n\n typeCheckConfig(NAME, config, DARK_OPTIONS_TYPE);\n\n return config;\n }\n\n _chartConstructor() {\n if (this._data) {\n this._createCanvas();\n\n const options = GENERATE_DATA(this._options, this._type, DEFAULT_OPTIONS);\n\n this._chart = new Chartjs(this._canvas, {\n ...this._data,\n ...options,\n });\n }\n }\n\n _createCanvas() {\n if (this._canvas) return;\n if (this._element.nodeName === 'CANVAS') {\n this._canvas = this._element;\n } else {\n this._canvas = element('canvas');\n this._element.appendChild(this._canvas);\n }\n }\n\n _handleMode(systemColor) {\n if (systemColor === 'dark') {\n this._changeDatasetBorderColor();\n this.update(null, this._darkOptions.options);\n } else {\n this._changeDatasetBorderColor(false);\n this._prevConfig && this.update(null, this._prevConfig);\n }\n }\n\n _observerCallback(mutationList) {\n mutationList.forEach((mutation) => {\n if (mutation.type === 'attributes') {\n this._handleMode(this.systemColorMode);\n }\n });\n }\n\n _changeDatasetBorderColor(dark = true) {\n if (!this._data.data) {\n return;\n }\n\n [...this._data.data.datasets].forEach(\n (set) =>\n ['pie', 'doughnut', 'polarArea'].includes(this._type) &&\n (set.borderColor = dark\n ? this._darkOptions.darkBgColor\n : this._darkOptions.darkBgColorLight)\n );\n }\n\n static jQueryInterface(data, options, type) {\n return this.each(function () {\n let chartData = Data.getData(this, DATA_KEY);\n\n if (!chartData && /dispose/.test(data)) {\n return;\n }\n\n if (!chartData) {\n const chartOptions = options\n ? GENERATE_DATA(options, type, DEFAULT_OPTIONS)\n : DEFAULT_OPTIONS[type];\n\n chartData = new Chart(this, data, chartOptions);\n }\n\n if (typeof data === 'string') {\n if (typeof chartData[data] === 'undefined') {\n throw new TypeError(`No method named \"${data}\"`);\n }\n\n chartData[data](options, type);\n }\n });\n }\n\n static getInstance(element) {\n return Data.getData(element, DATA_KEY);\n }\n\n static getOrCreateInstance(element, config = {}) {\n return (\n this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n );\n }\n}\n\nexport default Chart;\n","import { element, typeCheckConfig, isRTL } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'lightbox';\nconst DATA_KEY = 'mdb.lightbox';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASSNAME_LIGHTBOX = 'lightbox';\nconst CLASSNAME_GALLERY = 'lightbox-gallery';\n\nconst CLASSNAME_TOOLBAR = 'lightbox-gallery-toolbar';\nconst CLASSNAME_GALLERY_CONTENT = 'lightbox-gallery-content';\nconst CLASSNAME_COUNTER = 'lightbox-gallery-counter';\nconst CLASSNAME_FULLSCREEN_BTN = 'lightbox-gallery-fullscreen-btn';\nconst CLASSNAME_ZOOM_BTN = 'lightbox-gallery-zoom-btn';\nconst CLASSNAME_LEFT_TOOLS = 'lightbox-gallery-left-tools';\nconst CLASSNAME_RIGHT_TOOLS = 'lightbox-gallery-right-tools';\nconst CLASSNAME_CLOSE_BTN = 'lightbox-gallery-close-btn';\nconst CLASSNAME_LOADER = 'lightbox-gallery-loader';\nconst CLASSNAME_ARROW_LEFT = 'lightbox-gallery-arrow-left';\nconst CLASSNAME_ARROW_RIGHT = 'lightbox-gallery-arrow-right';\nconst CLASSNAME_CAPTION_WRAPPER = 'lightbox-gallery-caption-wrapper';\nconst CLASSNAME_CAPTION = 'lightbox-gallery-caption';\nconst CLASSNAME_IMG = 'lightbox-gallery-image';\n\nconst SELECTOR_TOGGLE = `[data-mdb-${NAME}-init] img:not(.lightbox-disabled)`;\n\nconst OPTIONS_TYPE = {\n container: 'string',\n zoomLevel: '(number|string)',\n};\n\nconst DEFAULT_OPTIONS = {\n container: 'body',\n zoomLevel: 1,\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Lightbox extends BaseComponent {\n constructor(element, options = {}) {\n super(element);\n\n this._options = options;\n this._getContainer();\n\n this._id = `lightbox-${Math.random().toString(36).substr(2, 9)}`;\n this._activeImg = 0;\n this._images = [];\n this._zoom = 1;\n this._gallery = null;\n this._galleryToolbar = null;\n this._galleryContent = null;\n this._loader = null;\n this._imgCounter = null;\n this._animating = false;\n this._fullscreen = false;\n this._zoomBtn = null;\n this._fullscreenBtn = null;\n this._toolsToggleTimer = 0;\n this._mousedown = false;\n this._mousedownPositionX = 0;\n this._mousedownPositionY = 0;\n this._originalPositionX = 0;\n this._originalPositionY = 0;\n this._positionX = 0;\n this._positionY = 0;\n this._zoomTimer = 0;\n this._tapCounter = 0;\n this._tapTime = 0;\n this._rightArrow = null;\n this._leftArrowWrapper = null;\n this._rightArrowWrapper = null;\n this._initiated = false;\n this._multitouch = false;\n this._touchZoomPosition = [];\n\n if (this._element) {\n this.init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n get activeImg() {\n return this._activeImg;\n }\n\n get currentImg() {\n return SelectorEngine.findOne('.active', this._galleryContent);\n }\n\n get options() {\n const config = {\n ...DEFAULT_OPTIONS,\n ...Manipulator.getDataAttributes(this._element),\n ...this._options,\n };\n\n typeCheckConfig(NAME, config, OPTIONS_TYPE);\n\n return config;\n }\n\n // Public\n init() {\n if (this._initiated) {\n return;\n }\n\n this._appendTemplate();\n this._initiated = true;\n }\n\n open(target = 0) {\n this._getImages();\n this._setActiveImg(target);\n this._sortImages();\n this._triggerEvents('open', 'opened');\n\n this._loadImages().then((images) => {\n this._resizeImages(images);\n this._toggleTemplate();\n this._addEvents();\n this._focusFullscreenBtn();\n });\n }\n\n close() {\n this.reset();\n this._removeEvents();\n this._toggleTemplate();\n this._triggerEvents('close', 'closed');\n }\n\n slide(target = 'right') {\n if (this._animating === true || this._images.length <= 1) return;\n this._triggerEvents('slide', 'slid');\n\n this._beforeSlideEvents();\n if (target === 'right') this._slideHorizontally(target);\n if (target === 'left') this._slideHorizontally(target);\n if (target === 'first') this._slideToTarget(target);\n if (target === 'last') this._slideToTarget(target);\n this._afterSlideEvents();\n }\n\n zoomIn() {\n if (this._zoom >= 3) return;\n this._triggerEvents('zoomIn', 'zoomedIn');\n this._zoom += parseFloat(this.options.zoomLevel);\n Manipulator.style(this.currentImg.parentNode, { transform: `scale(${this._zoom})` });\n\n this._updateZoomBtn();\n }\n\n zoomOut() {\n if (this._zoom <= 1) return;\n this._triggerEvents('zoomOut', 'zoomedOut');\n this._zoom -= parseFloat(this.options.zoomLevel);\n Manipulator.style(this.currentImg.parentNode, { transform: `scale(${this._zoom})` });\n\n this._updateZoomBtn();\n this._updateImgPosition();\n }\n\n toggleFullscreen() {\n if (this._fullscreen === false) {\n Manipulator.addClass(this._fullscreenBtn, 'active');\n if (this._gallery.requestFullscreen) {\n this._gallery.requestFullscreen();\n }\n\n this._fullscreen = true;\n } else {\n Manipulator.removeClass(this._fullscreenBtn, 'active');\n if (document.exitFullscreen) {\n document.exitFullscreen();\n }\n\n this._fullscreen = false;\n }\n }\n\n reset() {\n this._restoreDefaultFullscreen();\n this._restoreDefaultPosition();\n this._restoreDefaultZoom();\n clearTimeout(this._toolsToggleTimer);\n clearTimeout(this._doubleTapTimer);\n }\n\n dispose() {\n EventHandler.off(document, EVENT_CLICK_DATA_API, SELECTOR_TOGGLE, this.toggle);\n if (this._galleryContent) this._removeEvents();\n if (this._gallery) this._gallery.remove();\n\n Data.removeData(this._element, DATA_KEY);\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n this._element = null;\n }\n\n // Private\n _getImages() {\n const allImages = SelectorEngine.find('img', this._element);\n const lightboxImages = allImages.filter((image) => {\n return !image.classList.contains('lightbox-disabled');\n });\n this._images = lightboxImages;\n }\n\n _getContainer() {\n this._container = SelectorEngine.findOne(this.options.container);\n }\n\n _setActiveImg(target) {\n this._activeImg = typeof target === 'number' ? target : this._images.indexOf(target.target);\n }\n\n _appendTemplate() {\n this._gallery = element('div');\n Manipulator.addClass(this._gallery, CLASSNAME_GALLERY);\n this._element.dataset.id = this._id;\n this._gallery.id = this._id;\n\n this._appendLoader();\n this._appendToolbar();\n this._appendContent();\n this._appendArrows();\n this._appendCaption();\n this._container.append(this._gallery);\n }\n\n _appendToolbar() {\n this._galleryToolbar = element('div');\n this._imgCounter = element('p');\n this._fullscreenBtn = element('button');\n this._zoomBtn = element('button');\n const leftTools = element('div');\n const rightTools = element('div');\n const closeBtn = element('button');\n\n Manipulator.addClass(this._galleryToolbar, CLASSNAME_TOOLBAR);\n Manipulator.addClass(this._imgCounter, CLASSNAME_COUNTER);\n Manipulator.addClass(this._fullscreenBtn, CLASSNAME_FULLSCREEN_BTN);\n Manipulator.addClass(this._zoomBtn, CLASSNAME_ZOOM_BTN);\n Manipulator.addClass(leftTools, CLASSNAME_LEFT_TOOLS);\n Manipulator.addClass(rightTools, CLASSNAME_RIGHT_TOOLS);\n Manipulator.addClass(closeBtn, CLASSNAME_CLOSE_BTN);\n\n this._fullscreenBtn.setAttribute('aria-label', 'Toggle fullscreen');\n this._zoomBtn.setAttribute('aria-label', 'Zoom in');\n closeBtn.setAttribute('aria-label', 'Close');\n\n EventHandler.on(this._fullscreenBtn, EVENT_CLICK_DATA_API, () => this.toggleFullscreen());\n EventHandler.on(this._zoomBtn, EVENT_CLICK_DATA_API, () => this._toggleZoom());\n EventHandler.on(closeBtn, EVENT_CLICK_DATA_API, () => this.close());\n\n leftTools.append(this._imgCounter);\n rightTools.append(this._fullscreenBtn);\n rightTools.append(this._zoomBtn);\n rightTools.append(closeBtn);\n\n this._galleryToolbar.append(leftTools);\n this._galleryToolbar.append(rightTools);\n this._gallery.append(this._galleryToolbar);\n }\n\n _appendContent() {\n this._galleryContent = element('div');\n Manipulator.addClass(this._galleryContent, CLASSNAME_GALLERY_CONTENT);\n this._gallery.append(this._galleryContent);\n }\n\n _appendLoader() {\n this._loader = element('div');\n const spinner = element('div');\n const spinnerContent = element('span');\n\n Manipulator.addClass(this._loader, CLASSNAME_LOADER);\n Manipulator.addClass(spinner, 'spinner-grow');\n Manipulator.addClass(spinner, 'text-light');\n Manipulator.addClass(spinnerContent, 'sr-only');\n\n spinner.setAttribute('role', 'status');\n spinnerContent.innerHTML = 'Loading...';\n\n spinner.append(spinnerContent);\n this._loader.append(spinner);\n this._gallery.append(this._loader);\n }\n\n _appendArrows() {\n this._leftArrowWrapper = element('div');\n Manipulator.addClass(this._leftArrowWrapper, CLASSNAME_ARROW_LEFT);\n const leftArrow = element('button');\n leftArrow.setAttribute('aria-label', 'Previous');\n EventHandler.on(leftArrow, EVENT_CLICK_DATA_API, () => this.slide('left'));\n this._leftArrowWrapper.append(leftArrow);\n\n this._rightArrowWrapper = element('div');\n Manipulator.addClass(this._rightArrowWrapper, CLASSNAME_ARROW_RIGHT);\n this._rightArrow = element('button');\n this._rightArrow.setAttribute('aria-label', 'Next');\n EventHandler.on(this._rightArrow, EVENT_CLICK_DATA_API, () => this.slide());\n this._rightArrowWrapper.append(this._rightArrow);\n\n this._getImages();\n if (this._images.length <= 1) return;\n this._gallery.append(this._leftArrowWrapper);\n this._gallery.append(this._rightArrowWrapper);\n }\n\n _appendCaption() {\n const captionWrapper = element('div');\n const caption = element('p');\n\n Manipulator.addClass(captionWrapper, CLASSNAME_CAPTION_WRAPPER);\n Manipulator.addClass(caption, CLASSNAME_CAPTION);\n\n captionWrapper.append(caption);\n this._gallery.append(captionWrapper);\n }\n\n _sortImages() {\n for (let i = 0; i < this._activeImg; i++) {\n this._images.push(this._images.shift());\n }\n }\n\n async _loadImages() {\n const promiseArray = [];\n const imageArray = [];\n\n this._galleryContent.innerHTML = '';\n let positionLeft = 0;\n\n this._images.forEach((img, key) => {\n promiseArray.push(\n new Promise((resolve) => {\n const newImg = new Image();\n const newImgWrapper = element('div');\n Manipulator.addClass(newImgWrapper, CLASSNAME_IMG);\n\n this._addImgStyles(newImg, newImgWrapper, positionLeft, key, img);\n\n newImgWrapper.append(newImg);\n this._galleryContent.append(newImgWrapper);\n\n newImg.onload = resolve;\n newImg.src = img.dataset.mdbImg || img.src;\n imageArray.push(newImg);\n\n positionLeft += 100;\n })\n );\n });\n\n await Promise.all(promiseArray);\n return imageArray;\n }\n\n _addImgStyles(newImg, newImgWrapper, positionLeft, key, img) {\n newImg.alt = img.alt;\n newImg.draggable = false;\n\n Manipulator.style(newImgWrapper, { position: 'absolute', left: `${positionLeft}%`, top: 0 });\n if (img.dataset.mdbCaption || img.dataset.mdbCaption === '') {\n newImg.dataset.caption = img.dataset.mdbCaption;\n }\n\n if (positionLeft === 0) {\n if (newImg.width < newImg.height) Manipulator.addClass(newImg, 'vertical');\n Manipulator.style(newImgWrapper, { opacity: 1 });\n Manipulator.addClass(newImg, 'active');\n } else {\n Manipulator.removeClass(newImg, 'active');\n }\n\n if (key === this._images.length - 1 && this._images.length > 1) {\n Manipulator.style(newImgWrapper, { left: '-100%' });\n }\n }\n\n _resizeImages(images) {\n images.forEach((img) => {\n this._calculateImgSize(img);\n });\n }\n\n _calculateImgSize(img) {\n if (img.width >= img.height) {\n img.style.width = '100%';\n img.style.maxWidth = '100%';\n img.style.height = 'auto';\n img.style.top = `${(img.parentNode.offsetHeight - img.height) / 2}px`;\n img.style.left = 0;\n } else {\n img.style.height = '100%';\n img.style.maxHeight = '100%';\n img.style.width = 'auto';\n img.style.left = `${(img.parentNode.offsetWidth - img.width) / 2}px`;\n img.style.top = 0;\n }\n\n if (img.width >= img.parentNode.offsetWidth) {\n img.style.width = `${img.parentNode.offsetWidth}px`;\n img.style.height = 'auto';\n img.style.left = 0;\n img.style.top = `${(img.parentNode.offsetHeight - img.height) / 2}px`;\n }\n if (img.height >= img.parentNode.offsetHeight) {\n img.style.height = `${img.parentNode.offsetHeight}px`;\n img.style.width = 'auto';\n img.style.top = 0;\n img.style.left = `${(img.parentNode.offsetWidth - img.width) / 2}px`;\n }\n\n this._positionX = parseFloat(img.style.left) || 0;\n this._positionY = parseFloat(img.style.top) || 0;\n }\n\n _onResize() {\n this._images = SelectorEngine.find('img', this._galleryContent);\n this._images.forEach((img) => {\n this._calculateImgSize(img);\n });\n }\n\n _onFullscreenChange() {\n const isFullscreenEnabled =\n document.webkitIsFullScreen || document.mozFullScreen || document.msFullscreenElement;\n if (isFullscreenEnabled === undefined) {\n this._fullscreen = false;\n Manipulator.removeClass(this._fullscreenBtn, 'active');\n }\n }\n\n _beforeSlideEvents() {\n this._animationStart();\n this._restoreDefaultZoom();\n this._restoreDefaultPosition();\n this._resetDoubleTap();\n }\n\n _slideHorizontally(direction) {\n this._images = SelectorEngine.find('img', this._galleryContent);\n this._images.forEach((img) => {\n let newPositionLeft;\n\n if (direction === 'right') {\n newPositionLeft = parseInt(img.parentNode.style.left, 10) - 100;\n if (newPositionLeft < -100) newPositionLeft = (this._images.length - 2) * 100;\n } else {\n newPositionLeft = parseInt(img.parentNode.style.left, 10) + 100;\n if (newPositionLeft === (this._images.length - 1) * 100) newPositionLeft = -100;\n }\n\n this._slideImg(img, newPositionLeft);\n });\n\n this._updateActiveImg(direction);\n }\n\n _slideImg(img, position) {\n if (position === 0) {\n Manipulator.addClass(img, 'active');\n Manipulator.style(img.parentNode, { opacity: 1, transform: 'scale(1)' });\n } else {\n Manipulator.removeClass(img, 'active');\n Manipulator.style(img.parentNode, { opacity: 0, transform: 'scale(0.25)' });\n }\n img.parentNode.style.left = `${position}%`;\n }\n\n _slideToTarget(target) {\n if (target === 'first' && this._activeImg === 0) return;\n if (target === 'last' && this._activeImg === this._images.length - 1) return;\n\n this.reset();\n this._removeEvents();\n this._showLoader();\n\n this._getImages();\n this._activeImg = target === 'first' ? 0 : this._images.length - 1;\n this._sortImages();\n\n Manipulator.style(this.currentImg.parentNode, { transform: 'scale(0.25)', opacity: 0 });\n\n setTimeout(() => {\n this._loadImages().then((images) => {\n this._resizeImages(images);\n this._addEvents();\n this._updateCaption();\n this._hideLoader();\n setTimeout(() => {\n Manipulator.style(this.currentImg.parentNode, { transform: 'scale(1)', opacity: 1 });\n }, 10);\n });\n }, 400);\n }\n\n _updateActiveImg(direction) {\n if (direction === 'right') {\n if (this._activeImg === this._images.length - 1) {\n this._activeImg = 0;\n } else {\n this._activeImg++;\n }\n }\n\n if (direction === 'left') {\n if (this._activeImg === 0) {\n this._activeImg = this._images.length - 1;\n } else {\n this._activeImg--;\n }\n }\n }\n\n _afterSlideEvents() {\n this._updateCounter();\n this._updateCaption();\n }\n\n _updateCounter() {\n if (this._images.length <= 1) return;\n setTimeout(() => {\n this._imgCounter.innerHTML = `${this._activeImg + 1} / ${this._images.length}`;\n }, 200);\n }\n\n _updateCaption() {\n setTimeout(() => {\n let caption = this.currentImg.alt;\n if (this.currentImg.dataset.caption || this.currentImg.dataset.caption === '') {\n caption = this.currentImg.dataset.caption;\n }\n SelectorEngine.findOne(`.${CLASSNAME_CAPTION}`, this._gallery).innerHTML = caption;\n }, 200);\n }\n\n _toggleTemplate() {\n if (this._gallery.style.visibility === 'visible') {\n Manipulator.style(this.currentImg.parentNode, { transform: 'scale(0.25)' });\n\n setTimeout(() => {\n this._hideGallery();\n this._enableScroll();\n this._showLoader();\n }, 100);\n } else {\n this._showGallery();\n this._disableScroll();\n this._updateCounter();\n this._updateCaption();\n this._setToolsToggleTimout();\n this._hideLoader();\n }\n }\n\n _showLoader() {\n Manipulator.style(this._loader, { opacity: 1 });\n }\n\n _hideLoader() {\n Manipulator.style(this._loader, { opacity: 0 });\n }\n\n _hideGallery() {\n Manipulator.style(this._gallery, { opacity: 0, pointerEvents: 'none', visibility: 'hidden' });\n }\n\n _showGallery() {\n Manipulator.style(this._gallery, {\n opacity: 1,\n pointerEvents: 'initial',\n visibility: 'visible',\n });\n setTimeout(() => {\n Manipulator.style(this.currentImg.parentNode, { transform: 'scale(1)' });\n }, 50);\n }\n\n _toggleZoom() {\n if (this._zoom !== 1) {\n this._restoreDefaultZoom();\n } else {\n this.zoomIn();\n }\n }\n\n _updateZoomBtn() {\n if (this._zoom > 1) {\n Manipulator.addClass(this._zoomBtn, 'active');\n this._zoomBtn.setAttribute('aria-label', 'Zoom out');\n } else {\n Manipulator.removeClass(this._zoomBtn, 'active');\n this._zoomBtn.setAttribute('aria-label', 'Zoom in');\n }\n }\n\n _updateImgPosition() {\n if (this._zoom === 1) {\n this._restoreDefaultPosition();\n }\n }\n\n _addEvents() {\n const images = SelectorEngine.find('img', this._galleryContent);\n\n this._onWindowTouchmove = this._onWindowTouchmove.bind(this);\n this._onWindowTouchstart = this._onWindowTouchstart.bind(this);\n this._onImgMousedown = this._onMousedown.bind(this);\n this._onImgMousemove = this._onMousemove.bind(this);\n this._onImgWheel = this._onZoom.bind(this);\n this._onImgMouseup = this._onMouseup.bind(this);\n this._onImgTouchend = this._onTouchend.bind(this);\n this._onImgDoubleClick = this._onDoubleClick.bind(this);\n this._onWindowResize = this._onResize.bind(this);\n this._onWindowFullscreenChange = this._onFullscreenChange.bind(this);\n this._onAnyImgAction = this._resetToolsToggler.bind(this);\n this._onGalleryClick = this._onBackdropClick.bind(this);\n this._onKeyupEvent = this._onKeyup.bind(this);\n this._onRightArrowKeydownEvent = this._onRightArrowKeydown.bind(this);\n this._onFullscreenBtnKeydownEvent = this._onFullscreenBtnKeydown.bind(this);\n\n images.forEach((img) => {\n EventHandler.on(img, 'mousedown', this._onImgMousedown, { passive: true });\n EventHandler.on(img, 'touchstart', this._onImgMousedown, { passive: true });\n EventHandler.on(img, 'mousemove', this._onImgMousemove, { passive: true });\n EventHandler.on(img, 'touchmove', this._onImgMousemove, { passive: true });\n EventHandler.on(img, 'wheel', this._onImgWheel, { passive: true });\n EventHandler.on(img, 'dblclick', this._onImgDoubleClick, { passive: true });\n });\n\n document.addEventListener('touchmove', this._onWindowTouchmove, { passive: false });\n EventHandler.on(window, 'touchstart', this._onWindowTouchstart);\n EventHandler.on(window, 'mouseup', this._onImgMouseup);\n EventHandler.on(window, 'touchend', this._onImgTouchend);\n EventHandler.on(window, 'resize', this._onWindowResize);\n EventHandler.on(window, 'orientationchange', this._onWindowResize);\n EventHandler.on(window, 'keyup', this._onKeyupEvent);\n EventHandler.on(window, 'fullscreenchange', this._onWindowFullscreenChange);\n EventHandler.on(this._gallery, 'mousemove', this._onAnyImgAction);\n EventHandler.on(this._gallery, 'click', this._onGalleryClick);\n EventHandler.on(this._rightArrow, 'keydown', this._onRightArrowKeydownEvent);\n EventHandler.on(this._fullscreenBtn, 'keydown', this._onFullscreenBtnKeydownEvent);\n }\n\n _removeEvents() {\n const images = SelectorEngine.find('img', this._galleryContent);\n\n images.forEach((img) => {\n EventHandler.off(img, 'mousedown', this._onImgMousedown);\n EventHandler.off(img, 'touchstart', this._onImgMousedown);\n EventHandler.off(img, 'mousemove', this._onImgMousemove);\n EventHandler.off(img, 'touchmove', this._onImgMousemove);\n EventHandler.off(img, 'wheel', this._onImgWheel);\n EventHandler.off(img, 'dblclick', this._onImgDoubleClick);\n });\n\n document.removeEventListener('touchmove', this._onWindowTouchmove, { passive: false });\n EventHandler.off(window, 'touchstart', this._onWindowTouchstart);\n EventHandler.off(window, 'mouseup', this._onImgMouseup);\n EventHandler.off(window, 'touchend', this._onImgTouchend);\n EventHandler.off(window, 'resize', this._onWindowResize);\n EventHandler.off(window, 'orientationchange', this._onWindowResize);\n EventHandler.off(window, 'keyup', this._onKeyupEvent);\n EventHandler.off(window, 'fullscreenchange', this._onWindowFullscreenChange);\n EventHandler.off(this._gallery, 'mousemove', this._onAnyImgAction);\n EventHandler.off(this._gallery, 'click', this._onGalleryClick);\n EventHandler.off(this._rightArrow, 'keydown', this._onRightArrowKeydownEvent);\n EventHandler.off(this._fullscreenBtn, 'keydown', this._onFullscreenBtnKeydownEvent);\n }\n\n _onMousedown(e) {\n const touch = e.touches;\n const x = touch ? touch[0].clientX : e.clientX;\n const y = touch ? touch[0].clientY : e.clientY;\n\n this._originalPositionX = parseFloat(this.currentImg.style.left) || 0;\n this._originalPositionY = parseFloat(this.currentImg.style.top) || 0;\n this._positionX = this._originalPositionX;\n this._positionY = this._originalPositionY;\n this._mousedownPositionX = x * (1 / this._zoom) - this._positionX;\n this._mousedownPositionY = y * (1 / this._zoom) - this._positionY;\n this._mousedown = true;\n\n if (e.type === 'touchstart') {\n if (e.touches.length > 1) {\n this._multitouch = true;\n this._touchZoomPosition = e.touches;\n }\n }\n }\n\n _onMousemove(e) {\n if (!this._mousedown) return;\n\n const touch = e.touches;\n const x = touch ? touch[0].clientX : e.clientX;\n const y = touch ? touch[0].clientY : e.clientY;\n\n if (touch) this._resetToolsToggler();\n\n if (!this._multitouch) {\n if (this._zoom !== 1) {\n this._positionX = x * (1 / this._zoom) - this._mousedownPositionX;\n this._positionY = y * (1 / this._zoom) - this._mousedownPositionY;\n Manipulator.style(this.currentImg, {\n left: `${this._positionX}px`,\n top: `${this._positionY}px`,\n });\n } else {\n if (this._images.length <= 1) return;\n this._positionX = x * (1 / this._zoom) - this._mousedownPositionX;\n Manipulator.style(this.currentImg, { left: `${this._positionX}px` });\n }\n }\n }\n\n _onMouseup(e) {\n this._mousedown = false;\n this._moveImg(e.target);\n }\n\n _onTouchend(e) {\n this._mousedown = false;\n\n if (this._multitouch) {\n if (e.targetTouches.length === 0) {\n this._multitouch = false;\n this._touchZoomPosition = [];\n }\n } else if (!this._multitouch) {\n this._checkDoubleTap(e);\n this._moveImg(e.target);\n }\n }\n\n _calculateTouchZoom(e) {\n const initialDistance = Math.hypot(\n this._touchZoomPosition[1].pageX - this._touchZoomPosition[0].pageX,\n this._touchZoomPosition[1].pageY - this._touchZoomPosition[0].pageY\n );\n const finalDistance = Math.hypot(\n e.touches[1].pageX - e.touches[0].pageX,\n e.touches[1].pageY - e.touches[0].pageY\n );\n const distanceChange = Math.abs(initialDistance - finalDistance);\n const screenWidth = e.view.screen.width;\n if (distanceChange > screenWidth * 0.03) {\n if (initialDistance <= finalDistance) {\n this.zoomIn();\n } else {\n this.zoomOut();\n }\n this._touchZoomPosition = e.touches;\n }\n }\n\n _onWindowTouchstart(e) {\n if (e.touches.length > 1) {\n this._multitouch = true;\n this._touchZoomPosition = e.touches;\n }\n }\n\n _onWindowTouchmove(e) {\n e.preventDefault();\n if (e.type === 'touchmove' && e.targetTouches.length > 1) {\n this._calculateTouchZoom(e);\n }\n }\n\n _onRightArrowKeydown(e) {\n switch (e.keyCode) {\n case 9:\n if (e.shiftKey) break;\n e.preventDefault();\n this._focusFullscreenBtn();\n break;\n default:\n break;\n }\n }\n\n _onFullscreenBtnKeydown(e) {\n switch (e.keyCode) {\n case 9:\n if (!e.shiftKey) break;\n e.preventDefault();\n this._focusRightArrow();\n break;\n default:\n break;\n }\n }\n\n _onKeyup(e) {\n this._resetToolsToggler();\n switch (e.keyCode) {\n case 39:\n if (isRTL) {\n this.slide('left');\n } else {\n this.slide();\n }\n\n break;\n case 37:\n if (isRTL) {\n this.slide();\n } else {\n this.slide('left');\n }\n\n break;\n case 27:\n this.close();\n break;\n case 36:\n this.slide('first');\n break;\n case 35:\n this.slide('last');\n break;\n case 38:\n this.zoomIn();\n break;\n case 40:\n this.zoomOut();\n break;\n default:\n break;\n }\n }\n\n _focusFullscreenBtn() {\n setTimeout(() => {\n this._fullscreenBtn.focus();\n }, 100);\n }\n\n _focusRightArrow() {\n this._rightArrow.focus();\n }\n\n _moveImg(target) {\n if (this._multitouch) return;\n if (this._zoom !== 1 || target !== this.currentImg || this._images.length <= 1) return;\n\n const movement = this._positionX - this._originalPositionX;\n if (movement > 0) {\n if (isRTL) {\n this.slide();\n } else {\n this.slide('left');\n }\n } else if (movement < 0) {\n if (isRTL) {\n this.slide('left');\n } else {\n this.slide();\n }\n }\n }\n\n _checkDoubleTap(e) {\n clearTimeout(this._doubleTapTimer);\n const currentTime = new Date().getTime();\n const tapLength = currentTime - this._tapTime;\n\n if (this._tapCounter > 0 && tapLength < 500) {\n this._onDoubleClick(e);\n this._doubleTapTimer = setTimeout(() => {\n this._tapTime = new Date().getTime();\n this._tapCounter = 0;\n }, 300);\n } else {\n this._tapCounter++;\n this._tapTime = new Date().getTime();\n }\n }\n\n _resetDoubleTap() {\n this._tapTime = 0;\n this._tapCounter = 0;\n clearTimeout(this._doubleTapTimer);\n }\n\n _onDoubleClick(e) {\n if (this._multitouch) return;\n\n if (!e.touches) this._setNewPositionOnZoomIn(e);\n if (this._zoom !== 1) {\n this._restoreDefaultZoom();\n } else {\n this.zoomIn();\n }\n }\n\n _onZoom(e) {\n if (e.deltaY > 0) {\n this.zoomOut();\n } else {\n if (this._zoom >= 3) return;\n this._setNewPositionOnZoomIn(e);\n this.zoomIn();\n }\n }\n\n _onBackdropClick(e) {\n this._resetToolsToggler();\n\n if (e.target.tagName !== 'DIV') return;\n this.close();\n }\n\n _setNewPositionOnZoomIn(e) {\n clearTimeout(this._zoomTimer);\n this._positionX = window.innerWidth / 2 - e.offsetX - 50;\n this._positionY = window.innerHeight / 2 - e.offsetY - 50;\n this.currentImg.style.transition = 'all 0.5s ease-out';\n this.currentImg.style.left = `${this._positionX}px`;\n this.currentImg.style.top = `${this._positionY}px`;\n\n this._zoomTimer = setTimeout(() => {\n this.currentImg.style.transition = 'none';\n }, 500);\n }\n\n _resetToolsToggler() {\n this._showTools();\n clearTimeout(this._toolsToggleTimer);\n this._setToolsToggleTimout();\n }\n\n _setToolsToggleTimout() {\n this._toolsToggleTimer = setTimeout(() => {\n this._hideTools();\n clearTimeout(this._toolsToggleTimer);\n }, 4000);\n }\n\n _hideTools() {\n Manipulator.style(this._galleryToolbar, { opacity: 0 });\n Manipulator.style(this._leftArrowWrapper, { opacity: 0 });\n Manipulator.style(this._rightArrowWrapper, { opacity: 0 });\n }\n\n _showTools() {\n Manipulator.style(this._galleryToolbar, { opacity: 1 });\n Manipulator.style(this._leftArrowWrapper, { opacity: 1 });\n Manipulator.style(this._rightArrowWrapper, { opacity: 1 });\n }\n\n _disableScroll() {\n Manipulator.addClass(document.body, 'disabled-scroll');\n\n if (document.documentElement.scrollHeight > document.documentElement.clientHeight) {\n Manipulator.addClass(document.body, 'replace-scrollbar');\n }\n }\n\n _enableScroll() {\n setTimeout(() => {\n Manipulator.removeClass(document.body, 'disabled-scroll');\n Manipulator.removeClass(document.body, 'replace-scrollbar');\n }, 300);\n }\n\n _animationStart() {\n this._animating = true;\n setTimeout(() => {\n this._animating = false;\n }, 400);\n }\n\n _restoreDefaultZoom() {\n if (this._zoom !== 1) {\n this._zoom = 1;\n Manipulator.style(this.currentImg.parentNode, { transform: `scale(${this._zoom})` });\n\n this._updateZoomBtn();\n this._updateImgPosition();\n }\n }\n\n _restoreDefaultFullscreen() {\n if (this._fullscreen) this.toggleFullscreen();\n }\n\n _restoreDefaultPosition() {\n clearTimeout(this._zoomTimer);\n const currentImg = this.currentImg;\n\n Manipulator.style(this.currentImg.parentNode, { left: 0, top: 0 });\n Manipulator.style(this.currentImg, { transition: 'all 0.5s ease-out', left: 0, top: 0 });\n\n this._calculateImgSize(currentImg);\n\n setTimeout(() => {\n Manipulator.style(this.currentImg, { transition: 'none' });\n }, 500);\n }\n\n async _triggerEvents(startEvent, completeEvent) {\n EventHandler.trigger(this._element, `${startEvent}.mdb.lightbox`);\n\n if (completeEvent) {\n await setTimeout(() => {\n EventHandler.trigger(this._element, `${completeEvent}.mdb.lightbox`);\n }, 505);\n }\n }\n\n static toggle() {\n return function (event) {\n const lightbox = SelectorEngine.closest(event.target, `.${CLASSNAME_LIGHTBOX}`);\n const instance = Lightbox.getInstance(lightbox) || new Lightbox(lightbox);\n instance.open(event);\n };\n }\n\n static jQueryInterface(config, options) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n if (!data && /dispose/.test(config)) {\n return;\n }\n if (!data) {\n data = new Lightbox(this, _config);\n }\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](options);\n }\n });\n }\n}\n\nexport default Lightbox;\n","import { typeCheckConfig } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport Tooltip from '../free/tooltip';\nimport Manipulator from '../mdb/dom/manipulator';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'rating';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\n\nconst DefaultType = {\n tooltip: 'string',\n value: '(string|number)',\n readonly: 'boolean',\n after: 'string',\n before: 'string',\n dynamic: 'boolean',\n};\n\nconst Default = {\n tooltip: 'top',\n value: '',\n readonly: false,\n after: '',\n before: '',\n dynamic: false,\n};\n\nconst EVENT_SELECT = `scoreSelect${EVENT_KEY}`;\nconst EVENT_HOVER = `scoreHover${EVENT_KEY}`;\nconst EVENT_KEYUP = `keyup${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`;\nconst EVENT_MOUSEDOWN = `mousedown${EVENT_KEY}`;\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Rating extends BaseComponent {\n constructor(element, options) {\n super(element);\n\n this._icons = SelectorEngine.find('i', this._element);\n this._options = this._getConfig(options);\n this._index = -1;\n this._savedIndex = null;\n this._originalClassList = [];\n this._fn = {};\n this._tooltips = [];\n\n if (this._element) {\n this._init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n dispose() {\n if (!this._options.readonly) {\n EventHandler.off(this._element, EVENT_KEYUP);\n EventHandler.off(this._element, EVENT_FOCUSOUT);\n EventHandler.off(this._element, EVENT_KEYDOWN);\n this._element.removeEventListener('mouseleave', this._fn.mouseleave);\n\n this._icons.forEach((el, i) => {\n EventHandler.off(el, EVENT_MOUSEDOWN);\n el.removeEventListener('mouseenter', this._fn.mouseenter[i]);\n });\n\n this._tooltips.forEach((el) => {\n el._element.removeAttribute('data-mdb-toggle');\n el.dispose();\n });\n\n this._element.removeAttribute('tabIndex');\n }\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Private\n _init() {\n if (!this._options.readonly) {\n this._bindMouseEnter();\n this._bindMouseLeave();\n this._bindMouseDown();\n this._bindKeyDown();\n this._bindKeyUp();\n this._bindFocusLost();\n }\n\n if (this._options.dynamic) {\n this._saveOriginalClassList();\n }\n\n this._setCustomText();\n this._setCustomColor();\n this._setToolTips();\n\n if (this._options.value) {\n this._index = this._options.value - 1;\n this._updateRating(this._index);\n }\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n config = {\n ...Default,\n ...dataAttributes,\n ...config,\n };\n\n typeCheckConfig(NAME, config, DefaultType);\n\n return config;\n }\n\n _bindMouseEnter() {\n this._fn.mouseenter = [];\n this._icons.forEach((el, i) => {\n // EventHandler.on changes mouseenter to mouseover - use addEventListener\n el.addEventListener(\n 'mouseenter',\n // this._fn.mouseenter[i] is needed to create reference and unpin events after call dispose\n // prettier-ignore\n this._fn.mouseenter[i] = (e) => {\n this._index = this._icons.indexOf(e.target);\n this._updateRating(this._index);\n this._triggerEvents(el, EVENT_HOVER);\n // prettier-ignore\n }\n );\n });\n }\n\n _bindMouseLeave() {\n // EventHandler.on changes mouseleave to mouseout - use addEventListener\n this._element.addEventListener(\n 'mouseleave',\n // this._fn.mouseleave is needed to create reference and unpin events after call dispose\n // prettier-ignore\n this._fn.mouseleave = () => {\n if (this._savedIndex !== null) {\n this._updateRating(this._savedIndex);\n this._index = this._savedIndex;\n } else if (this._options.value) {\n this._updateRating(this._options.value - 1);\n this._index = this._options.value - 1\n } else {\n this._index = -1;\n this._clearRating();\n }\n // prettier-ignore\n }\n );\n }\n\n _bindMouseDown() {\n this._icons.forEach((el) => {\n EventHandler.on(el, EVENT_MOUSEDOWN, () => {\n this._setElementOutline('none');\n this._savedIndex = this._index;\n this._triggerEvents(el, EVENT_SELECT);\n });\n });\n }\n\n _bindKeyDown() {\n this._element.tabIndex = 0;\n EventHandler.on(this._element, EVENT_KEYDOWN, (e) => this._updateAfterKeyDown(e));\n }\n\n _bindKeyUp() {\n EventHandler.on(this._element, EVENT_KEYUP, () => this._setElementOutline('auto'));\n }\n\n _bindFocusLost() {\n EventHandler.on(this._element, EVENT_FOCUSOUT, () => this._setElementOutline('none'));\n }\n\n _setElementOutline(value) {\n this._element.style.outline = value;\n }\n\n _triggerEvents(el, event) {\n EventHandler.trigger(el, event, {\n value: this._index + 1,\n });\n }\n\n _updateAfterKeyDown(e) {\n const maxIndex = this._icons.length - 1;\n const indexBeforeChange = this._index;\n\n if (e.key === ARROW_RIGHT_KEY && this._index < maxIndex) {\n this._index += 1;\n }\n\n if (e.key === ARROW_LEFT_KEY && this._index > -1) {\n this._index -= 1;\n }\n\n if (indexBeforeChange !== this._index) {\n this._savedIndex = this._index;\n this._updateRating(this._savedIndex);\n this._triggerEvents(this._icons[this._savedIndex], EVENT_SELECT);\n }\n }\n\n _updateRating(index) {\n this._clearRating();\n\n if (this._options.dynamic) {\n this._restoreOriginalIcon(index);\n }\n\n this._icons.forEach((el, i) => {\n if (i <= index) {\n el.classList.add('fas', 'active');\n el.classList.remove('far');\n }\n });\n }\n\n _clearRating() {\n this._icons.forEach((el, i) => {\n if (this._options.dynamic) {\n el.classList = this._originalClassList[i];\n } else {\n el.classList.remove('fas', 'active');\n el.classList.add('far');\n }\n });\n }\n\n _setToolTips() {\n this._icons.forEach((el, i) => {\n const hasOwnTooltips = Manipulator.getDataAttribute(el, 'toggle');\n\n if (el.title && !hasOwnTooltips) {\n Manipulator.setDataAttribute(el, 'toggle', 'tooltip');\n this._tooltips[i] = new Tooltip(el, { placement: this._options.tooltip });\n }\n });\n }\n\n _setCustomText() {\n this._icons.forEach((el) => {\n const after = Manipulator.getDataAttribute(el, 'after');\n const before = Manipulator.getDataAttribute(el, 'before');\n\n if (after) {\n el.insertAdjacentHTML('afterEnd', after);\n }\n\n if (before) {\n el.insertAdjacentHTML('beforeBegin', before);\n }\n });\n }\n\n _setCustomColor() {\n this._icons.forEach((el) => {\n const color = Manipulator.getDataAttribute(el, 'color');\n\n if (color) {\n el.style.color = color;\n }\n });\n }\n\n _saveOriginalClassList() {\n this._icons.forEach((el) => {\n const classList = el.classList.value;\n this._originalClassList.push(classList);\n });\n }\n\n _restoreOriginalIcon(index) {\n const classList = this._originalClassList[index];\n const color = Manipulator.getDataAttribute(this._icons[index], 'color');\n\n this._icons.forEach((el, i) => {\n if (i <= index) {\n el.classList = classList;\n el.style.color = color;\n }\n });\n }\n\n // Static\n\n static autoInit(el) {\n return new Rating(el);\n }\n\n static jQueryInterface(config, options) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Rating(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](options);\n }\n });\n }\n}\n\nexport default Rating;\n","/* eslint-disable */\n\nexport function get(element) {\n return getComputedStyle(element);\n}\n\nexport function set(element, obj) {\n for (const key in obj) {\n let val = obj[key];\n if (typeof val === 'number') {\n val = `${val}px`;\n }\n element.style[key] = val;\n }\n return element;\n}\n","/* eslint-disable */\n\nexport function div(className) {\n const div = document.createElement('div');\n div.className = className;\n return div;\n}\n\nconst elMatches =\n typeof Element !== 'undefined' &&\n (Element.prototype.matches ||\n Element.prototype.webkitMatchesSelector ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector);\n\nexport function matches(element, query) {\n if (!elMatches) {\n throw new Error('No element matching method supported');\n }\n\n return elMatches.call(element, query);\n}\n\nexport function remove(element) {\n if (element.remove) {\n element.remove();\n } else {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n }\n}\n\nexport function queryChildren(element, selector) {\n return Array.prototype.filter.call(element.children, (child) => matches(child, selector));\n}\n","/* eslint-disable */\n\nconst cls = {\n main: 'ps',\n rtl: 'ps__rtl',\n element: {\n thumb: (x) => `ps__thumb-${x}`,\n rail: (x) => `ps__rail-${x}`,\n consuming: 'ps__child--consume',\n },\n state: {\n focus: 'ps--focus',\n clicking: 'ps--clicking',\n active: (x) => `ps--active-${x}`,\n scrolling: (x) => `ps--scrolling-${x}`,\n },\n};\n\nexport default cls;\n\n/*\n * Helper methods\n */\nconst scrollingClassTimeout = { x: null, y: null };\n\nexport function addScrollingClass(i, x) {\n const classList = i.element.classList;\n const className = cls.state.scrolling(x);\n\n if (classList.contains(className)) {\n clearTimeout(scrollingClassTimeout[x]);\n } else {\n classList.add(className);\n }\n}\n\nexport function removeScrollingClass(i, x) {\n scrollingClassTimeout[x] = setTimeout(\n () => i.isAlive && i.element.classList.remove(cls.state.scrolling(x)),\n i.settings.scrollingThreshold\n );\n}\n\nexport function setScrollingClassInstantly(i, x) {\n addScrollingClass(i, x);\n removeScrollingClass(i, x);\n}\n","/* eslint-disable */\nclass EventElement {\n constructor(element) {\n this.element = element;\n this.handlers = {};\n }\n\n bind(eventName, handler) {\n if (typeof this.handlers[eventName] === 'undefined') {\n this.handlers[eventName] = [];\n }\n this.handlers[eventName].push(handler);\n this.element.addEventListener(eventName, handler, false);\n }\n\n unbind(eventName, target) {\n this.handlers[eventName] = this.handlers[eventName].filter((handler) => {\n if (target && handler !== target) {\n return true;\n }\n this.element.removeEventListener(eventName, handler, false);\n return false;\n });\n }\n\n unbindAll() {\n for (const name in this.handlers) {\n this.unbind(name);\n }\n }\n\n get isEmpty() {\n return Object.keys(this.handlers).every((key) => this.handlers[key].length === 0);\n }\n}\n\nexport default class EventManager {\n constructor() {\n this.eventElements = [];\n }\n\n eventElement(element) {\n let ee = this.eventElements.filter((ee) => ee.element === element)[0];\n if (!ee) {\n ee = new EventElement(element);\n this.eventElements.push(ee);\n }\n return ee;\n }\n\n bind(element, eventName, handler) {\n this.eventElement(element).bind(eventName, handler);\n }\n\n unbind(element, eventName, handler) {\n const ee = this.eventElement(element);\n ee.unbind(eventName, handler);\n\n if (ee.isEmpty) {\n // remove\n this.eventElements.splice(this.eventElements.indexOf(ee), 1);\n }\n }\n\n unbindAll() {\n this.eventElements.forEach((e) => e.unbindAll());\n this.eventElements = [];\n }\n\n once(element, eventName, handler) {\n const ee = this.eventElement(element);\n const onceHandler = (evt) => {\n ee.unbind(eventName, onceHandler);\n handler(evt);\n };\n ee.bind(eventName, onceHandler);\n }\n}\n","import { setScrollingClassInstantly } from './lib/class-names';\n\nfunction createEvent(name) {\n if (typeof window.CustomEvent === 'function') {\n return new CustomEvent(name);\n }\n\n const evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(name, false, false, undefined);\n return evt;\n}\n\nexport default function (i, axis, diff, useScrollingClass = true, forceFireReachEvent = false) {\n let fields;\n if (axis === 'top') {\n fields = ['contentHeight', 'containerHeight', 'scrollTop', 'y', 'up', 'down'];\n } else if (axis === 'left') {\n fields = ['contentWidth', 'containerWidth', 'scrollLeft', 'x', 'left', 'right'];\n } else {\n throw new Error('A proper axis should be provided');\n }\n\n processScrollDiff(i, diff, fields, useScrollingClass, forceFireReachEvent);\n}\n\nfunction processScrollDiff(\n i,\n diff,\n [contentHeight, containerHeight, scrollTop, y, up, down],\n useScrollingClass = true,\n forceFireReachEvent = false\n) {\n const element = i.element;\n\n // reset reach\n i.reach[y] = null;\n\n // 1 for subpixel rounding\n if (element[scrollTop] < 1) {\n i.reach[y] = 'start';\n }\n\n // 1 for subpixel rounding\n if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) {\n i.reach[y] = 'end';\n }\n\n if (diff) {\n element.dispatchEvent(createEvent(`ps-scroll-${y}`));\n\n if (diff < 0) {\n element.dispatchEvent(createEvent(`ps-scroll-${up}`));\n } else if (diff > 0) {\n element.dispatchEvent(createEvent(`ps-scroll-${down}`));\n }\n\n if (useScrollingClass) {\n setScrollingClassInstantly(i, y);\n }\n }\n\n if (i.reach[y] && (diff || forceFireReachEvent)) {\n element.dispatchEvent(createEvent(`ps-${y}-reach-${i.reach[y]}`));\n }\n}\n","/* eslint-disable */\n\nimport * as CSS from './css';\nimport * as DOM from './dom';\n\nexport function toInt(x) {\n return parseInt(x, 10) || 0;\n}\n\nexport function isEditable(el) {\n return (\n DOM.matches(el, 'input,[contenteditable]') ||\n DOM.matches(el, 'select,[contenteditable]') ||\n DOM.matches(el, 'textarea,[contenteditable]') ||\n DOM.matches(el, 'button,[contenteditable]')\n );\n}\n\nexport function outerWidth(element) {\n const styles = CSS.get(element);\n return (\n toInt(styles.width) +\n toInt(styles.paddingLeft) +\n toInt(styles.paddingRight) +\n toInt(styles.borderLeftWidth) +\n toInt(styles.borderRightWidth)\n );\n}\n\nexport const env = {\n isWebKit: typeof document !== 'undefined' && 'WebkitAppearance' in document.documentElement.style,\n supportsTouch:\n typeof window !== 'undefined' &&\n ('ontouchstart' in window ||\n ('maxTouchPoints' in window.navigator && window.navigator.maxTouchPoints > 0) ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)),\n supportsIePointer: typeof navigator !== 'undefined' && navigator.msMaxTouchPoints,\n isChrome: typeof navigator !== 'undefined' && /Chrome/i.test(navigator && navigator.userAgent),\n};\n","import * as CSS from './lib/css';\nimport * as DOM from './lib/dom';\nimport cls from './lib/class-names';\nimport { toInt } from './lib/util';\n\n/* eslint-disable no-lonely-if */\n\nexport default function (i) {\n const element = i.element;\n const roundedScrollTop = Math.floor(element.scrollTop);\n const rect = element.getBoundingClientRect();\n\n i.containerWidth = Math.floor(rect.width);\n i.containerHeight = Math.floor(rect.height);\n\n i.contentWidth = element.scrollWidth;\n i.contentHeight = element.scrollHeight;\n\n if (!element.contains(i.scrollbarXRail)) {\n // clean up and append\n DOM.queryChildren(element, cls.element.rail('x')).forEach((el) => DOM.remove(el));\n element.appendChild(i.scrollbarXRail);\n }\n if (!element.contains(i.scrollbarYRail)) {\n // clean up and append\n DOM.queryChildren(element, cls.element.rail('y')).forEach((el) => DOM.remove(el));\n element.appendChild(i.scrollbarYRail);\n }\n\n if (\n !i.settings.suppressScrollX &&\n i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth\n ) {\n i.scrollbarXActive = true;\n i.railXWidth = i.containerWidth - i.railXMarginWidth;\n i.railXRatio = i.containerWidth / i.railXWidth;\n i.scrollbarXWidth = getThumbSize(i, toInt((i.railXWidth * i.containerWidth) / i.contentWidth));\n i.scrollbarXLeft = toInt(\n ((i.negativeScrollAdjustment + element.scrollLeft) * (i.railXWidth - i.scrollbarXWidth)) /\n (i.contentWidth - i.containerWidth)\n );\n } else {\n i.scrollbarXActive = false;\n }\n\n if (\n !i.settings.suppressScrollY &&\n i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight\n ) {\n i.scrollbarYActive = true;\n i.railYHeight = i.containerHeight - i.railYMarginHeight;\n i.railYRatio = i.containerHeight / i.railYHeight;\n i.scrollbarYHeight = getThumbSize(\n i,\n toInt((i.railYHeight * i.containerHeight) / i.contentHeight)\n );\n i.scrollbarYTop = toInt(\n (roundedScrollTop * (i.railYHeight - i.scrollbarYHeight)) /\n (i.contentHeight - i.containerHeight)\n );\n } else {\n i.scrollbarYActive = false;\n }\n\n if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {\n i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;\n }\n if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {\n i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;\n }\n\n updateCss(element, i);\n\n if (i.scrollbarXActive) {\n element.classList.add(cls.state.active('x'));\n } else {\n element.classList.remove(cls.state.active('x'));\n i.scrollbarXWidth = 0;\n i.scrollbarXLeft = 0;\n element.scrollLeft = i.isRtl === true ? i.contentWidth : 0;\n }\n if (i.scrollbarYActive) {\n element.classList.add(cls.state.active('y'));\n } else {\n element.classList.remove(cls.state.active('y'));\n i.scrollbarYHeight = 0;\n i.scrollbarYTop = 0;\n element.scrollTop = 0;\n }\n}\n\nfunction getThumbSize(i, thumbSize) {\n if (i.settings.minScrollbarLength) {\n thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);\n }\n if (i.settings.maxScrollbarLength) {\n thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);\n }\n return thumbSize;\n}\n\nfunction updateCss(element, i) {\n const xRailOffset = { width: i.railXWidth };\n const roundedScrollTop = Math.floor(element.scrollTop);\n\n if (i.isRtl) {\n xRailOffset.left =\n i.negativeScrollAdjustment + element.scrollLeft + i.containerWidth - i.contentWidth;\n } else {\n xRailOffset.left = element.scrollLeft;\n }\n if (i.isScrollbarXUsingBottom) {\n xRailOffset.bottom = i.scrollbarXBottom - roundedScrollTop;\n } else {\n xRailOffset.top = i.scrollbarXTop + roundedScrollTop;\n }\n CSS.set(i.scrollbarXRail, xRailOffset);\n\n const yRailOffset = { top: roundedScrollTop, height: i.railYHeight };\n if (i.isScrollbarYUsingRight) {\n if (i.isRtl) {\n yRailOffset.right =\n i.contentWidth -\n (i.negativeScrollAdjustment + element.scrollLeft) -\n i.scrollbarYRight -\n i.scrollbarYOuterWidth -\n 9;\n } else {\n yRailOffset.right = i.scrollbarYRight - element.scrollLeft;\n }\n } else {\n if (i.isRtl) {\n yRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth * 2 -\n i.contentWidth -\n i.scrollbarYLeft -\n i.scrollbarYOuterWidth;\n } else {\n yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;\n }\n }\n CSS.set(i.scrollbarYRail, yRailOffset);\n\n CSS.set(i.scrollbarX, {\n left: i.scrollbarXLeft,\n width: i.scrollbarXWidth - i.railBorderXWidth,\n });\n CSS.set(i.scrollbarY, {\n top: i.scrollbarYTop,\n height: i.scrollbarYHeight - i.railBorderYWidth,\n });\n}\n","/* eslint-disable */\n\nimport updateGeometry from '../update-geometry';\n\nexport default function (i) {\n // const element = i.element;\n\n i.event.bind(i.scrollbarY, 'mousedown', (e) => e.stopPropagation());\n i.event.bind(i.scrollbarYRail, 'mousedown', (e) => {\n const positionTop = e.pageY - window.pageYOffset - i.scrollbarYRail.getBoundingClientRect().top;\n const direction = positionTop > i.scrollbarYTop ? 1 : -1;\n\n i.element.scrollTop += direction * i.containerHeight;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n\n i.event.bind(i.scrollbarX, 'mousedown', (e) => e.stopPropagation());\n i.event.bind(i.scrollbarXRail, 'mousedown', (e) => {\n const positionLeft =\n e.pageX - window.pageXOffset - i.scrollbarXRail.getBoundingClientRect().left;\n const direction = positionLeft > i.scrollbarXLeft ? 1 : -1;\n\n i.element.scrollLeft += direction * i.containerWidth;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n}\n","/* eslint-disable */\n\nimport * as CSS from '../lib/css';\nimport * as DOM from '../lib/dom';\nimport cls, { addScrollingClass, removeScrollingClass } from '../lib/class-names';\nimport updateGeometry from '../update-geometry';\nimport { toInt } from '../lib/util';\n\nexport default function (i) {\n bindMouseScrollHandler(i, [\n 'containerWidth',\n 'contentWidth',\n 'pageX',\n 'railXWidth',\n 'scrollbarX',\n 'scrollbarXWidth',\n 'scrollLeft',\n 'x',\n 'scrollbarXRail',\n ]);\n bindMouseScrollHandler(i, [\n 'containerHeight',\n 'contentHeight',\n 'pageY',\n 'railYHeight',\n 'scrollbarY',\n 'scrollbarYHeight',\n 'scrollTop',\n 'y',\n 'scrollbarYRail',\n ]);\n}\n\nfunction bindMouseScrollHandler(\n i,\n [\n containerHeight,\n contentHeight,\n pageY,\n railYHeight,\n scrollbarY,\n scrollbarYHeight,\n scrollTop,\n y,\n scrollbarYRail,\n ]\n) {\n const element = i.element;\n\n let startingScrollTop = null;\n let startingMousePageY = null;\n let scrollBy = null;\n\n function mouseMoveHandler(e) {\n if (e.touches && e.touches[0]) {\n e[pageY] = e.touches[0].pageY;\n }\n element[scrollTop] = startingScrollTop + scrollBy * (e[pageY] - startingMousePageY);\n addScrollingClass(i, y);\n updateGeometry(i);\n\n e.stopPropagation();\n e.preventDefault();\n }\n\n function mouseUpHandler() {\n removeScrollingClass(i, y);\n i[scrollbarYRail].classList.remove(cls.state.clicking);\n i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n }\n\n function bindMoves(e, touchMode) {\n startingScrollTop = element[scrollTop];\n if (touchMode && e.touches) {\n e[pageY] = e.touches[0].pageY;\n }\n startingMousePageY = e[pageY];\n scrollBy = (i[contentHeight] - i[containerHeight]) / (i[railYHeight] - i[scrollbarYHeight]);\n if (!touchMode) {\n i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);\n e.preventDefault();\n } else {\n i.event.bind(i.ownerDocument, 'touchmove', mouseMoveHandler);\n }\n\n i[scrollbarYRail].classList.add(cls.state.clicking);\n\n e.stopPropagation();\n }\n\n i.event.bind(i[scrollbarY], 'mousedown', (e) => {\n bindMoves(e);\n });\n i.event.bind(i[scrollbarY], 'touchstart', (e) => {\n bindMoves(e, true);\n });\n}\n","/* eslint-disable */\n\nimport * as DOM from '../lib/dom';\nimport updateGeometry from '../update-geometry';\nimport { isEditable } from '../lib/util';\n\nexport default function (i) {\n const element = i.element;\n\n const elementHovered = () => DOM.matches(element, ':hover');\n const scrollbarFocused = () =>\n DOM.matches(i.scrollbarX, ':focus') || DOM.matches(i.scrollbarY, ':focus');\n\n function shouldPreventDefault(deltaX, deltaY) {\n const scrollTop = Math.floor(element.scrollTop);\n if (deltaX === 0) {\n if (!i.scrollbarYActive) {\n return false;\n }\n if (\n (scrollTop === 0 && deltaY > 0) ||\n (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n\n const scrollLeft = element.scrollLeft;\n if (deltaY === 0) {\n if (!i.scrollbarXActive) {\n return false;\n }\n if (\n (scrollLeft === 0 && deltaX < 0) ||\n (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n return true;\n }\n\n i.event.bind(i.ownerDocument, 'keydown', (e) => {\n if ((e.isDefaultPrevented && e.isDefaultPrevented()) || e.defaultPrevented) {\n return;\n }\n\n if (!elementHovered() && !scrollbarFocused()) {\n return;\n }\n\n let activeElement = document.activeElement\n ? document.activeElement\n : i.ownerDocument.activeElement;\n if (activeElement) {\n if (activeElement.tagName === 'IFRAME') {\n activeElement = activeElement.contentDocument.activeElement;\n } else {\n // go deeper if element is a webcomponent\n while (activeElement.shadowRoot) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n }\n if (isEditable(activeElement)) {\n return;\n }\n }\n\n let deltaX = 0;\n let deltaY = 0;\n\n switch (e.which) {\n case 37: // left\n if (e.metaKey) {\n deltaX = -i.contentWidth;\n } else if (e.altKey) {\n deltaX = -i.containerWidth;\n } else {\n deltaX = -30;\n }\n break;\n case 38: // up\n if (e.metaKey) {\n deltaY = i.contentHeight;\n } else if (e.altKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = 30;\n }\n break;\n case 39: // right\n if (e.metaKey) {\n deltaX = i.contentWidth;\n } else if (e.altKey) {\n deltaX = i.containerWidth;\n } else {\n deltaX = 30;\n }\n break;\n case 40: // down\n if (e.metaKey) {\n deltaY = -i.contentHeight;\n } else if (e.altKey) {\n deltaY = -i.containerHeight;\n } else {\n deltaY = -30;\n }\n break;\n case 32: // space bar\n if (e.shiftKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = -i.containerHeight;\n }\n break;\n case 33: // page up\n deltaY = i.containerHeight;\n break;\n case 34: // page down\n deltaY = -i.containerHeight;\n break;\n case 36: // home\n deltaY = i.contentHeight;\n break;\n case 35: // end\n deltaY = -i.contentHeight;\n break;\n default:\n return;\n }\n\n if (i.settings.suppressScrollX && deltaX !== 0) {\n return;\n }\n if (i.settings.suppressScrollY && deltaY !== 0) {\n return;\n }\n\n element.scrollTop -= deltaY;\n element.scrollLeft += deltaX;\n updateGeometry(i);\n\n if (shouldPreventDefault(deltaX, deltaY)) {\n e.preventDefault();\n }\n });\n}\n","/* eslint-disable */\n\nimport * as CSS from '../lib/css';\nimport cls from '../lib/class-names';\nimport updateGeometry from '../update-geometry';\nimport { env } from '../lib/util';\n\nexport default function (i) {\n const element = i.element;\n\n let shouldPrevent = false;\n\n function shouldPreventDefault(deltaX, deltaY) {\n const roundedScrollTop = Math.floor(element.scrollTop);\n const isTop = element.scrollTop === 0;\n const isBottom = roundedScrollTop + element.offsetHeight === element.scrollHeight;\n const isLeft = element.scrollLeft === 0;\n const isRight = element.scrollLeft + element.offsetWidth === element.scrollWidth;\n\n let hitsBound;\n\n // pick axis with primary direction\n if (Math.abs(deltaY) > Math.abs(deltaX)) {\n hitsBound = isTop || isBottom;\n } else {\n hitsBound = isLeft || isRight;\n }\n\n return hitsBound ? !i.settings.wheelPropagation : true;\n }\n\n function getDeltaFromEvent(e) {\n let deltaX = e.deltaX;\n let deltaY = -1 * e.deltaY;\n\n if (typeof deltaX === 'undefined' || typeof deltaY === 'undefined') {\n // OS X Safari\n deltaX = (-1 * e.wheelDeltaX) / 6;\n deltaY = e.wheelDeltaY / 6;\n }\n\n if (e.deltaMode && e.deltaMode === 1) {\n // Firefox in deltaMode 1: Line scrolling\n deltaX *= 10;\n deltaY *= 10;\n }\n\n if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) {\n // IE in some mouse drivers\n deltaX = 0;\n deltaY = e.wheelDelta;\n }\n\n if (e.shiftKey) {\n // reverse axis with shift key\n return [-deltaY, -deltaX];\n }\n return [deltaX, deltaY];\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n // FIXME: this is a workaround for <select> issue in FF and IE #571\n if (!env.isWebKit && element.querySelector('select:focus')) {\n return true;\n }\n\n if (!element.contains(target)) {\n return false;\n }\n\n let cursor = target;\n\n while (cursor && cursor !== element) {\n if (cursor.classList.contains(cls.element.consuming)) {\n return true;\n }\n\n const style = CSS.get(cursor);\n\n // if deltaY && vertical scrollable\n if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n const maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n if (maxScrollTop > 0) {\n if (\n (cursor.scrollTop > 0 && deltaY < 0) ||\n (cursor.scrollTop < maxScrollTop && deltaY > 0)\n ) {\n return true;\n }\n }\n }\n // if deltaX && horizontal scrollable\n if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n const maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n if (maxScrollLeft > 0) {\n if (\n (cursor.scrollLeft > 0 && deltaX < 0) ||\n (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n ) {\n return true;\n }\n }\n }\n\n cursor = cursor.parentNode;\n }\n\n return false;\n }\n\n function mousewheelHandler(e) {\n const [deltaX, deltaY] = getDeltaFromEvent(e);\n\n if (shouldBeConsumedByChild(e.target, deltaX, deltaY)) {\n return;\n }\n\n let shouldPrevent = false;\n if (!i.settings.useBothWheelAxes) {\n // deltaX will only be used for horizontal scrolling and deltaY will\n // only be used for vertical scrolling - this is the default\n element.scrollTop -= deltaY * i.settings.wheelSpeed;\n element.scrollLeft += deltaX * i.settings.wheelSpeed;\n } else if (i.scrollbarYActive && !i.scrollbarXActive) {\n // only vertical scrollbar is active and useBothWheelAxes option is\n // active, so let's scroll vertical bar using both mouse wheel axes\n if (deltaY) {\n element.scrollTop -= deltaY * i.settings.wheelSpeed;\n } else {\n element.scrollTop += deltaX * i.settings.wheelSpeed;\n }\n shouldPrevent = true;\n } else if (i.scrollbarXActive && !i.scrollbarYActive) {\n // useBothWheelAxes and only horizontal bar is active, so use both\n // wheel axes for horizontal bar\n if (deltaX) {\n element.scrollLeft += deltaX * i.settings.wheelSpeed;\n } else {\n element.scrollLeft -= deltaY * i.settings.wheelSpeed;\n }\n shouldPrevent = true;\n }\n\n updateGeometry(i);\n\n shouldPrevent = shouldPrevent || shouldPreventDefault(deltaX, deltaY);\n if (shouldPrevent && !e.ctrlKey) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n if (typeof window.onwheel !== 'undefined') {\n i.event.bind(element, 'wheel', mousewheelHandler);\n } else if (typeof window.onmousewheel !== 'undefined') {\n i.event.bind(element, 'mousewheel', mousewheelHandler);\n }\n}\n","/* eslint-disable */\nimport updateGeometry from '../update-geometry';\nimport cls from '../lib/class-names';\nimport * as CSS from '../lib/css';\nimport { env } from '../lib/util';\n\nexport default function (i) {\n if (!env.supportsTouch && !env.supportsIePointer) {\n return;\n }\n\n const element = i.element;\n\n function shouldPrevent(deltaX, deltaY) {\n const scrollTop = Math.floor(element.scrollTop);\n const scrollLeft = element.scrollLeft;\n const magnitudeX = Math.abs(deltaX);\n const magnitudeY = Math.abs(deltaY);\n\n if (magnitudeY > magnitudeX) {\n // user is perhaps trying to swipe up/down the page\n\n if (\n (deltaY < 0 && scrollTop === i.contentHeight - i.containerHeight) ||\n (deltaY > 0 && scrollTop === 0)\n ) {\n // set prevent for mobile Chrome refresh\n return window.scrollY === 0 && deltaY > 0 && env.isChrome;\n }\n } else if (magnitudeX > magnitudeY) {\n // user is perhaps trying to swipe left/right across the page\n\n if (\n (deltaX < 0 && scrollLeft === i.contentWidth - i.containerWidth) ||\n (deltaX > 0 && scrollLeft === 0)\n ) {\n return true;\n }\n }\n\n return true;\n }\n\n function applyTouchMove(differenceX, differenceY) {\n element.scrollTop -= differenceY;\n element.scrollLeft -= differenceX;\n\n updateGeometry(i);\n }\n\n let startOffset = {};\n let startTime = 0;\n let speed = {};\n let easingLoop = null;\n\n function getTouch(e) {\n if (e.targetTouches) {\n return e.targetTouches[0];\n } else {\n // Maybe IE pointer\n return e;\n }\n }\n\n function shouldHandle(e) {\n if (e.pointerType && e.pointerType === 'pen' && e.buttons === 0) {\n return false;\n }\n if (e.targetTouches && e.targetTouches.length === 1) {\n return true;\n }\n if (e.pointerType && e.pointerType !== 'mouse' && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) {\n return true;\n }\n return false;\n }\n\n function touchStart(e) {\n if (!shouldHandle(e)) {\n return;\n }\n\n const touch = getTouch(e);\n\n startOffset.pageX = touch.pageX;\n startOffset.pageY = touch.pageY;\n\n startTime = new Date().getTime();\n\n if (easingLoop !== null) {\n clearInterval(easingLoop);\n }\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n if (!element.contains(target)) {\n return false;\n }\n\n let cursor = target;\n\n while (cursor && cursor !== element) {\n if (cursor.classList.contains(cls.element.consuming)) {\n return true;\n }\n\n const style = CSS.get(cursor);\n\n // if deltaY && vertical scrollable\n if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n const maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n if (maxScrollTop > 0) {\n if (\n (cursor.scrollTop > 0 && deltaY < 0) ||\n (cursor.scrollTop < maxScrollTop && deltaY > 0)\n ) {\n return true;\n }\n }\n }\n // if deltaX && horizontal scrollable\n if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n const maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n if (maxScrollLeft > 0) {\n if (\n (cursor.scrollLeft > 0 && deltaX < 0) ||\n (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n ) {\n return true;\n }\n }\n }\n\n cursor = cursor.parentNode;\n }\n\n return false;\n }\n\n function touchMove(e) {\n if (shouldHandle(e)) {\n const touch = getTouch(e);\n\n const currentOffset = { pageX: touch.pageX, pageY: touch.pageY };\n\n const differenceX = currentOffset.pageX - startOffset.pageX;\n const differenceY = currentOffset.pageY - startOffset.pageY;\n\n if (shouldBeConsumedByChild(e.target, differenceX, differenceY)) {\n return;\n }\n\n applyTouchMove(differenceX, differenceY);\n startOffset = currentOffset;\n\n const currentTime = new Date().getTime();\n\n const timeGap = currentTime - startTime;\n if (timeGap > 0) {\n speed.x = differenceX / timeGap;\n speed.y = differenceY / timeGap;\n startTime = currentTime;\n }\n\n if (shouldPrevent(differenceX, differenceY)) {\n e.preventDefault();\n }\n }\n }\n function touchEnd() {\n if (i.settings.swipeEasing) {\n clearInterval(easingLoop);\n easingLoop = setInterval(function () {\n if (i.isInitialized) {\n clearInterval(easingLoop);\n return;\n }\n\n if (!speed.x && !speed.y) {\n clearInterval(easingLoop);\n return;\n }\n\n if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {\n clearInterval(easingLoop);\n return;\n }\n\n applyTouchMove(speed.x * 30, speed.y * 30);\n\n speed.x *= 0.8;\n speed.y *= 0.8;\n }, 10);\n }\n }\n\n if (env.supportsTouch) {\n i.event.bind(element, 'touchstart', touchStart);\n i.event.bind(element, 'touchmove', touchMove);\n i.event.bind(element, 'touchend', touchEnd);\n } else if (env.supportsIePointer) {\n if (window.PointerEvent) {\n i.event.bind(element, 'pointerdown', touchStart);\n i.event.bind(element, 'pointermove', touchMove);\n i.event.bind(element, 'pointerup', touchEnd);\n } else if (window.MSPointerEvent) {\n i.event.bind(element, 'MSPointerDown', touchStart);\n i.event.bind(element, 'MSPointerMove', touchMove);\n i.event.bind(element, 'MSPointerUp', touchEnd);\n }\n }\n}\n","/* eslint-disable */\n\nimport * as CSS from './lib/css';\nimport * as DOM from './lib/dom';\nimport cls from './lib/class-names';\nimport EventManager from './lib/event-manager';\nimport processScrollDiff from './process-scroll-diff';\nimport updateGeometry from './update-geometry';\nimport { toInt, outerWidth } from './lib/util';\n\nimport clickRail from './handlers/click-rail';\nimport dragThumb from './handlers/drag-thumb';\nimport keyboard from './handlers/keyboard';\nimport wheel from './handlers/mouse-wheel';\nimport touch from './handlers/touch';\n\nconst defaultSettings = () => ({\n handlers: ['click-rail', 'drag-thumb', 'keyboard', 'wheel', 'touch'],\n maxScrollbarLength: null,\n minScrollbarLength: null,\n scrollingThreshold: 1000,\n scrollXMarginOffset: 0,\n scrollYMarginOffset: 0,\n suppressScrollX: false,\n suppressScrollY: false,\n swipeEasing: true,\n useBothWheelAxes: false,\n wheelPropagation: true,\n wheelSpeed: 1,\n});\n\nconst handlers = {\n 'click-rail': clickRail,\n 'drag-thumb': dragThumb,\n keyboard,\n wheel,\n touch,\n};\n\nexport default class PerfectScrollbar {\n constructor(element, userSettings = {}) {\n if (typeof element === 'string') {\n element = document.querySelector(element);\n }\n\n if (!element || !element.nodeName) {\n throw new Error('no element is specified to initialize PerfectScrollbar');\n }\n\n this.element = element;\n\n element.classList.add(cls.main);\n\n this.settings = defaultSettings();\n for (const key in userSettings) {\n this.settings[key] = userSettings[key];\n }\n\n this.containerWidth = null;\n this.containerHeight = null;\n this.contentWidth = null;\n this.contentHeight = null;\n\n const focus = () => element.classList.add(cls.state.focus);\n const blur = () => element.classList.remove(cls.state.focus);\n\n this.isRtl = CSS.get(element).direction === 'rtl';\n if (this.isRtl === true) {\n element.classList.add(cls.rtl);\n }\n this.isNegativeScroll = (() => {\n const originalScrollLeft = element.scrollLeft;\n let result = null;\n element.scrollLeft = -1;\n result = element.scrollLeft < 0;\n element.scrollLeft = originalScrollLeft;\n return result;\n })();\n this.negativeScrollAdjustment = this.isNegativeScroll\n ? element.scrollWidth - element.clientWidth\n : 0;\n this.event = new EventManager();\n this.ownerDocument = element.ownerDocument || document;\n\n this.scrollbarXRail = DOM.div(cls.element.rail('x'));\n element.appendChild(this.scrollbarXRail);\n this.scrollbarX = DOM.div(cls.element.thumb('x'));\n this.scrollbarXRail.appendChild(this.scrollbarX);\n this.scrollbarX.setAttribute('tabindex', 0);\n this.event.bind(this.scrollbarX, 'focus', focus);\n this.event.bind(this.scrollbarX, 'blur', blur);\n this.scrollbarXActive = null;\n this.scrollbarXWidth = null;\n this.scrollbarXLeft = null;\n const railXStyle = CSS.get(this.scrollbarXRail);\n this.scrollbarXBottom = parseInt(railXStyle.bottom, 10);\n if (isNaN(this.scrollbarXBottom)) {\n this.isScrollbarXUsingBottom = false;\n this.scrollbarXTop = toInt(railXStyle.top);\n } else {\n this.isScrollbarXUsingBottom = true;\n }\n this.railBorderXWidth = toInt(railXStyle.borderLeftWidth) + toInt(railXStyle.borderRightWidth);\n // Set rail to display:block to calculate margins\n CSS.set(this.scrollbarXRail, { display: 'block' });\n this.railXMarginWidth = toInt(railXStyle.marginLeft) + toInt(railXStyle.marginRight);\n CSS.set(this.scrollbarXRail, { display: '' });\n this.railXWidth = null;\n this.railXRatio = null;\n\n this.scrollbarYRail = DOM.div(cls.element.rail('y'));\n element.appendChild(this.scrollbarYRail);\n this.scrollbarY = DOM.div(cls.element.thumb('y'));\n this.scrollbarYRail.appendChild(this.scrollbarY);\n this.scrollbarY.setAttribute('tabindex', 0);\n this.event.bind(this.scrollbarY, 'focus', focus);\n this.event.bind(this.scrollbarY, 'blur', blur);\n this.scrollbarYActive = null;\n this.scrollbarYHeight = null;\n this.scrollbarYTop = null;\n const railYStyle = CSS.get(this.scrollbarYRail);\n this.scrollbarYRight = parseInt(railYStyle.right, 10);\n if (isNaN(this.scrollbarYRight)) {\n this.isScrollbarYUsingRight = false;\n this.scrollbarYLeft = toInt(railYStyle.left);\n } else {\n this.isScrollbarYUsingRight = true;\n }\n this.scrollbarYOuterWidth = this.isRtl ? outerWidth(this.scrollbarY) : null;\n this.railBorderYWidth = toInt(railYStyle.borderTopWidth) + toInt(railYStyle.borderBottomWidth);\n CSS.set(this.scrollbarYRail, { display: 'block' });\n this.railYMarginHeight = toInt(railYStyle.marginTop) + toInt(railYStyle.marginBottom);\n CSS.set(this.scrollbarYRail, { display: '' });\n this.railYHeight = null;\n this.railYRatio = null;\n\n this.reach = {\n x:\n element.scrollLeft <= 0\n ? 'start'\n : element.scrollLeft >= this.contentWidth - this.containerWidth\n ? 'end'\n : null,\n y:\n element.scrollTop <= 0\n ? 'start'\n : element.scrollTop >= this.contentHeight - this.containerHeight\n ? 'end'\n : null,\n };\n\n this.isAlive = true;\n\n this.settings.handlers.forEach((handlerName) => handlers[handlerName](this));\n\n this.lastScrollTop = Math.floor(element.scrollTop); // for onScroll only\n this.lastScrollLeft = element.scrollLeft; // for onScroll only\n this.event.bind(this.element, 'scroll', (e) => this.onScroll(e));\n updateGeometry(this);\n }\n\n update() {\n if (!this.isAlive) {\n return;\n }\n\n // Recalcuate negative scrollLeft adjustment\n this.negativeScrollAdjustment = this.isNegativeScroll\n ? this.element.scrollWidth - this.element.clientWidth\n : 0;\n\n // Recalculate rail margins\n CSS.set(this.scrollbarXRail, { display: 'block' });\n CSS.set(this.scrollbarYRail, { display: 'block' });\n this.railXMarginWidth =\n toInt(CSS.get(this.scrollbarXRail).marginLeft) +\n toInt(CSS.get(this.scrollbarXRail).marginRight);\n this.railYMarginHeight =\n toInt(CSS.get(this.scrollbarYRail).marginTop) +\n toInt(CSS.get(this.scrollbarYRail).marginBottom);\n\n // Hide scrollbars not to affect scrollWidth and scrollHeight\n CSS.set(this.scrollbarXRail, { display: 'none' });\n CSS.set(this.scrollbarYRail, { display: 'none' });\n\n updateGeometry(this);\n\n processScrollDiff(this, 'top', 0, false, true);\n processScrollDiff(this, 'left', 0, false, true);\n\n CSS.set(this.scrollbarXRail, { display: '' });\n CSS.set(this.scrollbarYRail, { display: '' });\n }\n\n onScroll(e) {\n if (!this.isAlive) {\n return;\n }\n\n updateGeometry(this);\n processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop);\n processScrollDiff(this, 'left', this.element.scrollLeft - this.lastScrollLeft);\n\n this.lastScrollTop = Math.floor(this.element.scrollTop);\n this.lastScrollLeft = this.element.scrollLeft;\n }\n\n destroy() {\n if (!this.isAlive) {\n return;\n }\n\n this.event.unbindAll();\n DOM.remove(this.scrollbarX);\n DOM.remove(this.scrollbarY);\n DOM.remove(this.scrollbarXRail);\n DOM.remove(this.scrollbarYRail);\n this.removePsClasses();\n\n // unset elements\n this.element = null;\n this.scrollbarX = null;\n this.scrollbarY = null;\n this.scrollbarXRail = null;\n this.scrollbarYRail = null;\n\n this.isAlive = false;\n }\n\n removePsClasses() {\n this.element.className = this.element.className\n .split(' ')\n .filter((name) => !name.match(/^ps([-_].+|)$/))\n .join(' ');\n }\n}\n","import SelectorEngine from '../dom/selector-engine';\nimport { isVisible } from './index';\n\nclass FocusTrap {\n constructor(element, options = {}, toggler) {\n this._element = element;\n this._toggler = toggler;\n this._event = options.event || 'blur';\n this._condition = options.condition || (() => true);\n this._selector =\n options.selector || 'button, a, input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n this._onlyVisible = options.onlyVisible || false;\n this._focusableElements = [];\n this._firstElement = null;\n this._lastElement = null;\n\n this.handler = (e) => {\n if (this._condition(e) && e.target === this._lastElement) {\n e.preventDefault();\n this._firstElement.focus();\n }\n };\n }\n\n trap() {\n this._setElements();\n this._init();\n this._setFocusTrap();\n }\n\n disable() {\n this._focusableElements.forEach((element) => {\n element.removeEventListener(this._event, this.handler);\n });\n\n if (this._toggler) {\n this._toggler.focus();\n }\n }\n\n update() {\n this._setElements();\n this._setFocusTrap();\n }\n\n _init() {\n const handler = (e) => {\n if (!this._firstElement || e.key !== 'Tab' || this._focusableElements.includes(e.target)) {\n return;\n }\n\n e.preventDefault();\n this._firstElement.focus();\n\n window.removeEventListener('keydown', handler);\n };\n\n window.addEventListener('keydown', handler);\n }\n\n _filterVisible(elements) {\n return elements.filter((el) => {\n if (!isVisible(el)) return false;\n\n const ancestors = SelectorEngine.parents(el, '*');\n\n for (let i = 0; i < ancestors.length; i++) {\n const style = window.getComputedStyle(ancestors[i]);\n if (style && (style.display === 'none' || style.visibility === 'hidden')) return false;\n }\n return true;\n });\n }\n\n _setElements() {\n const allElements = SelectorEngine.find(this._selector, this._element);\n\n // filter out elements that are not focusable\n this._focusableElements = allElements.filter((el) => {\n const hasDisabledAttribute =\n el.getAttribute('data-mdb-disabled') === 'true' || el.hasAttribute('disabled');\n const isDisabled = el.disabled || hasDisabledAttribute;\n\n if (!isDisabled) {\n return el;\n }\n return null;\n });\n\n if (this._onlyVisible) {\n this._focusableElements = this._filterVisible(this._focusableElements);\n }\n\n this._firstElement = this._focusableElements[0];\n this._lastElement = this._focusableElements[this._focusableElements.length - 1];\n }\n\n _setFocusTrap() {\n this._focusableElements.forEach((element, i) => {\n if (i === this._focusableElements.length - 1) {\n element.addEventListener(this._event, this.handler);\n } else {\n element.removeEventListener(this._event, this.handler);\n }\n });\n }\n}\n\nexport default FocusTrap;\n","export const LEFT_ARROW = 37;\nexport const UP_ARROW = 38;\nexport const RIGHT_ARROW = 39;\nexport const DOWN_ARROW = 40;\nexport const HOME = 36;\nexport const END = 35;\nexport const PAGE_UP = 33;\nexport const PAGE_DOWN = 34;\nexport const ENTER = 13;\nexport const SPACE = 32;\nexport const ESCAPE = 27;\nexport const TAB = 9;\nexport const BACKSPACE = 8;\nexport const DELETE = 46;\nexport const A = 65;\nexport const B = 66;\nexport const C = 67;\nexport const D = 68;\nexport const E = 69;\nexport const F = 70;\nexport const G = 71;\nexport const H = 72;\nexport const I = 73;\nexport const J = 74;\nexport const K = 75;\nexport const L = 76;\nexport const M = 77;\nexport const N = 78;\nexport const O = 79;\nexport const P = 80;\nexport const Q = 81;\nexport const R = 82;\nexport const S = 83;\nexport const T = 84;\nexport const U = 85;\nexport const V = 86;\nexport const W = 87;\nexport const X = 88;\nexport const Y = 89;\nexport const Z = 90;\n","import EventHandler from '../../dom/event-handler';\n\nconst DEFAULT_OPTIONS = {\n threshold: 10,\n direction: 'all',\n};\n\nclass Swipe {\n constructor(element, options) {\n this._element = element;\n this._startPosition = null;\n this._options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n }\n\n handleTouchStart(e) {\n this._startPosition = this._getCoordinates(e);\n }\n\n handleTouchMove(e) {\n if (!this._startPosition) return;\n\n const position = this._getCoordinates(e);\n const displacement = {\n x: position.x - this._startPosition.x,\n y: position.y - this._startPosition.y,\n };\n\n const swipe = this._getDirection(displacement);\n\n if (this._options.direction === 'all') {\n if (swipe.y.value < this._options.threshold && swipe.x.value < this._options.threshold) {\n return;\n }\n const direction = swipe.y.value > swipe.x.value ? swipe.y.direction : swipe.x.direction;\n EventHandler.trigger(this._element, `swipe${direction}`);\n EventHandler.trigger(this._element, 'swipe', { direction });\n this._startPosition = null;\n return;\n }\n\n const axis = this._options.direction === 'left' || this._options === 'right' ? 'x' : 'y';\n\n if (\n swipe[axis].direction === this._options.direction &&\n swipe[axis].value > this._options.threshold\n ) {\n EventHandler.trigger(this._element, `swipe${swipe[axis].direction}`);\n this._startPosition = null;\n }\n }\n\n handleTouchEnd() {\n this._startPosition = null;\n }\n\n _getCoordinates(e) {\n const [touch] = e.touches;\n return {\n x: touch.clientX,\n y: touch.clientY,\n };\n }\n\n _getDirection(displacement) {\n return {\n x: {\n direction: displacement.x < 0 ? 'left' : 'right',\n value: Math.abs(displacement.x),\n },\n y: {\n direction: displacement.y < 0 ? 'up' : 'down',\n value: Math.abs(displacement.y),\n },\n };\n }\n}\n\nexport default Swipe;\n","import Swipe from './swipe';\n\nclass Touch {\n constructor(element, event = 'swipe', options = {}) {\n this._element = element;\n this._event = event;\n\n // events\n\n this.swipe = new Swipe(element, options);\n\n // handlers\n\n this._touchStartHandler = this._handleTouchStart.bind(this);\n this._touchMoveHandler = this._handleTouchMove.bind(this);\n this._touchEndHandler = this._handleTouchEnd.bind(this);\n }\n\n dispose() {\n this._element.removeEventListener('touchstart', this._touchStartHandler);\n this._element.removeEventListener('touchmove', this._touchMoveHandler);\n window.removeEventListener('touchend', this._touchEndHandler);\n }\n\n init() {\n // istanbul ignore next\n this._element.addEventListener('touchstart', (e) => this._handleTouchStart(e));\n // istanbul ignore next\n this._element.addEventListener('touchmove', (e) => this._handleTouchMove(e));\n // istanbul ignore next\n window.addEventListener('touchend', (e) => this._handleTouchEnd(e));\n }\n\n _handleTouchStart(e) {\n this[this._event].handleTouchStart(e);\n }\n\n _handleTouchMove(e) {\n this[this._event].handleTouchMove(e);\n }\n\n _handleTouchEnd(e) {\n this[this._event].handleTouchEnd(e);\n }\n}\n\nexport default Touch;\n","import PerfectScrollbar from '../mdb/perfect-scrollbar';\nimport { array, element, isVisible, typeCheckConfig, isRTL } from '../mdb/util/index';\nimport FocusTrap from '../mdb/util/focusTrap';\nimport { ENTER, TAB, ESCAPE } from '../mdb/util/keycodes';\nimport Touch from '../mdb/util/touch';\nimport Collapse from '../bootstrap/mdb-prefix/collapse';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport Ripple from '../free/ripple';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'sidenav';\nconst DATA_KEY = 'mdb.sidenav';\nconst ARROW_CLASS = 'rotate-icon';\nconst BACKDROP_CLASS = 'sidenav-backdrop';\nconst SELECTOR_TOGGLE = '[data-mdb-toggle=\"sidenav\"]';\nconst SELECTOR_TOGGLE_COLLAPSE = '[data-mdb-collapse-init]';\nconst SELECTOR_SHOW_SLIM = '[data-mdb-slim=\"true\"]';\nconst SELECTOR_HIDE_SLIM = '[data-mdb-slim=\"false\"]';\nconst SELECTOR_NAVIGATION = '.sidenav-menu';\nconst SELECTOR_COLLAPSE = '.sidenav-collapse';\nconst SELECTOR_LINK = '.sidenav-link';\n\nconst TRANSLATION_LEFT = isRTL ? 100 : -100;\nconst TRANSLATION_RIGHT = isRTL ? -100 : 100;\n\nlet instanceCount = 0;\n\nconst OPTIONS_TYPE = {\n accordion: '(boolean)',\n backdrop: '(boolean)',\n backdropClass: '(null|string)',\n closeOnEsc: '(boolean)',\n color: '(string)',\n content: '(null|string)',\n expandable: '(boolean)',\n expandOnHover: '(boolean)',\n focusTrap: '(boolean)',\n hidden: '(boolean)',\n mode: '(string)',\n scrollContainer: '(null|string)',\n slim: '(boolean)',\n slimCollapsed: '(boolean)',\n slimWidth: '(number)',\n position: '(string)',\n right: '(boolean)',\n transitionDuration: '(number)',\n width: '(number)',\n};\n\nconst DEFAULT_OPTIONS = {\n accordion: false,\n backdrop: true,\n backdropClass: null,\n closeOnEsc: true,\n color: 'primary',\n content: null,\n expandable: true,\n expandOnHover: false,\n focusTrap: true,\n hidden: true,\n mode: 'over',\n scrollContainer: null,\n slim: false,\n slimCollapsed: false,\n slimWidth: 77,\n position: 'fixed',\n right: false,\n transitionDuration: 300,\n width: 240,\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Sidenav extends BaseComponent {\n constructor(node, options = {}) {\n super(node);\n\n this._options = options;\n\n instanceCount++;\n this._ID = instanceCount;\n\n this._backdrop = null;\n this._content = null;\n this._initialContentStyle = null;\n this._slimCollapsed = false;\n\n this._activeNode = null;\n\n this._tempSlim = false;\n\n this._focusTrap = null;\n this._perfectScrollbar = null;\n this._touch = null;\n\n this.escHandler = (e) => {\n if (e.keyCode === ESCAPE && this.toggler && isVisible(this.toggler)) {\n this._update(false);\n\n EventHandler.off(window, 'keydown', this.escHandler);\n }\n };\n\n this.hashHandler = () => {\n this._setActiveElements();\n };\n\n if (node) {\n this._setup();\n }\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n get container() {\n if (this.options.position === 'fixed') {\n return SelectorEngine.findOne('body');\n }\n\n const findContainer = (el) => {\n if (!el.parentNode || el.parentNode === document) {\n return el;\n }\n const isRelative =\n el.parentNode.style.position === 'relative' ||\n el.parentNode.classList.contains('position-relative');\n if (isRelative) {\n return el.parentNode;\n }\n return findContainer(el.parentNode);\n };\n\n return findContainer(this._element);\n }\n\n get isVisible() {\n let containerStart = 0;\n let containerEnd = window.innerWidth;\n\n if (this.options.position !== 'fixed') {\n const boundry = this.container.getBoundingClientRect();\n containerStart = boundry.x;\n containerEnd = boundry.x + boundry.width;\n }\n\n const { x } = this._element.getBoundingClientRect();\n\n if ((this.options.right && !isRTL) || (!this.options.right && isRTL)) {\n let scrollBarWidth = 0;\n // check if there is scrollbar and account for it width if there is one\n if (this.container.scrollHeight > this.container.clientHeight) {\n scrollBarWidth = this.container.offsetWidth - this.container.clientWidth;\n }\n\n if (this.container.tagName === 'BODY') {\n const documentWidth = document.documentElement.clientWidth;\n scrollBarWidth = Math.abs(window.innerWidth - documentWidth);\n }\n\n return Math.abs(x + scrollBarWidth - containerEnd) > 10;\n }\n return Math.abs(x - containerStart) < 10;\n }\n\n get links() {\n return SelectorEngine.find(SELECTOR_LINK, this._element);\n }\n\n get navigation() {\n return SelectorEngine.find(SELECTOR_NAVIGATION, this._element);\n }\n\n get options() {\n const config = {\n ...DEFAULT_OPTIONS,\n ...Manipulator.getDataAttributes(this._element),\n ...this._options,\n };\n\n typeCheckConfig(NAME, config, OPTIONS_TYPE);\n\n return config;\n }\n\n get sidenavStyle() {\n return {\n width: `${this.width}px`,\n height: this.options.position === 'fixed' ? '100vh' : '100%',\n position: this.options.position,\n transitionDuration: this.transitionDuration,\n transitionProperty: 'transform, width, padding, margin',\n transitionTimingFunction: 'linear',\n };\n }\n\n get toggler() {\n const toggleElement = SelectorEngine.find(SELECTOR_TOGGLE).find((toggler) => {\n const target = Manipulator.getDataAttribute(toggler, 'target');\n return SelectorEngine.findOne(target) === this._element;\n });\n return toggleElement;\n }\n\n get transitionDuration() {\n return `${this.options.transitionDuration / 1000}s`;\n }\n\n get translation() {\n return this.options.right ? TRANSLATION_RIGHT : TRANSLATION_LEFT;\n }\n\n get width() {\n return this._slimCollapsed ? this.options.slimWidth : this.options.width;\n }\n\n // Public\n\n changeMode(mode) {\n this._setMode(mode);\n }\n\n dispose() {\n if (this._backdrop) {\n this._removeBackdrop();\n }\n\n EventHandler.off(window, 'keydown', this.escHandler);\n\n EventHandler.off(window, 'hashchange', this.hashHandler);\n\n this._touch.dispose();\n\n Data.removeData(this._element, DATA_KEY);\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n hide() {\n this._setVisibility(false);\n this._update(false);\n }\n\n show() {\n this._setVisibility(true);\n this._update(true);\n }\n\n toggle() {\n this._setVisibility(!this.isVisible);\n this._update(!this.isVisible);\n }\n\n toggleSlim() {\n this._setSlim(!this._slimCollapsed);\n }\n\n update(options) {\n this._options = options;\n\n this._setup();\n }\n\n // Private\n\n _appendArrow(node) {\n const arrow = element('i');\n\n ['fas', 'fa-angle-down', ARROW_CLASS].forEach((className) => {\n Manipulator.addClass(arrow, className);\n });\n\n if (SelectorEngine.find(`.${ARROW_CLASS}`, node).length === 0) {\n node.appendChild(arrow);\n }\n }\n\n _collapseItems() {\n this.navigation.forEach((menu) => {\n const collapseElements = SelectorEngine.find(SELECTOR_COLLAPSE, menu);\n collapseElements.forEach((el) => {\n Collapse.getInstance(el).hide();\n });\n });\n }\n\n _setupBackdrop() {\n const classes = [];\n if (this.options.backdropClass) {\n classes.push(this.options.backdropClass);\n }\n const style = {\n transition: `opacity ${this.transitionDuration} ease-out`,\n position: this.options.position,\n width: this.options.position === 'fixed' ? '100vw' : '100%',\n height: this.options.position === 'fixed' ? '100vh' : '100%',\n };\n\n if (!this._backdrop) {\n const backdrop = element('div');\n\n classes.push(BACKDROP_CLASS);\n style.opacity = 0;\n\n EventHandler.on(backdrop, 'click', () => {\n this._setVisibility(false);\n this._update(false);\n });\n\n this._backdrop = backdrop;\n }\n\n this._backdrop.classList.add(...classes);\n\n Manipulator.style(this._backdrop, style);\n }\n\n _getOffsetValue(show, { index, property, offsets }) {\n const initialValue = this._getPxValue(\n this._initialContentStyle[index][offsets[property].property]\n );\n const offset = show ? offsets[property].value : 0;\n return initialValue + offset;\n }\n\n _getProperty(...args) {\n return args\n .map((arg, i) => {\n if (i === 0) {\n return arg;\n }\n return arg[0].toUpperCase().concat(arg.slice(1));\n })\n .join('');\n }\n\n _getPxValue(property) {\n if (!property) {\n return 0;\n }\n return parseFloat(property);\n }\n\n _handleSwipe(e, inverseDirecion) {\n if (inverseDirecion && this._slimCollapsed && this.options.slim && this.options.expandable) {\n this.toggleSlim();\n } else if (!inverseDirecion) {\n if (this._slimCollapsed || !this.options.slim || !this.options.expandable) {\n if (this.toggler && isVisible(this.toggler)) {\n this.toggle();\n }\n } else {\n this.toggleSlim();\n }\n }\n }\n\n _isActive(link, reference) {\n if (reference) {\n return reference === link;\n }\n\n if (link.attributes.href) {\n return new URL(link, window.location.href).href === window.location.href;\n }\n\n return false;\n }\n\n _isAllToBeCollapsed() {\n const collapseElements = SelectorEngine.find(SELECTOR_TOGGLE_COLLAPSE, this._element);\n const collapseElementsExpanded = collapseElements.filter(\n (collapsible) => collapsible.getAttribute('aria-expanded') === 'true'\n );\n return collapseElementsExpanded.length === 0;\n }\n\n _isAllCollapsed() {\n return (\n SelectorEngine.find(SELECTOR_COLLAPSE, this._element).filter((el) => isVisible(el)).length ===\n 0\n );\n }\n\n _setup() {\n // Touch events\n this._setupTouch();\n\n // Focus trap\n\n if (this.options.focusTrap) {\n this._setupFocusTrap();\n }\n\n // Backdrop\n\n if (this.options.backdrop) {\n this._setupBackdrop();\n\n if (!this.options.hidden && this.options.mode === 'over') {\n this._appendBackdrop();\n }\n }\n\n // Collapse\n\n this._setupCollapse();\n\n // Slim\n\n if (this.options.slimCollapsed) {\n Manipulator.addClass(this._element, 'sidenav-slim');\n }\n\n if (this.options.slim) {\n this._setupSlim();\n }\n\n // Initial position\n\n this._setupInitialStyling();\n\n // Perfect Scrollbar\n\n this._setupScrolling();\n\n // Content\n\n if (this.options.content) {\n this._setupContent();\n }\n\n // Active link\n\n this._setupActiveState();\n\n // Ripple\n\n this._setupRippleEffect();\n\n // Shown on init\n\n if (!this.options.hidden) {\n if (this.options.right) {\n this.show();\n }\n this._updateOffsets(true, true);\n }\n }\n\n _setupActiveState() {\n this._setActiveElements();\n\n this.links.forEach((link) => {\n EventHandler.on(link, 'click', () => this._setActiveElements(link));\n EventHandler.on(link, 'keydown', (e) => {\n if (e.keyCode === ENTER) {\n this._setActiveElements(link);\n }\n });\n });\n\n EventHandler.on(window, 'hashchange', this.hashHandler);\n }\n\n _setupCollapse() {\n this.navigation.forEach((menu, menuIndex) => {\n const categories = SelectorEngine.find(SELECTOR_COLLAPSE, menu);\n categories.forEach((list, index) =>\n this._setupCollapseList({ list, index, menu, menuIndex })\n );\n });\n }\n\n _generateCollpaseID(index, menuIndex) {\n return `sidenav-collapse-${this._ID}-${menuIndex}-${index}`;\n }\n\n _setupCollapseList({ list, index, menu, menuIndex }) {\n const ID = this._generateCollpaseID(index, menuIndex);\n\n list.classList.add('collapse');\n list.setAttribute('id', ID);\n\n const [toggler] = SelectorEngine.prev(list, SELECTOR_LINK);\n\n Manipulator.setDataAttribute(toggler, 'collapse-init', '');\n toggler.setAttribute('href', `#${ID}`);\n toggler.setAttribute('role', 'button');\n\n const instance =\n Collapse.getInstance(list) ||\n new Collapse(list, {\n toggle: false,\n parent: this.options.accordion ? menu : list,\n });\n\n // Arrow\n\n this._appendArrow(toggler);\n\n if (Manipulator.hasClass(list, 'show')) {\n this._rotateArrow(toggler, 180);\n }\n\n // Event listeners\n\n EventHandler.on(toggler, 'click', (e) => {\n this._toggleCategory(e, instance, list);\n if (this._tempSlim && this._isAllToBeCollapsed()) {\n this._setSlim(true);\n\n this._tempSlim = false;\n }\n\n if (this.options.mode === 'over' && this._focusTrap) {\n this._focusTrap.update();\n }\n });\n\n EventHandler.on(list, 'show.bs.collapse', () => this._rotateArrow(toggler, 180));\n\n EventHandler.on(list, 'hide.bs.collapse', () => this._rotateArrow(toggler, 0));\n\n EventHandler.on(list, 'shown.bs.collapse', () => {\n if (this.options.mode === 'over' && this._focusTrap) {\n this._focusTrap.update();\n }\n });\n\n EventHandler.on(list, 'hidden.bs.collapse', () => {\n if (this._tempSlim && this._isAllCollapsed()) {\n this._setSlim(true);\n\n this._tempSlim = false;\n }\n if (this.options.mode === 'over' && this._focusTrap) {\n this._focusTrap.update();\n }\n });\n }\n\n _setupContent() {\n this._content = SelectorEngine.find(this.options.content);\n if (!this._initialContentStyle) {\n this._initialContentStyle = this._content.map((el) => {\n const { paddingLeft, paddingRight, marginLeft, marginRight, transition } =\n window.getComputedStyle(el);\n return { paddingLeft, paddingRight, marginLeft, marginRight, transition };\n });\n }\n }\n\n _setupFocusTrap() {\n this._focusTrap = new FocusTrap(\n this._element,\n {\n event: 'keydown',\n condition: (e) => e.keyCode === TAB,\n onlyVisible: true,\n },\n this.toggler\n );\n }\n\n _setupInitialStyling() {\n this._setColor();\n Manipulator.style(this._element, this.sidenavStyle);\n }\n\n _setupScrolling() {\n let container = this._element;\n\n if (this.options.scrollContainer) {\n container = SelectorEngine.findOne(this.options.scrollContainer, this._element);\n\n const siblings = array(container.parentNode.children).filter((el) => el !== container);\n\n const siblingsHeight = siblings.reduce((a, b) => {\n return a + b.clientHeight;\n }, 0);\n\n Manipulator.style(container, {\n maxHeight: `calc(100% - ${siblingsHeight}px)`,\n position: 'relative',\n });\n }\n\n this._perfectScrollbar = new PerfectScrollbar(container, {\n suppressScrollX: true,\n handlers: ['click-rail', 'drag-thumb', 'wheel', 'touch'],\n });\n }\n\n _setupSlim() {\n this._slimCollapsed = this.options.slimCollapsed;\n\n this._toggleSlimDisplay(this._slimCollapsed);\n\n if (this.options.expandOnHover) {\n this._element.addEventListener('mouseenter', () => {\n if (this._slimCollapsed) {\n this._setSlim(false);\n }\n });\n\n this._element.addEventListener('mouseleave', () => {\n if (!this._slimCollapsed) {\n this._setSlim(true);\n }\n });\n }\n }\n\n _setupRippleEffect() {\n this.links.forEach((link) => {\n let wave = Ripple.getInstance(link);\n\n if (wave && wave._options.color !== this.options.color) {\n wave.dispose();\n } else if (wave) {\n return;\n }\n\n wave = new Ripple(link, { rippleColor: this.options.color });\n });\n }\n\n _setupTouch() {\n this._touch = new Touch(this._element, 'swipe', { threshold: 20 });\n this._touch.init();\n\n EventHandler.on(this._element, 'swipeleft', (e) => this._handleSwipe(e, this.options.right));\n\n EventHandler.on(this._element, 'swiperight', (e) => this._handleSwipe(e, !this.options.right));\n }\n\n _setActive(link, reference) {\n // Link\n Manipulator.addClass(link, 'active');\n\n if (this._activeNode) {\n this._activeNode.classList.remove('active');\n }\n this._activeNode = link;\n\n // Collapse\n\n const [collapse] = SelectorEngine.parents(this._activeNode, SELECTOR_COLLAPSE);\n\n if (!collapse) {\n this._setActiveCategory();\n return;\n }\n\n // Category\n\n const [category] = SelectorEngine.prev(collapse, SELECTOR_LINK);\n this._setActiveCategory(category);\n\n // Expand active collapse\n\n if (!reference && !this._slimCollapsed) {\n Collapse.getInstance(collapse).show();\n }\n }\n\n _setActiveCategory(el) {\n this.navigation.forEach((menu) => {\n const categories = SelectorEngine.find(SELECTOR_COLLAPSE, menu);\n\n categories.forEach((collapse) => {\n const [collapseToggler] = SelectorEngine.prev(collapse, SELECTOR_LINK);\n\n if (collapseToggler !== el) {\n collapseToggler.classList.remove('active');\n } else {\n Manipulator.addClass(collapseToggler, 'active');\n }\n });\n });\n }\n\n _setActiveElements(reference) {\n this.navigation.forEach((menu) => {\n const links = SelectorEngine.find(SELECTOR_LINK, menu);\n links\n .filter((link) => {\n return SelectorEngine.next(link, SELECTOR_COLLAPSE).length === 0;\n })\n .forEach((link) => {\n if (this._isActive(link, reference) && link !== this._activeNode) {\n this._setActive(link, reference);\n }\n });\n });\n }\n\n _setColor() {\n const colors = [\n 'primary',\n 'secondary',\n 'success',\n 'info',\n 'warning',\n 'danger',\n 'light',\n 'dark',\n ];\n const { color: optionColor } = this.options;\n const color = colors.includes(optionColor) ? optionColor : 'primary';\n\n colors.forEach((color) => {\n this._element.classList.remove(`sidenav-${color}`);\n });\n\n Manipulator.addClass(this._element, `sidenav-${color}`);\n }\n\n _setContentOffsets(show, offsets, initial) {\n this._content.forEach((el, i) => {\n const padding = this._getOffsetValue(show, { index: i, property: 'padding', offsets });\n const margin = this._getOffsetValue(show, { index: i, property: 'margin', offsets });\n\n const style = {};\n\n if (!initial) {\n style.transition = `all ${this.transitionDuration} linear`;\n }\n\n style[offsets.padding.property] = `${padding}px`;\n\n style[offsets.margin.property] = `${margin}px`;\n\n Manipulator.style(el, style);\n\n if (!show) {\n return;\n }\n\n if (initial) {\n Manipulator.style(el, { transition: this._initialContentStyle[i].transition });\n return;\n }\n\n EventHandler.on(el, 'transitionend', () => {\n Manipulator.style(el, { transition: this._initialContentStyle[i].transition });\n });\n });\n }\n\n _setMode(mode) {\n if (this.options.mode === mode) {\n return;\n }\n\n this._options.mode = mode;\n\n this._update(this.isVisible);\n }\n\n _setSlim(value) {\n const events = value ? ['collapse', 'collapsed'] : ['expand', 'expanded'];\n this._triggerEvents(...events);\n\n if (value) {\n this._collapseItems();\n Manipulator.addClass(this._element, 'sidenav-slim');\n } else {\n Manipulator.removeClass(this._element, 'sidenav-slim');\n }\n\n this._slimCollapsed = value;\n\n this._toggleSlimDisplay(value);\n\n Manipulator.style(this._element, { width: `${this.width}px` });\n\n this._updateOffsets(this.isVisible);\n }\n\n _setTabindex(value) {\n this.links.forEach((link) => {\n link.tabIndex = value ? 1 : -1;\n });\n }\n\n _setVisibility(show) {\n const events = show ? ['show', 'shown'] : ['hide', 'hidden'];\n\n this._triggerEvents(...events);\n }\n\n _rotateArrow(toggler, angle) {\n const [arrow] = SelectorEngine.children(toggler, `.${ARROW_CLASS}`);\n if (!arrow) {\n return;\n }\n Manipulator.style(arrow, {\n transform: `rotate(${angle}deg)`,\n });\n }\n\n async _toggleBackdrop(value) {\n if (value && this.options.mode === 'over') {\n this._appendBackdrop();\n } else {\n Manipulator.style(this._backdrop, { opacity: 0 });\n\n await setTimeout(() => {\n this._removeBackdrop();\n }, this.options.transitionDuration);\n }\n }\n\n _removeBackdrop() {\n if (this._backdrop.parentNode === this.container) {\n this.container.removeChild(this._backdrop);\n }\n }\n\n _appendBackdrop() {\n this.container.appendChild(this._backdrop);\n\n setTimeout(() => Manipulator.style(this._backdrop, { opacity: 1 }), 0);\n }\n\n _toggleCategory(e, instance) {\n e.preventDefault();\n\n instance.toggle();\n\n if (this._slimCollapsed && this.options.expandable) {\n this._tempSlim = true;\n\n this._setSlim(false);\n }\n }\n\n _toggleSlimDisplay(slim) {\n const slimCollapsedElements = SelectorEngine.find(SELECTOR_SHOW_SLIM, this._element);\n const fullWidthElements = SelectorEngine.find(SELECTOR_HIDE_SLIM, this._element);\n\n const toggleElements = () => {\n slimCollapsedElements.forEach((el) => {\n Manipulator.style(el, { display: this._slimCollapsed ? 'unset' : 'none' });\n });\n\n fullWidthElements.forEach((el) => {\n Manipulator.style(el, { display: this._slimCollapsed ? 'none' : 'unset' });\n });\n };\n\n if (slim) {\n setTimeout(() => toggleElements(true), this.options.transitionDuration);\n } else {\n toggleElements();\n }\n }\n\n async _triggerEvents(startEvent, completeEvent) {\n EventHandler.trigger(this._element, `${startEvent}.mdb.sidenav`);\n\n if (completeEvent) {\n await setTimeout(() => {\n EventHandler.trigger(this._element, `${completeEvent}.mdb.sidenav`);\n }, this.options.transitionDuration + 5);\n }\n }\n\n _update(show) {\n if (this.toggler) {\n this._updateTogglerAria(show);\n }\n\n this._updateDisplay(show);\n\n if (this.options.backdrop) {\n this._toggleBackdrop(show);\n }\n\n this._updateOffsets(show);\n\n if (show && this.options.closeOnEsc && this.options.mode !== 'side') {\n EventHandler.on(window, 'keydown', this.escHandler);\n }\n\n if (this.options.focusTrap) {\n this._updateFocus(show);\n }\n }\n\n _updateDisplay(value) {\n const translation = value ? 0 : this.translation;\n Manipulator.style(this._element, { transform: `translateX(${translation}%)` });\n }\n\n _updateFocus(show) {\n this._setTabindex(show);\n\n if (this.options.mode === 'over' && this.options.focusTrap) {\n if (show) {\n this._focusTrap.trap();\n return;\n }\n\n this._focusTrap.disable();\n }\n\n this._focusTrap.disable();\n }\n\n _updateOffsets(show, initial = false) {\n const [paddingPosition, marginPosition] =\n (this.options.right && !isRTL) || (!this.options.right && isRTL)\n ? ['right', 'left']\n : ['left', 'right'];\n\n const padding = {\n property: this._getProperty('padding', paddingPosition),\n value: this.options.mode === 'over' ? 0 : this.width,\n };\n\n const margin = {\n property: this._getProperty('margin', marginPosition),\n value: this.options.mode === 'push' ? -1 * this.width : 0,\n };\n\n EventHandler.trigger(this._element, 'update.mdb.sidenav', { margin, padding });\n\n if (!this._content) {\n return;\n }\n\n this._setContentOffsets(show, { padding, margin }, initial);\n }\n\n _updateTogglerAria(value) {\n this.toggler.setAttribute('aria-expanded', value);\n }\n\n // Static\n\n static toggleSidenav() {\n return function (e) {\n const toggler = SelectorEngine.closest(e.target, SELECTOR_TOGGLE);\n\n const elementSelector = Manipulator.getDataAttributes(toggler).target;\n\n SelectorEngine.find(elementSelector).forEach((element) => {\n const instance = Sidenav.getInstance(element) || new Sidenav(element);\n instance.toggle();\n });\n };\n }\n\n static jQueryInterface(config, options) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data && /dispose/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Sidenav(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](options);\n }\n });\n }\n}\n\nexport default Sidenav;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport { enableDismissTrigger } from './util/component-functions.js';\nimport { defineJQueryPlugin } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'alert';\nconst DATA_KEY = 'bs.alert';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME;\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n if (closeEvent.defaultPrevented) {\n return;\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW);\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE);\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n }\n\n // Private\n _destroyElement() {\n this._element.remove();\n EventHandler.trigger(this._element, EVENT_CLOSED);\n this.dispose();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\n// enableDismissTrigger(Alert, 'close');\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Alert);\n\nexport default Alert;\n","import SelectorEngine from '../dom/selector-engine';\nimport { isVisible, typeCheckConfig } from './index';\n\nconst NAME = 'Stack';\n\nconst DEFAULT_OPTIONS = {\n position: 'top',\n container: null,\n refresh: 1000,\n filter: (el) => {\n return el;\n },\n};\n\nconst TYPE_OPTIONS = {\n position: 'string',\n container: '(undefined|null|string)',\n refresh: 'number',\n filter: 'function',\n};\n\nclass Stack {\n constructor(element, selector, options) {\n this._element = element;\n this._selector = selector;\n this._options = this._getConfig(options);\n\n this._offset = null;\n\n if (this._options.container) {\n this._parent = SelectorEngine.findOne(this._options.container);\n }\n }\n\n get stackableElements() {\n return SelectorEngine.find(this._selector)\n .filter((el, i) => this._options.filter(el, i))\n .map((el) => ({ el, rect: el.getBoundingClientRect() }))\n .filter(({ el, rect }) => {\n const basicCondition = el !== this._element && isVisible(el);\n if (this._offset === null) {\n return basicCondition;\n }\n\n return basicCondition && this._getBoundryOffset(rect) < this._offset;\n })\n .sort((a, b) => {\n return this._getBoundryOffset(b.rect) - this._getBoundryOffset(a.rect);\n });\n }\n\n get nextElements() {\n return SelectorEngine.find(this._selector)\n .filter((el) => el !== this._element)\n .filter((el, i) => this._options.filter(el, i))\n .filter((el) => {\n this._offset = null;\n return this._getBoundryOffset(el.getBoundingClientRect()) > this._offset;\n });\n }\n\n _getConfig(options) {\n const config = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n\n typeCheckConfig(NAME, config, TYPE_OPTIONS);\n\n return config;\n }\n\n _getBoundryOffset(rect) {\n const { position } = this._options;\n\n let parentTopOffset = 0;\n let parentBottomBoundry = window.innerHeight;\n\n if (this._parent) {\n const parentRect = this._parent.getBoundingClientRect();\n\n parentTopOffset = parentRect.top;\n parentBottomBoundry = parentRect.bottom;\n }\n\n if (position === 'top') {\n return rect.top - parentTopOffset;\n }\n return parentBottomBoundry - rect.bottom;\n }\n\n calculateOffset() {\n const [previousElement] = this.stackableElements;\n\n if (!previousElement) {\n this._offset = 0;\n } else {\n this._offset = this._getBoundryOffset(previousElement.rect) + previousElement.rect.height;\n }\n\n return this._offset;\n }\n}\n\nexport default Stack;\n","import { typeCheckConfig, isVisible } from '../mdb/util/index';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BSAlert from '../bootstrap/mdb-prefix/alert';\nimport Stack from '../mdb/util/stack';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert';\nconst SELECTOR_ALERT = '.alert';\n\nconst DefaultType = {\n position: '(string || null)',\n delay: 'number',\n autohide: 'boolean',\n width: '(string || null)',\n offset: 'number',\n stacking: 'boolean',\n hidden: 'boolean',\n appendToBody: 'boolean',\n color: '(string || null)',\n container: '(string|null)',\n};\n\nconst Default = {\n position: null,\n delay: 1000,\n autohide: false,\n width: null,\n offset: 10,\n stacking: false,\n hidden: false,\n appendToBody: false,\n color: null,\n container: null,\n};\n\nconst EVENT_CLOSE_BS = 'close.bs.alert';\nconst EVENT_CLOSED_BS = 'closed.bs.alert';\n\nconst EXTENDED_EVENTS = [{ name: 'close' }, { name: 'closed' }];\n\nclass Alert extends BSAlert {\n constructor(element, data = {}) {\n super(element, data);\n this._options = this._getConfig(data);\n\n this._init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n dispose() {\n EventHandler.off(this._element, EVENT_CLOSE_BS);\n EventHandler.off(this._element, EVENT_CLOSED_BS);\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Getters\n\n get verticalOffset() {\n if (!this._options.stacking) return 0;\n\n return this.stackUtil.calculateOffset();\n }\n\n get parent() {\n const [parent] = SelectorEngine.parents(this._element, this._options.container);\n return parent;\n }\n\n get position() {\n const [y, x] = this._options.position.split('-');\n return { y, x };\n }\n\n // Public\n\n update(updatedData = {}) {\n if (this._timeout !== null) {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n this._options = this._getConfig(updatedData);\n this._setup();\n }\n\n hide() {\n if (!this._element) {\n return;\n }\n\n if (this._element.classList.contains('show')) {\n Manipulator.toggleClass(this._element, 'show');\n const handler = (e) => {\n Manipulator.style(e.target, {\n display: 'none',\n });\n if (this._timeout !== null) {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n\n if (this._options.stacking) {\n this._updateAlertStack();\n }\n\n EventHandler.off(e.target, 'transitionend', handler);\n };\n\n EventHandler.on(this._element, 'transitionend', handler);\n }\n }\n\n show() {\n if (this._options.autohide) {\n this._setupAutohide();\n }\n if (!this._element.classList.contains('show')) {\n Manipulator.style(this._element, {\n display: 'block',\n });\n if (isVisible(this._element)) {\n const handler = (e) => {\n Manipulator.style(e.target, {\n display: 'block',\n });\n EventHandler.off(e.target, 'transitionend', handler);\n };\n Manipulator.toggleClass(this._element, 'show');\n if (this._options.position) {\n this._setupAlignment();\n }\n EventHandler.on(this._element, 'transitionend', handler);\n }\n }\n }\n\n // Private\n\n _init() {\n if (this._options.hidden) {\n Manipulator.style(this._element, {\n display: 'none',\n });\n }\n\n this._bindMdbEvents();\n\n this._setup();\n }\n\n _setup() {\n if (this._options.color) {\n this._setColor();\n }\n\n if (this._options.stacking) {\n this._setupStacking();\n }\n\n if (this._options.autohide) {\n this._setupAutohide();\n }\n if (this._options.width) {\n this._setupWidth();\n }\n if (this._options.appendToBody) {\n this._appendToBody();\n }\n if (!this._options.position) {\n return;\n }\n this._setupAlignment();\n this._setupPosition();\n }\n\n _setupStacking() {\n this.stackUtil = new Stack(this._element, SELECTOR_ALERT, {\n position: this.position.y,\n offset: this._options.offset,\n container: this._options.container,\n filter: (el) => {\n const instance = Alert.getInstance(el);\n\n if (!instance) return false;\n\n return (\n instance._options.container === this._options.container &&\n instance._options.position === this._options.position\n );\n },\n });\n\n EventHandler.on(this._element, 'closed.bs.alert', () => {\n this._updateAlertStack();\n });\n }\n\n _setColor() {\n const colors = [\n 'primary',\n 'secondary',\n 'success',\n 'info',\n 'warning',\n 'danger',\n 'light',\n 'dark',\n ];\n const color = colors.includes(this._options.color) ? this._options.color : 'primary';\n colors.forEach((color) => {\n this._element.classList.remove(`alert-${color}`);\n });\n Manipulator.addClass(this._element, `alert-${color}`);\n }\n\n _setupWidth() {\n Manipulator.style(this._element, {\n width: this._options.width,\n });\n }\n\n _setupAutohide() {\n this._timeout = setTimeout(() => {\n this.hide();\n }, this._options.delay);\n }\n\n _setupAlignment() {\n const oppositeY = this.position.y === 'top' ? 'bottom' : 'top';\n const oppositeX = this.position.x === 'left' ? 'right' : 'left';\n\n if (this.position.x === 'center') {\n Manipulator.style(this._element, {\n [this.position.y]: `${this.verticalOffset + this._options.offset}px`,\n [oppositeY]: 'unset',\n left: '50%',\n transform: 'translate(-50%)',\n });\n } else {\n Manipulator.style(this._element, {\n [this.position.y]: `${this.verticalOffset + this._options.offset}px`,\n [this.position.x]: `${this._options.offset}px`,\n [oppositeY]: 'unset',\n [oppositeX]: 'unset',\n transform: 'unset',\n });\n }\n }\n\n _setupPosition() {\n if (this._options.container) {\n Manipulator.addClass(this.parent, 'parent-alert-relative');\n Manipulator.addClass(this._element, 'alert-absolute');\n } else {\n Manipulator.addClass(this._element, 'alert-fixed');\n }\n }\n\n _appendToBody() {\n this._element.parentNode.removeChild(this._element);\n document.body.appendChild(this._element);\n }\n\n _getConfig(options) {\n const config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...options,\n };\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n\n _bindMdbEvents() {\n EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n }\n\n _updatePosition() {\n Manipulator.style(this._element, {\n [this.position.y]: `${this.verticalOffset + this._options.offset}px`,\n });\n }\n\n _updateAlertStack() {\n this.stackUtil.nextElements.forEach((el) => {\n const instance = Alert.getInstance(el);\n\n if (!instance) {\n return;\n }\n\n instance._updatePosition();\n });\n }\n}\n\nexport default Alert;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport { enableDismissTrigger } from './util/component-functions.js';\nimport { defineJQueryPlugin, reflow } from './util/index.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\n\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number',\n};\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000,\n};\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n this._timeout = null;\n this._hasMouseInteraction = false;\n this._hasKeyboardInteraction = false;\n this._setListeners();\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n\n static get DefaultType() {\n return DefaultType;\n }\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n if (showEvent.defaultPrevented) {\n return;\n }\n\n this._clearTimeout();\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE);\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING);\n EventHandler.trigger(this._element, EVENT_SHOWN);\n\n this._maybeScheduleHide();\n };\n\n this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n\n this._queueCallback(complete, this._element, this._config.animation);\n }\n\n hide() {\n if (!this.isShown()) {\n return;\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n EventHandler.trigger(this._element, EVENT_HIDDEN);\n };\n\n this._element.classList.add(CLASS_NAME_SHOWING);\n this._queueCallback(complete, this._element, this._config.animation);\n }\n\n dispose() {\n this._clearTimeout();\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW);\n }\n\n super.dispose();\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW);\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return;\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return;\n }\n\n this._timeout = setTimeout(() => {\n this.hide();\n }, this._config.delay);\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting;\n break;\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting;\n break;\n }\n\n default: {\n break;\n }\n }\n\n if (isInteracting) {\n this._clearTimeout();\n return;\n }\n\n const nextElement = event.relatedTarget;\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return;\n }\n\n this._maybeScheduleHide();\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, (event) => this._onInteraction(event, true));\n EventHandler.on(this._element, EVENT_MOUSEOUT, (event) => this._onInteraction(event, false));\n EventHandler.on(this._element, EVENT_FOCUSIN, (event) => this._onInteraction(event, true));\n EventHandler.on(this._element, EVENT_FOCUSOUT, (event) => this._onInteraction(event, false));\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config);\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](this);\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\n// enableDismissTrigger(Toast);\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Toast);\n\nexport default Toast;\n","import { typeCheckConfig } from '../mdb/util/index';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BSToast from '../bootstrap/mdb-prefix/toast';\nimport Stack from '../mdb/util/stack';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NAME = 'toast';\nconst SELECTOR_TOAST = '.toast';\nconst SELECTOR_HEADER = '.toast-header';\n\nconst EVENT_SHOW_BS = 'show.bs.toast';\nconst EVENT_SHOWN_BS = 'shown.bs.toast';\nconst EVENT_HIDE_BS = 'hide.bs.toast';\nconst EVENT_HIDDEN_BS = 'hidden.bs.toast';\n\nconst EVENT_SHOW = 'show.mdb.toast';\nconst EVENT_HIDDEN = 'hidden.mdb.toast';\n\nconst EXTENDED_EVENTS = [{ name: 'shown' }, { name: 'hide' }];\n\nconst DefaultType = {\n position: '(string|null)',\n animation: 'boolean',\n autohide: 'boolean',\n width: '(string || null)',\n color: '(string|null)',\n delay: '(boolean|number)',\n offset: 'number',\n appendToBody: 'boolean',\n stacking: 'boolean',\n};\n\nconst Default = {\n position: null,\n animation: true,\n autohide: true,\n width: null,\n color: null,\n delay: 500,\n offset: 10,\n appendToBody: false,\n stacking: true,\n};\n\nclass Toast extends BSToast {\n constructor(element, data = {}) {\n super(element, data);\n this._config = this._getConfig(data);\n this._setup();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n // Getters\n\n get parent() {\n const [parent] = SelectorEngine.parents(this._element, this._config.container);\n return parent;\n }\n\n get position() {\n if (!this._config.position) return null;\n const [y, x] = this._config.position.split('-');\n return { y, x };\n }\n\n get verticalOffset() {\n if (!this._config.stacking || !this.position) return 0;\n\n return this.stackUtil.calculateOffset();\n }\n\n // Public\n\n update(updatedData = {}) {\n this._config = this._getConfig(updatedData);\n this._setupColor();\n\n if (!this._config.position) {\n return;\n }\n\n if (this._config.stacking) {\n this._setupStacking();\n\n EventHandler.on(this._element, 'hidden.bs.toast', () => {\n setTimeout(() => this._updateToastStack(), 150);\n });\n }\n\n this._setupPosition();\n this._setupAlignment();\n }\n\n dispose() {\n EventHandler.off(this._element, EVENT_SHOW_BS);\n EventHandler.off(this._element, EVENT_SHOWN_BS);\n EventHandler.off(this._element, EVENT_HIDE_BS);\n EventHandler.off(this._element, EVENT_HIDDEN_BS);\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Private\n\n _setup() {\n this._setupColor();\n if (this._config.width) {\n this._setupWidth();\n }\n if (!this._config.position) {\n return;\n }\n\n if (this._config.stacking) {\n this._setupStacking();\n\n EventHandler.on(this._element, 'hidden.bs.toast', () => {\n setTimeout(() => this._updateToastStack(), 150);\n });\n }\n\n this._setupPosition();\n this._setupDisplay();\n if (!this._config.container && this._config.appendToBody) {\n this._appendToBody();\n }\n\n this._bindMdbEvents();\n }\n\n _setupStacking() {\n this.stackUtil = new Stack(this._element, SELECTOR_TOAST, {\n position: this.position.y,\n offset: this._config.offset,\n container: this._config.container,\n filter: (el) => {\n const instance = Toast.getInstance(el);\n\n if (!instance) return false;\n\n return (\n instance._config.container === this._config.container &&\n instance._config.position === this._config.position\n );\n },\n });\n\n EventHandler.on(this._element, 'closed.bs.alert', () => {\n this._updateAlertStack();\n });\n }\n\n _setupColor() {\n if (!this._config.color) {\n return;\n }\n\n const header = SelectorEngine.findOne(SELECTOR_HEADER, this._element);\n\n const toasts = [\n 'primary',\n 'secondary',\n 'success',\n 'info',\n 'warning',\n 'danger',\n 'light',\n 'dark',\n ];\n\n const color = toasts.includes(this._config.color) ? this._config.color : 'primary';\n\n toasts.forEach((color) => {\n this._element.classList.remove(`toast-${color}`);\n if (header) header.classList.remove(`toast-${color}`);\n });\n\n Manipulator.addClass(this._element, `toast-${color}`);\n if (header) Manipulator.addClass(header, `toast-${color}`);\n }\n\n _setupWidth() {\n Manipulator.style(this._element, {\n width: this._config.width,\n });\n }\n\n _setupPosition() {\n if (this._config.container) {\n Manipulator.addClass(this.parent, 'parent-toast-relative');\n Manipulator.addClass(this._element, 'toast-absolute');\n } else {\n Manipulator.addClass(this._element, 'toast-fixed');\n }\n }\n\n _setupAlignment() {\n const oppositeY = this.position.y === 'top' ? 'bottom' : 'top';\n const oppositeX = this.position.x === 'left' ? 'right' : 'left';\n if (this.position.x === 'center') {\n Manipulator.style(this._element, {\n [this.position.y]: `${this.verticalOffset + this._config.offset}px`,\n [oppositeY]: 'unset',\n left: '50%',\n transform: 'translate(-50%)',\n });\n } else {\n Manipulator.style(this._element, {\n [this.position.y]: `${this.verticalOffset + this._config.offset}px`,\n [this.position.x]: `${this._config.offset}px`,\n [oppositeY]: 'unset',\n [oppositeX]: 'unset',\n transform: 'unset',\n });\n }\n }\n\n _setupDisplay() {\n if (!this._element.classList.contains('show')) {\n Manipulator.style(this._element, {\n display: 'none',\n });\n }\n\n EventHandler.on(this._element, EVENT_HIDDEN_BS, () => {\n EventHandler.trigger(this._element, EVENT_HIDDEN);\n\n Manipulator.style(this._element, {\n display: 'none',\n });\n });\n\n EventHandler.on(this._element, EVENT_SHOW_BS, () => {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n if (showEvent.defaultPrevented) {\n return;\n }\n\n this._setupAlignment();\n Manipulator.style(this._element, {\n display: 'block',\n });\n });\n }\n\n _bindMdbEvents() {\n EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n }\n\n _getConfig(options) {\n const config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...options,\n };\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n\n _appendToBody() {\n this._element.parentNode.removeChild(this._element);\n document.body.appendChild(this._element);\n }\n\n _updatePosition() {\n Manipulator.style(this._element, {\n [this.position.y]: `${this.verticalOffset + this._config.offset}px`,\n });\n }\n\n _updateToastStack() {\n this.stackUtil.nextElements.forEach((el) => {\n const instance = Toast.getInstance(el);\n\n if (!instance) {\n return;\n }\n\n instance._updatePosition();\n });\n }\n\n // Static\n\n static jQueryInterface(config, options = {}) {\n return this.each(function () {\n let data;\n\n if (typeof config === 'object') {\n data = new Toast(this, config);\n } else {\n data = Toast.getOrCreateInstance(this, config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](options);\n }\n });\n }\n}\n\nexport default Toast;\n","/* eslint-disable import/prefer-default-export */\n/* eslint-disable indent */\n\nexport const getTimepickerTemplate = ({\n format24,\n okLabel,\n cancelLabel,\n headId,\n footerId,\n bodyId,\n pickerId,\n clearLabel,\n inline,\n showClearBtn,\n amLabel,\n pmLabel,\n}) => {\n const normalTemplate = `<div id='${pickerId}' class='timepicker-wrapper h-100 d-flex align-items-center justify-content-center flex-column position-fixed'>\n <div class=\"d-flex align-items-center justify-content-center flex-column timepicker-container\">\n <div class=\"d-flex flex-column timepicker-elements justify-content-around\">\n <div id='${headId}' class='timepicker-head d-flex flex-row align-items-center justify-content-center'\n style='padding-right:${format24 ? 50 : 0}px'>\n <div class='timepicker-head-content d-flex w-100 justify-content-evenly'>\n <div class=\"timepicker-current-wrapper\">\n <span class=\"position-relative h-100\">\n <button type='button' class='timepicker-current timepicker-hour active ripple' tabindex=\"0\">21</button>\n </span>\n <button type='button' class='timepicker-dot' disabled>:</button>\n <span class=\"position-relative h-100\">\n <button type='button' class='timepicker-current timepicker-minute ripple' tabindex=\"0\">21</button>\n </span>\n </div>\n ${\n !format24\n ? `<div class=\"d-flex flex-column justify-content-center timepicker-mode-wrapper\">\n <button type='button' class=\"timepicker-hour-mode timepicker-am ripple\" tabindex=\"0\">${amLabel}</button>\n <button class=\"timepicker-hour-mode timepicker-pm ripple\" tabindex=\"0\">${pmLabel}</button>\n </div>`\n : ''\n }\n </div>\n </div>\n ${\n !inline\n ? `<div id='${bodyId}' class='timepicker-clock-wrapper d-flex justify-content-center flex-column align-items-center'>\n <div class='timepicker-clock'>\n <span class='timepicker-middle-dot position-absolute'></span>\n <div class='timepicker-hand-pointer position-absolute'>\n <div class='timepicker-circle position-absolute'></div>\n </div>\n ${format24 ? '<div class=\"timepicker-clock-inner\"></div>' : ''}\n </div>\n </div>`\n : ''\n }\n\n </div>\n <div id='${footerId}' class='timepicker-footer'>\n <div class=\"w-100 d-flex justify-content-between\">\n ${\n showClearBtn\n ? `<button type='button' class='timepicker-button timepicker-clear ripple' tabindex=\"0\">${clearLabel}</button>`\n : ''\n }\n <button type='button' class='timepicker-button timepicker-cancel ripple' tabindex=\"0\">${cancelLabel}</button>\n <button type='button' class='timepicker-button timepicker-submit ripple' tabindex=\"0\">${okLabel}</button>\n </div>\n </div>\n </div>\n </div>`;\n\n const inlineTemplate = `<div id='${pickerId}' class='timepicker-wrapper h-100 d-flex align-items-center justify-content-center flex-column timepicker-wrapper-inline'>\n <div class=\"d-flex align-items-center justify-content-center flex-column timepicker-container\">\n <div class=\"d-flex flex-column timepicker-elements justify-content-around timepicker-elements-inline\">\n <div id='${headId}' class='timepicker-head d-flex flex-row align-items-center justify-content-center timepicker-head-inline'\n style='padding-right:0px'>\n <div class='timepicker-head-content d-flex w-100 justify-content-evenly align-items-center'>\n <div class=\"timepicker-current-wrapper\">\n <span class=\"position-relative h-100 timepicker-inline-hour-icons\">\n <i class=\"fas fa-chevron-up position-absolute text-white timepicker-icon-up timepicker-icon-inline-hour\"></i>\n <button type='button' class='timepicker-current timepicker-hour active ripple timepicker-current-inline' tabindex=\"0\">21</button>\n <i class=\"fas fa-chevron-down position-absolute text-white timepicker-icon-down timepicker-icon-inline-hour\"></i>\n </span>\n <button type='button' class='timepicker-dot timepicker-current-inline' disabled>:</button>\n <span class=\"position-relative h-100 timepicker-inline-minutes-icons\">\n <i class=\"fas fa-chevron-up position-absolute text-white timepicker-icon-up timepicker-icon-inline-minute\"></i>\n <button type='button' class='timepicker-current timepicker-minute ripple timepicker-current-inline' tabindex=\"0\">21</button>\n <i class=\"fas fa-chevron-down position-absolute text-white timepicker-icon-down timepicker-icon-inline-minute\"></i>\n </span>\n </div>\n ${\n !format24\n ? `<div class=\"d-flex justify-content-center timepicker-mode-wrapper\">\n <button type='button' class=\"timepicker-hour-mode timepicker-am ripple me-2 ms-4\" tabindex=\"0\">${amLabel}</button>\n <button class=\"timepicker-hour-mode timepicker-pm ripple\" tabindex=\"0\">${pmLabel}</button>\n <button type='button' class='timepicker-button timepicker-submit timepicker-submit-inline ripple py-1 px-2 mb-0' tabindex=\"0\">${okLabel}</button>\n </div>`\n : ''\n }\n ${\n format24\n ? `<button class='timepicker-button timepicker-submit timepicker-submit-inline ripple py-1 px-2 mb-0' tabindex=\"0\">${okLabel}</button>`\n : ''\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n `;\n\n return inline ? inlineTemplate : normalTemplate;\n};\n\nexport const getToggleButtonTemplate = (options, id) => {\n const { iconClass } = options;\n\n return `\n <button id=\"${id}\" tabindex=\"0\" type=\"button\" class=\"timepicker-toggle-button\" data-mdb-toggle=\"timepicker\" >\n <i class=\"${iconClass}\"></i>\n </button>\n`;\n};\n","/* eslint-disable consistent-return */\nimport EventHandler from '../../mdb/dom/event-handler';\nimport Manipulator from '../../mdb/dom/manipulator';\n\n// eslint-disable-next-line import/prefer-default-export\nconst formatToAmPm = (date) => {\n if (date === '') return;\n let hours;\n let minutes;\n let amOrPm;\n let originalHours;\n\n if (isValidDate(date)) {\n hours = date.getHours();\n originalHours = hours;\n minutes = date.getMinutes();\n hours %= 12;\n\n if (hours === 0) {\n amOrPm = 'AM';\n } else if (hours > 12) {\n amOrPm = 'PM';\n }\n hours = hours || 12;\n\n if (amOrPm === undefined) {\n amOrPm = hours >= 12 ? 'PM' : 'AM';\n }\n minutes = minutes < 10 ? `0${minutes}` : minutes;\n } else {\n [hours, minutes, amOrPm] = takeValue(date, false);\n originalHours = hours;\n\n hours %= 12;\n if (hours === 0 && amOrPm === undefined) {\n amOrPm = 'AM';\n }\n hours = hours || 12;\n\n if (amOrPm === undefined) {\n amOrPm = originalHours >= 12 ? 'PM' : 'AM';\n }\n }\n\n return {\n hours,\n minutes,\n amOrPm,\n };\n};\n\nconst isValidDate = (date) => {\n // eslint-disable-next-line no-restricted-globals\n return date && Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date);\n};\n\nconst formatNormalHours = (date) => {\n if (date === '') return;\n let hours;\n let minutes;\n\n if (!isValidDate(date)) {\n [hours, minutes] = takeValue(date, false);\n } else {\n hours = date.getHours();\n minutes = date.getMinutes();\n }\n\n minutes = Number(minutes) < 10 ? `0${Number(minutes)}` : minutes;\n\n return {\n hours,\n minutes,\n };\n};\n\nconst toggleClassHandler = (event, classes) => {\n return EventHandler.on(document, event, classes, ({ target }) => {\n if (!Manipulator.hasClass(target, 'active')) {\n const allElements = document.querySelectorAll(classes);\n\n allElements.forEach((element) => {\n if (Manipulator.hasClass(element, 'active')) {\n Manipulator.removeClass(element, 'active');\n }\n });\n\n Manipulator.addClass(target, 'active');\n }\n });\n};\n\nconst findMousePosition = ({ clientX, clientY, touches }, object, isMobile = false) => {\n const { left, top } = object.getBoundingClientRect();\n let obj = {};\n if (!isMobile || !touches) {\n obj = {\n x: clientX - left,\n y: clientY - top,\n };\n } else if (isMobile && Object.keys(touches).length > 0) {\n obj = {\n x: touches[0].clientX - left,\n y: touches[0].clientY - top,\n };\n }\n\n return obj;\n};\n\nconst checkBrowser = () => {\n let result = false;\n if (\n (navigator.maxTouchPoints &&\n navigator.maxTouchPoints > 2 &&\n /MacIntel/.test(navigator.platform)) ||\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)\n ) {\n result = true;\n }\n return result;\n};\n\nconst takeValue = (element, isInput = true) => {\n let valueInput;\n if (isInput) {\n valueInput = element.value.replace(/:/gi, ' ');\n } else {\n valueInput = element.replace(/:/gi, ' ');\n }\n\n return valueInput.split(' ');\n};\n\nconst compareTimes = (time1, time2) => {\n const [time1Hour, time1Minutes, time1maxTimeFormat] = takeValue(time1, false);\n const [time2Hour, time2Minutes, time2maxTimeFormat] = takeValue(time2, false);\n const bothFormatsEqual = time1maxTimeFormat == time2maxTimeFormat;\n\n if (time1maxTimeFormat == 'PM' && time2maxTimeFormat == 'AM') {\n return 1;\n } else if (time1maxTimeFormat == 'AM' && time2maxTimeFormat == 'PM') {\n return 2;\n }\n\n if (bothFormatsEqual && time1Hour > time2Hour) {\n return 1;\n } else if (time1Hour < time2Hour) {\n return 2;\n }\n if (time1Minutes > time2Minutes) {\n return 1;\n } else if (time1Minutes < time2Minutes) {\n return 2;\n }\n};\nconst getCurrentTime = () => {\n const date = new Date();\n const currentHours = date.getHours();\n let currentMinutes = String(date.getMinutes());\n if (currentMinutes.length === 1) {\n currentMinutes = `0${currentMinutes}`;\n }\n\n const currentTime = `${currentHours}:${currentMinutes}`;\n return currentTime;\n};\n\nconst setMinTime = (minTime, disabledPast, format12) => {\n if (!disabledPast) {\n return minTime;\n }\n let currentTime = getCurrentTime();\n\n if (format12) {\n currentTime = `${formatToAmPm(currentTime).hours}:${formatToAmPm(currentTime).minutes} ${\n formatToAmPm(currentTime).amOrPm\n }`;\n }\n if ((minTime != '' && compareTimes(currentTime, minTime) == 1) || minTime === '') {\n minTime = currentTime;\n }\n return minTime;\n};\n\nconst setMaxTime = (maxTime, disabledFuture, format12) => {\n if (!disabledFuture) {\n return maxTime;\n }\n let currentTime = getCurrentTime();\n\n if (format12) {\n currentTime = `${formatToAmPm(currentTime).hours}:${formatToAmPm(currentTime).minutes} ${\n formatToAmPm(currentTime).amOrPm\n }`;\n }\n if ((maxTime != '' && compareTimes(currentTime, maxTime) == 2) || maxTime === '') {\n maxTime = currentTime;\n }\n return maxTime;\n};\n\nconst checkValueBeforeAccept = (\n { format12, maxTime, minTime, disablePast, disableFuture },\n input,\n hourHeader,\n minutesHeader\n) => {\n const minute = takeValue(input)[1];\n\n minTime = setMinTime(minTime, disablePast, format12);\n maxTime = setMaxTime(maxTime, disableFuture, format12);\n\n const [maxTimeHour, maxTimeMin, maxTimeFormat] = takeValue(maxTime, false);\n const [minTimeHour, minTimeMin, minTimeFormat] = takeValue(minTime, false);\n\n if (maxTimeFormat === undefined && minTimeFormat === undefined) {\n if (maxTimeFormat === undefined) {\n if (maxTimeHour !== '' && minTimeHour === '') {\n if (Number(hourHeader) > Number(maxTimeHour)) {\n return;\n }\n\n if (maxTimeMin !== '' && minTimeMin === undefined) {\n if (Number(hourHeader) > Number(maxTimeHour)) {\n return;\n }\n }\n } else if (maxTimeHour === '' && minTimeHour !== '') {\n if (maxTimeMin === undefined && minTimeMin !== '') {\n if (\n Number(hourHeader) < Number(minTimeHour) ||\n (Number(hourHeader) < Number(minTimeHour) && minutesHeader < Number(minTimeMin))\n ) {\n return;\n }\n }\n }\n } else if (minTimeFormat === undefined) {\n if (maxTimeHour !== '' && minTimeHour === '') {\n if (Number(hourHeader) > Number(maxTimeHour)) {\n return;\n }\n\n if (maxTimeMin !== '' && minTimeMin === undefined) {\n if (Number(hourHeader) > Number(maxTimeHour) || minutesHeader > Number(maxTimeMin)) {\n return;\n }\n }\n } else if (maxTimeHour === '' && minTimeHour !== '') {\n if (maxTimeMin === undefined && minTimeMin !== '') {\n if (Number(hourHeader) < Number(minTimeHour) || minutesHeader < Number(minTimeMin)) {\n return;\n }\n }\n }\n }\n }\n\n return [hourHeader, minute];\n};\n\nconst _verifyMaxTimeHourAndAddDisabledClass = (tips, maxTimeHour) => {\n tips.forEach((tip) => {\n if (tip.textContent === '00' || Number(tip.textContent) > maxTimeHour) {\n {\n Manipulator.addClass(tip, 'disabled');\n }\n }\n });\n};\n\nconst _verifyMinTimeHourAndAddDisabledClass = (tips, minTimeHour) => {\n tips.forEach((tip) => {\n if (tip.textContent !== '00' && Number(tip.textContent) < minTimeHour) {\n {\n Manipulator.addClass(tip, 'disabled');\n }\n }\n });\n};\n\nconst _verifyMaxTimeMinutesTipsAndAddDisabledClass = (tips, maxMinutes, maxHour, currHour) => {\n tips.forEach((tip) => {\n if (Number(tip.textContent) > maxMinutes && Number(currHour) == maxHour) {\n Manipulator.addClass(tip, 'disabled');\n }\n });\n};\n\nconst _verifyMinTimeMinutesTipsAndAddDisabledClass = (tips, minMinutes, minHour, currHour) => {\n tips.forEach((tip) => {\n if (Number(tip.textContent) < minMinutes && Number(currHour) == minHour) {\n Manipulator.addClass(tip, 'disabled');\n }\n });\n};\n\nconst _convertHourToNumber = (string) => {\n let hour;\n if (string.startsWith('0')) {\n hour = Number(string.slice(1));\n } else {\n hour = Number(string);\n }\n return hour;\n};\n\nexport {\n checkBrowser,\n findMousePosition,\n formatNormalHours,\n formatToAmPm,\n toggleClassHandler,\n checkValueBeforeAccept,\n takeValue,\n compareTimes,\n setMinTime,\n setMaxTime,\n _verifyMinTimeHourAndAddDisabledClass,\n _verifyMaxTimeMinutesTipsAndAddDisabledClass,\n _verifyMinTimeMinutesTipsAndAddDisabledClass,\n _verifyMaxTimeHourAndAddDisabledClass,\n _convertHourToNumber,\n};\n","/* eslint-disable consistent-return */\n/* eslint-disable no-else-return */\nimport { createPopper } from '@popperjs/core';\nimport ScrollBarHelper from '../../bootstrap/mdb-prefix/util/scrollbar';\nimport { typeCheckConfig, element, getUID } from '../../mdb/util/index';\nimport { getTimepickerTemplate, getToggleButtonTemplate } from './templates';\nimport Data from '../../mdb/dom/data';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport EventHandler, { EventHandlerMulti } from '../../mdb/dom/event-handler';\nimport {\n formatToAmPm,\n toggleClassHandler,\n formatNormalHours,\n checkBrowser,\n findMousePosition,\n checkValueBeforeAccept,\n takeValue,\n setMinTime,\n setMaxTime,\n _verifyMinTimeHourAndAddDisabledClass,\n _verifyMaxTimeMinutesTipsAndAddDisabledClass,\n _verifyMinTimeMinutesTipsAndAddDisabledClass,\n _verifyMaxTimeHourAndAddDisabledClass,\n _convertHourToNumber,\n} from './utils';\nimport FocusTrap from '../../mdb/util/focusTrap';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport {\n UP_ARROW,\n DOWN_ARROW,\n LEFT_ARROW,\n RIGHT_ARROW,\n ESCAPE,\n ENTER,\n} from '../../mdb/util/keycodes';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'timepicker';\n\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_MOUSEDOWN_DATA_API = `mousedown${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_MOUSEUP_DATA_API = `mouseup${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_MOUSEMOVE_DATA_API = `mousemove${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_MOUSELEAVE_DATA_API = `mouseleave${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_MOUSEOVER_DATA_API = `mouseover${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_TOUCHMOVE_DATA_API = `touchmove${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_TOUCHEND_DATA_API = `touchend${EVENT_KEY}${DATA_API_KEY}`;\nconst EVENT_TOUCHSTART_DATA_API = `touchstart${EVENT_KEY}${DATA_API_KEY}`;\n\nconst EVENT_VALUE_CHANGED = `valueChanged${EVENT_KEY}`;\n\nconst ACTIVE_CLASS = 'active';\nconst AM_CLASS = `${NAME}-am`;\nconst BUTTON_CANCEL_CLASS = `${NAME}-cancel`;\nconst BUTTON_CLEAR_CLASS = `${NAME}-clear`;\nconst BUTTON_SUBMIT_CLASS = `${NAME}-submit`;\nconst CIRCLE_CLASS = `${NAME}-circle`;\nconst CLOCK_ANIMATION_CLASS = `${NAME}-clock-animation`;\nconst CLOCK_CLASS = `${NAME}-clock`;\nconst CLOCK_INNER_CLASS = `${NAME}-clock-inner`;\nconst CLOCK_WRAPPER_CLASS = `${NAME}-clock-wrapper`;\nconst CURRENT_CLASS = `.${NAME}-current`;\nconst CURRENT_INLINE_CLASS = `${NAME}-current-inline`;\nconst WRAPPER_OPEN_ANIMATION_CLASS = 'fade-in';\nconst WRAPPER_CLOSE_ANIMATION_CLASS = 'fade-out';\n\nconst HAND_CLASS = `${NAME}-hand-pointer`;\nconst HOUR_CLASS = `${NAME}-hour`;\nconst HOUR_MODE_CLASS = `${NAME}-hour-mode`;\nconst ICON_DOWN_CLASS = `${NAME}-icon-down`;\nconst ICON_INLINE_HOUR_CLASS = `${NAME}-icon-inline-hour`;\nconst ICON_INLINE_MINUTE_CLASS = `${NAME}-icon-inline-minute`;\nconst ICON_UP_CLASS = `${NAME}-icon-up`;\nconst ICONS_HOUR_INLINE = `${NAME}-inline-hour-icons`;\nconst MIDDLE_DOT_CLASS = `${NAME}-middle-dot`;\nconst MINUTE_CLASS = `${NAME}-minute`;\nconst MODAL_CLASS = `${NAME}-modal`;\nconst PM_CLASS = `${NAME}-pm`;\nconst TIPS_ELEMENT_CLASS = `${NAME}-tips-element`;\nconst TIPS_HOURS_CLASS = `${NAME}-time-tips-hours`;\nconst TIPS_INNER_ELEMENT_CLASS = `${NAME}-tips-inner-element`;\nconst TIPS_INNER_HOURS_CLASS = `${NAME}-time-tips-inner`;\nconst TIPS_MINUTES_CLASS = `${NAME}-time-tips-minutes`;\nconst TRANSFORM_CLASS = `${NAME}-transform`;\nconst WRAPPER_CLASS = `${NAME}-wrapper`;\nconst INPUT_CLASS = `${NAME}-input`;\n\nconst Default = {\n bodyId: '',\n cancelLabel: 'Cancel',\n clearLabel: 'Clear',\n closeModalOnBackdropClick: true,\n closeModalOnMinutesClick: false,\n container: 'body',\n defaultTime: '',\n disabled: false,\n disablePast: false,\n disableFuture: false,\n focusInputAfterApprove: false,\n footerId: '',\n format12: true,\n format24: false,\n headId: '',\n increment: false,\n inline: false,\n invalidLabel: 'Invalid Time Format',\n maxTime: '',\n minTime: '',\n modalId: '',\n okLabel: 'Ok',\n overflowHidden: true,\n pickerId: '',\n readOnly: false,\n showClearBtn: true,\n switchHoursToMinutesOnClick: true,\n iconClass: 'far fa-clock fa-sm timepicker-icon',\n withIcon: true,\n pmLabel: 'PM',\n amLabel: 'AM',\n animations: true,\n};\n\nconst DefaultType = {\n bodyId: 'string',\n cancelLabel: 'string',\n clearLabel: 'string',\n closeModalOnBackdropClick: 'boolean',\n closeModalOnMinutesClick: 'boolean',\n container: 'string',\n disabled: 'boolean',\n disablePast: 'boolean',\n disableFuture: 'boolean',\n footerId: 'string',\n format12: 'boolean',\n format24: 'boolean',\n headId: 'string',\n increment: 'boolean',\n inline: 'boolean',\n invalidLabel: 'string',\n modalId: 'string',\n okLabel: 'string',\n overflowHidden: 'boolean',\n pickerId: 'string',\n readOnly: 'boolean',\n showClearBtn: 'boolean',\n switchHoursToMinutesOnClick: 'boolean',\n defaultTime: '(string|date|number)',\n iconClass: 'string',\n withIcon: 'boolean',\n pmLabel: 'string',\n amLabel: 'string',\n animations: 'boolean',\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Timepicker extends BaseComponent {\n constructor(element, options = {}) {\n super(element);\n\n this._document = document;\n this._options = this._getConfig(options);\n this._currentTime = null;\n this._toggleButtonId = this._element.id\n ? `timepicker-toggle-${this._element.id}`\n : getUID('timepicker-toggle-');\n\n this.hoursArray = ['12', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'];\n this.innerHours = ['00', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23'];\n this.minutesArray = ['00', '05', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55'];\n\n this.input = SelectorEngine.findOne('input', this._element);\n this.dataWithIcon = element.dataset.withIcon;\n this.dataToggle = element.dataset.toggle;\n this.customIcon = SelectorEngine.findOne('.timepicker-toggle-button', this._element);\n\n this._checkToggleButton();\n\n this.inputFormatShow = SelectorEngine.findOne('[data-mdb-timepicker-format24]', this._element);\n\n this.inputFormat =\n this.inputFormatShow === null ? '' : Object.values(this.inputFormatShow.dataset)[0];\n this.elementToggle = SelectorEngine.findOne('[data-mdb-toggle]', this._element);\n this.toggleElement = Object.values(element.querySelector('[data-mdb-toggle]').dataset)[0];\n\n this._hour = null;\n this._minutes = null;\n this._AM = null;\n this._PM = null;\n this._wrapper = null;\n this._modal = null;\n this._hand = null;\n this._circle = null;\n this._focusTrap = null;\n this._popper = null;\n this._interval = null;\n this._timeoutInterval = null;\n\n this._inputValue =\n this._options.defaultTime !== '' ? this._options.defaultTime : this.input.value;\n\n if (this._options.format24) {\n this._options.format12 = false;\n\n this._currentTime = formatNormalHours(this._inputValue);\n }\n\n if (this._options.format12) {\n this._options.format24 = false;\n this._currentTime = formatToAmPm(this._inputValue);\n }\n\n if (this._options.readOnly) {\n this.input.setAttribute('readonly', true);\n }\n\n if (this.inputFormat === 'true' && this.inputFormat !== '') {\n this._options.format12 = false;\n this._options.format24 = true;\n this._currentTime = formatNormalHours(this._inputValue);\n }\n\n this._scrollBar = new ScrollBarHelper();\n\n this._animations =\n !window.matchMedia('(prefers-reduced-motion: reduce)').matches && this._options.animations;\n\n this.init();\n this._isHours = true;\n this._isMinutes = false;\n this._isInvalidTimeFormat = false;\n this._isMouseMove = false;\n this._isInner = false;\n this._isAmEnabled = false;\n this._isPmEnabled = false;\n if (this._options.format12 && !this._options.defaultTime) {\n this._isPmEnabled = true;\n }\n\n this._objWithDataOnChange = { degrees: null };\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n\n init() {\n const { format12, format24 } = this._options;\n let zero;\n let hoursFormat;\n let _amOrPm;\n Manipulator.addClass(this.input, INPUT_CLASS);\n\n if (this._currentTime !== undefined) {\n const { hours, minutes, amOrPm } = this._currentTime;\n\n zero = Number(hours) < 10 ? 0 : '';\n hoursFormat = `${zero}${Number(hours)}:${minutes}`;\n _amOrPm = amOrPm;\n\n if (format12) {\n this.input.value = `${hoursFormat} ${_amOrPm}`;\n } else if (format24) {\n this.input.value = `${hoursFormat}`;\n }\n } else {\n zero = '';\n hoursFormat = '';\n _amOrPm = '';\n\n this.input.value = '';\n }\n\n if (this.input.value.length > 0 && this.input.value !== '') {\n Manipulator.addClass(this.input, 'active');\n }\n\n if (this._options !== null || this._element !== null) {\n this._listenToUserInput();\n this._handleOpen();\n this._listenToToggleKeydown();\n }\n }\n\n dispose() {\n this._removeModal();\n\n EventHandler.off(this._document, 'click', `[data-mdb-toggle='${this.toggleElement}']`);\n EventHandler.off(this._element, 'keydown', `[data-mdb-toggle='${this.toggleElement}']`);\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n setTimeout(() => {\n super.dispose();\n }, 350 + 5);\n }\n\n update(options = {}) {\n this._options = this._getConfig({ ...this._options, ...options });\n }\n\n // private\n\n _checkToggleButton() {\n if (this.customIcon === null) {\n if (this.dataWithIcon !== undefined) {\n this._options.withIcon = null;\n\n if (this.dataWithIcon === 'true') {\n this._appendToggleButton(this._options);\n }\n }\n\n if (this._options.withIcon) {\n this._appendToggleButton(this._options);\n }\n }\n }\n\n _appendToggleButton() {\n const toggleButton = getToggleButtonTemplate(this._options, this._toggleButtonId);\n\n this.input.insertAdjacentHTML('afterend', toggleButton);\n }\n\n _getDomElements() {\n this._hour = SelectorEngine.findOne(`.${HOUR_CLASS}`);\n this._minutes = SelectorEngine.findOne(`.${MINUTE_CLASS}`);\n this._AM = SelectorEngine.findOne(`.${AM_CLASS}`);\n this._PM = SelectorEngine.findOne(`.${PM_CLASS}`);\n this._wrapper = SelectorEngine.findOne(`.${WRAPPER_CLASS}`);\n this._modal = SelectorEngine.findOne(`.${MODAL_CLASS}`);\n this._hand = SelectorEngine.findOne(`.${HAND_CLASS}`);\n this._circle = SelectorEngine.findOne(`.${CIRCLE_CLASS}`);\n this._clock = SelectorEngine.findOne(`.${CLOCK_CLASS}`);\n this._clockInner = SelectorEngine.findOne(`.${CLOCK_INNER_CLASS}`);\n }\n\n _handlerMaxMinHoursOptions(degrees, maxHour, minHour, maxFormat, minFormat, e) {\n if (!maxHour && !minHour) {\n return true;\n }\n const { format24, format12, disablePast, disableFuture } = this._options;\n const { _isAmEnabled, _isPmEnabled } = this;\n const key = e.keyCode;\n const _isMouseOnInnerClock =\n e.target.classList.contains('timepicker-clock-inner') ||\n e.target.classList.contains('timepicker-time-tips-inner') ||\n e.target.classList.contains('timepicker-tips-inner-element');\n\n minHour = setMinTime(minHour, disablePast, format12);\n maxHour = setMaxTime(maxHour, disableFuture, format12);\n\n let maxHourDegrees = maxHour !== '' ? maxHour * 30 : '';\n let minHourDegrees = minHour !== '' ? minHour * 30 : '';\n\n if (degrees <= 0) {\n degrees = 360 + degrees;\n }\n const _handleKeyboardEvents = () => {\n const tips = document.querySelectorAll('.timepicker-tips-element');\n const innerTips = document.querySelectorAll('.timepicker-tips-inner-element');\n let currentHour = _convertHourToNumber(this._hour.innerText);\n let nextHourTip;\n let numberToAdd;\n let nextHour;\n\n if (key === UP_ARROW) {\n numberToAdd = 1;\n } else if (key === DOWN_ARROW) {\n numberToAdd = -1;\n }\n\n if (currentHour === 12 && key === UP_ARROW) {\n nextHour = 1;\n } else if (currentHour === 0 && key === UP_ARROW) {\n nextHour = 13;\n } else if (currentHour === 0 && key === DOWN_ARROW) {\n nextHour = 23;\n } else if (currentHour === 13 && key === DOWN_ARROW) {\n nextHour = 0;\n } else if (currentHour === 1 && key === DOWN_ARROW) {\n nextHour = 12;\n } else {\n nextHour = currentHour + numberToAdd;\n }\n\n tips.forEach((tip) => {\n if (tip.textContent == nextHour) {\n nextHourTip = tip;\n }\n });\n innerTips.forEach((innerTip) => {\n if (innerTip.textContent == nextHour) {\n nextHourTip = innerTip;\n }\n });\n return !nextHourTip.parentElement.classList.contains('disabled');\n };\n\n const _handle24FormatMouseEvents = (e) => {\n let minInnerHourDegrees = minHour !== '' && minHour > 12 ? (minHour - 12) * 30 : '';\n let maxInnerHourDegrees = maxHour !== '' && maxHour > 12 ? (maxHour - 12) * 30 : '';\n\n if (\n (minInnerHourDegrees && degrees < minInnerHourDegrees) ||\n (maxInnerHourDegrees && degrees > maxInnerHourDegrees) ||\n (maxHour && maxHour < 12)\n ) {\n return;\n }\n return true;\n };\n\n if (format24 && e.type !== 'keydown' && _isMouseOnInnerClock) {\n return _handle24FormatMouseEvents(e);\n }\n if (e.type === 'keydown') {\n return _handleKeyboardEvents(e);\n }\n\n const minFormatAndCurrentFormatEqual =\n !minFormat ||\n (minFormat === 'PM' && _isPmEnabled) ||\n (minHour !== '' && minFormat === 'AM' && _isAmEnabled);\n\n const maxFormatAndCurrentFormatEqual =\n !maxFormat ||\n (maxFormat === 'PM' && _isPmEnabled) ||\n (maxHour !== '' && maxFormat === 'AM' && _isAmEnabled);\n\n const isMinHourValid = () => {\n if (!minHour) {\n return true;\n } else if (\n (minFormat === 'PM' && _isAmEnabled) ||\n (minFormatAndCurrentFormatEqual && degrees < minHourDegrees)\n ) {\n return;\n }\n return true;\n };\n\n const isMaxHourValid = () => {\n if (!maxHour) {\n return true;\n } else if (\n (maxFormat === 'AM' && _isPmEnabled) ||\n (maxFormatAndCurrentFormatEqual && degrees > maxHourDegrees)\n ) {\n return;\n }\n return true;\n };\n if (isMinHourValid() && isMaxHourValid()) {\n return true;\n }\n }\n\n _handleKeyboard() {\n EventHandler.on(this._document, EVENT_KEYDOWN_DATA_API, '', (e) => {\n let hour;\n let minute;\n let innerHour;\n let { increment, maxTime, minTime, format12, disablePast, disableFuture } = this._options;\n\n let [minHour, minFormat] = takeValue(minTime, false);\n let [maxHour, maxFormat] = takeValue(maxTime, false);\n\n minHour = setMinTime(minHour, disablePast, format12);\n maxHour = setMaxTime(maxHour, disableFuture, format12);\n\n const hoursView = SelectorEngine.findOne(`.${TIPS_MINUTES_CLASS}`) === null;\n const innerHoursExist = SelectorEngine.findOne(`.${TIPS_INNER_HOURS_CLASS}`) !== null;\n\n const degrees = Number(this._hand.style.transform.replace(/[^\\d-]/g, ''));\n\n const allTipsMinutes = SelectorEngine.find(`.${TIPS_MINUTES_CLASS}`, this._modal);\n const allTipsHours = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`, this._modal);\n const allInnerTips = SelectorEngine.find(`.${TIPS_INNER_HOURS_CLASS}`, this._modal);\n\n let hourTime = this._makeHourDegrees(e.target, degrees, hour).hour;\n const { degrees: hourObjDegrees, addDegrees } = this._makeHourDegrees(\n e.target,\n degrees,\n hour\n );\n\n let { minute: minHourMinutes, degrees: minObjDegrees } = this._makeMinutesDegrees(\n degrees,\n minute\n );\n const addMinDegrees = this._makeMinutesDegrees(degrees, minute).addDegrees;\n\n let { hour: innerHourDegrees } = this._makeInnerHoursDegrees(degrees, innerHour);\n\n if (e.keyCode === ESCAPE) {\n const cancelBtn = SelectorEngine.findOne(`.${BUTTON_CANCEL_CLASS}`, this._modal);\n EventHandler.trigger(cancelBtn, 'click');\n } else if (hoursView) {\n if (innerHoursExist) {\n if (e.keyCode === RIGHT_ARROW) {\n this._isInner = false;\n Manipulator.addStyle(this._hand, {\n height: 'calc(40% + 1px)',\n });\n this._hour.textContent = this._setHourOrMinute(hourTime > 12 ? 1 : hourTime);\n this._toggleClassActive(this.hoursArray, this._hour, allTipsHours);\n this._toggleClassActive(this.innerHours, this._hour, allInnerTips);\n }\n\n if (e.keyCode === LEFT_ARROW) {\n this._isInner = true;\n Manipulator.addStyle(this._hand, {\n height: '21.5%',\n });\n\n this._hour.textContent = this._setHourOrMinute(\n innerHourDegrees >= 24 || innerHourDegrees === '00' ? 0 : innerHourDegrees\n );\n this._toggleClassActive(this.innerHours, this._hour, allInnerTips);\n this._toggleClassActive(this.hoursArray, this._hour - 1, allTipsHours);\n }\n }\n\n if (e.keyCode === UP_ARROW) {\n const isNextHourValid = this._handlerMaxMinHoursOptions(\n hourObjDegrees + 30,\n maxHour,\n minHour,\n maxFormat,\n minFormat,\n e\n );\n if (!isNextHourValid) {\n return;\n }\n\n const addRotate = () => {\n return Manipulator.addStyle(this._hand, {\n transform: `rotateZ(${hourObjDegrees + addDegrees}deg)`,\n });\n };\n\n addRotate();\n\n if (this._isInner) {\n innerHourDegrees += 1;\n\n if (innerHourDegrees === 24) {\n innerHourDegrees = 0;\n } else if (innerHourDegrees === 25 || innerHourDegrees === '001') {\n innerHourDegrees = 13;\n }\n\n this._hour.textContent = this._setHourOrMinute(innerHourDegrees);\n this._toggleClassActive(this.innerHours, this._hour, allInnerTips);\n } else {\n hourTime += 1;\n this._hour.textContent = this._setHourOrMinute(hourTime > 12 ? 1 : hourTime);\n this._toggleClassActive(this.hoursArray, this._hour, allTipsHours);\n }\n }\n if (e.keyCode === DOWN_ARROW) {\n const isNextHourValid = this._handlerMaxMinHoursOptions(\n hourObjDegrees - 30,\n maxHour,\n minHour,\n maxFormat,\n minFormat,\n e\n );\n\n if (!isNextHourValid) {\n return;\n }\n\n const addRotate = () => {\n return Manipulator.addStyle(this._hand, {\n transform: `rotateZ(${hourObjDegrees - addDegrees}deg)`,\n });\n };\n\n addRotate();\n if (this._isInner) {\n innerHourDegrees -= 1;\n\n if (innerHourDegrees === 12) {\n innerHourDegrees = 0;\n } else if (innerHourDegrees === -1) {\n innerHourDegrees = 23;\n }\n\n this._hour.textContent = this._setHourOrMinute(innerHourDegrees);\n this._toggleClassActive(this.innerHours, this._hour, allInnerTips);\n } else {\n hourTime -= 1;\n\n this._hour.textContent = this._setHourOrMinute(hourTime === 0 ? 12 : hourTime);\n this._toggleClassActive(this.hoursArray, this._hour, allTipsHours);\n }\n }\n } else {\n if (e.keyCode === UP_ARROW) {\n minObjDegrees += addMinDegrees;\n Manipulator.addStyle(this._hand, {\n transform: `rotateZ(${minObjDegrees}deg)`,\n });\n minHourMinutes += 1;\n if (increment) {\n minHourMinutes += 4;\n\n if (minHourMinutes === '0014') {\n minHourMinutes = 5;\n }\n }\n\n this._minutes.textContent = this._setHourOrMinute(\n minHourMinutes > 59 ? 0 : minHourMinutes\n );\n this._toggleClassActive(this.minutesArray, this._minutes, allTipsMinutes);\n this._toggleBackgroundColorCircle(`${TIPS_MINUTES_CLASS}`);\n }\n if (e.keyCode === DOWN_ARROW) {\n minObjDegrees -= addMinDegrees;\n Manipulator.addStyle(this._hand, {\n transform: `rotateZ(${minObjDegrees}deg)`,\n });\n if (increment) {\n minHourMinutes -= 5;\n } else {\n minHourMinutes -= 1;\n }\n\n if (minHourMinutes === -1) {\n minHourMinutes = 59;\n } else if (minHourMinutes === -5) {\n minHourMinutes = 55;\n }\n\n this._minutes.textContent = this._setHourOrMinute(minHourMinutes);\n this._toggleClassActive(this.minutesArray, this._minutes, allTipsMinutes);\n this._toggleBackgroundColorCircle(`${TIPS_MINUTES_CLASS}`);\n }\n }\n });\n }\n\n _setActiveClassToTipsOnOpen(hour, ...rest) {\n if (this._isInvalidTimeFormat) {\n return;\n }\n\n if (!this._options.format24) {\n [...rest].filter((e) => {\n if (e.toLowerCase() === 'pm') {\n Manipulator.addClass(this._PM, ACTIVE_CLASS);\n } else if (e.toLowerCase() === 'am') {\n Manipulator.addClass(this._AM, ACTIVE_CLASS);\n } else {\n Manipulator.removeClass(this._AM, ACTIVE_CLASS);\n Manipulator.removeClass(this._PM, ACTIVE_CLASS);\n }\n\n return e;\n });\n\n const allTipsHours = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`, this._modal);\n this._addActiveClassToTip(allTipsHours, hour);\n } else {\n const allTipsHours = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`, this._modal);\n const allInnerTips = SelectorEngine.find(`.${TIPS_INNER_HOURS_CLASS}`, this._modal);\n\n this._addActiveClassToTip(allTipsHours, hour);\n this._addActiveClassToTip(allInnerTips, hour);\n }\n }\n\n _setTipsAndTimesDependOnInputValue(hour, minute) {\n const { inline, format12 } = this._options;\n\n if (!this._isInvalidTimeFormat) {\n const rotateDegrees = hour > 12 ? hour * 30 - 360 : hour * 30;\n this._hour.textContent = hour;\n this._minutes.textContent = minute;\n\n if (!inline) {\n Manipulator.addStyle(this._hand, {\n transform: `rotateZ(${rotateDegrees}deg)`,\n });\n Manipulator.addClass(this._circle, 'active');\n\n if (Number(hour) > 12 || hour === '00') {\n Manipulator.addStyle(this._hand, {\n height: '21.5%',\n });\n }\n }\n } else {\n this._hour.textContent = '12';\n this._minutes.textContent = '00';\n\n if (!inline) {\n Manipulator.addStyle(this._hand, {\n transform: 'rotateZ(0deg)',\n });\n }\n if (format12) {\n Manipulator.addClass(this._PM, ACTIVE_CLASS);\n }\n }\n }\n\n _listenToToggleKeydown() {\n EventHandler.on(this._element, 'keydown', `[data-mdb-toggle='${this.toggleElement}']`, (e) => {\n if (e.keyCode === ENTER) {\n e.preventDefault();\n EventHandler.trigger(this.elementToggle, 'click');\n }\n });\n }\n\n _handleOpen() {\n const container = this._getContainer();\n EventHandlerMulti.on(\n this._element,\n 'click',\n `[data-mdb-toggle='${this.toggleElement}']`,\n (e) => {\n if (this._options === null) {\n return;\n }\n\n // Fix for input with open, if is not for settimeout input has incorrent jumping label\n const fixForInput = Manipulator.getDataAttribute(this.input, 'toggle') !== null ? 200 : 0;\n\n setTimeout(() => {\n Manipulator.addStyle(this.elementToggle, {\n pointerEvents: 'none',\n });\n\n this.elementToggle.blur();\n\n let checkInputValue;\n\n if (takeValue(this.input)[0] === '' || this._isInvalidTimeFormat) {\n checkInputValue = ['12', '00', 'PM'];\n } else {\n checkInputValue = takeValue(this.input);\n }\n\n const { modalId, inline, format12 } = this._options;\n const [hour, minute, format] = checkInputValue;\n const div = element('div');\n\n if (Number(hour) > 12 || hour === '00') {\n this._isInner = true;\n }\n\n this.input.blur();\n e.target.blur();\n\n div.innerHTML = getTimepickerTemplate(this._options);\n Manipulator.addClass(div, MODAL_CLASS);\n\n div.setAttribute('role', 'dialog');\n div.setAttribute('tabIndex', '-1');\n div.setAttribute('id', modalId);\n\n if (!inline) {\n container.appendChild(div);\n this._scrollBar.hide();\n } else {\n this._popper = createPopper(this.input, div, {\n placement: 'bottom-start',\n });\n\n container.appendChild(div);\n }\n\n this._getDomElements();\n if (this._animations) {\n this._toggleBackdropAnimation();\n } else {\n Manipulator.addClass(this._wrapper, 'opacity-100');\n }\n this._setActiveClassToTipsOnOpen(hour, minute, format);\n this._appendTimes();\n this._setActiveClassToTipsOnOpen(hour, minute, format);\n this._setTipsAndTimesDependOnInputValue(hour, minute);\n\n if (this.input.value === '') {\n const allTipsHours = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`, this._modal);\n\n if (format12) {\n Manipulator.addClass(this._PM, ACTIVE_CLASS);\n }\n\n this._hour.textContent = '12';\n this._minutes.textContent = '00';\n this._addActiveClassToTip(allTipsHours, Number(this._hour.textContent));\n }\n\n this._handleSwitchTimeMode();\n this._handleOkButton();\n this._handleClose();\n\n if (inline) {\n this._handleHoverInlineBtn();\n this._handleDocumentClickInline();\n this._handleInlineClicks();\n } else {\n this._handleSwitchHourMinute();\n this._handleClockClick();\n this._handleKeyboard();\n\n Manipulator.addStyle(this._hour, {\n pointerEvents: 'none',\n });\n Manipulator.addStyle(this._minutes, {\n pointerEvents: '',\n });\n }\n\n this._focusTrap = new FocusTrap(this._wrapper, {\n event: 'keydown',\n condition: ({ key }) => key === 'Tab',\n });\n this._focusTrap.trap();\n }, fixForInput);\n }\n );\n }\n\n _handleInlineClicks() {\n let selectedHour;\n let minuteNumber;\n const countMinutes = (count) => {\n let minutes = count;\n\n if (minutes > 59) {\n minutes = 0;\n } else if (minutes < 0) {\n minutes = 59;\n }\n\n return minutes;\n };\n\n const countHours = (count) => {\n let hour = count;\n\n if (this._options.format24) {\n if (hour > 24) {\n hour = 1;\n } else if (hour < 0) {\n hour = 23;\n }\n\n if (hour > 23) {\n hour = 0;\n }\n } else {\n if (hour > 12) {\n hour = 1;\n } else if (hour < 1) {\n hour = 12;\n }\n\n if (hour > 12) {\n hour = 1;\n }\n }\n\n return hour;\n };\n\n const incrementHours = (hour) => {\n const counteredNumber = countHours(hour);\n this._hour.textContent = this._setHourOrMinute(counteredNumber);\n };\n const incrementMinutes = (minutes) => {\n const counteredNumber = countMinutes(minutes);\n this._minutes.textContent = this._setHourOrMinute(counteredNumber);\n };\n\n const addHours = () => {\n selectedHour = countHours(selectedHour) + 1;\n incrementHours(selectedHour);\n };\n const addMinutes = () => {\n minuteNumber = countMinutes(minuteNumber) + 1;\n incrementMinutes(minuteNumber);\n };\n\n const subHours = () => {\n selectedHour = countHours(selectedHour) - 1;\n incrementHours(selectedHour);\n };\n\n const subMinutes = () => {\n minuteNumber = countMinutes(minuteNumber) - 1;\n incrementMinutes(minuteNumber);\n };\n\n const _clearAsyncs = () => {\n clearInterval(this._interval);\n clearTimeout(this._timeoutInterval);\n };\n\n const _clearAndSetThisInterval = (addHoursOrAddMinutes) => {\n _clearAsyncs();\n this._timeoutInterval = setTimeout(() => {\n this._interval = setInterval(addHoursOrAddMinutes, 100);\n }, 500);\n };\n EventHandlerMulti.on(\n this._modal,\n 'click mousedown mouseup touchstart touchend contextmenu',\n `.${ICON_UP_CLASS}, .${ICON_DOWN_CLASS}`,\n (e) => {\n selectedHour = Number(this._hour.textContent);\n minuteNumber = Number(this._minutes.textContent);\n const { target, type } = e;\n const isEventTypeMousedownOrTouchstart = type === 'mousedown' || type === 'touchstart';\n\n if (Manipulator.hasClass(target, ICON_UP_CLASS)) {\n if (Manipulator.hasClass(target.parentNode, ICONS_HOUR_INLINE)) {\n if (isEventTypeMousedownOrTouchstart) {\n _clearAndSetThisInterval(addHours);\n } else if (type === 'mouseup' || type === 'touchend' || type === 'contextmenu') {\n _clearAsyncs();\n } else {\n addHours();\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (isEventTypeMousedownOrTouchstart) {\n _clearAndSetThisInterval(addMinutes);\n } else if (type === 'mouseup' || type === 'touchend' || type === 'contextmenu') {\n _clearAsyncs();\n } else {\n addMinutes();\n }\n }\n } else if (Manipulator.hasClass(target, ICON_DOWN_CLASS)) {\n if (Manipulator.hasClass(target.parentNode, ICONS_HOUR_INLINE)) {\n if (isEventTypeMousedownOrTouchstart) {\n _clearAndSetThisInterval(subHours);\n } else if (type === 'mouseup' || type === 'touchend') {\n _clearAsyncs();\n } else {\n subHours();\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (isEventTypeMousedownOrTouchstart) {\n _clearAndSetThisInterval(subMinutes);\n } else if (type === 'mouseup' || type === 'touchend') {\n _clearAsyncs();\n } else {\n subMinutes();\n }\n }\n }\n }\n );\n\n EventHandlerMulti.on(\n this._document,\n `${EVENT_MOUSEUP_DATA_API} ${EVENT_TOUCHEND_DATA_API}`,\n () => {\n _clearAsyncs();\n }\n );\n\n EventHandler.on(window, EVENT_KEYDOWN_DATA_API, (e) => {\n const key = e.code;\n const isHourBtnFocused = document.activeElement.classList.contains('timepicker-hour');\n const isMinuteBtnFocused = document.activeElement.classList.contains('timepicker-minute');\n const isBodyFocused = document.activeElement === document.body;\n selectedHour = Number(this._hour.textContent);\n minuteNumber = Number(this._minutes.textContent);\n\n switch (key) {\n case 'ArrowUp':\n e.preventDefault();\n if (isBodyFocused || isHourBtnFocused) {\n this._hour.focus();\n addHours();\n } else if (isMinuteBtnFocused) {\n addMinutes();\n }\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (isBodyFocused || isHourBtnFocused) {\n this._hour.focus();\n subHours();\n } else if (isMinuteBtnFocused) {\n subMinutes();\n }\n break;\n }\n });\n }\n\n _handleClose() {\n EventHandler.on(\n this._modal,\n 'click',\n `.${WRAPPER_CLASS}, .${BUTTON_CANCEL_CLASS}, .${BUTTON_CLEAR_CLASS}`,\n ({ target }) => {\n const { closeModalOnBackdropClick } = this._options;\n\n const runRemoveFunction = () => {\n Manipulator.addStyle(this.elementToggle, {\n pointerEvents: 'auto',\n });\n\n if (this._animations) {\n this._toggleBackdropAnimation(true);\n }\n\n this._removeModal();\n this._focusTrap.disable();\n this._focusTrap = null;\n\n if (this.elementToggle) {\n this.elementToggle.focus();\n } else if (this.input) {\n this.input.focus();\n }\n };\n\n if (Manipulator.hasClass(target, BUTTON_CLEAR_CLASS)) {\n this._toggleAmPm('PM');\n this.input.value = '';\n Manipulator.removeClass(this.input, 'active');\n\n let checkInputValue;\n\n if (takeValue(this.input)[0] === '') {\n checkInputValue = ['12', '00', 'PM'];\n } else {\n checkInputValue = takeValue(this.input);\n }\n\n const [hour, minute, format] = checkInputValue;\n this._setTipsAndTimesDependOnInputValue('12', '00');\n this._setActiveClassToTipsOnOpen(hour, minute, format);\n this._hour.click();\n } else if (Manipulator.hasClass(target, BUTTON_CANCEL_CLASS)) {\n runRemoveFunction();\n } else if (Manipulator.hasClass(target, WRAPPER_CLASS) && closeModalOnBackdropClick) {\n runRemoveFunction();\n }\n }\n );\n }\n\n showValueInput() {\n return this.input.value;\n }\n\n _handleOkButton() {\n EventHandlerMulti.on(this._modal, 'click', `.${BUTTON_SUBMIT_CLASS}`, () => {\n let { maxTime, minTime } = this._options;\n const { format12, format24, readOnly, focusInputAfterApprove, disablePast, disableFuture } =\n this._options;\n const hourModeActive = this._document.querySelector(`.${HOUR_MODE_CLASS}.${ACTIVE_CLASS}`);\n const currentValue = `${this._hour.textContent}:${this._minutes.textContent}`;\n const selectedHour = Number(this._hour.textContent);\n const selectedMinutes = Number(this._minutes.textContent);\n\n minTime = setMinTime(minTime, disablePast, format12);\n maxTime = setMaxTime(maxTime, disableFuture, format12);\n\n const [maxTimeHour, maxTimeMinutes, maxTimeFormat] = takeValue(maxTime, false);\n const [minTimeHour, minTimeMinutes, minTimeFormat] = takeValue(minTime, false);\n const isHourLessThanMinHour = selectedHour < Number(minTimeHour);\n const isHourGreaterThanMaxHour = selectedHour > Number(maxTimeHour);\n let maxFormatAndCurrentFormatEqual = true;\n if (hourModeActive) {\n maxFormatAndCurrentFormatEqual = maxTimeFormat === hourModeActive.textContent;\n }\n\n let minFormatAndCurrentFormatEqual = true;\n if (hourModeActive) {\n minFormatAndCurrentFormatEqual = minTimeFormat === hourModeActive.textContent;\n }\n\n const hourEqualToMaxAndMinutesGreaterThanMax =\n selectedMinutes > maxTimeMinutes && selectedHour === Number(maxTimeHour);\n const hourEqualToMinAndMinutesLessThanMin =\n selectedMinutes < minTimeMinutes && selectedHour === Number(minTimeHour);\n\n Manipulator.addClass(this.input, 'active');\n Manipulator.addStyle(this.elementToggle, {\n pointerEvents: 'auto',\n });\n\n if (maxTime !== '') {\n if (\n maxFormatAndCurrentFormatEqual &&\n (isHourGreaterThanMaxHour || hourEqualToMaxAndMinutesGreaterThanMax)\n ) {\n return;\n } else if (maxTimeFormat === 'AM' && hourModeActive.textContent === 'PM') {\n return;\n }\n }\n if (minTime !== '') {\n if (\n minFormatAndCurrentFormatEqual &&\n (isHourLessThanMinHour || hourEqualToMinAndMinutesLessThanMin)\n ) {\n return;\n }\n if (minTimeFormat === 'PM' && hourModeActive.textContent === 'AM') {\n return;\n }\n }\n\n if (\n checkValueBeforeAccept(\n this._options,\n this.input,\n this._hour.textContent,\n this._minutes.textContent\n ) === undefined\n ) {\n return;\n }\n\n if (this._isInvalidTimeFormat) {\n Manipulator.removeClass(this.input, 'is-invalid');\n }\n\n if (!readOnly && focusInputAfterApprove) {\n this.input.focus();\n }\n\n Manipulator.addStyle(this.elementToggle, {\n pointerEvents: 'auto',\n });\n\n if (format24) {\n this.input.value = currentValue;\n } else if (hourModeActive === null) {\n this.input.value = `${currentValue} PM`;\n } else {\n this.input.value = `${currentValue} ${hourModeActive.textContent}`;\n }\n\n if (this._animations) {\n this._toggleBackdropAnimation(true);\n }\n\n this._removeModal();\n\n EventHandler.trigger(this.input, EVENT_VALUE_CHANGED);\n });\n }\n\n _handleHoverInlineBtn() {\n EventHandlerMulti.on(\n this._modal,\n 'mouseover mouseleave',\n `.${CURRENT_INLINE_CLASS}`,\n ({ type, target }) => {\n const allIconsInlineHour = SelectorEngine.find(`.${ICON_INLINE_HOUR_CLASS}`, this._modal);\n const allIconsInlineMinute = SelectorEngine.find(\n `.${ICON_INLINE_MINUTE_CLASS}`,\n this._modal\n );\n\n if (type === 'mouseover') {\n if (Manipulator.hasClass(target, HOUR_CLASS)) {\n allIconsInlineHour.forEach((icon) => Manipulator.addClass(icon, ACTIVE_CLASS));\n } else {\n allIconsInlineMinute.forEach((icon) => Manipulator.addClass(icon, ACTIVE_CLASS));\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (Manipulator.hasClass(target, HOUR_CLASS)) {\n allIconsInlineHour.forEach((icon) => Manipulator.removeClass(icon, ACTIVE_CLASS));\n } else {\n allIconsInlineMinute.forEach((icon) => Manipulator.removeClass(icon, ACTIVE_CLASS));\n }\n }\n }\n );\n }\n\n _handleDocumentClickInline() {\n EventHandler.on(document, EVENT_CLICK_DATA_API, ({ target }) => {\n if (\n this._modal &&\n !this._modal.contains(target) &&\n !Manipulator.hasClass(target, 'timepicker-icon')\n ) {\n clearInterval(this._interval);\n Manipulator.addStyle(this.elementToggle, {\n pointerEvents: 'auto',\n });\n this._removeModal();\n }\n });\n }\n\n _handleSwitchHourMinute() {\n toggleClassHandler('click', CURRENT_CLASS);\n\n EventHandler.on(this._modal, 'click', CURRENT_CLASS, () => {\n const { format24 } = this._options;\n const current = SelectorEngine.find(CURRENT_CLASS, this._modal);\n const allTipsMinutes = SelectorEngine.find(`.${TIPS_MINUTES_CLASS}`, this._modal);\n const allTipsHours = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`, this._modal);\n const allInnerTips = SelectorEngine.find(`.${TIPS_INNER_HOURS_CLASS}`, this._modal);\n const hourValue = Number(this._hour.textContent);\n const minuteValue = Number(this._minutes.textContent);\n\n const switchTips = (array, classes) => {\n allTipsHours.forEach((tip) => tip.remove());\n allTipsMinutes.forEach((tip) => tip.remove());\n Manipulator.addClass(this._hand, TRANSFORM_CLASS);\n\n setTimeout(() => {\n Manipulator.removeClass(this._hand, TRANSFORM_CLASS);\n }, 401);\n\n this._getAppendClock(array, `.${CLOCK_CLASS}`, classes);\n\n const toggleActiveClass = () => {\n const allTipsHours = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`, this._modal);\n const allTipsMinutes = SelectorEngine.find(`.${TIPS_MINUTES_CLASS}`, this._modal);\n\n this._addActiveClassToTip(allTipsHours, hourValue);\n this._addActiveClassToTip(allTipsMinutes, minuteValue);\n };\n\n if (!format24) {\n setTimeout(() => {\n toggleActiveClass();\n }, 401);\n } else {\n const allTipsInnerHours = SelectorEngine.find(`.${TIPS_INNER_HOURS_CLASS}`, this._modal);\n\n setTimeout(() => {\n this._addActiveClassToTip(allTipsInnerHours, hourValue);\n toggleActiveClass();\n }, 401);\n }\n };\n\n current.forEach((e) => {\n if (Manipulator.hasClass(e, ACTIVE_CLASS)) {\n if (Manipulator.hasClass(e, MINUTE_CLASS)) {\n Manipulator.addClass(this._hand, TRANSFORM_CLASS);\n\n Manipulator.addStyle(this._hand, {\n transform: `rotateZ(${this._minutes.textContent * 6}deg)`,\n height: 'calc(40% + 1px)',\n });\n\n if (format24 && allInnerTips.length > 0) {\n allInnerTips.forEach((innerTip) => innerTip.remove());\n }\n switchTips(this.minutesArray, `${TIPS_MINUTES_CLASS}`, allTipsMinutes);\n this._hour.style.pointerEvents = '';\n this._minutes.style.pointerEvents = 'none';\n } else if (Manipulator.hasClass(e, HOUR_CLASS)) {\n Manipulator.addStyle(this._hand, {\n transform: `rotateZ(${this._hour.textContent * 30}deg)`,\n });\n\n if (Number(this._hour.textContent) > 12) {\n Manipulator.addStyle(this._hand, {\n transform: `rotateZ(${this._hour.textContent * 30 - 360}deg)`,\n height: '21.5%',\n });\n\n if (Number(this._hour.textContent) > 12) {\n Manipulator.addStyle(this._hand, {\n height: '21.5%',\n });\n }\n } else {\n Manipulator.addStyle(this._hand, {\n height: 'calc(40% + 1px)',\n });\n }\n\n if (format24) {\n this._getAppendClock(\n this.innerHours,\n `.${CLOCK_INNER_CLASS}`,\n TIPS_INNER_HOURS_CLASS\n );\n }\n if (allInnerTips.length > 0) {\n allInnerTips.forEach((innerTip) => innerTip.remove());\n }\n\n switchTips(this.hoursArray, `${TIPS_HOURS_CLASS}`, allTipsHours);\n\n Manipulator.addStyle(this._hour, {\n pointerEvents: 'none',\n });\n Manipulator.addStyle(this._minutes, {\n pointerEvents: '',\n });\n }\n }\n });\n });\n }\n\n _handleDisablingTipsMaxTime(selectedFormat, maxTimeFormat, maxTimeMinutes, maxTimeHour) {\n if (!this._options.maxTime && !this._options.disableFuture) {\n return;\n }\n\n const outerHoursTips = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`);\n const innerHoursTips = SelectorEngine.find(`.${TIPS_INNER_HOURS_CLASS}`);\n const allTipsMinutes = SelectorEngine.find(`.${TIPS_MINUTES_CLASS}`);\n\n if (!maxTimeFormat || maxTimeFormat === selectedFormat) {\n _verifyMaxTimeHourAndAddDisabledClass(innerHoursTips, maxTimeHour);\n _verifyMaxTimeHourAndAddDisabledClass(outerHoursTips, maxTimeHour);\n _verifyMaxTimeMinutesTipsAndAddDisabledClass(\n allTipsMinutes,\n maxTimeMinutes,\n maxTimeHour,\n this._hour.textContent\n );\n return;\n }\n if (maxTimeFormat === 'AM' && selectedFormat === 'PM') {\n outerHoursTips.forEach((tip) => {\n Manipulator.addClass(tip, 'disabled');\n });\n allTipsMinutes.forEach((tip) => {\n Manipulator.addClass(tip, 'disabled');\n });\n }\n }\n\n _handleDisablingTipsMinTime(selectedFormat, minTimeFormat, minTimeMinutes, minTimeHour) {\n if (!this._options.minTime && !this._options.disablePast) {\n return;\n }\n\n const outerHoursTips = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`);\n const innerHoursTips = SelectorEngine.find(`.${TIPS_INNER_HOURS_CLASS}`);\n const allTipsMinutes = SelectorEngine.find(`.${TIPS_MINUTES_CLASS}`);\n\n if (!minTimeFormat || minTimeFormat === selectedFormat) {\n _verifyMinTimeHourAndAddDisabledClass(outerHoursTips, minTimeHour);\n _verifyMinTimeHourAndAddDisabledClass(innerHoursTips, minTimeHour);\n _verifyMinTimeMinutesTipsAndAddDisabledClass(\n allTipsMinutes,\n minTimeMinutes,\n minTimeHour,\n this._hour.textContent\n );\n } else if (minTimeFormat === 'PM' && selectedFormat === 'AM') {\n outerHoursTips.forEach((tip) => Manipulator.addClass(tip, 'disabled'));\n allTipsMinutes.forEach((tip) => Manipulator.addClass(tip, 'disabled'));\n }\n }\n _toggleAmPm = (enabled) => {\n if (enabled == 'PM') {\n this._isPmEnabled = true;\n this._isAmEnabled = false;\n } else if (enabled == 'AM') {\n this._isPmEnabled = false;\n this._isAmEnabled = true;\n }\n };\n\n _handleSwitchTimeMode() {\n EventHandler.on(document, 'click', `.${HOUR_MODE_CLASS}`, ({ target }) => {\n let { maxTime, minTime } = this._options;\n const { disablePast, disableFuture, format12 } = this._options;\n\n minTime = setMinTime(minTime, disablePast, format12);\n maxTime = setMaxTime(maxTime, disableFuture, format12);\n\n let [maxTimeHour, maxTimeMinutes, maxTimeFormat] = takeValue(maxTime, false);\n let [minTimeHour, minTimeMinutes, minTimeFormat] = takeValue(minTime, false);\n\n const allTipsHour = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`);\n const allTipsMinutes = SelectorEngine.find(`.${TIPS_MINUTES_CLASS}`);\n\n const clearDisabledClassForAllTips = () => {\n allTipsHour.forEach((tip) => {\n Manipulator.removeClass(tip, 'disabled');\n });\n\n allTipsMinutes.forEach((tip) => {\n Manipulator.removeClass(tip, 'disabled');\n });\n };\n\n clearDisabledClassForAllTips();\n this._handleDisablingTipsMinTime(\n target.textContent,\n minTimeFormat,\n minTimeMinutes,\n minTimeHour\n );\n this._handleDisablingTipsMaxTime(\n target.textContent,\n maxTimeFormat,\n maxTimeMinutes,\n maxTimeHour\n );\n this._toggleAmPm(target.textContent);\n\n if (!Manipulator.hasClass(target, ACTIVE_CLASS)) {\n const allHoursMode = SelectorEngine.find(`.${HOUR_MODE_CLASS}`);\n\n allHoursMode.forEach((element) => {\n if (Manipulator.hasClass(element, ACTIVE_CLASS)) {\n Manipulator.removeClass(element, ACTIVE_CLASS);\n }\n });\n\n Manipulator.addClass(target, ACTIVE_CLASS);\n }\n });\n }\n\n _handleClockClick() {\n let { maxTime, minTime } = this._options;\n const { disablePast, disableFuture, format12 } = this._options;\n minTime = setMinTime(minTime, disablePast, format12);\n maxTime = setMaxTime(maxTime, disableFuture, format12);\n\n const maxTimeFormat = takeValue(maxTime, false)[2];\n const minTimeFormat = takeValue(minTime, false)[2];\n\n const maxTimeHour = takeValue(maxTime, false)[0];\n const minTimeHour = takeValue(minTime, false)[0];\n\n const clockWrapper = SelectorEngine.findOne(`.${CLOCK_WRAPPER_CLASS}`);\n EventHandlerMulti.on(\n document,\n `${EVENT_MOUSEDOWN_DATA_API} ${EVENT_MOUSEUP_DATA_API} ${EVENT_MOUSEMOVE_DATA_API} ${EVENT_MOUSELEAVE_DATA_API} ${EVENT_MOUSEOVER_DATA_API} ${EVENT_TOUCHSTART_DATA_API} ${EVENT_TOUCHMOVE_DATA_API} ${EVENT_TOUCHEND_DATA_API}`,\n '',\n (e) => {\n if (!checkBrowser()) {\n e.preventDefault();\n }\n\n const { type, target } = e;\n const { closeModalOnMinutesClick, switchHoursToMinutesOnClick } = this._options;\n const minutes = SelectorEngine.findOne(`.${TIPS_MINUTES_CLASS}`, this._modal) !== null;\n const hours = SelectorEngine.findOne(`.${TIPS_HOURS_CLASS}`, this._modal) !== null;\n const innerHours =\n SelectorEngine.findOne(`.${TIPS_INNER_HOURS_CLASS}`, this._modal) !== null;\n\n const allTipsMinutes = SelectorEngine.find(`.${TIPS_MINUTES_CLASS}`, this._modal);\n\n const mouseClick = findMousePosition(e, clockWrapper);\n const radius = clockWrapper.offsetWidth / 2;\n\n let rds = Math.atan2(mouseClick.y - radius, mouseClick.x - radius);\n if (checkBrowser()) {\n const touchClick = findMousePosition(e, clockWrapper, true);\n rds = Math.atan2(touchClick.y - radius, touchClick.x - radius);\n }\n\n let xPos = null;\n let yPos = null;\n let elFromPoint = null;\n\n if (\n type === 'mousedown' ||\n type === 'mousemove' ||\n type === 'touchmove' ||\n type === 'touchstart'\n ) {\n if (type === 'mousedown' || type === 'touchstart' || type === 'touchmove') {\n if (\n this._hasTargetInnerClass(target) ||\n Manipulator.hasClass(target, CLOCK_WRAPPER_CLASS) ||\n Manipulator.hasClass(target, CLOCK_CLASS) ||\n Manipulator.hasClass(target, TIPS_MINUTES_CLASS) ||\n Manipulator.hasClass(target, TIPS_HOURS_CLASS) ||\n Manipulator.hasClass(target, CIRCLE_CLASS) ||\n Manipulator.hasClass(target, HAND_CLASS) ||\n Manipulator.hasClass(target, MIDDLE_DOT_CLASS) ||\n Manipulator.hasClass(target, TIPS_ELEMENT_CLASS)\n ) {\n this._isMouseMove = true;\n\n if (checkBrowser() && e.touches) {\n xPos = e.touches[0].clientX;\n yPos = e.touches[0].clientY;\n elFromPoint = document.elementFromPoint(xPos, yPos);\n }\n }\n }\n } else if (type === 'mouseup' || type === 'touchend') {\n this._isMouseMove = false;\n if (\n this._hasTargetInnerClass(target) ||\n Manipulator.hasClass(target, CLOCK_CLASS) ||\n Manipulator.hasClass(target, TIPS_HOURS_CLASS) ||\n Manipulator.hasClass(target, CIRCLE_CLASS) ||\n Manipulator.hasClass(target, HAND_CLASS) ||\n Manipulator.hasClass(target, MIDDLE_DOT_CLASS) ||\n Manipulator.hasClass(target, TIPS_ELEMENT_CLASS)\n ) {\n if ((hours || innerHours) && switchHoursToMinutesOnClick) {\n const isHourLessThanMinOrGreaterThanMax =\n Number(this._hour.textContent) > maxTimeHour ||\n Number(this._hour.textContent) < minTimeHour;\n if (\n this._options.format24 &&\n maxTimeHour != '' &&\n minTimeHour != '' &&\n isHourLessThanMinOrGreaterThanMax\n ) {\n return;\n } else if (\n this._options.format24 &&\n maxTimeHour != '' &&\n this._hour.textContent > maxTimeHour\n ) {\n return;\n } else if (\n this._options.format24 &&\n minTimeHour != '' &&\n this._hour.textContent < minTimeHour\n ) {\n return;\n }\n }\n if (!Manipulator.hasClass(this._minutes, ACTIVE_CLASS)) {\n EventHandler.trigger(this._minutes, 'click');\n }\n }\n\n if (minutes && closeModalOnMinutesClick) {\n const submitBtn = SelectorEngine.findOne(`.${BUTTON_SUBMIT_CLASS}`, this._modal);\n EventHandler.trigger(submitBtn, 'click');\n }\n }\n\n if (minutes) {\n let minute;\n const degrees = Math.trunc((rds * 180) / Math.PI) + 90;\n const { degrees: minDegrees, minute: minTimeObj } = this._makeMinutesDegrees(\n degrees,\n minute\n );\n\n if (this._handlerMaxMinMinutesOptions(minDegrees, minTimeObj) === undefined) {\n return;\n }\n\n const { degrees: _degrees, minute: minuteTimes } = this._handlerMaxMinMinutesOptions(\n minDegrees,\n minTimeObj\n );\n\n if (this._isMouseMove) {\n Manipulator.addStyle(this._hand, {\n transform: `rotateZ(${_degrees}deg)`,\n });\n\n if (minuteTimes === undefined) {\n return;\n }\n\n const changeMinutes = () => {\n return minuteTimes >= 10 || minuteTimes === '00' ? minuteTimes : `0${minuteTimes}`;\n };\n\n this._minutes.textContent = changeMinutes();\n\n this._toggleClassActive(this.minutesArray, this._minutes, allTipsMinutes);\n this._toggleBackgroundColorCircle(`${TIPS_MINUTES_CLASS}`);\n\n this._objWithDataOnChange.degreesMinutes = _degrees;\n this._objWithDataOnChange.minutes = minuteTimes;\n }\n }\n\n if (hours || innerHours) {\n let hour;\n\n let degrees = Math.trunc((rds * 180) / Math.PI) + 90;\n degrees = Math.round(degrees / 30) * 30;\n\n Manipulator.addClass(this._circle, 'active');\n\n if (this._makeHourDegrees(target, degrees, hour) === undefined) {\n return;\n }\n const makeDegrees = () => {\n if (checkBrowser() && degrees && elFromPoint) {\n const { degrees: touchDegrees, hour: touchHours } = this._makeHourDegrees(\n elFromPoint,\n degrees,\n hour\n );\n return this._handleMoveHand(elFromPoint, touchHours, touchDegrees);\n } else {\n const { degrees: movedDegrees, hour: movedHours } = this._makeHourDegrees(\n target,\n degrees,\n hour\n );\n return this._handleMoveHand(target, movedHours, movedDegrees);\n }\n };\n\n this._objWithDataOnChange.degreesHours = degrees;\n\n if (\n this._handlerMaxMinHoursOptions(\n degrees,\n maxTimeHour,\n minTimeHour,\n maxTimeFormat,\n minTimeFormat,\n e\n )\n ) {\n makeDegrees();\n }\n }\n\n e.stopPropagation();\n }\n );\n }\n\n _hasTargetInnerClass(target) {\n return (\n Manipulator.hasClass(target, CLOCK_INNER_CLASS) ||\n Manipulator.hasClass(target, TIPS_INNER_HOURS_CLASS) ||\n Manipulator.hasClass(target, TIPS_INNER_ELEMENT_CLASS)\n );\n }\n\n _handleMoveHand(target, hour, degrees) {\n const allTipsHours = SelectorEngine.find(`.${TIPS_HOURS_CLASS}`, this._modal);\n const allTipsInner = SelectorEngine.find(`.${TIPS_INNER_HOURS_CLASS}`, this._modal);\n\n if (this._isMouseMove) {\n if (this._hasTargetInnerClass(target)) {\n Manipulator.addStyle(this._hand, {\n height: '21.5%',\n });\n } else {\n Manipulator.addStyle(this._hand, {\n height: 'calc(40% + 1px)',\n });\n }\n\n Manipulator.addStyle(this._hand, {\n transform: `rotateZ(${degrees}deg)`,\n });\n\n this._hour.textContent = hour >= 10 || hour === '00' ? hour : `0${hour}`;\n\n this._toggleClassActive(this.hoursArray, this._hour, allTipsHours);\n this._toggleClassActive(this.innerHours, this._hour, allTipsInner);\n\n this._objWithDataOnChange.hour = hour >= 10 || hour === '00' ? hour : `0${hour}`;\n }\n }\n\n _handlerMaxMinMinutesOptions(degrees, minute) {\n let { maxTime, minTime } = this._options;\n const { format12, increment, disablePast, disableFuture } = this._options;\n\n minTime = setMinTime(minTime, disablePast, format12);\n maxTime = setMaxTime(maxTime, disableFuture, format12);\n\n const maxMin = takeValue(maxTime, false)[1];\n const minMin = takeValue(minTime, false)[1];\n const maxHourTime = takeValue(maxTime, false)[0];\n const minHourTime = takeValue(minTime, false)[0];\n\n const maxTimeFormat = takeValue(maxTime, false)[2];\n const minTimeFormat = takeValue(minTime, false)[2];\n\n const maxMinDegrees = maxMin !== '' ? maxMin * 6 : '';\n const minMinDegrees = minMin !== '' ? minMin * 6 : '';\n\n const selectedHour = Number(this._hour.textContent);\n\n if (!maxTimeFormat && !minTimeFormat) {\n if (maxTime !== '' && minTime !== '') {\n if (\n (maxHourTime == selectedHour && degrees > maxMinDegrees) ||\n (minHourTime == selectedHour && degrees < minMinDegrees)\n ) {\n return degrees;\n }\n } else if (minTime !== '' && selectedHour <= Number(minHourTime)) {\n if (degrees <= minMinDegrees - 6) {\n return degrees;\n }\n } else if (maxTime !== '' && selectedHour >= Number(maxHourTime)) {\n if (degrees >= maxMinDegrees + 6) {\n return degrees;\n }\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (minTime !== '') {\n if (minTimeFormat === 'PM' && this._isAmEnabled) {\n return;\n }\n\n if (minTimeFormat === 'PM' && this._isPmEnabled) {\n if (selectedHour < Number(minHourTime)) {\n return;\n }\n\n if (selectedHour <= Number(minHourTime)) {\n if (degrees <= minMinDegrees - 6) {\n return degrees;\n }\n }\n } else if (minTimeFormat === 'AM' && this._isAmEnabled) {\n if (selectedHour < Number(minHourTime)) {\n return;\n }\n\n if (selectedHour <= Number(minHourTime)) {\n if (degrees <= minMinDegrees - 6) {\n return degrees;\n }\n }\n }\n }\n if (maxTime !== '') {\n if (maxTimeFormat === 'AM' && this._isPmEnabled) {\n return;\n }\n\n if (maxTimeFormat === 'PM' && this._isPmEnabled) {\n if (selectedHour >= Number(maxHourTime)) {\n if (degrees >= maxMinDegrees + 6) {\n return degrees;\n }\n }\n } else if (maxTimeFormat === 'AM' && this._isAmEnabled) {\n if (selectedHour >= Number(maxHourTime)) {\n if (degrees >= maxMinDegrees + 6) {\n return degrees;\n }\n }\n }\n }\n }\n\n if (increment) {\n degrees = Math.round(degrees / 30) * 30;\n }\n\n if (degrees <= 0) {\n degrees = 360 + degrees;\n } else if (degrees >= 360) {\n degrees = 0;\n }\n\n return {\n degrees,\n minute,\n };\n }\n\n _removeModal() {\n if (this._animations) {\n setTimeout(() => {\n this._removeModalElements();\n this._scrollBar.reset();\n }, 300);\n } else {\n this._removeModalElements();\n this._scrollBar.reset();\n }\n\n EventHandlerMulti.off(\n this._document,\n `${EVENT_CLICK_DATA_API} ${EVENT_KEYDOWN_DATA_API} ${EVENT_MOUSEDOWN_DATA_API} ${EVENT_MOUSEUP_DATA_API} ${EVENT_MOUSEMOVE_DATA_API} ${EVENT_MOUSELEAVE_DATA_API} ${EVENT_MOUSEOVER_DATA_API} ${EVENT_TOUCHSTART_DATA_API} ${EVENT_TOUCHMOVE_DATA_API} ${EVENT_TOUCHEND_DATA_API}`\n );\n EventHandler.off(window, EVENT_KEYDOWN_DATA_API);\n }\n\n _removeModalElements() {\n if (this._modal) {\n this._modal.remove();\n }\n }\n\n _toggleBackdropAnimation(isToRemove = false) {\n if (isToRemove) {\n Manipulator.addClass(this._wrapper, 'animation');\n Manipulator.addClass(this._wrapper, WRAPPER_CLOSE_ANIMATION_CLASS);\n this._wrapper.style.animationDuration = '300ms';\n } else {\n Manipulator.addClass(this._wrapper, 'animation');\n Manipulator.addClass(this._wrapper, WRAPPER_OPEN_ANIMATION_CLASS);\n this._wrapper.style.animationDuration = '300ms';\n\n if (!this._options.inline) Manipulator.addClass(this._clock, CLOCK_ANIMATION_CLASS);\n }\n }\n\n _toggleBackgroundColorCircle = (classes) => {\n const tips = this._modal.querySelector(`.${classes}.${ACTIVE_CLASS}`) !== null;\n\n if (tips) {\n Manipulator.addClass(this._circle, 'active');\n return;\n }\n Manipulator.removeClass(this._circle, 'active');\n };\n\n _toggleClassActive = (array, { textContent }, tips) => {\n const findInArray = [...array].find((e) => Number(e) === Number(textContent));\n\n return tips.forEach((e) => {\n if (!Manipulator.hasClass(e, 'disabled')) {\n if (e.textContent === findInArray) {\n Manipulator.addClass(e, ACTIVE_CLASS);\n } else {\n Manipulator.removeClass(e, ACTIVE_CLASS);\n }\n }\n });\n };\n\n _addActiveClassToTip(tips, value) {\n tips.forEach((tip) => {\n if (Number(tip.textContent) === Number(value)) {\n Manipulator.addClass(tip, ACTIVE_CLASS);\n }\n });\n }\n\n _makeMinutesDegrees = (degrees, minute) => {\n const { increment } = this._options;\n\n if (degrees < 0) {\n minute = Math.round(360 + degrees / 6) % 60;\n degrees = 360 + Math.round(degrees / 6) * 6;\n } else {\n minute = Math.round(degrees / 6) % 60;\n degrees = Math.round(degrees / 6) * 6;\n }\n\n if (increment) {\n degrees = Math.round(degrees / 30) * 30;\n minute = (Math.round(degrees / 6) * 6) / 6;\n\n if (minute === 60) {\n minute = '00';\n }\n }\n\n if (degrees >= 360) {\n degrees = 0;\n }\n\n return {\n degrees,\n minute,\n addDegrees: increment ? 30 : 6,\n };\n };\n\n _makeHourDegrees = (target, degrees, hour) => {\n if (!target) {\n return;\n }\n\n if (this._hasTargetInnerClass(target)) {\n if (degrees < 0) {\n hour = Math.round(360 + degrees / 30) % 24;\n degrees = 360 + degrees;\n } else {\n hour = Math.round(degrees / 30) + 12;\n if (hour === 12) {\n hour = '00';\n }\n }\n } else if (degrees < 0) {\n hour = Math.round(360 + degrees / 30) % 12;\n degrees = 360 + degrees;\n } else {\n hour = Math.round(degrees / 30) % 12;\n if (hour === 0 || hour > 12) {\n hour = 12;\n }\n }\n\n if (degrees >= 360) {\n degrees = 0;\n }\n\n return {\n degrees,\n hour,\n addDegrees: 30,\n };\n };\n\n _makeInnerHoursDegrees = (degrees, hour) => {\n if (degrees < 0) {\n hour = Math.round(360 + degrees / 30) % 24;\n degrees = 360 + degrees;\n } else {\n hour = Math.round(degrees / 30) + 12;\n if (hour === 12) {\n hour = '00';\n }\n }\n\n return {\n degrees,\n hour,\n addDegrees: 30,\n };\n };\n\n _setHourOrMinute(number) {\n return number < 10 ? `0${number}` : number;\n }\n\n _appendTimes() {\n const { format24 } = this._options;\n\n if (format24) {\n this._getAppendClock(this.hoursArray, `.${CLOCK_CLASS}`, `${TIPS_HOURS_CLASS}`);\n this._getAppendClock(this.innerHours, `.${CLOCK_INNER_CLASS}`, TIPS_INNER_HOURS_CLASS);\n } else {\n this._getAppendClock(this.hoursArray, `.${CLOCK_CLASS}`, `${TIPS_HOURS_CLASS}`);\n }\n }\n\n _getAppendClock = (array = [], clockClass = `.${CLOCK_CLASS}`, tipsClass) => {\n let { minTime, maxTime } = this._options;\n const { inline, format12, disablePast, disableFuture } = this._options;\n minTime = setMinTime(minTime, disablePast, format12);\n maxTime = setMaxTime(maxTime, disableFuture, format12);\n\n const [maxTimeHour, maxTimeMinutes, maxTimeFormat] = takeValue(maxTime, false);\n const [minTimeHour, minTimeMinutes, minTimeFormat] = takeValue(minTime, false);\n\n // fix for append clock for max/min if input has invalid value\n if (!inline) {\n if (format12) {\n if (this._isInvalidTimeFormat && !Manipulator.hasClass(this._AM, 'active')) {\n Manipulator.addClass(this._PM, 'active');\n }\n }\n }\n\n const clock = SelectorEngine.findOne(clockClass);\n\n const elements = 360 / array.length;\n\n function rad(el) {\n return el * (Math.PI / 180);\n }\n\n if (clock === null) {\n return;\n }\n\n const clockWidth = (clock.offsetWidth - 32) / 2;\n const clockHeight = (clock.offsetHeight - 32) / 2;\n const radius = clockWidth - 4;\n\n setTimeout(() => {\n let currentFormat;\n if (format12) {\n currentFormat = SelectorEngine.findOne(`.${HOUR_MODE_CLASS}.${ACTIVE_CLASS}`).textContent;\n }\n this._handleDisablingTipsMinTime(currentFormat, minTimeFormat, minTimeMinutes, minTimeHour);\n this._handleDisablingTipsMaxTime(currentFormat, maxTimeFormat, maxTimeMinutes, maxTimeHour);\n }, 0);\n\n [...array].forEach((e, i) => {\n const angle = rad(i * elements);\n\n const span = element('span');\n const spanToTips = element('span');\n\n spanToTips.innerHTML = e;\n Manipulator.addClass(span, tipsClass);\n\n const itemWidth = span.offsetWidth;\n const itemHeight = span.offsetHeight;\n\n Manipulator.addStyle(span, {\n left: `${clockWidth + Math.sin(angle) * radius - itemWidth}px`,\n bottom: `${clockHeight + Math.cos(angle) * radius - itemHeight}px`,\n });\n\n if (array.includes('05')) {\n Manipulator.addClass(span, `${TIPS_MINUTES_CLASS}`);\n }\n\n if (array.includes('13')) {\n spanToTips.classList.add(TIPS_INNER_ELEMENT_CLASS);\n } else {\n spanToTips.classList.add(TIPS_ELEMENT_CLASS);\n }\n\n span.appendChild(spanToTips);\n return clock.appendChild(span);\n });\n };\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n config = {\n ...Default,\n ...dataAttributes,\n ...config,\n };\n\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n\n _getContainer() {\n return SelectorEngine.findOne(this._options.container);\n }\n\n _listenToUserInput() {\n EventHandler.on(this.input, 'input', (event) => {\n this._handleUserInput(event.target.value);\n });\n }\n\n _handleUserInput(input) {\n const { format24, format12 } = this._options;\n\n if (this.input.value === '') {\n return;\n }\n\n const regexAMFormat = /^(0?[1-9]|1[0-2]):[0-5][0-9] [APap][mM]$/;\n const regexNormalFormat = /^(?:[01]\\d|2[0-3]):[0-5]\\d$/;\n const testedAMRegex = regexAMFormat.test(input);\n const testedNormalRegex = regexNormalFormat.test(input);\n\n if (testedNormalRegex === true && format24) {\n this._isInvalidTimeFormat = false;\n this._inputValue = this.input.value;\n this._currentTime = formatNormalHours(this._inputValue);\n } else if (testedAMRegex === true && format12) {\n this._isInvalidTimeFormat = false;\n this._inputValue = this.input.value;\n this._currentTime = formatToAmPm(this._inputValue);\n } else {\n this._isInvalidTimeFormat = true;\n }\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Timepicker(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n }\n });\n }\n}\n\nexport default Timepicker;\n","import EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'navbar';\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Navbar extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME;\n }\n\n // Public\n init() {\n this._onScroll();\n this._addEvent();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n dispose() {\n this._removeEvent();\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Private\n _addEvent() {\n EventHandler.on(window, 'scroll', () => this._onScroll());\n }\n\n _removeEvent() {\n EventHandler.off(window, 'scroll');\n }\n\n _onScroll() {\n if (window.scrollY > 0) {\n Manipulator.addClass(this._element, 'navbar-scrolled');\n } else {\n Manipulator.removeClass(this._element, 'navbar-scrolled');\n }\n }\n}\n\nexport default Navbar;\n","import { typeCheckConfig } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport Manipulator from '../mdb/dom/manipulator';\nimport EventHandler from '../mdb/dom/event-handler';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'infiniteScroll';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst EVENT_COMPLETED = `completed${EVENT_KEY}`;\n\nconst Default = {\n infiniteDirection: 'y',\n};\n\nconst DefaultType = {\n infiniteDirection: 'string',\n};\n\nclass InfiniteScroll extends BaseComponent {\n constructor(element, data) {\n super(element);\n this._element = element;\n\n this._options = this._getConfig(data);\n\n this.scrollHandler = this._scrollHandler.bind(this);\n\n this._init();\n\n if (this._element !== window) {\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n get rect() {\n return this._element.getBoundingClientRect();\n }\n\n get condition() {\n if (this._element === window) {\n return (\n Math.abs(window.scrollY + window.innerHeight - document.documentElement.scrollHeight) < 1\n );\n }\n if (this._options.infiniteDirection === 'x') {\n return this.rect.width + this._element.scrollLeft + 10 >= this._element.scrollWidth;\n }\n return Math.ceil(this.rect.height + this._element.scrollTop) >= this._element.scrollHeight;\n }\n\n // Public\n\n dispose() {\n EventHandler.off(this._element, 'scroll');\n if (this._element !== window) {\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n }\n\n super.dispose();\n }\n\n // Private\n\n _init() {\n EventHandler.on(this._element, 'scroll', () => this._scrollHandler());\n }\n\n _scrollHandler() {\n if (this.condition) {\n EventHandler.trigger(this._element, EVENT_COMPLETED);\n }\n EventHandler.off(this._element, 'scroll', this.scrollHandler);\n }\n\n _getConfig(options) {\n const config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...options,\n };\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n if (!data) {\n data = new InfiniteScroll(this, _config);\n }\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n }\n });\n }\n}\n\nexport default InfiniteScroll;\n","import { typeCheckConfig } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport Animate from './animate';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'lazyLoad';\nconst DATA_KEY = 'mdb.lazyLoad';\n\nconst CLASSNAME_LAZYLOAD = 'lazy';\nconst SELECTOR_LAZYLOAD = '.lazy';\nconst SELECTOR_ELEMENTS = ['img', 'video'];\n\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_LOADED = `contentLoaded${EVENT_KEY}`;\nconst EVENT_ERROR = `loadingError${EVENT_KEY}`;\n\nconst DefaultType = {\n lazySrc: '(string|null)',\n lazyDelay: 'number',\n lazyAnimation: 'string',\n lazyOffset: 'number',\n lazyPlaceholder: '(string|undefined)',\n lazyError: '(string|undefined)',\n};\n\nconst Default = {\n lazySrc: null,\n lazyDelay: 500,\n lazyAnimation: 'fade-in',\n lazyOffset: 0,\n};\n\nclass LazyLoad extends BaseComponent {\n constructor(element, data) {\n super(element);\n\n this._options = this._getConfig(data);\n\n this.scrollHandler = this._scrollHandler.bind(this);\n\n this.errorHandler = this._setElementError.bind(this);\n\n this._childrenInstances = null;\n\n this._init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n get offsetValues() {\n return this._element.getBoundingClientRect();\n }\n\n get inViewport() {\n if (this.parent) {\n const parentRect = this.parent.getBoundingClientRect();\n return (\n parentRect.y > 0 &&\n parentRect.y < window.innerHeight &&\n this.offsetValues.y >= parentRect.y &&\n this.offsetValues.y <= parentRect.y + parentRect.height &&\n this.offsetValues.y <= window.innerHeight\n );\n }\n\n return (\n this.offsetValues.top + this._options.lazyOffset <= window.innerHeight &&\n this.offsetValues.bottom >= 0\n );\n }\n\n get parent() {\n const [container] = SelectorEngine.parents(this._element, SELECTOR_LAZYLOAD);\n return container;\n }\n\n get node() {\n return this._element.nodeName;\n }\n\n get isContainer() {\n return !SelectorEngine.matches(this._element, SELECTOR_ELEMENTS);\n }\n\n // Public\n\n dispose() {\n EventHandler.off(this._element, 'load');\n EventHandler.off(this._element, 'error', this.errorHandler);\n EventHandler.off(window, 'scroll', this.scrollHandler);\n\n if (this._animation) {\n this._animation.dispose();\n this._animation = null;\n }\n if (this._childrenInstances) {\n this._childrenInstances.forEach((child) => child.dispose());\n }\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Private\n\n _init() {\n Manipulator.addClass(this._element, CLASSNAME_LAZYLOAD);\n\n if (this.isContainer) {\n this._setupContainer();\n return;\n }\n\n this._setupElement();\n }\n\n _setupElement() {\n EventHandler.one(this._element, 'error', this.errorHandler);\n\n if (this._options.lazyPlaceholder) {\n this._setPlaceholder();\n }\n\n this._animation = new Animate(this._element, {\n animation: this._options.lazyAnimation,\n animationStart: 'onLoad',\n });\n\n EventHandler.one(this._element, 'load', () => this._scrollHandler());\n if (this.parent) {\n EventHandler.on(this.parent, 'scroll', this.scrollHandler);\n }\n\n EventHandler.on(window, 'scroll', this.scrollHandler);\n }\n\n _scrollHandler() {\n if (this.inViewport) {\n this._timeout = setTimeout(() => {\n this._setSrc();\n\n this._element.classList.remove(CLASSNAME_LAZYLOAD);\n\n this._removeAttrs();\n\n this._animation.init();\n }, this._options.lazyDelay);\n\n if (this.parent) {\n EventHandler.off(this.parent, 'scroll', this.scrollHandler);\n }\n\n EventHandler.off(window, 'scroll', this.scrollHandler);\n }\n }\n\n _setElementError() {\n if (!this._options.lazyError || this._element.src === this._options.lazyError) {\n this._element.alt = '404 not found';\n } else {\n this._element.setAttribute('src', this._options.lazyError);\n }\n EventHandler.trigger(this._element, EVENT_ERROR);\n }\n\n _setSrc() {\n this._element.setAttribute('src', this._options.lazySrc);\n\n EventHandler.trigger(this._element, EVENT_LOADED);\n }\n\n _setPlaceholder() {\n if (this.node === 'IMG') {\n this._element.setAttribute('src', this._options.lazyPlaceholder);\n } else if (this.node === 'VIDEO') {\n this._element.setAttribute('poster', this._options.lazyPlaceholder);\n }\n }\n\n _removeAttrs() {\n ['src', 'delay', 'animation', 'placeholder', 'offset', 'error'].forEach((attr) => {\n Manipulator.removeDataAttribute(this._element, `lazy-${attr}`);\n });\n }\n\n _setupContainer() {\n this._childrenInstances = SelectorEngine.children(this._element, SELECTOR_ELEMENTS).map(\n (child) => new LazyLoad(child, this._options)\n );\n }\n\n _getConfig(options) {\n const config = {\n ...Default,\n ...options,\n ...Manipulator.getDataAttributes(this._element),\n };\n\n typeCheckConfig(NAME, config, DefaultType);\n\n return config;\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n\n const _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new LazyLoad(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](this);\n }\n });\n }\n}\n\nexport default LazyLoad;\n","export function getDate(date) {\n return date.getDate();\n}\n\nexport function getDayNumber(date) {\n return date.getDay();\n}\n\nexport function getMonth(date) {\n return date.getMonth();\n}\n\nexport function getYear(date) {\n return date.getFullYear();\n}\n\nexport function getFirstDayOfWeek(year, month, options) {\n const firstDayIndex = options.startDay;\n const sundayIndex = firstDayIndex > 0 ? 7 - firstDayIndex : 0;\n const date = new Date(year, month);\n const index = date.getDay() + sundayIndex;\n const newIndex = index >= 7 ? index - 7 : index;\n return newIndex;\n}\n\nexport function getDaysInMonth(date) {\n return getMonthEnd(date).getDate();\n}\n\nexport function getMonthEnd(date) {\n return createDate(date.getFullYear(), date.getMonth() + 1, 0);\n}\n\nexport function getToday() {\n return new Date();\n}\n\nexport function addYears(date, years) {\n return addMonths(date, years * 12);\n}\n\nexport function addMonths(date, months) {\n const month = createDate(date.getFullYear(), date.getMonth() + months, date.getDate());\n const dayOfPreviousMonth = getDate(date);\n const dayOfNewMonth = getDate(month);\n\n // Solution for edge cases, like moving from a month with a greater number\n // of days than the destination month. For example, when we move from 31 Mar 2020 to\n // February, createDate(2020, 2, 31) will return 2 Mar 2020, not the desired 29 Feb 2020.\n // We need to use setDate(0) to move back to the last day of the previous month (29 Feb 2020)\n if (dayOfPreviousMonth !== dayOfNewMonth) {\n month.setDate(0);\n }\n\n return month;\n}\n\nexport function addDays(date, days) {\n return createDate(date.getFullYear(), date.getMonth(), date.getDate() + days);\n}\n\nexport function createDate(year, month, day) {\n const result = new Date(year, month, day);\n\n // In js native date years from 0 to 99 are treated as abbreviation\n // for dates like 19xx\n if (year >= 0 && year < 100) {\n result.setFullYear(result.getFullYear() - 1900);\n }\n return result;\n}\n\nexport function convertStringToDate(dateString) {\n const dateArr = dateString.split('-');\n const year = dateArr[0];\n const month = dateArr[1];\n const day = dateArr[2];\n\n return createDate(year, month, day);\n}\n\nexport function isValidDate(date) {\n return !Number.isNaN(date.getTime());\n}\n\nexport function compareDates(date1, date2) {\n return (\n getYear(date1) - getYear(date2) ||\n getMonth(date1) - getMonth(date2) ||\n getDate(date1) - getDate(date2)\n );\n}\n\nexport function isSameDate(date1, date2) {\n date1.setHours(0, 0, 0, 0);\n date2.setHours(0, 0, 0, 0);\n\n return date1.getTime() === date2.getTime();\n}\n\nexport function getYearsOffset(activeDate, yearsInView) {\n const activeYear = getYear(activeDate);\n const yearsDifference = activeYear - getStartYear();\n return modulo(yearsDifference, yearsInView);\n}\n\nfunction modulo(a, b) {\n return ((a % b) + b) % b;\n}\n\nexport function getStartYear(yearsInView, minDate, maxDate) {\n let startYear = 0;\n\n if (maxDate) {\n const maxYear = getYear(maxDate);\n startYear = maxYear - yearsInView + 1;\n } else if (minDate) {\n startYear = getYear(minDate);\n }\n\n return startYear;\n}\n\nexport function isDateDisabled(date, minDate, maxDate, filter, disabledPast, disabledFuture) {\n const currentDate = new Date();\n currentDate.setHours(0, 0, 0, 0);\n\n const isBeforeMin = minDate && compareDates(date, minDate) <= -1;\n const isAfterMax = maxDate && compareDates(date, maxDate) >= 1;\n\n const isDisabledPast = disabledPast && compareDates(date, currentDate) <= -1;\n const isDisabledFuture = disabledFuture && compareDates(date, currentDate) >= 1;\n\n const isDisabled = filter && filter(date) === false;\n\n return isBeforeMin || isAfterMax || isDisabled || isDisabledPast || isDisabledFuture;\n}\n\nexport function isMonthDisabled(month, year, minDate, maxDate, disabledPast, disabledFuture) {\n const currentDate = new Date();\n const maxYear = maxDate && getYear(maxDate);\n const maxMonth = maxDate && getMonth(maxDate);\n const minYear = minDate && getYear(minDate);\n const minMonth = minDate && getMonth(minDate);\n const currentYear = getYear(currentDate);\n const currentMonth = getMonth(currentDate);\n\n const isMonthAndYearAfterMax =\n maxMonth && maxYear && (year > maxYear || (year === maxYear && month > maxMonth));\n\n const isMonthAndYearBeforeMin =\n minMonth && minYear && (year < minYear || (year === minYear && month < minMonth));\n\n const isMonthAndYearDisabledPast =\n disabledPast && (year < currentYear || (year === currentYear && month < currentMonth));\n const isMonthAndYearDisabledFuture =\n disabledFuture && (year > currentYear || (year === currentYear && month > currentMonth));\n\n return (\n isMonthAndYearAfterMax ||\n isMonthAndYearBeforeMin ||\n isMonthAndYearDisabledPast ||\n isMonthAndYearDisabledFuture\n );\n}\n\nexport function isYearDisabled(year, minDate, maxDate, disabledPast, disabledFuture) {\n const min = minDate && getYear(minDate);\n const max = maxDate && getYear(maxDate);\n const currentYear = getYear(new Date());\n\n const isAfterMax = max && year > max;\n const isBeforeMin = min && year < min;\n const isDisabledPast = disabledPast && year < currentYear;\n const isDisabledFuture = disabledFuture && year > currentYear;\n\n return isAfterMax || isBeforeMin || isDisabledPast || isDisabledFuture;\n}\n\nexport function isNextDateDisabled(\n disabledFuture,\n activeDate,\n view,\n yearsInView,\n minDate,\n maxDate,\n lastYearInView,\n firstYearInView\n) {\n const currentDate = new Date();\n currentDate.setHours(0, 0, 0, 0);\n if (disabledFuture && maxDate && compareDates(maxDate, currentDate) < 0) {\n maxDate = currentDate;\n } else if (disabledFuture) {\n maxDate = currentDate;\n }\n return (\n maxDate &&\n areDatesInSameView(\n activeDate,\n maxDate,\n view,\n yearsInView,\n minDate,\n maxDate,\n lastYearInView,\n firstYearInView\n )\n );\n}\n\nexport function isPreviousDateDisabled(\n disabledPast,\n activeDate,\n view,\n yearsInView,\n minDate,\n maxDate,\n lastYearInView,\n firstYearInView\n) {\n const currentDate = new Date();\n currentDate.setHours(0, 0, 0, 0);\n if (disabledPast && minDate && compareDates(minDate, currentDate) < 0) {\n minDate = currentDate;\n } else if (disabledPast) {\n minDate = currentDate;\n }\n return (\n minDate &&\n areDatesInSameView(\n activeDate,\n minDate,\n view,\n yearsInView,\n minDate,\n maxDate,\n lastYearInView,\n firstYearInView\n )\n );\n}\n\nexport function areDatesInSameView(\n date1,\n date2,\n view,\n yearsInView,\n minDate,\n maxDate,\n lastYearInView,\n firstYearInView\n) {\n if (view === 'days') {\n return getYear(date1) === getYear(date2) && getMonth(date1) === getMonth(date2);\n }\n\n if (view === 'months') {\n return getYear(date1) === getYear(date2);\n }\n\n if (view === 'years') {\n return getYear(date2) >= firstYearInView && getYear(date2) <= lastYearInView;\n }\n\n return false;\n}\n","/* eslint-disable indent */\n\nimport Manipulator from '../../mdb/dom/manipulator';\nimport { element } from '../../mdb/util';\nimport {\n getYear,\n getMonth,\n getDate,\n getDayNumber,\n getFirstDayOfWeek,\n addMonths,\n getDaysInMonth,\n createDate,\n isSameDate,\n getToday,\n getYearsOffset,\n isDateDisabled,\n isMonthDisabled,\n isYearDisabled,\n} from './date-utils';\n\nexport function getDatepickerTemplate(\n date,\n selectedDate,\n selectedYear,\n selectedMonth,\n options,\n monthsInRow,\n yearsInView,\n yearsInRow,\n id\n) {\n const month = getMonth(date);\n const year = getYear(date);\n const day = getDate(date);\n const dayNumber = getDayNumber(date);\n const template = element('div');\n const inlineContent = `\n ${createMainContent(\n date,\n month,\n year,\n selectedDate,\n selectedYear,\n selectedMonth,\n options,\n monthsInRow,\n yearsInView,\n yearsInRow\n )}\n `;\n const modalContent = `\n ${createHeader(day, dayNumber, month, options, date)}\n ${createMainContent(\n date,\n month,\n year,\n selectedDate,\n selectedYear,\n selectedMonth,\n options,\n monthsInRow,\n yearsInView,\n yearsInRow\n )}\n `;\n\n if (options.inline) {\n Manipulator.addClass(template, 'datepicker-dropdown-container');\n Manipulator.addClass(template, `datepicker-dropdown-container-${id}`);\n\n template.innerHTML = inlineContent;\n } else {\n Manipulator.addClass(template, 'datepicker-modal-container');\n Manipulator.addClass(template, `datepicker-modal-container-${id}`);\n\n template.innerHTML = modalContent;\n }\n\n return template;\n}\n\nexport function getBackdropTemplate() {\n const backdrop = element('div');\n Manipulator.addClass(backdrop, 'datepicker-backdrop');\n\n return backdrop;\n}\n\nexport function createContainer() {\n const container = element('div');\n Manipulator.addClass(container, '.datepicker-modal-container');\n\n return container;\n}\n\nexport function createCustomHeader(day, dayNumber, month, selected, options) {\n const { weekdaysShort, weekdaysFull, monthsShort, headerTemplateModifier, headerTemplate } =\n options;\n\n const selectedDate = headerTemplateModifier ? headerTemplateModifier(selected) : selected;\n return headerTemplate\n .replaceAll('[day]', day)\n .replaceAll('[weekday]', weekdaysShort[dayNumber])\n .replaceAll('[weekdayFull]', weekdaysFull[dayNumber])\n .replaceAll('[month]', monthsShort[month])\n .replaceAll('[selected]', selectedDate);\n}\n\nfunction createHeader(day, dayNumber, month, options, selected) {\n return `\n <div class=\"datepicker-header\">\n ${\n options.headerTemplate\n ? createCustomHeader(day, dayNumber, month, selected, options)\n : `\n <div class=\"datepicker-title\">\n <span class=\"datepicker-title-text\">${options.title}</span>\n </div>\n <div class=\"datepicker-date\">\n <span class=\"datepicker-date-text\">${options.weekdaysShort[dayNumber]}, ${options.monthsShort[month]} ${day}</span>\n </div>\n `\n }\n </div>\n `;\n}\n\nfunction createMainContent(\n date,\n month,\n year,\n selectedDate,\n selectedYear,\n selectedMonth,\n options,\n monthsInRow,\n yearsInView,\n yearsInRow\n) {\n let mainContentTemplate;\n if (options.inline) {\n mainContentTemplate = `\n <div class=\"datepicker-main\">\n ${createControls(month, year, options)}\n <div class=\"datepicker-view\" tabindex=\"0\">\n ${createViewTemplate(\n date,\n year,\n selectedDate,\n selectedYear,\n selectedMonth,\n options,\n monthsInRow,\n yearsInView,\n yearsInRow\n )}\n </div>\n </div>\n `;\n } else {\n mainContentTemplate = `\n <div class=\"datepicker-main\">\n ${createControls(month, year, options)}\n <div class=\"datepicker-view\" tabindex=\"0\">\n ${createViewTemplate(\n date,\n year,\n selectedDate,\n selectedYear,\n selectedMonth,\n options,\n monthsInRow,\n yearsInView,\n yearsInRow\n )}\n </div>\n ${createFooter(options)}\n </div>\n `;\n }\n\n return mainContentTemplate;\n}\n\nfunction createViewTemplate(\n date,\n year,\n selectedDate,\n selectedYear,\n selectedMonth,\n options,\n monthsInRow,\n yearsInView,\n yearsInRow\n) {\n let viewTemplate;\n if (options.view === 'days') {\n viewTemplate = createDayViewTemplate(date, selectedDate, options);\n } else if (options.view === 'months') {\n viewTemplate = createMonthViewTemplate(year, selectedYear, selectedMonth, options, monthsInRow);\n } else {\n viewTemplate = createYearViewTemplate(date, selectedYear, options, yearsInView, yearsInRow);\n }\n\n return viewTemplate;\n}\n\nfunction createControls(month, year, options) {\n return `\n <div class=\"datepicker-date-controls\">\n <button class=\"datepicker-view-change-button\" aria-label=\"${options.switchToMultiYearViewLabel}\">\n ${options.monthsFull[month]} ${year}\n </button>\n <div class=\"datepicker-arrow-controls\">\n <button class=\"datepicker-previous-button\" aria-label=\"${options.prevMonthLabel}\"></button>\n <button class=\"datepicker-next-button\" aria-label=\"${options.nextMonthLabel}\"></button>\n </div>\n </div>\n `;\n}\n\nfunction createFooter(options) {\n const okBtn = `<button class=\"datepicker-footer-btn datepicker-ok-btn\" aria-label=\"${options.okBtnLabel}\">${options.okBtnText}</button>`;\n const cancelButton = `<button class=\"datepicker-footer-btn datepicker-cancel-btn\" aria-label=\"${options.cancelBtnLabel}\">${options.cancelBtnText}</button>`;\n const clearButton = `<button class=\"datepicker-footer-btn datepicker-clear-btn\" aria-label=\"${options.clearBtnLabel}\">${options.clearBtnText}</button>`;\n\n return `\n <div class=\"datepicker-footer\">\n ${options.removeClearBtn ? '' : clearButton}\n ${options.removeCancelBtn ? '' : cancelButton}\n ${options.removeOkBtn ? '' : okBtn}\n </div>\n `;\n}\n\nexport function createDayViewTemplate(date, headerDate, options) {\n const dates = getDatesArray(date, headerDate, options);\n const dayNames = options.weekdaysNarrow;\n\n const tableHeadContent = `\n <tr>\n ${dayNames\n .map((name, i) => {\n return `<th class=\"datepicker-day-heading\" scope=\"col\" aria-label=\"${options.weekdaysFull[i]}\">${name}</th>`;\n })\n .join('')}\n </tr>\n `;\n\n const tableBodyContent = dates\n .map((week) => {\n return `\n <tr>\n ${week\n .map((day) => {\n return `\n <td\n class=\"datepicker-cell datepicker-small-cell datepicker-day-cell\n ${day.currentMonth ? '' : 'disabled'} ${day.disabled ? 'disabled' : ''}\n ${day.isToday && 'current'} ${day.isSelected && 'selected'}\"\n data-mdb-date=\"${getYear(day.date)}-${getMonth(day.date)}-${getDate(day.date)}\"\n aria-label=\"${day.date}\"\n aria-selected=\"${day.isSelected}\">\n <div\n class=\"datepicker-cell-content datepicker-small-cell-content\"\n style=\"${day.currentMonth ? 'display: block' : 'display: none'}\">\n ${day.dayNumber}\n </div>\n </td>\n `;\n })\n .join('')}\n </tr>\n `;\n })\n .join('');\n\n return `\n <table class=\"datepicker-table\">\n <thead>\n ${tableHeadContent}\n </thead>\n <tbody class=\"datepicker-table-body\">\n ${tableBodyContent}\n </tbody>\n </table>\n `;\n}\n\nfunction getDatesArray(activeDate, headerDate, options) {\n const dates = [];\n\n const month = getMonth(activeDate);\n const previousMonth = getMonth(addMonths(activeDate, -1));\n const nextMonth = getMonth(addMonths(activeDate, 1));\n const year = getYear(activeDate);\n\n const firstDay = getFirstDayOfWeek(year, month, options);\n const daysInMonth = getDaysInMonth(activeDate);\n const daysInPreviousMonth = getDaysInMonth(addMonths(activeDate, -1));\n const daysInWeek = 7;\n\n let dayNumber = 1;\n let isCurrentMonth = false;\n for (let i = 1; i < daysInWeek; i++) {\n const week = [];\n if (i === 1) {\n // First week\n const previousMonthDay = daysInPreviousMonth - firstDay + 1;\n // Previous month\n for (let j = previousMonthDay; j <= daysInPreviousMonth; j++) {\n const date = createDate(year, previousMonth, j);\n\n week.push({\n date,\n currentMonth: isCurrentMonth,\n isSelected: headerDate && isSameDate(date, headerDate),\n isToday: isSameDate(date, getToday()),\n dayNumber: getDate(date),\n disabled: isDateDisabled(\n date,\n options.min,\n options.max,\n options.filter,\n options.disablePast,\n options.disableFuture\n ),\n });\n }\n\n isCurrentMonth = true;\n // Current month\n const daysLeft = daysInWeek - week.length;\n for (let j = 0; j < daysLeft; j++) {\n const date = createDate(year, month, dayNumber);\n\n week.push({\n date,\n currentMonth: isCurrentMonth,\n isSelected: headerDate && isSameDate(date, headerDate),\n isToday: isSameDate(date, getToday()),\n dayNumber: getDate(date),\n disabled: isDateDisabled(\n date,\n options.min,\n options.max,\n options.filter,\n options.disablePast,\n options.disableFuture\n ),\n });\n dayNumber++;\n }\n } else {\n // Rest of the weeks\n for (let j = 1; j < 8; j++) {\n if (dayNumber > daysInMonth) {\n // Next month\n dayNumber = 1;\n isCurrentMonth = false;\n }\n const date = createDate(year, isCurrentMonth ? month : nextMonth, dayNumber);\n\n week.push({\n date,\n currentMonth: isCurrentMonth,\n isSelected: headerDate && isSameDate(date, headerDate),\n isToday: isSameDate(date, getToday()),\n dayNumber: getDate(date),\n disabled: isDateDisabled(\n date,\n options.min,\n options.max,\n options.filter,\n options.disablePast,\n options.disableFuture\n ),\n });\n dayNumber++;\n }\n }\n dates.push(week);\n }\n\n return dates;\n}\n\nexport function createMonthViewTemplate(year, selectedYear, selectedMonth, options, monthsInRow) {\n const months = getMonthsArray(options, monthsInRow);\n const currentMonth = getMonth(getToday());\n const currentYear = getYear(getToday());\n\n const tableBodyContent = `\n ${months\n .map((row) => {\n return `\n <tr>\n ${row\n .map((month) => {\n const monthIndex = options.monthsShort.indexOf(month);\n return `\n <td class=\"datepicker-cell datepicker-large-cell datepicker-month-cell ${\n isMonthDisabled(\n monthIndex,\n year,\n options.min,\n options.max,\n options.disablePast,\n options.disableFuture\n )\n ? 'disabled'\n : ''\n } ${monthIndex === selectedMonth && year === selectedYear ? 'selected' : ''} ${\n monthIndex === currentMonth && year === currentYear ? 'current' : ''\n }\" data-mdb-month=\"${monthIndex}\" data-mdb-year=\"${year}\" aria-label=\"${month}, ${year}\">\n <div class=\"datepicker-cell-content datepicker-large-cell-content\">${month}</div>\n </td>\n `;\n })\n .join('')}\n </tr>\n `;\n })\n .join('')}\n `;\n\n return `\n <table class=\"datepicker-table\">\n <tbody class=\"datepicker-table-body\">\n ${tableBodyContent}\n </tbody>\n </table>\n `;\n}\n\nfunction getMonthsArray(options, monthsInRow) {\n const months = [];\n\n let row = [];\n\n for (let i = 0; i < options.monthsShort.length; i++) {\n row.push(options.monthsShort[i]);\n\n if (row.length === monthsInRow) {\n const monthsRow = row;\n months.push(monthsRow);\n row = [];\n }\n }\n\n return months;\n}\n\nexport function createYearViewTemplate(date, selectedYear, options, yearsInView, yearsInRow) {\n const years = getYearsArray(date, yearsInView, yearsInRow);\n const currentYear = getYear(getToday());\n\n const tableBodyContent = `\n ${years\n .map((row) => {\n return `\n <tr>\n ${row\n .map((year) => {\n return `\n <td class=\"datepicker-cell datepicker-large-cell datepicker-year-cell ${\n isYearDisabled(\n year,\n options.min,\n options.max,\n options.disablePast,\n options.disableFuture\n )\n ? 'disabled'\n : ''\n } ${year === selectedYear ? 'selected' : ''} ${\n year === currentYear ? 'current' : ''\n }\" aria-label=\"${year}\" data-mdb-year=\"${year}\">\n <div class=\"datepicker-cell-content datepicker-large-cell-content\">${year}</div>\n </td>\n `;\n })\n .join('')}\n </tr>\n `;\n })\n .join('')}\n `;\n\n return `\n <table class=\"datepicker-table\">\n <tbody class=\"datepicker-table-body\">\n ${tableBodyContent}\n </tbody>\n </table>\n `;\n}\n\nfunction getYearsArray(date, yearsInView, yearsInRow) {\n const years = [];\n const activeYear = getYear(date);\n const yearsOffset = getYearsOffset(date, yearsInView);\n\n const firstYearInView = activeYear - yearsOffset;\n\n let row = [];\n\n for (let i = 0; i < yearsInView; i++) {\n row.push(firstYearInView + i);\n\n if (row.length === yearsInRow) {\n const yearsRow = row;\n years.push(yearsRow);\n row = [];\n }\n }\n\n return years;\n}\n\nexport function getToggleButtonTemplate(id) {\n return `\n <button id=\"${id}\" type=\"button\" class=\"datepicker-toggle-button\" data-mdb-toggle=\"datepicker\">\n <i class=\"far fa-calendar datepicker-toggle-icon\"></i>\n </button>\n `;\n}\n","import { createPopper } from '@popperjs/core';\nimport Data from '../../mdb/dom/data';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport ScrollBarHelper from '../../bootstrap/mdb-prefix/util/scrollbar';\nimport { typeCheckConfig, getUID, isRTL } from '../../mdb/util/index';\nimport FocusTrap from '../../mdb/util/focusTrap';\nimport {\n getDate,\n getDayNumber,\n getMonth,\n getYear,\n getDaysInMonth,\n addYears,\n addMonths,\n addDays,\n createDate,\n convertStringToDate,\n isSameDate,\n areDatesInSameView,\n isDateDisabled,\n isMonthDisabled,\n isYearDisabled,\n isNextDateDisabled,\n isPreviousDateDisabled,\n getYearsOffset,\n isValidDate,\n} from './date-utils';\nimport {\n getBackdropTemplate,\n getDatepickerTemplate,\n createDayViewTemplate,\n createMonthViewTemplate,\n createYearViewTemplate,\n getToggleButtonTemplate,\n createCustomHeader,\n} from './templates';\nimport {\n ENTER,\n SPACE,\n ESCAPE,\n LEFT_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n UP_ARROW,\n HOME,\n END,\n PAGE_UP,\n PAGE_DOWN,\n} from '../../mdb/util/keycodes';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst YEARS_IN_VIEW = 24;\nconst YEARS_IN_ROW = 4;\nconst MONTHS_IN_ROW = 4;\n\nconst NAME = 'datepicker';\nconst DATA_KEY = `mdb.${NAME}`;\nconst DATA_API_KEY = '.data-api';\n\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLOSE = `close${EVENT_KEY}`;\nconst EVENT_OPEN = `open${EVENT_KEY}`;\nconst EVENT_VALUE_CHANGED = `valueChanged${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\nconst BACKDROP_OPEN_ANIMATION_CLASS = 'fade-in';\nconst BACKDROP_CLOSE_ANIMATION_CLASS = 'fade-out';\nconst CONTAINER_OPEN_ANIMATION_CLASS = 'fade-in';\nconst CONTAINER_CLOSE_ANIMATION_CLASS = 'fade-out';\n\nconst CLASS_FORM_ICON_TRAILING = 'form-icon-trailing';\n\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-toggle=\"datepicker\"]';\nconst SELECTOR_MODAL_CONTAINER = '.datepicker-modal-container';\nconst SELECTOR_DROPDOWN_CONTAINER = '.datepicker-dropdown-container';\nconst SELECTOR_VIEW_CHANGE_BUTTON = '.datepicker-view-change-button';\nconst SELECTOR_PREVIOUS_BUTTON = '.datepicker-previous-button';\nconst SELECTOR_NEXT_BUTTON = '.datepicker-next-button';\nconst SELECTOR_OK_BUTTON = '.datepicker-ok-btn';\nconst SELECTOR_CANCEL_BUTTON = '.datepicker-cancel-btn';\nconst SELECTOR_CLEAR_BUTTON = '.datepicker-clear-btn';\nconst SELECTOR_DATES_CONTAINER = '.datepicker-view';\n\nconst Default = {\n title: 'Select date',\n container: 'body',\n disablePast: false,\n disableFuture: false,\n monthsFull: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n weekdaysFull: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n weekdaysNarrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n okBtnText: 'Ok',\n clearBtnText: 'Clear',\n cancelBtnText: 'Cancel',\n\n okBtnLabel: 'Confirm selection',\n clearBtnLabel: 'Clear selection',\n cancelBtnLabel: 'Cancel selection',\n nextMonthLabel: 'Next month',\n prevMonthLabel: 'Previous month',\n nextYearLabel: 'Next year',\n prevYearLabel: 'Previous year',\n nextMultiYearLabel: 'Next 24 years',\n prevMultiYearLabel: 'Previous 24 years',\n switchToMultiYearViewLabel: 'Switch to year list',\n switchToDayViewLabel: 'Switch to day list',\n\n startDate: null,\n startDay: 0,\n format: 'dd/mm/yyyy',\n view: 'days',\n\n min: null,\n max: null,\n filter: null,\n\n inline: false,\n toggleButton: true,\n disableToggleButton: false,\n disableInput: false,\n animations: true,\n confirmDateOnSelect: false,\n removeOkBtn: false,\n removeCancelBtn: false,\n removeClearBtn: false,\n headerTemplate: null,\n headerTemplateModifier: null,\n};\n\nconst DefaultType = {\n title: 'string',\n container: 'string',\n disablePast: 'boolean',\n disableFuture: 'boolean',\n monthsFull: 'array',\n monthsShort: 'array',\n weekdaysFull: 'array',\n weekdaysShort: 'array',\n weekdaysNarrow: 'array',\n\n okBtnText: 'string',\n clearBtnText: 'string',\n cancelBtnText: 'string',\n okBtnLabel: 'string',\n clearBtnLabel: 'string',\n cancelBtnLabel: 'string',\n nextMonthLabel: 'string',\n prevMonthLabel: 'string',\n nextYearLabel: 'string',\n prevYearLabel: 'string',\n nextMultiYearLabel: 'string',\n prevMultiYearLabel: 'string',\n switchToMultiYearViewLabel: 'string',\n switchToDayViewLabel: 'string',\n\n startDate: '(null|string|date)',\n startDay: 'number',\n format: 'string',\n view: 'string',\n\n min: '(null|date|string)',\n max: '(null|date|string)',\n filter: '(null|function)',\n\n inline: 'boolean',\n toggleButton: 'boolean',\n disableToggleButton: 'boolean',\n disableInput: 'boolean',\n animations: 'boolean',\n confirmDateOnSelect: 'boolean',\n removeOkBtn: 'boolean',\n removeCancelBtn: 'boolean',\n removeClearBtn: 'boolean',\n\n headerTemplate: '(null|string)',\n headerTemplateModifier: '(null|function)',\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Datepicker extends BaseComponent {\n constructor(element, options) {\n super(element);\n\n this._input = SelectorEngine.findOne('input', this._element);\n this._options = this._getConfig(options);\n this._activeDate = new Date();\n this._selectedDate = null;\n this._selectedYear = null;\n this._selectedMonth = null;\n this._headerDate = null;\n this._headerYear = null;\n this._headerMonth = null;\n this._view = this._options.view;\n this._popper = null;\n this._focusTrap = null;\n this._isOpen = false;\n this._toggleButtonId = this._element.id\n ? `datepicker-toggle-${this._element.id}`\n : getUID('datepicker-toggle-');\n this._animations =\n !window.matchMedia('(prefers-reduced-motion: reduce)').matches && this._options.animations;\n\n this._scrollBar = new ScrollBarHelper();\n\n this._init();\n\n if (this.toggleButton && this._options.disableToggle) {\n this.toggleButton.disabled = 'true';\n }\n\n if (this._options.disableInput) {\n this._input.disabled = 'true';\n }\n\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n get container() {\n return (\n SelectorEngine.findOne(`${SELECTOR_MODAL_CONTAINER}-${this._toggleButtonId}`) ||\n SelectorEngine.findOne(`${SELECTOR_DROPDOWN_CONTAINER}-${this._toggleButtonId}`)\n );\n }\n\n get options() {\n return this._options;\n }\n\n get activeCell() {\n let activeCell;\n\n if (this._view === 'days') {\n activeCell = this._getActiveDayCell();\n }\n\n if (this._view === 'months') {\n activeCell = this._getActiveMonthCell();\n }\n\n if (this._view === 'years') {\n activeCell = this._getActiveYearCell();\n }\n\n return activeCell;\n }\n\n get activeDay() {\n return getDate(this._activeDate);\n }\n\n get activeMonth() {\n return getMonth(this._activeDate);\n }\n\n get activeYear() {\n return getYear(this._activeDate);\n }\n\n get firstYearInView() {\n return this.activeYear - getYearsOffset(this._activeDate, YEARS_IN_VIEW);\n }\n\n get lastYearInView() {\n return this.firstYearInView + YEARS_IN_VIEW - 1;\n }\n\n get viewChangeButton() {\n return SelectorEngine.findOne(SELECTOR_VIEW_CHANGE_BUTTON, this.container);\n }\n\n get previousButton() {\n return SelectorEngine.findOne(SELECTOR_PREVIOUS_BUTTON, this.container);\n }\n\n get nextButton() {\n return SelectorEngine.findOne(SELECTOR_NEXT_BUTTON, this.container);\n }\n\n get okButton() {\n return SelectorEngine.findOne(SELECTOR_OK_BUTTON, this.container);\n }\n\n get cancelButton() {\n return SelectorEngine.findOne(SELECTOR_CANCEL_BUTTON, this.container);\n }\n\n get clearButton() {\n return SelectorEngine.findOne(SELECTOR_CLEAR_BUTTON, this.container);\n }\n\n get datesContainer() {\n return SelectorEngine.findOne(SELECTOR_DATES_CONTAINER, this.container);\n }\n\n get toggleButton() {\n return SelectorEngine.findOne('.datepicker-toggle-button', this._element);\n }\n\n update(options = {}) {\n this._options = this._getConfig({ ...this._options, ...options });\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n config = {\n ...Default,\n ...dataAttributes,\n ...config,\n };\n\n typeCheckConfig(NAME, config, DefaultType);\n\n if (config.max && typeof config.max === 'string') {\n config.max = new Date(config.max);\n }\n\n if (config.min && typeof config.min === 'string') {\n config.min = new Date(config.min);\n }\n\n if (config.startDay && config.startDay !== 0) {\n const sortedWeekdaysNarrow = this._getNewDaysOrderArray(config);\n config.weekdaysNarrow = sortedWeekdaysNarrow;\n }\n\n return config;\n }\n\n _getContainer() {\n return SelectorEngine.findOne(this._options.container);\n }\n\n _getNewDaysOrderArray(config) {\n const index = config.startDay;\n\n const weekdaysNarrow = config.weekdaysNarrow;\n const sortedWeekdays = weekdaysNarrow.slice(index).concat(weekdaysNarrow.slice(0, index));\n\n return sortedWeekdays;\n }\n\n _init() {\n if (!this.toggleButton && this._options.toggleButton) {\n this._appendToggleButton();\n if (this._input.readOnly || this._input.disabled) {\n this.toggleButton.style.pointerEvents = 'none';\n }\n }\n\n this._listenToUserInput();\n this._listenToToggleClick();\n this._listenToToggleKeydown();\n }\n\n _appendToggleButton() {\n const toggleButton = getToggleButtonTemplate(this._toggleButtonId);\n this._element.insertAdjacentHTML('beforeend', toggleButton);\n Manipulator.addClass(this._input, CLASS_FORM_ICON_TRAILING);\n }\n\n open() {\n if (this._input.readOnly || this._input.disabled) {\n return;\n }\n const openEvent = EventHandler.trigger(this._element, EVENT_OPEN);\n\n if (this._isOpen || openEvent.defaultPrevented) {\n return;\n }\n\n this._setInitialDate();\n\n const backdrop = getBackdropTemplate();\n const template = getDatepickerTemplate(\n this._activeDate,\n this._selectedDate,\n this._selectedYear,\n this._selectedMonth,\n this._options,\n MONTHS_IN_ROW,\n YEARS_IN_VIEW,\n YEARS_IN_ROW,\n this._toggleButtonId\n );\n\n if (this._options.inline) {\n this._openDropdown(template);\n } else {\n this._openModal(backdrop, template);\n this._scrollBar.hide();\n }\n\n if (this._animations) {\n Manipulator.addClass(this.container, 'animation');\n Manipulator.addClass(this.container, CONTAINER_OPEN_ANIMATION_CLASS);\n this.container.style.animationDuration = '300ms';\n\n Manipulator.addClass(backdrop, 'animation');\n Manipulator.addClass(backdrop, BACKDROP_OPEN_ANIMATION_CLASS);\n backdrop.style.animationDuration = '150ms';\n }\n\n this._setFocusTrap(this.container);\n\n this._listenToDateSelection();\n this._addControlsListeners();\n this._updateControlsDisabledState();\n this._listenToEscapeClick();\n this._listenToKeyboardNavigation();\n this._listenToDatesContainerFocus();\n this._listenToDatesContainerBlur();\n\n // We need to wait for popper initialization to avoid bug with\n // focusing dates container, otherwise dates container will be\n // focused before popper position update which can change the\n // scroll position on the page\n this._asyncFocusDatesContainer();\n this._updateViewControlsAndAttributes(this._view);\n this._isOpen = true;\n\n // Wait for the component to open to prevent immediate calling of the\n // close method upon detecting a click on toggle element (input/button)\n setTimeout(() => {\n this._listenToOutsideClick();\n }, 0);\n }\n\n _openDropdown(template) {\n this._popper = createPopper(this._input, template, {\n placement: 'bottom-start',\n });\n const container = this._getContainer();\n container.appendChild(template);\n }\n\n _openModal(backdrop, template) {\n const container = this._getContainer();\n container.appendChild(backdrop);\n container.appendChild(template);\n }\n\n _setFocusTrap(element) {\n this._focusTrap = new FocusTrap(element, {\n event: 'keydown',\n condition: (event) => event.key === 'Tab',\n });\n this._focusTrap.trap();\n }\n\n _listenToUserInput() {\n EventHandler.on(this._input, 'input', (event) => {\n this._handleUserInput(event.target.value);\n });\n }\n\n _listenToToggleClick() {\n EventHandler.on(this._element, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, (event) => {\n event.preventDefault();\n this.open();\n });\n }\n\n _listenToToggleKeydown() {\n EventHandler.on(this._element, 'keydown', SELECTOR_DATA_TOGGLE, (event) => {\n if (event.keyCode === ENTER && !this._isOpen) {\n this.open();\n }\n });\n }\n\n _listenToDateSelection() {\n EventHandler.on(this.datesContainer, 'click', (e) => {\n this._handleDateSelection(e);\n });\n }\n\n _handleDateSelection(e) {\n const dataset = e.target.nodeName === 'DIV' ? e.target.parentNode.dataset : e.target.dataset;\n const cell = e.target.nodeName === 'DIV' ? e.target.parentNode : e.target;\n\n if (dataset.mdbDate) {\n this._pickDay(dataset.mdbDate, cell);\n }\n\n if (dataset.mdbMonth && dataset.mdbYear) {\n const month = parseInt(dataset.mdbMonth, 10);\n const year = parseInt(dataset.mdbYear, 10);\n this._pickMonth(month, year);\n }\n\n if (dataset.mdbYear && !dataset.mdbMonth) {\n const year = parseInt(dataset.mdbYear, 10);\n this._pickYear(year);\n }\n\n if (!this._options.inline) {\n this._updateHeaderDate(\n this._activeDate,\n this._options.monthsShort,\n this._options.weekdaysShort\n );\n }\n }\n\n _updateHeaderDate(date, monthNames, dayNames) {\n const headerDateEl = SelectorEngine.findOne('.datepicker-date-text', this.container);\n const month = getMonth(date);\n const day = getDate(date);\n const dayNumber = getDayNumber(date);\n\n const datepickerHeaderContainer = SelectorEngine.findOne('.datepicker-header', this.container);\n\n if (this._options.headerTemplate && datepickerHeaderContainer) {\n datepickerHeaderContainer.innerHTML = createCustomHeader(\n day,\n dayNumber,\n month,\n date,\n this._options\n );\n return;\n }\n headerDateEl.innerHTML = `${dayNames[dayNumber]}, ${monthNames[month]} ${day}`;\n }\n\n _addControlsListeners() {\n EventHandler.on(this.nextButton, 'click', () => {\n if (this._view === 'days') {\n this.nextMonth();\n } else if (this._view === 'years') {\n this.nextYears();\n } else {\n this.nextYear();\n }\n this._updateControlsDisabledState();\n });\n\n EventHandler.on(this.previousButton, 'click', () => {\n if (this._view === 'days') {\n this.previousMonth();\n } else if (this._view === 'years') {\n this.previousYears();\n } else {\n this.previousYear();\n }\n this._updateControlsDisabledState();\n });\n\n EventHandler.on(this.viewChangeButton, 'click', () => {\n if (this._view === 'days') {\n this._changeView('years');\n } else if (this._view === 'years' || this._view === 'months') {\n this._changeView('days');\n }\n });\n\n if (!this._options.inline) {\n this._listenToFooterButtonsClick();\n }\n }\n\n _listenToFooterButtonsClick() {\n EventHandler.on(this.okButton, 'click', () => this.handleOk());\n EventHandler.on(this.cancelButton, 'click', () => this.handleCancel());\n EventHandler.on(this.clearButton, 'click', () => this.handleClear());\n }\n\n _listenToOutsideClick() {\n EventHandler.on(document, EVENT_CLICK_DATA_API, (e) => {\n const isContainer = e.target === this.container;\n const isContainerContent = this.container && this.container.contains(e.target);\n\n if (!isContainer && !isContainerContent) {\n this.close();\n }\n });\n }\n\n _listenToEscapeClick() {\n EventHandler.on(document, 'keydown', (event) => {\n if (event.keyCode === ESCAPE && this._isOpen) {\n this.close();\n }\n });\n }\n\n _listenToKeyboardNavigation() {\n EventHandler.on(this.datesContainer, 'keydown', (event) => {\n this._handleKeydown(event);\n });\n }\n\n _listenToDatesContainerFocus() {\n EventHandler.on(this.datesContainer, 'focus', () => {\n this._focusActiveCell(this.activeCell);\n });\n }\n\n _listenToDatesContainerBlur() {\n EventHandler.on(this.datesContainer, 'blur', () => {\n this._removeCurrentFocusStyles();\n });\n }\n\n _handleKeydown(event) {\n if (this._view === 'days') {\n this._handleDaysViewKeydown(event);\n }\n\n if (this._view === 'months') {\n this._handleMonthsViewKeydown(event);\n }\n\n if (this._view === 'years') {\n this._handleYearsViewKeydown(event);\n }\n }\n\n _handleDaysViewKeydown(event) {\n const oldActiveDate = this._activeDate;\n const previousActiveCell = this.activeCell;\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n this._activeDate = addDays(this._activeDate, isRTL ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this._activeDate = addDays(this._activeDate, isRTL ? -1 : 1);\n break;\n case UP_ARROW:\n this._activeDate = addDays(this._activeDate, -7);\n break;\n case DOWN_ARROW:\n this._activeDate = addDays(this._activeDate, 7);\n break;\n case HOME:\n this._activeDate = addDays(this._activeDate, 1 - getDate(this._activeDate));\n break;\n case END:\n this._activeDate = addDays(\n this._activeDate,\n getDaysInMonth(this._activeDate) - getDate(this._activeDate)\n );\n break;\n case PAGE_UP:\n this._activeDate = addMonths(this._activeDate, -1);\n break;\n case PAGE_DOWN:\n this._activeDate = addMonths(this._activeDate, 1);\n break;\n case ENTER:\n case SPACE:\n this._selectDate(this._activeDate);\n this._handleDateSelection(event);\n event.preventDefault();\n return;\n default:\n return;\n }\n\n if (\n !areDatesInSameView(\n oldActiveDate,\n this._activeDate,\n this._view,\n YEARS_IN_VIEW,\n this._options.min,\n this._options.max\n )\n ) {\n this._changeView('days');\n }\n\n this._removeHighlightFromCell(previousActiveCell);\n this._focusActiveCell(this.activeCell);\n event.preventDefault();\n }\n\n _asyncFocusDatesContainer() {\n setTimeout(() => {\n this.datesContainer.focus();\n }, 0);\n }\n\n _focusActiveCell(cell) {\n if (cell) {\n Manipulator.addClass(cell, 'focused');\n }\n }\n\n _removeHighlightFromCell(cell) {\n if (cell) {\n cell.classList.remove('focused');\n }\n }\n\n _getActiveDayCell() {\n const cells = SelectorEngine.find('td', this.datesContainer);\n\n const activeCell = Array.from(cells).find((cell) => {\n const cellDate = convertStringToDate(cell.dataset.mdbDate);\n return isSameDate(cellDate, this._activeDate);\n });\n\n return activeCell;\n }\n\n _handleMonthsViewKeydown(event) {\n const oldActiveDate = this._activeDate;\n const previousActiveCell = this.activeCell;\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n this._activeDate = addMonths(this._activeDate, isRTL ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this._activeDate = addMonths(this._activeDate, isRTL ? -1 : 1);\n break;\n case UP_ARROW:\n this._activeDate = addMonths(this._activeDate, -4);\n break;\n case DOWN_ARROW:\n this._activeDate = addMonths(this._activeDate, 4);\n break;\n case HOME:\n this._activeDate = addMonths(this._activeDate, -this.activeMonth);\n break;\n case END:\n this._activeDate = addMonths(this._activeDate, 11 - this.activeMonth);\n break;\n case PAGE_UP:\n this._activeDate = addYears(this._activeDate, -1);\n break;\n case PAGE_DOWN:\n this._activeDate = addYears(this._activeDate, 1);\n break;\n case ENTER:\n case SPACE:\n this._selectMonth(this.activeMonth);\n return;\n default:\n return;\n }\n\n if (\n !areDatesInSameView(\n oldActiveDate,\n this._activeDate,\n this._view,\n YEARS_IN_VIEW,\n this._options.min,\n this._options.max\n )\n ) {\n this._changeView('months');\n }\n\n this._removeHighlightFromCell(previousActiveCell);\n this._focusActiveCell(this.activeCell);\n event.preventDefault();\n }\n\n _getActiveMonthCell() {\n const cells = SelectorEngine.find('td', this.datesContainer);\n\n const activeCell = Array.from(cells).find((cell) => {\n const cellYear = parseInt(cell.dataset.mdbYear, 10);\n const cellMonth = parseInt(cell.dataset.mdbMonth, 10);\n return cellYear === this.activeYear && cellMonth === this.activeMonth;\n });\n\n return activeCell;\n }\n\n _handleYearsViewKeydown(event) {\n const oldActiveDate = this._activeDate;\n const previousActiveCell = this.activeCell;\n const yearsPerRow = 4;\n const yearsPerPage = 24;\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n this._activeDate = addYears(this._activeDate, isRTL ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this._activeDate = addYears(this._activeDate, isRTL ? -1 : 1);\n break;\n case UP_ARROW:\n this._activeDate = addYears(this._activeDate, -yearsPerRow);\n break;\n case DOWN_ARROW:\n this._activeDate = addYears(this._activeDate, yearsPerRow);\n break;\n case HOME:\n this._activeDate = addYears(\n this._activeDate,\n -getYearsOffset(this._activeDate, yearsPerPage)\n );\n break;\n case END:\n this._activeDate = addYears(\n this._activeDate,\n yearsPerPage - getYearsOffset(this._activeDate, yearsPerPage) - 1\n );\n break;\n case PAGE_UP:\n this._activeDate = addYears(this._activeDate, -yearsPerPage);\n break;\n case PAGE_DOWN:\n this._activeDate = addYears(this._activeDate, yearsPerPage);\n break;\n case ENTER:\n case SPACE:\n this._selectYear(this.activeYear);\n return;\n default:\n return;\n }\n\n if (\n !areDatesInSameView(\n oldActiveDate,\n this._activeDate,\n this._view,\n YEARS_IN_VIEW,\n this._options.min,\n this._options.max\n )\n ) {\n this._changeView('years');\n }\n\n this._removeHighlightFromCell(previousActiveCell);\n this._focusActiveCell(this.activeCell);\n event.preventDefault();\n }\n\n _getActiveYearCell() {\n const cells = SelectorEngine.find('td', this.datesContainer);\n\n const activeCell = Array.from(cells).find((cell) => {\n const cellYear = parseInt(cell.dataset.mdbYear, 10);\n return cellYear === this.activeYear;\n });\n\n return activeCell;\n }\n\n _setInitialDate() {\n if (this._input.value) {\n this._handleUserInput(this._input.value);\n } else if (this._options.startDate) {\n this._activeDate = new Date(this._options.startDate);\n } else {\n this._activeDate = new Date();\n }\n }\n\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n if (!this._isOpen || closeEvent.defaultPrevented) {\n return;\n }\n\n this._removeDatepickerListeners();\n\n if (this._animations) {\n Manipulator.addClass(this.container, 'animation');\n Manipulator.addClass(this.container, CONTAINER_CLOSE_ANIMATION_CLASS);\n }\n\n if (this._options.inline) {\n this._closeDropdown();\n } else {\n this._closeModal();\n }\n\n this._isOpen = false;\n this._view = this._options.view;\n\n if (this.toggleButton) {\n this.toggleButton.focus();\n } else {\n this._input.focus();\n }\n }\n\n _closeDropdown() {\n const datepicker = SelectorEngine.findOne('.datepicker-dropdown-container');\n const container = this._getContainer();\n if (this._animations) {\n datepicker.addEventListener('animationend', () => {\n if (datepicker) {\n container.removeChild(datepicker);\n }\n\n if (this._popper) {\n this._popper.destroy();\n }\n });\n } else {\n if (datepicker) {\n container.removeChild(datepicker);\n }\n\n if (this._popper) {\n this._popper.destroy();\n }\n }\n this._removeFocusTrap();\n }\n\n _closeModal() {\n const backdrop = SelectorEngine.findOne('.datepicker-backdrop');\n const datepicker = SelectorEngine.findOne('.datepicker-modal-container');\n\n if (!datepicker || !backdrop) {\n return;\n }\n\n if (this._animations) {\n Manipulator.addClass(backdrop, 'animation');\n Manipulator.addClass(backdrop, BACKDROP_CLOSE_ANIMATION_CLASS);\n }\n\n if (this._animations) {\n backdrop.addEventListener('animationend', () => {\n this._removePicker(backdrop, datepicker);\n this._scrollBar.reset();\n });\n } else {\n this._removePicker(backdrop, datepicker);\n this._scrollBar.reset();\n }\n }\n\n _removePicker(backdrop, datepicker) {\n const container = this._getContainer();\n\n container.removeChild(backdrop);\n container.removeChild(datepicker);\n }\n\n _removeFocusTrap() {\n if (this._focusTrap) {\n this._focusTrap.disable();\n this._focusTrap = null;\n }\n }\n\n _removeDatepickerListeners() {\n EventHandler.off(this.nextButton, 'click');\n EventHandler.off(this.previousButton, 'click');\n EventHandler.off(this.viewChangeButton, 'click');\n EventHandler.off(this.okButton, 'click');\n EventHandler.off(this.cancelButton, 'click');\n EventHandler.off(this.clearButton, 'click');\n\n EventHandler.off(this.datesContainer, 'click');\n EventHandler.off(this.datesContainer, 'keydown');\n EventHandler.off(this.datesContainer, 'focus');\n EventHandler.off(this.datesContainer, 'blur');\n\n EventHandler.off(document, EVENT_CLICK_DATA_API);\n }\n\n dispose() {\n if (this._isOpen) {\n this.close();\n }\n\n this._removeInputAndToggleListeners();\n\n const generatedToggleButton = SelectorEngine.findOne(`#${this._toggleButtonId}`);\n\n if (generatedToggleButton) {\n this._element.removeChild(generatedToggleButton);\n }\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n _removeInputAndToggleListeners() {\n EventHandler.off(this._input, 'input');\n EventHandler.off(this._element, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE);\n EventHandler.off(this._element, 'keydown', SELECTOR_DATA_TOGGLE);\n }\n\n handleOk() {\n this._confirmSelection(this._headerDate);\n this.close();\n }\n\n _selectDate(date, cell = this.activeCell) {\n const { min, max, filter, disablePast, disableFuture } = this._options;\n\n if (isDateDisabled(date, min, max, filter, disablePast, disableFuture)) {\n return;\n }\n\n this._removeCurrentSelectionStyles();\n this._removeCurrentFocusStyles();\n this._addSelectedStyles(cell);\n this._selectedDate = date;\n this._selectedYear = getYear(date);\n this._selectedMonth = getMonth(date);\n this._headerDate = date;\n\n if (this._options.inline || this.options.confirmDateOnSelect) {\n this._confirmSelection(date);\n this.close();\n }\n }\n\n _selectYear(year, cell = this.activeCell) {\n this._removeCurrentSelectionStyles();\n this._removeCurrentFocusStyles();\n this._addSelectedStyles(cell);\n this._headerYear = year;\n\n this._asyncChangeView('months');\n }\n\n _selectMonth(month, cell = this.activeCell) {\n this._removeCurrentSelectionStyles();\n this._removeCurrentFocusStyles();\n this._addSelectedStyles(cell);\n this._headerMonth = month;\n\n this._asyncChangeView('days');\n }\n\n _removeSelectedStyles(cell) {\n if (cell) {\n cell.classList.remove('selected');\n }\n }\n\n _addSelectedStyles(cell) {\n if (cell) {\n Manipulator.addClass(cell, 'selected');\n }\n }\n\n _confirmSelection(date) {\n if (date) {\n const dateString = this.formatDate(date);\n this._input.value = dateString;\n Manipulator.addClass(this._input, 'active');\n EventHandler.trigger(this._element, EVENT_VALUE_CHANGED, { date });\n }\n }\n\n handleCancel() {\n this._selectedDate = null;\n this._selectedYear = null;\n this._selectedMonth = null;\n this.close();\n }\n\n handleClear() {\n this._selectedDate = null;\n this._selectedMonth = null;\n this._selectedYear = null;\n this._headerDate = null;\n this._headerMonth = null;\n this._headerYear = null;\n this._removeCurrentSelectionStyles();\n this._input.value = '';\n this._input.classList.remove('active');\n this._setInitialDate();\n this._changeView('days');\n this._updateHeaderDate(\n this._activeDate,\n this._options.monthsShort,\n this._options.weekdaysShort\n );\n }\n\n _removeCurrentSelectionStyles() {\n const currentSelected = SelectorEngine.findOne('.selected', this.container);\n\n if (currentSelected) {\n currentSelected.classList.remove('selected');\n }\n }\n\n _removeCurrentFocusStyles() {\n const currentFocused = SelectorEngine.findOne('.focused', this.container);\n\n if (currentFocused) {\n currentFocused.classList.remove('focused');\n }\n }\n\n formatDate(date) {\n const d = getDate(date);\n const dd = this._addLeadingZero(getDate(date));\n const ddd = this._options.weekdaysShort[getDayNumber(date)];\n const dddd = this._options.weekdaysFull[getDayNumber(date)];\n const m = getMonth(date) + 1;\n const mm = this._addLeadingZero(getMonth(date) + 1);\n const mmm = this._options.monthsShort[getMonth(date)];\n const mmmm = this._options.monthsFull[getMonth(date)];\n const yy =\n getYear(date).toString().length === 2 ? getYear(date) : getYear(date).toString().slice(2, 4);\n const yyyy = getYear(date);\n\n const preformatted = this._options.format.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g);\n let formatted = '';\n preformatted.forEach((datePart) => {\n switch (datePart) {\n case 'dddd':\n datePart = datePart.replace(datePart, dddd);\n break;\n case 'ddd':\n datePart = datePart.replace(datePart, ddd);\n break;\n case 'dd':\n datePart = datePart.replace(datePart, dd);\n break;\n case 'd':\n datePart = datePart.replace(datePart, d);\n break;\n case 'mmmm':\n datePart = datePart.replace(datePart, mmmm);\n break;\n case 'mmm':\n datePart = datePart.replace(datePart, mmm);\n break;\n case 'mm':\n datePart = datePart.replace(datePart, mm);\n break;\n case 'm':\n datePart = datePart.replace(datePart, m);\n break;\n case 'yyyy':\n datePart = datePart.replace(datePart, yyyy);\n break;\n case 'yy':\n datePart = datePart.replace(datePart, yy);\n break;\n default:\n }\n formatted += datePart;\n });\n\n return formatted;\n }\n\n _addLeadingZero(value) {\n return parseInt(value, 10) < 10 ? `0${value}` : value;\n }\n\n _pickDay(day, el) {\n const date = convertStringToDate(day);\n const { min, max, filter, disablePast, disableFuture } = this._options;\n\n if (isDateDisabled(date, min, max, filter, disablePast, disableFuture)) {\n return;\n }\n\n this._activeDate = date;\n this._selectDate(date, el);\n }\n\n _pickYear(year) {\n const { min, max, disablePast, disableFuture } = this._options;\n\n if (isYearDisabled(year, min, max, disablePast, disableFuture)) {\n return;\n }\n\n const newDate = createDate(year, this.activeMonth, this.activeDay);\n\n this._activeDate = newDate;\n this._selectedDate = newDate;\n this._selectYear(year);\n }\n\n _pickMonth(month, year) {\n const { min, max, disablePast, disableFuture } = this._options;\n\n if (\n isMonthDisabled(month, year, min, max, disablePast, disableFuture) ||\n isYearDisabled(year, min, max, disablePast, disableFuture)\n ) {\n return;\n }\n\n const newDate = createDate(year, month, this.activeDay);\n\n this._activeDate = newDate;\n this._selectMonth(month);\n }\n\n nextMonth() {\n const nextMonth = addMonths(this._activeDate, 1);\n const template = createDayViewTemplate(nextMonth, this._headerDate, this._options);\n this._activeDate = nextMonth;\n this.viewChangeButton.textContent = `${this._options.monthsFull[this.activeMonth]} ${\n this.activeYear\n }`;\n this.datesContainer.innerHTML = template;\n }\n\n previousMonth() {\n const previousMonth = addMonths(this._activeDate, -1);\n this._activeDate = previousMonth;\n const template = createDayViewTemplate(previousMonth, this._headerDate, this._options);\n this.viewChangeButton.textContent = `${this._options.monthsFull[this.activeMonth]} ${\n this.activeYear\n }`;\n this.datesContainer.innerHTML = template;\n }\n\n nextYear() {\n const nextYear = addYears(this._activeDate, 1);\n this._activeDate = nextYear;\n this.viewChangeButton.textContent = `${this.activeYear}`;\n const template = createMonthViewTemplate(\n this.activeYear,\n this._selectedYear,\n this._selectedMonth,\n this._options,\n MONTHS_IN_ROW\n );\n this.datesContainer.innerHTML = template;\n }\n\n previousYear() {\n const previousYear = addYears(this._activeDate, -1);\n this._activeDate = previousYear;\n this.viewChangeButton.textContent = `${this.activeYear}`;\n const template = createMonthViewTemplate(\n this.activeYear,\n this._selectedYear,\n this._selectedMonth,\n this._options,\n MONTHS_IN_ROW\n );\n this.datesContainer.innerHTML = template;\n }\n\n nextYears() {\n const nextYear = addYears(this._activeDate, 24);\n this._activeDate = nextYear;\n const template = createYearViewTemplate(\n nextYear,\n this._selectedYear,\n this._options,\n YEARS_IN_VIEW,\n YEARS_IN_ROW\n );\n this.viewChangeButton.textContent = `${this.firstYearInView} - ${this.lastYearInView}`;\n this.datesContainer.innerHTML = template;\n }\n\n previousYears() {\n const previousYear = addYears(this._activeDate, -24);\n this._activeDate = previousYear;\n const template = createYearViewTemplate(\n previousYear,\n this._selectedYear,\n this._options,\n YEARS_IN_VIEW,\n YEARS_IN_ROW\n );\n this.viewChangeButton.textContent = `${this.firstYearInView} - ${this.lastYearInView}`;\n this.datesContainer.innerHTML = template;\n }\n\n _asyncChangeView(view) {\n setTimeout(() => {\n this._changeView(view);\n }, 0);\n }\n\n _changeView(view) {\n this._view = view;\n // We need to add blur event here to reapply focus to\n // dates container when switching from years to months\n // view after selecting year\n this.datesContainer.blur();\n\n if (view === 'days') {\n this.datesContainer.innerHTML = createDayViewTemplate(\n this._activeDate,\n this._headerDate,\n this._options\n );\n }\n\n if (view === 'months') {\n this.datesContainer.innerHTML = createMonthViewTemplate(\n this.activeYear,\n this._selectedYear,\n this._selectedMonth,\n this._options,\n MONTHS_IN_ROW\n );\n }\n\n if (view === 'years') {\n this.datesContainer.innerHTML = createYearViewTemplate(\n this._activeDate,\n this._selectedYear,\n this._options,\n YEARS_IN_VIEW,\n YEARS_IN_ROW\n );\n }\n\n this.datesContainer.focus();\n this._updateViewControlsAndAttributes(view);\n this._updateControlsDisabledState();\n }\n\n _updateViewControlsAndAttributes(view) {\n if (view === 'days') {\n this.viewChangeButton.textContent = `${this._options.monthsFull[this.activeMonth]} ${\n this.activeYear\n }`;\n this.viewChangeButton.setAttribute('aria-label', this._options.switchToMultiYearViewLabel);\n this.previousButton.setAttribute('aria-label', this._options.prevMonthLabel);\n this.nextButton.setAttribute('aria-label', this._options.nextMonthLabel);\n }\n\n if (view === 'months') {\n this.viewChangeButton.textContent = `${this.activeYear}`;\n this.viewChangeButton.setAttribute('aria-label', this._options.switchToDayViewLabel);\n this.previousButton.setAttribute('aria-label', this._options.prevYearLabel);\n this.nextButton.setAttribute('aria-label', this._options.nextYearLabel);\n }\n\n if (view === 'years') {\n this.viewChangeButton.textContent = `${this.firstYearInView} - ${this.lastYearInView}`;\n this.viewChangeButton.setAttribute('aria-label', this._options.switchToDayViewLabel);\n this.previousButton.setAttribute('aria-label', this._options.prevMultiYearLabel);\n this.nextButton.setAttribute('aria-label', this._options.nextMultiYearLabel);\n }\n }\n\n _updateControlsDisabledState() {\n if (\n isNextDateDisabled(\n this._options.disableFuture,\n this._activeDate,\n this._view,\n YEARS_IN_VIEW,\n this._options.min,\n this._options.max,\n this.lastYearInView,\n this.firstYearInView\n )\n ) {\n this.nextButton.disabled = true;\n } else {\n this.nextButton.disabled = false;\n }\n\n if (\n isPreviousDateDisabled(\n this._options.disablePast,\n this._activeDate,\n this._view,\n YEARS_IN_VIEW,\n this._options.min,\n this._options.max,\n this.lastYearInView,\n this.firstYearInView\n )\n ) {\n this.previousButton.disabled = true;\n } else {\n this.previousButton.disabled = false;\n }\n }\n\n _handleUserInput(input) {\n const delimeters = this._getDelimeters(this._options.format);\n const date = this._parseDate(input, this._options.format, delimeters);\n\n if (isValidDate(date)) {\n this._activeDate = date;\n this._selectedDate = date;\n this._selectedYear = getYear(date);\n this._selectedMonth = getMonth(date);\n this._headerDate = date;\n } else {\n this._activeDate = new Date();\n this._selectedDate = null;\n this._selectedMonth = null;\n this._selectedYear = null;\n this._headerDate = null;\n this._headerMonth = null;\n this._headerYear = null;\n }\n }\n\n _getDelimeters(format) {\n return format.match(/[^(dmy)]{1,}/g);\n }\n\n _parseDate(dateString, format, delimeters) {\n let delimeterPattern;\n\n if (delimeters[0] !== delimeters[1]) {\n delimeterPattern = delimeters[0] + delimeters[1];\n } else {\n delimeterPattern = delimeters[0];\n }\n\n const regExp = new RegExp(`[${delimeterPattern}]`);\n const dateParts = dateString.split(regExp);\n const formatParts = format.split(regExp);\n const isMonthString = format.indexOf('mmm') !== -1;\n\n const datesArray = [];\n\n for (let i = 0; i < formatParts.length; i++) {\n if (formatParts[i].indexOf('yy') !== -1) {\n datesArray[0] = { value: dateParts[i], format: formatParts[i] };\n }\n if (formatParts[i].indexOf('m') !== -1) {\n datesArray[1] = { value: dateParts[i], format: formatParts[i] };\n }\n if (formatParts[i].indexOf('d') !== -1 && formatParts[i].length <= 2) {\n datesArray[2] = { value: dateParts[i], format: formatParts[i] };\n }\n }\n\n let monthsNames;\n\n if (format.indexOf('mmmm') !== -1) {\n monthsNames = this._options.monthsFull;\n } else {\n monthsNames = this._options.monthsShort;\n }\n\n const year = Number(datesArray[0].value);\n const month = isMonthString\n ? this.getMonthNumberByMonthName(datesArray[1].value, monthsNames)\n : Number(datesArray[1].value) - 1;\n const day = Number(datesArray[2].value);\n\n const parsedDate = createDate(year, month, day);\n return parsedDate;\n }\n\n getMonthNumberByMonthName(monthValue, monthLabels) {\n return monthLabels.findIndex((monthLabel) => monthLabel === monthValue);\n }\n\n static jQueryInterface(config, options) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data && /dispose/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Datepicker(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](options);\n }\n });\n }\n}\n\nexport default Datepicker;\n","import { createPopper } from '@popperjs/core';\nimport { element, typeCheckConfig, getUID, isRTL } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { ESCAPE } from '../mdb/util/keycodes';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\nimport FocusTrap from '../mdb/util/focusTrap';\nimport ScrollBarHelper from '../bootstrap/mdb-prefix/util/scrollbar';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popconfirm';\nconst DATA_KEY = 'mdb.popconfirm';\nconst SELECTOR_POPCONFIRM_BODY = '.popconfirm';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CANCEL = `cancel${EVENT_KEY}`;\nconst EVENT_CONFIRM = `confirm${EVENT_KEY}`;\n\nconst DefaultType = {\n popconfirmMode: 'string',\n message: 'string',\n cancelText: 'string',\n okText: 'string',\n okClass: 'string',\n popconfirmIcon: 'string',\n cancelLabel: 'string',\n confirmLabel: 'string',\n};\n\nconst Default = {\n popconfirmMode: 'inline',\n message: 'Are you sure?',\n cancelText: 'Cancel',\n okText: 'OK',\n okClass: 'btn-primary',\n popconfirmIcon: '',\n cancelLabel: 'Cancel',\n confirmLabel: 'Confirm',\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popconfirm extends BaseComponent {\n constructor(element, options) {\n super(element);\n\n this._options = this._getConfig(options);\n this._cancelButtonTemplate = this._getCancelButtonTemplate();\n this._popper = null;\n this._cancelButton = '';\n this._confirmButton = '';\n this._isOpen = false;\n this._uid = this._element.id ? `popconfirm-${this._element.id}` : getUID('popconfirm-');\n this._focusTrap = null;\n this._scrollBar = new ScrollBarHelper();\n\n this._clickHandler = this.open.bind(this);\n EventHandler.on(this._element, 'click', this._clickHandler);\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n get container() {\n return SelectorEngine.findOne(`#${this._uid}`);\n }\n\n get popconfirmBody() {\n return SelectorEngine.findOne(SELECTOR_POPCONFIRM_BODY, this.container);\n }\n\n // Public\n\n dispose() {\n if (this._isOpen || this.container !== null) {\n this.close();\n }\n EventHandler.off(this._element, 'click', this._clickHandler);\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n open() {\n if (this._isOpen) {\n return;\n }\n if (this._options.popconfirmMode === 'inline') {\n this._openPopover(this._getPopoverTemplate());\n } else {\n this._openModal(this._getModalTemplate());\n this._scrollBar.hide();\n }\n\n this._handleCancelButtonClick();\n this._handleConfirmButtonClick();\n this._listenToEscapeKey();\n this._listenToOutsideClick();\n }\n\n close() {\n if (!this._isOpen) {\n return;\n }\n\n if (this._popper !== null || SelectorEngine.findOne('.popconfirm-popover') !== null) {\n EventHandler.on(\n this.popconfirmBody,\n 'transitionend',\n this._handlePopconfirmTransitionEnd.bind(this)\n );\n Manipulator.removeClass(this.popconfirmBody, 'show');\n } else {\n const tempElement = SelectorEngine.findOne('.popconfirm-backdrop');\n Manipulator.removeClass(this.popconfirmBody, 'show');\n document.body.removeChild(tempElement);\n this._isOpen = false;\n }\n\n this._removeFocusTrap();\n this._scrollBar.reset();\n\n this._element.focus();\n\n EventHandler.off(document, 'click', this._handleOutsideClick.bind(this));\n EventHandler.off(document, 'keydown', this._handleEscapeKey.bind(this));\n }\n\n _setFocusTrap(element) {\n this._focusTrap = new FocusTrap(element, {\n event: 'keydown',\n condition: (event) => event.key === 'Tab',\n });\n\n this._focusTrap.trap();\n\n const cancelButton = SelectorEngine.findOne('#popconfirm-button-cancel', element);\n const confirmButton = SelectorEngine.findOne('#popconfirm-button-confirm', element);\n\n if (cancelButton) {\n cancelButton.focus();\n } else {\n confirmButton.focus();\n }\n }\n\n _removeFocusTrap() {\n if (this._focusTrap) {\n this._focusTrap.disable();\n this._focusTrap = null;\n }\n }\n\n _handlePopconfirmTransitionEnd(event) {\n if (event.target !== this.popconfirmBody) {\n return;\n }\n\n const popoverTemplate = SelectorEngine.findOne('.popconfirm-popover');\n EventHandler.off(this.popconfirmBody, 'transitionend');\n\n if (this._isOpen && event && event.propertyName === 'opacity') {\n this._popper.destroy();\n\n if (popoverTemplate) {\n document.body.removeChild(popoverTemplate);\n }\n\n this._isOpen = false;\n }\n }\n\n // Private\n\n _getPopoverTemplate() {\n const popover = element('div');\n const popconfirmTemplate = this._getPopconfirmTemplate();\n Manipulator.addClass(popover, 'popconfirm-popover');\n Manipulator.addClass(popover, 'shadow-2');\n popover.id = this._uid;\n popover.innerHTML = popconfirmTemplate;\n return popover;\n }\n\n _getModalTemplate() {\n const modal = element('div');\n const popconfirmTemplate = this._getPopconfirmTemplate();\n Manipulator.addClass(modal, 'popconfirm-modal');\n Manipulator.addClass(modal, 'shadow-2');\n modal.id = this._uid;\n modal.innerHTML = popconfirmTemplate;\n return modal;\n }\n\n _getPopconfirmTemplate() {\n return `<div class=\"popconfirm\">\n <p class=\"popconfirm-message\">\n ${this._getMessageIcon()}\n <span class=\"popconfirm-message-text\">${this._options.message}</span>\n </p>\n <div class=\"popconfirm-buttons-container\">\n ${this._cancelButtonTemplate}\n <button type=\"button\" id=\"popconfirm-button-confirm\" data-mdb-ripple-init\n aria-label=\"${this._options.confirmLabel}\"\n class=\"btn ${this._options.okClass} btn-sm\">${this._options.okText}</button>\n </div>\n </div>`;\n }\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...config,\n };\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n\n _getCancelButtonTemplate() {\n if (this._options.cancelText === '' || this._options.cancelText === ' ') {\n return '';\n }\n return `<button type=\"button\" id=\"popconfirm-button-cancel\" aria-label=\"${this._options.cancelLabel}\"\n class=\"btn btn-secondary btn-sm\" data-mdb-ripple-init >${this._options.cancelText}</button>`;\n }\n\n _getMessageIcon() {\n if (this._options.popconfirmIcon === '') {\n return '';\n }\n return `<span class=\"popconfirm-icon-container\"><i class=\"${this._options.popconfirmIcon}\"></i></span>`;\n }\n\n _openPopover(template) {\n this._popper = createPopper(this._element, template, {\n placement: this._translatePositionValue(),\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: [0, 5],\n },\n },\n ],\n });\n document.body.appendChild(template);\n\n setTimeout(() => {\n Manipulator.addClass(this.popconfirmBody, 'fade');\n Manipulator.addClass(this.popconfirmBody, 'show');\n this._isOpen = true;\n\n this._setFocusTrap(this.container);\n }, 0);\n }\n\n _openModal(template) {\n const backdrop = element('div');\n Manipulator.addClass(backdrop, 'popconfirm-backdrop');\n document.body.appendChild(backdrop);\n backdrop.appendChild(template);\n Manipulator.addClass(this.popconfirmBody, 'show');\n this._isOpen = true;\n\n this._setFocusTrap(this.container);\n }\n\n _handleCancelButtonClick() {\n const container = this.container;\n this._cancelButton = SelectorEngine.findOne('#popconfirm-button-cancel', container);\n if (this._cancelButton !== null) {\n EventHandler.on(this._cancelButton, 'click', () => {\n this.close();\n EventHandler.trigger(this._element, EVENT_CANCEL);\n });\n }\n }\n\n _handleConfirmButtonClick() {\n const container = this.container;\n this._confirmButton = SelectorEngine.findOne('#popconfirm-button-confirm', container);\n EventHandler.on(this._confirmButton, 'click', () => {\n this.close();\n EventHandler.trigger(this._element, EVENT_CONFIRM);\n });\n }\n\n _listenToEscapeKey() {\n EventHandler.on(document, 'keydown', this._handleEscapeKey.bind(this));\n }\n\n _handleEscapeKey(event) {\n if (event.keyCode === ESCAPE) {\n this.close();\n }\n }\n\n _listenToOutsideClick() {\n EventHandler.on(document, 'click', this._handleOutsideClick.bind(this));\n }\n\n _handleOutsideClick(event) {\n const container = this.container;\n const isContainer = event.target === container;\n const isContainerContent = container && container.contains(event.target);\n const isElement = event.target === this._element;\n const isElementContent = this._element && this._element.contains(event.target);\n if (!isContainer && !isContainerContent && !isElement && !isElementContent) {\n this.close();\n }\n }\n\n _translatePositionValue() {\n switch (this._options.position) {\n // left, right as default\n case 'top left':\n return isRTL ? 'top-start' : 'top-end';\n case 'top':\n return 'top';\n case 'top right':\n return isRTL ? 'top-end' : 'top-start';\n case 'bottom left':\n return isRTL ? 'bottom-start' : 'bottom-end';\n case 'bottom':\n return 'bottom';\n case 'bottom right':\n return isRTL ? 'bottom-end' : 'bottom-start';\n case 'left':\n return isRTL ? 'right' : 'left';\n case 'left top':\n return isRTL ? 'right-end' : 'left-end';\n case 'left bottom':\n return isRTL ? 'right-start' : 'left-start';\n case 'right':\n return isRTL ? 'left' : 'right';\n case 'right top':\n return isRTL ? 'left-end' : 'right-end';\n case 'right bottom':\n return isRTL ? 'left-start' : 'right-start';\n case undefined:\n return 'bottom';\n default:\n return this._options.position;\n }\n }\n\n // Static\n\n static jQueryInterface(config, options) {\n return this.each(function () {\n const data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data && /dispose/.test(config)) {\n return;\n }\n\n if (!data) {\n // eslint-disable-next-line consistent-return\n return new Popconfirm(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](options);\n }\n });\n }\n}\n\nexport default Popconfirm;\n","import { isRTL } from '../../../mdb/util/index';\n/* eslint-disable indent */\nconst pagination = (\n { text, entries, entriesOptions, fullPagination, rowsText, allText },\n loading\n) => {\n const options = entriesOptions\n .map((option) => {\n if (option === 'All') {\n return `<option value=\"${option}\" ${\n option === entries ? 'selected' : ''\n }>${allText}</option>`;\n }\n return `<option value=\"${option}\" ${option === entries ? 'selected' : ''}>${option}</option>`;\n })\n .join('\\n');\n\n return `\n<div class=\"datatable-pagination\">\n <div class=\"datatable-select-wrapper\">\n <p class=\"datatable-select-text\">${rowsText}</p>\n <select name=\"entries\"\n ${loading ? 'data-mdb-disabled=\"true\"' : ''} class=\"datatable-select select\">\n ${options}\n </select>\n </div>\n <div class=\"datatable-pagination-nav\">\n ${text}\n </div>\n <div class=\"datatable-pagination-buttons\">\n ${\n fullPagination\n ? '<button data-mdb-ripple-color=\"dark\" data-mdb-ripple-init class=\"btn btn-link datatable-pagination-button datatable-pagination-start\"><i class=\"fa fa-angle-double-left\"></i></button>'\n : ''\n }\n <button data-mdb-ripple-color=\"dark\" data-mdb-ripple-init class=\"btn btn-link datatable-pagination-button datatable-pagination-left\"><i class=\"fa fa-chevron-${\n isRTL ? 'right' : 'left'\n }\"></i></button>\n <button data-mdb-ripple-color=\"dark\" data-mdb-ripple-init class=\"btn btn-link datatable-pagination-button datatable-pagination-right\"><i class=\"fa fa-chevron-${\n isRTL ? 'left' : 'right'\n }\"></i></button>\n ${\n fullPagination\n ? '<button data-mdb-ripple-color=\"dark\" data-mdb-ripple-init class=\"btn btn-link datatable-pagination-button datatable-pagination-end\"><i class=\"fa fa-angle-double-right\"></i></button>'\n : ''\n }\n </div>\n</div>\n`;\n};\n\nexport default pagination;\n","/* eslint-disable indent */\n\nconst columns = (columns, selectable, multi) => {\n const checkboxHeader = multi\n ? `\n<th scope=\"col\">\n <div class=\"form-check d-flex align-items-center mb-0\">\n <input class=\"datatable-header-checkbox form-check-input\" type=\"checkbox\">\n </div>\n</th>\n`\n : '<th scope=\"col\"></th>';\n\n const headers = columns.map((column, i) => {\n const fixedOffset = column.fixed\n ? columns\n .filter((cell, j) => cell.fixed === column.fixed && j < i)\n .reduce((a, b) => a + b.width, 0)\n : null;\n\n return `<th style=\"${\n column.fixed ? `${column.fixed === 'right' ? 'right' : 'left'}: ${fixedOffset}px;` : ''\n }\" ${column.fixed ? 'class=\"fixed-cell\"' : ''} scope=\"col\">${\n column.sort\n ? `<i data-mdb-sort=\"${column.field}\" class=\"datatable-sort-icon fas fa-arrow-up\"></i>`\n : ''\n } ${column.label}</th>`;\n });\n\n return [selectable ? checkboxHeader : '', ...headers].join('\\n');\n};\n\nexport default columns;\n","/* eslint-disable indent */\nconst rows = ({ rows, columns, noFoundMessage, edit, selectable, loading }) => {\n const rowsTemplate = rows.map((row) => {\n const checkbox = `\n <td data-mdb-field=\"checkbox\">\n <div class=\"form-check\">\n <input data-mdb-row-index=\"${row.rowIndex}\" class=\"datatable-row-checkbox form-check-input\" type=\"checkbox\">\n </div>\n </td>\n `;\n const innerRow = columns\n .map((column, i) => {\n const style = {};\n\n if (column.width) {\n style['min-width'] = `${column.width - 1}px`;\n style['max-width'] = `${column.width}px`;\n style.width = `${column.width}px`;\n }\n if (column.fixed) {\n const fixedOffset = columns\n .filter((cell, j) => cell.fixed === column.fixed && j < i)\n .reduce((a, b) => a + b.width, 0);\n\n style[column.fixed === 'right' ? 'right' : 'left'] = `${fixedOffset}px`;\n }\n\n const cssText = Object.keys(style)\n .map((property) => `${property}: ${style[property]}`)\n .join('; ');\n\n return `<td style=\"${cssText}\" class=\"${\n column.fixed ? 'fixed-cell' : ''\n }\" data-mdb-field=\"${column.field}\" ${edit && 'contenteditable=\"true\"'}>${\n row[column.field]\n }</td>`;\n })\n .join('');\n\n return `<tr scope=\"row\" data-mdb-index=\"${row.rowIndex}\">${\n selectable ? checkbox : ''\n }${innerRow}</tr>`;\n });\n\n return rows.length > 0 || loading\n ? rowsTemplate.join('\\n')\n : `<tr><td>${noFoundMessage}</td></tr>`;\n};\n\nexport default rows;\n","/* eslint-disable indent */\nimport paginationTemplate from './pagination';\nimport generateColumns from './columns';\nimport generateRows from './rows';\n\nconst tableTemplate = ({\n columns,\n rows,\n noFoundMessage,\n edit,\n multi,\n selectable,\n loading,\n loadingMessage,\n loaderClass,\n pagination,\n}) => {\n const rowsTemplate = generateRows({ rows, columns, noFoundMessage, edit, loading, selectable });\n const columnsTemplate = generateColumns(columns, selectable, multi);\n\n const table = `\n<div class=\"datatable-inner table-responsive\">\n <table class=\"table datatable-table\">\n <thead class=\"datatable-header\">\n <tr>\n ${columnsTemplate}\n </tr>\n </thead>\n <tbody class=\"datatable-body\">\n ${loading ? '' : rowsTemplate}\n </tbody>\n </table>\n</div>\n ${\n loading\n ? `\n <div class=\"datatable-loader bg-light}\">\n <span class=\"datatable-loader-inner\"><span class=\"datatable-progress ${loaderClass}\"></span></span>\n </div>\n <p class=\"text-center text-muted my-4\">${loadingMessage}</p>\n`\n : ''\n }\n ${pagination.enable ? paginationTemplate(pagination, loading) : ''}\n `;\n\n return { table, rows: rowsTemplate, column: columnsTemplate };\n};\n\nexport default tableTemplate;\n","const sort = ({ rows, field, order }) => {\n const sorted = rows.sort((a, b) => {\n let fieldA = a[field];\n let fieldB = b[field];\n\n if (typeof fieldA === 'string') {\n fieldA = fieldA.toLowerCase();\n }\n if (typeof fieldB === 'string') {\n fieldB = fieldB.toLowerCase();\n }\n\n if (fieldA < fieldB) {\n return order === 'desc' ? 1 : -1;\n }\n if (fieldA > fieldB) {\n return order === 'desc' ? -1 : 1;\n }\n return 0;\n });\n\n return sorted;\n};\n\nconst search = (rows, search, column) => {\n if (!search) return rows;\n\n const match = (entry) => {\n const div = document.createElement('div');\n div.innerHTML = entry;\n entry = div.textContent || div.innerText || '';\n\n return entry.toString().toLowerCase().match(search.toLowerCase());\n };\n\n return rows.filter((row) => {\n if (column && typeof column === 'string') {\n return match(row[column]);\n }\n\n let values = Object.values(row);\n\n if (column && Array.isArray(column)) {\n values = Object.keys(row)\n .filter((key) => column.includes(key))\n .map((key) => row[key]);\n }\n\n return (\n values.filter((value) => {\n return match(value);\n }).length > 0\n );\n });\n};\n\nconst paginate = ({ rows, entries, activePage }) => {\n const firstVisibleEntry = activePage * entries;\n return rows.slice(firstVisibleEntry, firstVisibleEntry + Number(entries));\n};\n\nexport { sort, search, paginate };\n","import SelectorEngine from '../../mdb/dom/selector-engine';\nimport Manipulator from '../../mdb/dom/manipulator';\n\nconst SELECTOR_FORM_CHECK_INPUT = '.form-check-input';\n\nconst CLASS_NAME_SELECTED = 'selected';\nconst CLASS_NAME_ACITVE = 'active';\n\nclass SelectOption {\n constructor(\n id,\n nativeOption,\n multiple,\n value,\n label,\n selected,\n disabled,\n hidden,\n secondaryText,\n groupId,\n icon\n ) {\n this.id = id;\n this.nativeOption = nativeOption;\n this.multiple = multiple;\n this.value = value;\n this.label = label;\n this.selected = selected;\n this.disabled = disabled;\n this.hidden = hidden;\n this.secondaryText = secondaryText;\n this.groupId = groupId;\n this.icon = icon;\n this.node = null;\n this.active = false;\n }\n\n select() {\n if (this.multiple) {\n this._selectMultiple();\n } else {\n this._selectSingle();\n }\n }\n\n _selectSingle() {\n if (!this.selected) {\n Manipulator.addClass(this.node, CLASS_NAME_SELECTED);\n this.node.setAttribute('aria-selected', true);\n this.selected = true;\n\n if (this.nativeOption) {\n this.nativeOption.selected = true;\n }\n }\n }\n\n _selectMultiple() {\n if (!this.selected) {\n const checkbox = SelectorEngine.findOne(SELECTOR_FORM_CHECK_INPUT, this.node);\n checkbox.checked = true;\n Manipulator.addClass(this.node, CLASS_NAME_SELECTED);\n this.node.setAttribute('aria-selected', true);\n this.selected = true;\n\n if (this.nativeOption) {\n this.nativeOption.selected = true;\n }\n }\n }\n\n deselect() {\n if (this.multiple) {\n this._deselectMultiple();\n } else {\n this._deselectSingle();\n }\n }\n\n _deselectSingle() {\n if (this.selected) {\n Manipulator.removeClass(this.node, CLASS_NAME_SELECTED);\n this.node.setAttribute('aria-selected', false);\n this.selected = false;\n\n if (this.nativeOption) {\n this.nativeOption.selected = false;\n }\n }\n }\n\n _deselectMultiple() {\n if (this.selected) {\n const checkbox = SelectorEngine.findOne(SELECTOR_FORM_CHECK_INPUT, this.node);\n checkbox.checked = false;\n Manipulator.removeClass(this.node, CLASS_NAME_SELECTED);\n this.node.setAttribute('aria-selected', false);\n this.selected = false;\n\n if (this.nativeOption) {\n this.nativeOption.selected = false;\n }\n }\n }\n\n setNode(node) {\n this.node = node;\n }\n\n setActiveStyles() {\n if (!this.active && !this.multiple) {\n this.active = true;\n Manipulator.addClass(this.node, CLASS_NAME_ACITVE);\n }\n }\n\n removeActiveStyles() {\n if (this.active) {\n this.active = false;\n Manipulator.removeClass(this.node, CLASS_NAME_ACITVE);\n }\n }\n}\n\nexport default SelectOption;\n","class SelectionModel {\n constructor(multiple = false) {\n this._multiple = multiple;\n this._selections = [];\n }\n\n select(option) {\n if (this._multiple) {\n this._selections.push(option);\n } else {\n this._selections = [option];\n }\n }\n\n deselect(option) {\n if (this._multiple) {\n const optionIndex = this._selections.findIndex((selection) => option === selection);\n this._selections.splice(optionIndex, 1);\n } else {\n this._selections = [];\n }\n }\n\n clear() {\n this._selections = [];\n }\n\n get selection() {\n return this._selections[0];\n }\n\n get selections() {\n return this._selections;\n }\n\n get label() {\n return this._selections[0] && this.selection.label;\n }\n\n get labels() {\n return this._selections.map((selection) => selection.label).join(', ');\n }\n\n get value() {\n return this.selections[0] && this.selection.value;\n }\n\n get values() {\n return this._selections.map((selection) => selection.value);\n }\n}\n\nexport default SelectionModel;\n","export default function allOptionsSelected(options) {\n return options\n .filter((option) => !option.disabled)\n .every((option) => {\n return option.selected;\n });\n}\n","import { element } from '../../mdb/util/index';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport allOptionsSelected from './util';\n\nconst preventKeydown = (event) => {\n if (event.code === 'Tab' || event.code === 'Esc') {\n return;\n }\n\n event.preventDefault();\n};\n\nexport function getWrapperTemplate(id, config, label) {\n const wrapper = document.createElement('div');\n wrapper.setAttribute('id', id);\n wrapper.classList.add('select-wrapper');\n\n const formOutline = element('div');\n Manipulator.addClass(formOutline, 'form-outline');\n formOutline.setAttribute('data-mdb-input-init', '');\n\n if (config.formWhite) {\n Manipulator.addClass(formOutline, 'form-white');\n }\n\n const input = element('input');\n const role = config.filter ? 'combobox' : 'listbox';\n const multiselectable = config.multiple ? 'true' : 'false';\n const disabled = config.disabled ? 'true' : 'false';\n Manipulator.addClass(input, 'form-control');\n Manipulator.addClass(input, 'select-input');\n\n if (config.size === 'sm') {\n Manipulator.addClass(input, 'form-control-sm');\n }\n\n if (config.size === 'lg') {\n Manipulator.addClass(input, 'form-control-lg');\n }\n\n input.setAttribute('type', 'text');\n input.setAttribute('role', role);\n input.setAttribute('aria-multiselectable', multiselectable);\n input.setAttribute('aria-disabled', disabled);\n input.setAttribute('aria-haspopup', 'true');\n input.setAttribute('aria-expanded', false);\n\n if (config.tabIndex) {\n input.setAttribute('tabIndex', config.tabIndex);\n }\n\n if (config.disabled) {\n input.setAttribute('disabled', '');\n }\n\n if (config.placeholder !== '') {\n input.setAttribute('placeholder', config.placeholder);\n }\n\n if (config.validation) {\n Manipulator.addStyle(input, { 'pointer-events': 'none', 'caret-color': 'transparent' });\n Manipulator.addStyle(formOutline, { cursor: 'pointer' });\n } else {\n input.setAttribute('readonly', 'true');\n }\n\n if (config.validation) {\n input.setAttribute('required', 'true');\n input.setAttribute('aria-required', 'true');\n input.addEventListener('keydown', preventKeydown);\n }\n\n const validFeedback = element('div');\n Manipulator.addClass(validFeedback, 'valid-feedback');\n const validFeedBackText = document.createTextNode(`${config.validFeedback}`);\n validFeedback.appendChild(validFeedBackText);\n\n const invalidFeedback = element('div');\n Manipulator.addClass(invalidFeedback, 'invalid-feedback');\n const invalidFeedBackText = document.createTextNode(`${config.invalidFeedback}`);\n invalidFeedback.appendChild(invalidFeedBackText);\n\n const clearBtn = element('span');\n Manipulator.addClass(clearBtn, 'select-clear-btn');\n const clearBtnText = document.createTextNode('\\u2715');\n clearBtn.appendChild(clearBtnText);\n clearBtn.setAttribute('tabindex', '0');\n\n const arrow = element('span');\n Manipulator.addClass(arrow, 'select-arrow');\n\n formOutline.appendChild(input);\n\n if (label) {\n formOutline.appendChild(label);\n }\n\n if (config.validation) {\n formOutline.appendChild(validFeedback);\n formOutline.appendChild(invalidFeedback);\n }\n\n if (config.clearButton) {\n formOutline.appendChild(clearBtn);\n }\n\n formOutline.appendChild(arrow);\n\n wrapper.appendChild(formOutline);\n return wrapper;\n}\n\nexport function getDropdownTemplate(\n id,\n config,\n width,\n height,\n selectAllOption,\n options,\n customContent\n) {\n const dropdownContainer = document.createElement('div');\n dropdownContainer.classList.add('select-dropdown-container');\n\n dropdownContainer.setAttribute('id', `${id}`);\n dropdownContainer.style.width = `${width}px`;\n\n const dropdown = document.createElement('div');\n dropdown.setAttribute('tabindex', 0);\n dropdown.classList.add('select-dropdown');\n\n const optionsWrapper = element('div');\n Manipulator.addClass(optionsWrapper, 'select-options-wrapper');\n optionsWrapper.style.maxHeight = `${height}px`;\n\n const optionsList = getOptionsListTemplate(options, selectAllOption, config);\n\n optionsWrapper.appendChild(optionsList);\n\n if (config.filter) {\n dropdown.appendChild(getFilterTemplate(config.searchPlaceholder));\n }\n\n dropdown.appendChild(optionsWrapper);\n\n if (customContent) {\n dropdown.appendChild(customContent);\n }\n\n dropdownContainer.appendChild(dropdown);\n\n return dropdownContainer;\n}\n\nexport function getOptionsListTemplate(options, selectAllOption, config) {\n const optionsList = element('div');\n Manipulator.addClass(optionsList, 'select-options-list');\n\n let optionsNodes;\n\n if (config.multiple) {\n optionsNodes = getMultipleOptionsNodes(options, selectAllOption, config);\n } else {\n optionsNodes = getSingleOptionsNodes(options, config);\n }\n\n optionsNodes.forEach((node) => {\n optionsList.appendChild(node);\n });\n\n return optionsList;\n}\n\nexport function getFilterTemplate(placeholder) {\n const inputGroup = element('div');\n Manipulator.addClass(inputGroup, 'input-group');\n const input = element('input');\n Manipulator.addClass(input, 'form-control');\n Manipulator.addClass(input, 'select-filter-input');\n input.placeholder = placeholder;\n input.setAttribute('role', 'searchbox');\n input.setAttribute('type', 'text');\n\n inputGroup.appendChild(input);\n\n return inputGroup;\n}\n\nfunction getSingleOptionsNodes(options, config) {\n const nodes = getOptionsNodes(options, config);\n return nodes;\n}\n\nfunction getMultipleOptionsNodes(options, selectAllOption, config) {\n let selectAllNode = null;\n\n if (config.selectAll) {\n selectAllNode = createSelectAllNode(selectAllOption, options, config);\n }\n const optionsNodes = getOptionsNodes(options, config);\n const nodes = selectAllNode ? [selectAllNode, ...optionsNodes] : optionsNodes;\n return nodes;\n}\n\nfunction getOptionsNodes(options, config) {\n const nodes = [];\n\n options.forEach((option) => {\n const isOptionGroup = option.hasOwnProperty('options');\n if (isOptionGroup) {\n const group = createOptionGroupTemplate(option, config);\n nodes.push(group);\n } else {\n nodes.push(createOptionTemplate(option, config));\n }\n });\n\n return nodes;\n}\n\nfunction createSelectAllNode(option, options, config) {\n const isSelected = allOptionsSelected(options);\n const optionNode = element('div');\n Manipulator.addClass(optionNode, 'select-option');\n Manipulator.addClass(optionNode, 'select-all-option');\n Manipulator.addStyle(optionNode, { height: `${config.optionHeight}px` });\n optionNode.setAttribute('role', 'option');\n optionNode.setAttribute('aria-selected', isSelected);\n\n if (isSelected) {\n Manipulator.addClass(optionNode, 'selected');\n }\n\n optionNode.appendChild(getOptionContentTemplate(option, config));\n option.setNode(optionNode);\n\n return optionNode;\n}\n\nfunction createOptionTemplate(option, config) {\n if (option.node) {\n return option.node;\n }\n\n const optionNode = element('div');\n Manipulator.addClass(optionNode, 'select-option');\n Manipulator.addStyle(optionNode, { height: `${config.optionHeight}px` });\n Manipulator.setDataAttribute(optionNode, 'id', option.id);\n optionNode.setAttribute('role', 'option');\n optionNode.setAttribute('aria-selected', option.selected);\n optionNode.setAttribute('aria-disabled', option.disabled);\n\n if (option.selected) {\n Manipulator.addClass(optionNode, 'selected');\n }\n\n if (option.disabled) {\n Manipulator.addClass(optionNode, 'disabled');\n }\n\n if (option.hidden) {\n Manipulator.addClass(optionNode, 'd-none');\n }\n\n optionNode.appendChild(getOptionContentTemplate(option, config));\n\n if (option.icon) {\n optionNode.appendChild(getOptionIconTemplate(option));\n }\n\n option.setNode(optionNode);\n\n return optionNode;\n}\n\nfunction getOptionContentTemplate(option, config) {\n const content = element('span');\n Manipulator.addClass(content, 'select-option-text');\n\n const label = document.createTextNode(option.label);\n\n if (config.multiple) {\n content.appendChild(getCheckboxTemplate(option));\n }\n\n content.appendChild(label);\n\n if (option.secondaryText || typeof option.secondaryText === 'number') {\n content.appendChild(getSecondaryTextTemplate(option.secondaryText));\n }\n\n return content;\n}\n\nfunction getSecondaryTextTemplate(text) {\n const span = element('span');\n Manipulator.addClass(span, 'select-option-secondary-text');\n const textContent = document.createTextNode(text);\n span.appendChild(textContent);\n return span;\n}\n\nfunction getCheckboxTemplate(option) {\n const checkbox = element('input');\n checkbox.setAttribute('type', 'checkbox');\n Manipulator.addClass(checkbox, 'form-check-input');\n\n const label = element('label');\n\n if (option.selected) {\n checkbox.setAttribute('checked', true);\n }\n\n if (option.disabled) {\n checkbox.setAttribute('disabled', true);\n }\n\n checkbox.appendChild(label);\n return checkbox;\n}\n\nfunction getOptionIconTemplate(option) {\n const container = element('span');\n Manipulator.addClass(container, 'select-option-icon-container');\n const image = element('img');\n Manipulator.addClass(image, 'select-option-icon');\n Manipulator.addClass(image, 'rounded-circle');\n image.src = option.icon;\n\n container.appendChild(image);\n return container;\n}\n\nfunction createOptionGroupTemplate(optionGroup, config) {\n const group = element('div');\n Manipulator.addClass(group, 'select-option-group');\n group.setAttribute('role', 'group');\n group.setAttribute('id', optionGroup.id);\n\n if (optionGroup.hidden) {\n Manipulator.addClass(group, 'd-none');\n }\n\n const label = element('label');\n Manipulator.addClass(label, 'select-option-group-label');\n Manipulator.addStyle(label, { height: `${config.optionHeight}px` });\n label.setAttribute('for', optionGroup.id);\n label.textContent = optionGroup.label;\n\n group.appendChild(label);\n\n optionGroup.options.forEach((option) => {\n group.appendChild(createOptionTemplate(option, config));\n });\n\n return group;\n}\n\nexport function getFakeValueTemplate(value) {\n const fakeValue = element('div');\n fakeValue.textContent = value;\n Manipulator.addClass(fakeValue, 'form-label');\n Manipulator.addClass(fakeValue, 'select-fake-value');\n\n return fakeValue;\n}\n","import { createPopper } from '@popperjs/core';\nimport Data from '../../mdb/dom/data';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport { typeCheckConfig, getUID } from '../../mdb/util/index';\nimport Input from '../../free/input';\nimport SelectOption from './select-option';\nimport SelectionModel from './selection-model';\nimport { ESCAPE, ENTER, DOWN_ARROW, UP_ARROW, HOME, END, TAB } from '../../mdb/util/keycodes';\nimport allOptionsSelected from './util';\nimport {\n getWrapperTemplate,\n getDropdownTemplate,\n getOptionsListTemplate,\n getFakeValueTemplate,\n} from './templates';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\nconst Default = {\n autoSelect: false,\n container: 'body',\n clearButton: false,\n disabled: false,\n displayedLabels: 5,\n formWhite: false,\n multiple: false,\n optionsSelectedLabel: 'options selected',\n optionHeight: 38,\n selectAll: true,\n selectAllLabel: 'Select all',\n searchPlaceholder: 'Search...',\n size: 'default',\n visibleOptions: 5,\n filter: false,\n filterDebounce: 300,\n noResultText: 'No results',\n validation: false,\n validFeedback: 'Valid',\n invalidFeedback: 'Invalid',\n placeholder: '',\n filterFn: null,\n};\n\nconst DefaultType = {\n autoSelect: 'boolean',\n container: 'string',\n clearButton: 'boolean',\n disabled: 'boolean',\n displayedLabels: 'number',\n formWhite: 'boolean',\n multiple: 'boolean',\n optionsSelectedLabel: 'string',\n optionHeight: 'number',\n selectAll: 'boolean',\n selectAllLabel: 'string',\n searchPlaceholder: 'string',\n size: 'string',\n visibleOptions: 'number',\n filter: 'boolean',\n filterDebounce: 'number',\n noResultText: 'string',\n validation: 'boolean',\n validFeedback: 'string',\n invalidFeedback: 'string',\n placeholder: '',\n filterFn: '(function|null)',\n};\n\nconst NAME = 'select';\nconst DATA_KEY = 'mdb.select';\n\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLOSE = `close${EVENT_KEY}`;\nconst EVENT_OPEN = `open${EVENT_KEY}`;\nconst EVENT_SELECTED = `optionSelected${EVENT_KEY}`;\nconst EVENT_DESELECTED = `optionDeselected${EVENT_KEY}`;\nconst EVENT_VALUE_CHANGED = `valueChanged${EVENT_KEY}`;\nconst EVENT_CHANGE_NATIVE = 'change';\nconst EVENT_OPENED = `opened${EVENT_KEY}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY}`;\n\nconst SELECTOR_LABEL = '.select-label';\nconst SELECTOR_INPUT = '.select-input';\nconst SELECTOR_FILTER_INPUT = '.select-filter-input';\nconst SELECTOR_DROPDOWN = '.select-dropdown';\nconst SELECTOR_OPTIONS_WRAPPER = '.select-options-wrapper';\nconst SELECTOR_OPTIONS_LIST = '.select-options-list';\nconst SELECTOR_OPTION = '.select-option';\nconst SELECTOR_CLEAR_BUTTON = '.select-clear-btn';\nconst SELECTOR_CUSTOM_CONTENT = '.select-custom-content';\nconst SELECTOR_NO_RESULTS = '.select-no-results';\nconst SELECTOR_FORM_OUTLINE = '.form-outline';\nconst SELECTOR_TOGGLE = '[data-mdb-toggle]';\n\nconst CLASS_NAME_INITIALIZED = 'select-initialized';\nconst CLASS_NAME_OPEN = 'open';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FOCUSED = 'focused';\nconst CLASS_NAME_OPTION_GROUP_LABEL = 'select-option-group-label';\nconst CLASS_NAME_SELECT_ALL_OPTION = 'select-all-option';\n\nconst ANIMATION_TRANSITION_TIME = 200;\n\nclass Select extends BaseComponent {\n constructor(element, config) {\n super(element);\n\n this._config = this._getConfig(config);\n this._optionsToRender = this._getOptionsToRender(element);\n\n // optionsToRender may contain option groups and nested options, in this case\n // we need a list of plain options to manage selections and keyboard navigation\n this._plainOptions = this._getPlainOptions(this._optionsToRender);\n this._filteredOptionsList = null;\n\n this._selectionModel = new SelectionModel(this.multiple);\n\n this._activeOptionIndex = -1;\n this._activeOption = null;\n\n this._wrapperId = this._element.id\n ? `select-wrapper-${this._element.id}`\n : getUID('select-wrapper-');\n this._dropdownContainerId = this._element.id\n ? `select-dropdown-container-${this._element.id}`\n : getUID('select-dropdown-container-');\n this._selectAllId = this._element.id ? `select-all-${this._element.id}` : getUID('select-all-');\n this._debounceTimeoutId = null;\n\n this._dropdownHeight = this._config.optionHeight * this._config.visibleOptions;\n\n this._popper = null;\n this._input = null;\n this._label = SelectorEngine.next(this._element, SELECTOR_LABEL)[0];\n this._fakeValue = null;\n this._isFakeValueActive = false;\n this._customContent = SelectorEngine.next(element, SELECTOR_CUSTOM_CONTENT)[0];\n this._toggleButton = null;\n this._elementToggle = null;\n\n this._wrapper = null;\n this._inputEl = null;\n this._dropdownContainer = null;\n this._container = null;\n this._selectAllOption = null;\n\n this._init();\n\n this._mutationObserver = null;\n this._isOpen = false;\n\n this._addMutationObserver();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n static get NAME() {\n return NAME;\n }\n\n get filterInput() {\n return SelectorEngine.findOne(SELECTOR_FILTER_INPUT, this._dropdownContainer);\n }\n\n get dropdown() {\n return SelectorEngine.findOne(SELECTOR_DROPDOWN, this._dropdownContainer);\n }\n\n get optionsList() {\n return SelectorEngine.findOne(SELECTOR_OPTIONS_LIST, this._dropdownContainer);\n }\n\n get optionsWrapper() {\n return SelectorEngine.findOne(SELECTOR_OPTIONS_WRAPPER, this._dropdownContainer);\n }\n\n get clearButton() {\n return SelectorEngine.findOne(SELECTOR_CLEAR_BUTTON, this._wrapper);\n }\n\n get options() {\n return this._filteredOptionsList ? this._filteredOptionsList : this._plainOptions;\n }\n\n get value() {\n return this.multiple ? this._selectionModel.values : this._selectionModel.value;\n }\n\n get multiple() {\n return this._config.multiple;\n }\n\n get hasSelectAll() {\n return this.multiple && this._config.selectAll;\n }\n\n get hasSelection() {\n return this._selectionModel.selection || this._selectionModel.selections.length > 0;\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n config = {\n ...Default,\n ...dataAttributes,\n ...config,\n };\n\n if (this._element.hasAttribute('multiple')) {\n config.multiple = true;\n }\n\n if (this._element.hasAttribute('disabled')) {\n config.disabled = true;\n }\n\n if (this._element.tabIndex) {\n config.tabIndex = this._element.getAttribute('tabIndex');\n }\n\n typeCheckConfig(NAME, config, DefaultType);\n\n return config;\n }\n\n _getOptionsToRender(select) {\n const options = [];\n\n const nodes = select.childNodes;\n\n nodes.forEach((node) => {\n if (node.nodeName === 'OPTGROUP') {\n const optionGroup = {\n id: node.id ? `group-${node.id}` : getUID('group-'),\n label: node.label,\n disabled: node.hasAttribute('disabled'),\n hidden: node.hasAttribute('hidden'),\n options: [],\n };\n const groupOptions = node.childNodes;\n groupOptions.forEach((option) => {\n if (option.nodeName === 'OPTION') {\n optionGroup.options.push(this._createOptionObject(option, optionGroup));\n }\n });\n options.push(optionGroup);\n } else if (node.nodeName === 'OPTION') {\n options.push(this._createOptionObject(node));\n }\n });\n return options;\n }\n\n _getPlainOptions(optionsToRender) {\n const hasOptionGroup = SelectorEngine.findOne('optgroup', this._element);\n\n if (!hasOptionGroup) {\n return optionsToRender;\n }\n\n const options = [];\n\n optionsToRender.forEach((option) => {\n const isOptionGroup = option.hasOwnProperty('options');\n if (isOptionGroup) {\n option.options.forEach((nestedOption) => {\n options.push(nestedOption);\n });\n } else {\n options.push(option);\n }\n });\n\n return options;\n }\n\n _createOptionObject(nativeOption, group = {}) {\n const id = nativeOption.id ? `option-${nativeOption.id}` : getUID('option-');\n const groupId = group.id ? group.id : null;\n const groupDisabled = group.disabled ? group.disabled : false;\n const selected = nativeOption.selected || nativeOption.hasAttribute('selected');\n const disabled = nativeOption.hasAttribute('disabled') || groupDisabled;\n const hidden = nativeOption.hasAttribute('hidden') || (group && group.hidden);\n const multiple = this.multiple;\n const value = nativeOption.value;\n const label = nativeOption.label;\n const secondaryText = Manipulator.getDataAttribute(nativeOption, 'secondaryText');\n const icon = Manipulator.getDataAttribute(nativeOption, 'icon');\n return new SelectOption(\n id,\n nativeOption,\n multiple,\n value,\n label,\n selected,\n disabled,\n hidden,\n secondaryText,\n groupId,\n icon\n );\n }\n\n _getNavigationOptions() {\n const availableOptions = this.options.filter((option) => !option.hidden);\n\n return this.hasSelectAll ? [this._selectAllOption, ...availableOptions] : availableOptions;\n }\n\n _init() {\n this._renderMaterialWrapper();\n\n this._wrapper = SelectorEngine.findOne(`#${this._wrapperId}`);\n this._input = SelectorEngine.findOne(SELECTOR_INPUT, this._wrapper);\n\n if (this._element.getAttribute('autocomplete') === 'off') {\n this._input.setAttribute('autocomplete', 'off');\n }\n const containerSelector = this._config.container;\n\n if (containerSelector === 'body') {\n this._container = document.body;\n } else {\n this._container = SelectorEngine.findOne(containerSelector);\n }\n\n this._initOutlineInput();\n this._setDefaultSelections();\n this._updateInputValue();\n this._appendFakeValue();\n this._updateFakeLabelPosition();\n this._updateLabelPosition();\n this._updateClearButtonVisibility();\n\n this._bindComponentEvents();\n\n if (this.hasSelectAll) {\n this._selectAllOption = this._createSelectAllOption();\n }\n\n this._dropdownContainer = getDropdownTemplate(\n this._dropdownContainerId,\n this._config,\n this._input.offsetWidth,\n this._dropdownHeight,\n this._selectAllOption,\n this._optionsToRender,\n this._customContent\n );\n\n this._setFirstActiveOption();\n }\n\n _renderMaterialWrapper() {\n const template = getWrapperTemplate(this._wrapperId, this._config, this._label);\n this._element.parentNode.insertBefore(template, this._element);\n Manipulator.addClass(this._element, CLASS_NAME_INITIALIZED);\n template.appendChild(this._element);\n }\n\n _initOutlineInput() {\n const inputWrapper = SelectorEngine.findOne(SELECTOR_FORM_OUTLINE, this._wrapper);\n const outlineInput = new Input(inputWrapper);\n outlineInput.init();\n }\n\n _bindComponentEvents() {\n this._listenToComponentKeydown();\n this._listenToWrapperClick();\n if (!this._config.disabled) {\n this._listenToClearBtnClick();\n this._listenToClearBtnKeydown();\n }\n }\n\n _setDefaultSelections() {\n this.options.forEach((option) => {\n if (option.selected) {\n this._selectionModel.select(option);\n }\n });\n }\n\n _listenToComponentKeydown() {\n EventHandler.on(this._wrapper, 'keydown', this._handleKeydown.bind(this));\n }\n\n _handleKeydown(event) {\n if (this._isOpen && !this._config.filter) {\n this._handleOpenKeydown(event);\n } else {\n this._handleClosedKeydown(event);\n }\n }\n\n _handleOpenKeydown(event) {\n const key = event.keyCode;\n const isCloseKey =\n key === ESCAPE || ((key === UP_ARROW || key === DOWN_ARROW) && event.altKey) || key === TAB;\n\n if (key === TAB && this._config.autoSelect && !this.multiple) {\n this._handleAutoSelection(this._activeOption);\n }\n\n if (isCloseKey) {\n this.close();\n this._input.focus();\n return;\n }\n\n switch (key) {\n case DOWN_ARROW:\n this._setNextOptionActive();\n this._scrollToOption(this._activeOption);\n break;\n case UP_ARROW:\n this._setPreviousOptionActive();\n this._scrollToOption(this._activeOption);\n break;\n case HOME:\n this._setFirstOptionActive();\n this._scrollToOption(this._activeOption);\n break;\n case END:\n this._setLastOptionActive();\n this._scrollToOption(this._activeOption);\n break;\n case ENTER:\n event.preventDefault();\n if (this._activeOption) {\n if (this.hasSelectAll && this._activeOptionIndex === 0) {\n this._handleSelectAll();\n } else {\n this._handleSelection(this._activeOption);\n }\n }\n return;\n default:\n return;\n }\n\n event.preventDefault();\n }\n\n _handleClosedKeydown(event) {\n const key = event.keyCode;\n if (key === ENTER) {\n event.preventDefault();\n }\n const isOpenKey =\n key === ENTER ||\n ((key === DOWN_ARROW || key === UP_ARROW) && event.altKey) ||\n (key === DOWN_ARROW && this.multiple);\n\n if (isOpenKey) {\n this.open();\n }\n\n if (!this.multiple) {\n switch (key) {\n case DOWN_ARROW:\n if (event.altKey) return;\n this._setNextOptionActive();\n this._handleSelection(this._activeOption);\n break;\n case UP_ARROW:\n if (event.altKey) return;\n this._setPreviousOptionActive();\n this._handleSelection(this._activeOption);\n break;\n case HOME:\n this._setFirstOptionActive();\n this._handleSelection(this._activeOption);\n break;\n case END:\n this._setLastOptionActive();\n this._handleSelection(this._activeOption);\n break;\n default:\n return;\n }\n } else {\n switch (key) {\n case DOWN_ARROW:\n this.open();\n break;\n case UP_ARROW:\n this.open();\n break;\n default:\n return;\n }\n }\n\n event.preventDefault();\n }\n\n _scrollToOption(option) {\n if (!option) {\n return;\n }\n\n let optionIndex;\n\n const visibleOptions = this.options.filter((option) => !option.hidden);\n\n if (this.hasSelectAll) {\n optionIndex = visibleOptions.indexOf(option) + 1;\n } else {\n optionIndex = visibleOptions.indexOf(option);\n }\n\n const groupsNumber = this._getNumberOfGroupsBeforeOption(optionIndex);\n\n const scrollToIndex = optionIndex + groupsNumber;\n\n const list = this.optionsWrapper;\n const listHeight = list.offsetHeight;\n const optionHeight = this._config.optionHeight;\n const scrollTop = list.scrollTop;\n\n if (optionIndex > -1) {\n const optionOffset = scrollToIndex * optionHeight;\n const isBelow = optionOffset + optionHeight > scrollTop + listHeight;\n const isAbove = optionOffset < scrollTop;\n\n if (isAbove) {\n list.scrollTop = optionOffset;\n } else if (isBelow) {\n list.scrollTop = optionOffset - listHeight + optionHeight;\n } else {\n list.scrollTop = scrollTop;\n }\n }\n }\n\n _getNumberOfGroupsBeforeOption(optionIndex) {\n const optionsList = this.options.filter((option) => !option.hidden);\n const groupsList = this._optionsToRender.filter((group) => !group.hidden);\n const index = this.hasSelectAll ? optionIndex - 1 : optionIndex;\n let groupsNumber = 0;\n\n for (let i = 0; i <= index; i++) {\n if (\n optionsList[i].groupId &&\n groupsList[groupsNumber] &&\n groupsList[groupsNumber].id &&\n optionsList[i].groupId === groupsList[groupsNumber].id\n ) {\n groupsNumber++;\n }\n }\n\n return groupsNumber;\n }\n\n _setNextOptionActive() {\n let index = this._activeOptionIndex + 1;\n const options = this._getNavigationOptions();\n\n if (!options[index]) {\n return;\n }\n\n while (options[index].disabled) {\n index += 1;\n\n if (!options[index]) {\n return;\n }\n }\n\n this._updateActiveOption(options[index], index);\n }\n\n _setPreviousOptionActive() {\n let index = this._activeOptionIndex - 1;\n const options = this._getNavigationOptions();\n\n if (!options[index]) {\n return;\n }\n\n while (options[index].disabled) {\n index -= 1;\n\n if (!options[index]) {\n return;\n }\n }\n\n this._updateActiveOption(options[index], index);\n }\n\n _setFirstOptionActive() {\n const index = 0;\n const options = this._getNavigationOptions();\n\n this._updateActiveOption(options[index], index);\n }\n\n _setLastOptionActive() {\n const options = this._getNavigationOptions();\n const index = options.length - 1;\n\n this._updateActiveOption(options[index], index);\n }\n\n _updateActiveOption(newActiveOption, index) {\n const currentActiveOption = this._activeOption;\n\n if (currentActiveOption) {\n currentActiveOption.removeActiveStyles();\n }\n\n newActiveOption.setActiveStyles();\n this._activeOptionIndex = index;\n this._activeOption = newActiveOption;\n }\n\n _listenToWrapperClick() {\n EventHandler.on(this._wrapper, 'click', () => {\n this.toggle();\n });\n }\n\n _listenToClearBtnClick() {\n EventHandler.on(this.clearButton, 'click', (event) => {\n event.preventDefault();\n event.stopPropagation();\n this._handleClear();\n });\n }\n\n _listenToClearBtnKeydown() {\n EventHandler.on(this.clearButton, 'keydown', (event) => {\n if (event.keyCode === ENTER) {\n this._handleClear();\n event.preventDefault();\n event.stopPropagation();\n }\n });\n }\n\n _handleClear() {\n if (this.multiple) {\n this._selectionModel.clear();\n this._deselectAllOptions(this.options);\n\n if (this.hasSelectAll) {\n this._updateSelectAllState();\n }\n } else {\n const selected = this._selectionModel.selection;\n this._selectionModel.clear();\n selected.deselect();\n }\n this._updateInputValue();\n this._updateFakeLabelPosition();\n this._updateLabelPosition();\n this._updateClearButtonVisibility();\n\n this._emitValueChangeEvent(null);\n this._emitNativeChangeEvent();\n }\n\n _listenToOptionsClick() {\n EventHandler.on(this.optionsWrapper, 'click', (event) => {\n const optionGroupLabel = event.target.classList.contains(CLASS_NAME_OPTION_GROUP_LABEL);\n\n if (optionGroupLabel) {\n return;\n }\n\n const target =\n event.target.nodeName === 'DIV'\n ? event.target\n : SelectorEngine.closest(event.target, SELECTOR_OPTION);\n const selectAllOption = target.classList.contains(CLASS_NAME_SELECT_ALL_OPTION);\n\n if (selectAllOption) {\n this._handleSelectAll();\n return;\n }\n\n const id = target.dataset.mdbId;\n const option = this.options.find((option) => option.id === id);\n\n if (option && !option.disabled) {\n this._handleSelection(option);\n }\n });\n }\n\n _handleSelectAll() {\n const selected = this._selectAllOption.selected;\n\n if (selected) {\n this._deselectAllOptions(this.options);\n this._selectAllOption.deselect();\n } else {\n this._selectAllOptions(this.options);\n this._selectAllOption.select();\n }\n\n this._updateInputValue();\n this._updateFakeLabelPosition();\n this._updateLabelPosition();\n this._updateClearButtonVisibility();\n\n this._emitValueChangeEvent(this.value);\n this._emitNativeChangeEvent();\n }\n\n _selectAllOptions(options) {\n options.forEach((option) => {\n if (!option.selected && !option.disabled) {\n this._selectionModel.select(option);\n option.select();\n }\n });\n }\n\n _deselectAllOptions(options) {\n options.forEach((option) => {\n if (option.selected && !option.disabled) {\n this._selectionModel.deselect(option);\n option.deselect();\n }\n });\n }\n\n _handleSelection(option) {\n if (this.multiple) {\n this._handleMultiSelection(option);\n\n if (this.hasSelectAll) {\n this._updateSelectAllState();\n }\n } else {\n this._handleSingleSelection(option);\n }\n\n this._updateInputValue();\n this._updateFakeLabelPosition();\n this._updateLabelPosition();\n this._updateClearButtonVisibility();\n }\n\n _handleAutoSelection(option) {\n this._singleOptionSelect(option);\n this._updateInputValue();\n this._updateFakeLabelPosition();\n this._updateLabelPosition();\n this._updateClearButtonVisibility();\n }\n\n _handleSingleSelection(option) {\n this._singleOptionSelect(option);\n this.close();\n this._input.focus();\n }\n\n _singleOptionSelect(option) {\n const currentSelected = this._selectionModel.selections[0];\n\n if (currentSelected && currentSelected !== option) {\n this._selectionModel.deselect(currentSelected);\n currentSelected.deselect();\n currentSelected.node.setAttribute('selected', false);\n EventHandler.trigger(this._element, EVENT_DESELECTED, { value: currentSelected.value });\n }\n\n if (!currentSelected || (currentSelected && option !== currentSelected)) {\n this._selectionModel.select(option);\n option.select();\n option.node.setAttribute('selected', true);\n EventHandler.trigger(this._element, EVENT_SELECTED, { value: option.value });\n this._emitValueChangeEvent(this.value);\n this._emitNativeChangeEvent();\n }\n }\n\n _handleMultiSelection(option) {\n if (option.selected) {\n this._selectionModel.deselect(option);\n option.deselect();\n option.node.setAttribute('selected', false);\n EventHandler.trigger(this._element, EVENT_DESELECTED, { value: option.value });\n } else {\n this._selectionModel.select(option);\n option.select();\n option.node.setAttribute('selected', true);\n EventHandler.trigger(this._element, EVENT_SELECTED, { value: option.value });\n }\n\n this._emitValueChangeEvent(this.value);\n this._emitNativeChangeEvent();\n }\n\n _emitValueChangeEvent(value) {\n EventHandler.trigger(this._element, EVENT_VALUE_CHANGED, { value });\n }\n\n _emitNativeChangeEvent() {\n EventHandler.trigger(this._element, EVENT_CHANGE_NATIVE);\n }\n\n _updateInputValue() {\n const labels = this.multiple ? this._selectionModel.labels : this._selectionModel.label;\n let value;\n\n if (\n this.multiple &&\n this._config.displayedLabels !== -1 &&\n this._selectionModel.selections.length > this._config.displayedLabels\n ) {\n value = `${this._selectionModel.selections.length} ${this._config.optionsSelectedLabel}`;\n } else {\n value = labels;\n }\n\n if (!this.multiple && !this._isSelectionValid(this._selectionModel.selection)) {\n this._input.value = '';\n } else if (this._isLabelEmpty(this._selectionModel.selection)) {\n this._input.value = ' ';\n } else if (value) {\n this._input.value = value;\n } else {\n // prettier-ignore\n // eslint-disable-next-line\n this.multiple || !this._optionsToRender[0] ? (this._input.value = '') : (this._input.value = this._optionsToRender[0].label);\n }\n }\n\n _isSelectionValid(selection) {\n if (selection && (selection.disabled || selection.value === '')) {\n return false;\n }\n\n return true;\n }\n\n _isLabelEmpty(selection) {\n if (selection && selection.label === '') {\n return true;\n }\n\n return false;\n }\n\n _appendFakeValue() {\n if (!this._selectionModel.selection || this._selectionModel._multiple) {\n return;\n }\n\n const value = this._selectionModel.selection.label;\n this._fakeValue = getFakeValueTemplate(value);\n const inputWrapper = SelectorEngine.findOne(SELECTOR_FORM_OUTLINE, this._wrapper);\n inputWrapper.appendChild(this._fakeValue);\n }\n\n _updateLabelPosition() {\n const isInitialized = Manipulator.hasClass(this._element, CLASS_NAME_INITIALIZED);\n const isValueEmpty = this._input.value !== '';\n if (!this._label) {\n return;\n }\n\n if (isInitialized && (isValueEmpty || this._isOpen || this._isFakeValueActive)) {\n Manipulator.addClass(this._label, CLASS_NAME_ACTIVE);\n } else {\n Manipulator.removeClass(this._label, CLASS_NAME_ACTIVE);\n }\n }\n\n _updateLabelPositionWhileClosing() {\n if (!this._label) {\n return;\n }\n\n if (this._input.value !== '' || this._isFakeValueActive) {\n Manipulator.addClass(this._label, CLASS_NAME_ACTIVE);\n } else {\n Manipulator.removeClass(this._label, CLASS_NAME_ACTIVE);\n }\n }\n\n _updateFakeLabelPosition() {\n if (!this._fakeValue) {\n return;\n }\n\n if (this.hasSelection) {\n this._fakeValue.textContent = this.hasSelection.label;\n }\n\n if (this._input.value === '' && this._fakeValue.innerHTML !== '') {\n this._isFakeValueActive = true;\n Manipulator.addClass(this._fakeValue, CLASS_NAME_ACTIVE);\n } else {\n this._isFakeValueActive = false;\n Manipulator.removeClass(this._fakeValue, CLASS_NAME_ACTIVE);\n }\n }\n\n _updateClearButtonVisibility() {\n if (!this.clearButton) {\n return;\n }\n\n const hasSelection =\n this._selectionModel.selection || this._selectionModel.selections.length > 0;\n\n if (hasSelection) {\n Manipulator.addStyle(this.clearButton, { display: 'block' });\n } else {\n Manipulator.addStyle(this.clearButton, { display: 'none' });\n }\n }\n\n _updateSelectAllState() {\n const selectAllSelected = this._selectAllOption.selected;\n const allSelected = allOptionsSelected(this.options);\n if (!allSelected && selectAllSelected) {\n this._selectAllOption.deselect();\n } else if (allSelected && !selectAllSelected) {\n this._selectAllOption.select();\n }\n }\n\n toggle() {\n if (this._isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open() {\n const isDisabled = this._config.disabled;\n const openEvent = EventHandler.trigger(this._element, EVENT_OPEN);\n\n if (this._isOpen || isDisabled || openEvent.defaultPrevented) {\n return;\n }\n\n this._openDropdown();\n this._updateDropdownWidth();\n this._setFirstActiveOption();\n this._scrollToOption(this._activeOption);\n\n if (this._config.filter) {\n // We need to wait for popper initialization, otherwise\n // dates container will be focused before popper position\n // update which can change the scroll position on the page\n setTimeout(() => {\n this.filterInput.focus();\n }, 0);\n\n this._listenToSelectSearch();\n\n // New listener for dropdown navigation is needed, because\n // we focus search input inside dropdown template, which is\n // appended to the body. In this case listener attached to the\n // select wrapper won't work\n this._listenToDropdownKeydown();\n }\n\n this._listenToOptionsClick();\n this._listenToOutsideClick();\n this._listenToWindowResize();\n\n this._isOpen = true;\n EventHandler.trigger(this._element, EVENT_OPENED);\n\n this._updateLabelPosition();\n this._setInputActiveStyles();\n }\n\n _openDropdown() {\n this._popper = createPopper(this._input, this._dropdownContainer, {\n placement: 'bottom-start',\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: [0, 1],\n },\n },\n ],\n });\n this._container.appendChild(this._dropdownContainer);\n\n // We need to add delay to wait for the popper initialization\n // and position update\n setTimeout(() => {\n Manipulator.addClass(this.dropdown, CLASS_NAME_OPEN);\n }, 0);\n }\n\n _updateDropdownWidth() {\n const inputWidth = this._input.offsetWidth;\n Manipulator.addStyle(this._dropdownContainer, { width: `${inputWidth}px` });\n }\n\n _setFirstActiveOption() {\n const options = this._getNavigationOptions();\n const currentActive = this._activeOption;\n\n if (currentActive) {\n currentActive.removeActiveStyles();\n }\n\n const firstSelected = this.multiple\n ? this._selectionModel.selections[0]\n : this._selectionModel.selection;\n\n if (firstSelected) {\n this._activeOption = firstSelected;\n firstSelected.setActiveStyles();\n this._activeOptionIndex = options.findIndex((option) => option === firstSelected);\n } else {\n this._activeOption = null;\n this._activeOptionIndex = -1;\n }\n }\n\n _setInputActiveStyles() {\n Manipulator.addClass(this._input, CLASS_NAME_FOCUSED);\n }\n\n _listenToWindowResize() {\n EventHandler.on(window, 'resize', this._handleWindowResize.bind(this));\n }\n\n _handleWindowResize() {\n if (this._dropdownContainer) {\n this._updateDropdownWidth();\n }\n }\n\n _listenToSelectSearch() {\n this.filterInput.addEventListener('input', (event) => {\n const searchTerm = event.target.value;\n const debounceTime = this._config.filterDebounce;\n this._debounceFilter(searchTerm, debounceTime);\n });\n }\n\n _debounceFilter(searchTerm, debounceTime) {\n if (this._debounceTimeoutId) {\n clearTimeout(this._debounceTimeoutId);\n }\n\n this._debounceTimeoutId = setTimeout(() => {\n this._filterOptions(searchTerm);\n }, debounceTime);\n }\n\n _filterOptions(searchTerm) {\n const filtered = [];\n const filterFn = this._config.filterFn;\n\n this._optionsToRender.forEach((option) => {\n const isOptionGroup = option.hasOwnProperty('options');\n const isValidOption =\n !isOptionGroup && option.label.toLowerCase().includes(searchTerm.toLowerCase());\n const group = {};\n\n if (isOptionGroup) {\n group.label = option.label;\n group.options = this._filter(searchTerm, option.options);\n\n if (group.options.length > 0) {\n filtered.push(group);\n }\n }\n\n if (filterFn && !isOptionGroup) {\n const customSearchResult = filterFn(searchTerm, option);\n if (customSearchResult) {\n filtered.push(option);\n }\n } else if (isValidOption) {\n filtered.push(option);\n }\n });\n\n const hasNoResultsText = this._config.noResultText !== '';\n const hasFilteredOptions = filtered.length !== 0;\n\n if (hasFilteredOptions) {\n this._updateOptionsListTemplate(filtered);\n this._popper.forceUpdate();\n this._filteredOptionsList = this._getPlainOptions(filtered);\n\n if (this.hasSelectAll) {\n this._updateSelectAllState();\n }\n\n this._setFirstActiveOption();\n } else if (!hasFilteredOptions && hasNoResultsText) {\n const noResultsTemplate = this._getNoResultTemplate();\n this.optionsWrapper.innerHTML = noResultsTemplate;\n }\n }\n\n _updateOptionsListTemplate(optionsToRender) {\n const optionsWrapperContent =\n SelectorEngine.findOne(SELECTOR_OPTIONS_LIST, this._dropdownContainer) ||\n SelectorEngine.findOne(SELECTOR_NO_RESULTS, this._dropdownContainer);\n\n const optionsListTemplate = getOptionsListTemplate(\n optionsToRender,\n this._selectAllOption,\n this._config\n );\n this.optionsWrapper.removeChild(optionsWrapperContent);\n this.optionsWrapper.appendChild(optionsListTemplate);\n }\n\n _getNoResultTemplate() {\n return `<div class=\"select-no-results\" style=\"height: ${this._config.optionHeight}px\">${this._config.noResultText}</div>`;\n }\n\n _filter(value, options) {\n const filterFn = this._config.filterFn;\n if (filterFn) {\n return options.filter((option) => filterFn(value, option));\n }\n const filterValue = value.toLowerCase();\n return options.filter((option) => option.label.toLowerCase().includes(filterValue));\n }\n\n _listenToDropdownKeydown() {\n EventHandler.on(this.dropdown, 'keydown', this._handleOpenKeydown.bind(this));\n }\n\n _listenToOutsideClick() {\n this._outsideClick = this._handleOutSideClick.bind(this);\n EventHandler.on(document, 'click', this._outsideClick);\n }\n\n _handleOutSideClick(event) {\n const isSelectContent = this._wrapper && this._wrapper.contains(event.target);\n const isDropdown = event.target === this._dropdownContainer;\n const isDropdownContent =\n this._dropdownContainer && this._dropdownContainer.contains(event.target);\n\n let isButton;\n if (!this._toggleButton) {\n this._elementToggle = SelectorEngine.find(SELECTOR_TOGGLE);\n }\n if (this._elementToggle) {\n this._elementToggle.forEach((button) => {\n const attributes = Manipulator.getDataAttribute(button, 'toggle');\n if (attributes === this._element.id || this._element.classList.contains(attributes)) {\n this._toggleButton = button;\n isButton = this._toggleButton.contains(event.target);\n }\n });\n }\n\n if (!isSelectContent && !isDropdown && !isDropdownContent && !isButton) {\n this.close();\n }\n }\n\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n if (!this._isOpen || closeEvent.defaultPrevented) {\n return;\n }\n\n if (this._config.filter && this.hasSelectAll) {\n this._resetFilterState();\n this._updateOptionsListTemplate(this._optionsToRender);\n if (this._config.multiple) {\n this._updateSelectAllState();\n }\n }\n\n this._removeDropdownEvents();\n\n Manipulator.removeClass(this.dropdown, CLASS_NAME_OPEN);\n\n setTimeout(() => {\n Manipulator.removeClass(this._input, CLASS_NAME_FOCUSED);\n if (this._label && !this.hasSelection) {\n Manipulator.removeClass(this._label, CLASS_NAME_ACTIVE);\n Manipulator.removeClass(this._input, CLASS_NAME_ACTIVE);\n }\n this._updateLabelPositionWhileClosing();\n }, 0);\n\n setTimeout(() => {\n if (this._container && this._dropdownContainer.parentNode === this._container) {\n this._container.removeChild(this._dropdownContainer);\n }\n this._popper.destroy();\n this._isOpen = false;\n EventHandler.off(this.dropdown, 'transitionend');\n EventHandler.trigger(this._element, EVENT_CLOSED);\n }, ANIMATION_TRANSITION_TIME);\n }\n\n _resetFilterState() {\n this.filterInput.value = '';\n this._filteredOptionsList = null;\n }\n\n _removeDropdownEvents() {\n EventHandler.off(document, 'click', this._outsideClick);\n\n if (this._config.filter) {\n EventHandler.off(this.dropdown, 'keydown');\n }\n\n EventHandler.off(this.optionsWrapper, 'click');\n }\n\n _addMutationObserver() {\n this._mutationObserver = new MutationObserver(() => {\n if (this._wrapper) {\n this._updateSelections();\n this._updateDisabledState();\n }\n });\n\n this._observeMutationObserver();\n }\n\n _updateSelections() {\n this._optionsToRender = this._getOptionsToRender(this._element);\n this._plainOptions = this._getPlainOptions(this._optionsToRender);\n this._selectionModel.clear();\n this._setDefaultSelections();\n this._updateInputValue();\n this._updateFakeLabelPosition();\n this._updateLabelPosition();\n this._updateClearButtonVisibility();\n\n if (this.hasSelectAll) {\n this._updateSelectAllState();\n }\n\n const hasFilterValue = this._config.filter && this.filterInput && this.filterInput.value;\n\n if (this._isOpen && !hasFilterValue) {\n this._updateOptionsListTemplate(this._optionsToRender);\n this._setFirstActiveOption();\n } else if (this._isOpen && hasFilterValue) {\n this._filterOptions(this.filterInput.value);\n this._setFirstActiveOption();\n } else {\n this._dropdownContainer = getDropdownTemplate(\n this._dropdownContainerId,\n this._config,\n this._input.offsetWidth,\n this._dropdownHeight,\n this._selectAllOption,\n this._optionsToRender,\n this._customContent\n );\n }\n }\n\n _updateDisabledState() {\n const input = SelectorEngine.findOne(SELECTOR_INPUT, this._wrapper);\n\n if (this._element.hasAttribute('disabled')) {\n this._config.disabled = true;\n input.setAttribute('disabled', '');\n } else {\n this._config.disabled = false;\n input.removeAttribute('disabled');\n }\n }\n\n _observeMutationObserver() {\n if (!this._mutationObserver) {\n return;\n }\n\n this._mutationObserver.observe(this._element, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true,\n });\n }\n\n _disconnectMutationObserver() {\n if (this._mutationObserver) {\n this._mutationObserver.disconnect();\n this._mutationObserver = null;\n }\n }\n\n _createSelectAllOption() {\n const id = this._selectAllId;\n const nativeOption = null;\n const multiple = true;\n const value = 'select-all';\n const label = this._config.selectAllLabel;\n const selected = allOptionsSelected(this.options);\n const disabled = false;\n const hidden = false;\n const secondaryText = null;\n const groupId = null;\n const icon = null;\n\n return new SelectOption(\n id,\n nativeOption,\n multiple,\n value,\n label,\n selected,\n disabled,\n hidden,\n secondaryText,\n groupId,\n icon\n );\n }\n\n dispose() {\n this._disconnectMutationObserver();\n this._removeComponentEvents();\n\n this._disconnectMutationObserver();\n\n this._destroyMaterialSelect();\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n _removeComponentEvents() {\n EventHandler.off(this.input, 'click');\n EventHandler.off(this.wrapper, this._handleKeydown.bind(this));\n EventHandler.off(this.clearButton, 'click');\n EventHandler.off(this.clearButton, 'keydown');\n EventHandler.off(window, 'resize', this._handleWindowResize.bind(this));\n }\n\n _destroyMaterialSelect() {\n if (this._isOpen) {\n this.close();\n }\n\n this._destroyMaterialTemplate();\n }\n\n _destroyMaterialTemplate() {\n const wrapperParent = this._wrapper.parentNode;\n const labels = SelectorEngine.find('label', this._wrapper);\n\n wrapperParent.appendChild(this._element);\n labels.forEach((label) => {\n wrapperParent.appendChild(label);\n });\n\n labels.forEach((label) => {\n Manipulator.removeClass(label, CLASS_NAME_ACTIVE);\n });\n Manipulator.removeClass(this._element, CLASS_NAME_INITIALIZED);\n\n // restore custom content removed on init\n if (this._customContent) {\n wrapperParent.appendChild(this._customContent);\n }\n\n wrapperParent.removeChild(this._wrapper);\n }\n\n setValue(value) {\n this.options\n .filter((option) => option.selected)\n .forEach((selection) => (selection.nativeOption.selected = false));\n\n const isMultipleValue = Array.isArray(value);\n\n if (isMultipleValue) {\n value.forEach((selectionValue) => {\n this._selectByValue(selectionValue);\n });\n } else {\n this._selectByValue(value);\n }\n\n this._updateSelections();\n this._emitValueChangeEvent(value);\n }\n\n _selectByValue(value) {\n const correspondingOption = this.options.find((option) => option.value === value);\n if (!correspondingOption) {\n return false;\n }\n correspondingOption.nativeOption.selected = true;\n return true;\n }\n\n static jQueryInterface(config, options) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data && /dispose/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Select(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](options);\n }\n });\n }\n}\n\nexport default Select;\n","import PerfectScrollbar from '../../mdb/perfect-scrollbar';\nimport { typeCheckConfig } from '../../mdb/util/index';\nimport Data from '../../mdb/dom/data';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport tableTemplate from './html/table'; //eslint-disable-line\nimport { search, sort, paginate } from './util';\nimport Select from '../select';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'datatable';\nconst DATA_KEY = `mdb.${NAME}`;\n\nconst CLASS_DATATABLE = 'datatable';\nconst CLASS_FIXED_CELL = 'fixed-cell';\n\nconst SELECTOR_BODY = '.datatable-inner';\nconst SELECTOR_CELL = 'td';\nconst SELECTOR_HEADER = '.datatable-header th';\nconst SELECTOR_HEADER_CHECKBOX = '.datatable-header-checkbox';\nconst SELECTOR_PAGINATION_RIGHT = '.datatable-pagination-right';\nconst SELECTOR_PAGINATION_LEFT = '.datatable-pagination-left';\nconst SELECTOR_PAGINATION_START = '.datatable-pagination-start';\nconst SELECTOR_PAGINATION_END = '.datatable-pagination-end';\nconst SELECTOR_PAGINATION_NAV = '.datatable-pagination-nav';\nconst SELECTOR_SELECT = '.datatable-select';\nconst SELECTOR_SORT_ICON = '.datatable-sort-icon';\nconst SELECTOR_ROW = '.datatable-body tr';\nconst SELECTOR_ROW_CHECKBOX = '.datatable-row-checkbox';\n\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_SELECTED = `rowSelected${EVENT_KEY}`;\nconst EVENT_RENDER = `render${EVENT_KEY}`;\nconst EVENT_ROW_CLICKED = `rowClicked${EVENT_KEY}`;\nconst EVENT_UPDATE = `update${EVENT_KEY}`;\n\nconst EVENT_VALUE_CHANGED_SELECT = 'valueChanged.mdb.select';\n\nconst TYPE_OPTIONS = {\n bordered: 'boolean',\n borderless: 'boolean',\n borderColor: '(string|null)',\n clickableRows: 'boolean',\n color: '(string|null)',\n defaultValue: 'string',\n edit: 'boolean',\n entries: '(number|string)',\n entriesOptions: 'array',\n fullPagination: 'boolean',\n hover: 'boolean',\n loading: 'boolean',\n loadingMessage: 'string',\n maxWidth: '(null|number|string)',\n maxHeight: '(null|number|string)',\n multi: 'boolean',\n noFoundMessage: 'string',\n pagination: 'boolean',\n selectable: 'boolean',\n sm: 'boolean',\n sortField: '(null|string)',\n sortOrder: 'string',\n loaderClass: 'string',\n fixedHeader: 'boolean',\n striped: 'boolean',\n rowsText: 'string',\n ofText: 'string',\n allText: 'string',\n forceSort: 'boolean',\n};\n\nconst TYPE_COLUMN_FIELDS = {\n label: 'string',\n field: 'string',\n fixed: '(boolean|string)',\n format: '(function|null)',\n width: '(number|null)',\n sort: 'boolean',\n columnIndex: 'number',\n};\n\nconst DEFAULT_OPTIONS = {\n bordered: false,\n borderless: false,\n borderColor: null,\n clickableRows: false,\n color: null,\n dark: false,\n defaultValue: '-',\n edit: false,\n entries: 10,\n entriesOptions: [10, 25, 50, 200],\n fixedHeader: false,\n fullPagination: false,\n hover: false,\n loaderClass: 'bg-primary',\n loading: false,\n loadingMessage: 'Loading results...',\n maxWidth: null,\n maxHeight: null,\n multi: false,\n noFoundMessage: 'No matching results found',\n pagination: true,\n selectable: false,\n sm: false,\n sortField: null,\n sortOrder: 'asc',\n striped: false,\n rowsText: 'Rows per page:',\n ofText: 'of',\n allText: 'All',\n forceSort: false,\n};\n\nconst DEFAUL_COLUMN = {\n label: '',\n field: '',\n fixed: false,\n format: null,\n width: null,\n sort: true,\n columnIndex: 0,\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Datatable extends BaseComponent {\n constructor(element, data = {}, options = {}) {\n super(element);\n\n this._options = this._getOptions(options);\n\n this._sortReverse = false;\n\n this._activePage = 0;\n\n this._search = '';\n this._searchColumn = null;\n\n this._paginationLeft = null;\n this._paginationRight = null;\n this._paginationStart = null;\n this._paginationEnd = null;\n this._select = null;\n this._selectInstance = null;\n\n this._selected = [];\n this._checkboxes = null;\n this._headerCheckbox = null;\n this._rows = this._getRows(data.rows);\n this._columns = this._getColumns(data.columns);\n\n if (this._element) {\n this._perfectScrollbar = null;\n this._setup();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n get columns() {\n return this._columns.map((column, index) => {\n let template = {\n ...DEFAUL_COLUMN,\n field: `field_${index}`,\n columnIndex: index,\n };\n\n if (typeof column === 'string') {\n template.label = column;\n } else if (typeof column === 'object') {\n template = {\n ...template,\n ...column,\n };\n }\n\n typeCheckConfig('column', template, TYPE_COLUMN_FIELDS);\n\n return template;\n });\n }\n\n get rows() {\n return this._rows.map((row, index) => {\n const output = {\n rowIndex: index,\n };\n\n if (Array.isArray(row)) {\n this.columns.forEach((column, i) => {\n if (row[i] === 0) {\n output[column.field] = row[i];\n } else {\n output[column.field] = row[i] || this._options.defaultValue;\n }\n });\n } else if (typeof row === 'object') {\n this.columns.forEach((column) => {\n if (row[column.field] === 0) {\n output[column.field] = row[column.field];\n } else {\n output[column.field] = row[column.field] || this._options.defaultValue;\n }\n });\n }\n\n return output;\n });\n }\n\n get searchResult() {\n return search(this.rows, this._search, this._searchColumn);\n }\n\n get computedRows() {\n let result = [...this.searchResult];\n\n if (this._options.sortOrder) {\n result = sort({\n rows: result,\n field: this._options.sortField,\n order: this._options.sortOrder,\n });\n }\n\n if (this._options.pagination) {\n if (this._options.entries === 'All') {\n result = paginate({\n rows: result,\n entries: result.length,\n activePage: this._activePage,\n });\n } else {\n result = paginate({\n rows: result,\n entries: this._options.entries,\n activePage: this._activePage,\n });\n }\n }\n\n return result;\n }\n\n get pages() {\n if (this._options.entries === 'All') {\n return 1;\n }\n\n return Math.ceil(this.searchResult.length / this._options.entries);\n }\n\n get navigationText() {\n const firstVisibleEntry = this._activePage * this._options.entries;\n\n if (this.searchResult.length === 0) {\n return `0 ${this._options.ofText} 0`;\n }\n\n if (this._options.entries === 'All') {\n return `1 - ${this.searchResult.length} ${this._options.ofText} ${this.searchResult.length}`;\n }\n\n return `${firstVisibleEntry + 1} - ${this.computedRows.length + firstVisibleEntry} ${\n this._options.ofText\n } ${this.searchResult.length}`;\n }\n\n get classNames() {\n return [\n CLASS_DATATABLE,\n this._options.color,\n this._options.borderColor && `border-${this._options.borderColor}`,\n this._options.dark && 'datatable-dark',\n this._options.hover && 'datatable-hover',\n this._options.bordered && 'datatable-bordered',\n this._options.borderless && 'datatable-borderless',\n this._options.sm && 'datatable-sm',\n this._options.striped && 'datatable-striped',\n this._options.loading && 'datatable-loading',\n this._options.clickableRows && 'datatable-clickable-rows',\n ].filter((className) => className);\n }\n\n get tableOptions() {\n return {\n columns: this.columns,\n rows: this.computedRows,\n noFoundMessage: this._options.noFoundMessage,\n edit: this._options.edit,\n loading: this._options.loading,\n loaderClass: this._options.loaderClass,\n loadingMessage: this._options.loadingMessage,\n selectable: this._options.selectable,\n multi: this._options.multi,\n pagination: {\n enable: this._options.pagination,\n text: this.navigationText,\n entries: this._options.entries,\n entriesOptions: this._options.entriesOptions,\n fullPagination: this._options.fullPagination,\n rowsText: this._options.rowsText,\n ofText: this._options.ofText,\n allText: this._options.allText,\n },\n forceSort: this._options.forceSort,\n };\n }\n\n // Public\n\n update(data, options = {}) {\n if (data && data.rows) {\n this._rows = data.rows;\n }\n\n if (data && data.columns) {\n this._columns = data.columns;\n }\n\n this._clearClassList(options);\n\n this._options = this._getOptions({ ...this._options, ...options });\n\n this._setup();\n\n this._performSort();\n }\n\n dispose() {\n if (this._selectInstance) {\n this._selectInstance.dispose();\n }\n\n this._removeEventListeners();\n this._perfectScrollbar.destroy();\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n search(string, column) {\n this._search = string;\n\n this._searchColumn = column;\n\n this._activePage = 0;\n\n if (this._options.pagination) {\n this._toggleDisableState();\n }\n\n this._renderRows();\n\n if (this._options.maxHeight) {\n this._perfectScrollbar.element.scrollTop = 0;\n\n this._perfectScrollbar.update();\n }\n }\n\n sort(column, order = 'asc') {\n this._options.sortOrder = order;\n\n if (typeof column === 'string') {\n this._options.sortField = this.columns.find((header) => header.label === column).field;\n } else {\n this._options.sortField = column.field;\n }\n\n const icon = SelectorEngine.findOne(\n `i[data-mdb-sort=\"${this._options.sortField}\"]`,\n this._element\n );\n\n this._activePage = 0;\n\n this._toggleDisableState();\n\n this._renderRows();\n\n this._setActiveSortIcon(icon);\n }\n\n setActivePage(index) {\n if (index < this.pages) {\n this._changeActivePage(index);\n }\n }\n\n // Private\n\n _changeActivePage(index) {\n this._activePage = index;\n\n this._toggleDisableState();\n\n this._renderRows();\n }\n\n _clearClassList(options) {\n if (this._options.color && options.color) {\n Manipulator.removeClass(this._element, this._options.color);\n }\n\n if (this._options.borderColor && options.borderColor) {\n Manipulator.removeClass(this._element, `border-${this._options.borderColor}`);\n }\n\n ['dark', 'hover', 'bordered', 'borderless', 'sm', 'striped', 'loading'].forEach((option) => {\n if (this._options[option] && !options[option]) {\n Manipulator.removeClass(this._element, `datatable-${option}`);\n }\n });\n }\n\n _emitSelectEvent() {\n EventHandler.trigger(this._element, EVENT_SELECTED, {\n selectedRows: this.rows.filter((row) => this._selected.indexOf(row.rowIndex) !== -1),\n selectedIndexes: this._selected,\n allSelected: this._selected.length === this.rows.length,\n });\n }\n\n _getRows(rows = []) {\n const body = SelectorEngine.findOne('tbody', this._element);\n\n if (!body) {\n return rows;\n }\n\n const tableRows = SelectorEngine.find('tr', body).map((row) => {\n return SelectorEngine.find('td', row).map((cell) => cell.innerHTML);\n });\n\n return [...tableRows, ...rows];\n }\n\n _getColumns(columns = []) {\n const head = SelectorEngine.findOne('thead', this._element);\n\n if (!head) {\n return columns;\n }\n\n const headerRow = SelectorEngine.findOne('tr', head);\n\n const headers = SelectorEngine.find('th', headerRow).map((cell) => ({\n label: cell.innerHTML,\n ...Manipulator.getDataAttributes(cell),\n }));\n\n return [...headers, ...columns];\n }\n\n _getCSSValue(size) {\n if (typeof size === 'string') {\n return size;\n }\n\n return `${size}px`;\n }\n\n _getOptions(options) {\n const config = {\n ...DEFAULT_OPTIONS,\n ...Manipulator.getDataAttributes(this._element),\n ...options,\n };\n\n const entriesOptions = Manipulator.getDataAttributes(this._element).entriesOptions;\n const entriesOptionsAsArray = Array.isArray(config.entriesOptions)\n ? config.entriesOptions\n : JSON.parse(entriesOptions);\n\n config.entriesOptions = entriesOptionsAsArray;\n\n typeCheckConfig(NAME, config, TYPE_OPTIONS);\n return config;\n }\n\n _setActiveRows() {\n SelectorEngine.find(SELECTOR_ROW, this._element).forEach((row) => {\n if (this._selected.includes(Manipulator.getDataAttribute(row, 'index'))) {\n Manipulator.addClass(row, 'active');\n } else {\n Manipulator.removeClass(row, 'active');\n }\n });\n }\n\n _setEntries(e) {\n this._options = this._getOptions({ ...this._options, entries: e.target.value });\n\n if (this._activePage > this.pages - 1) {\n this._activePage = this.pages - 1;\n }\n\n this._toggleDisableState();\n\n this._renderRows();\n }\n\n _setSelected() {\n SelectorEngine.find(SELECTOR_ROW_CHECKBOX, this._element).forEach((checkbox) => {\n const index = Manipulator.getDataAttribute(checkbox, 'rowIndex');\n\n checkbox.checked = this._selected.includes(index);\n });\n\n this._setActiveRows();\n }\n\n _setActiveSortIcon(active) {\n SelectorEngine.find(SELECTOR_SORT_ICON, this._element).forEach((icon) => {\n const angle = this._options.sortOrder === 'desc' && icon === active ? 180 : 0;\n\n Manipulator.style(icon, {\n transform: `rotate(${angle}deg)`,\n });\n\n if (icon === active && this._options.sortOrder) {\n Manipulator.addClass(icon, 'active');\n } else {\n Manipulator.removeClass(icon, 'active');\n }\n });\n }\n\n _setClassNames() {\n this.classNames.forEach((className) => {\n Manipulator.addClass(this._element, className);\n });\n }\n\n _setup() {\n this._setClassNames();\n\n this._renderTable();\n\n if (this._options.pagination) {\n this._setupPagination();\n }\n\n if (this._options.edit) {\n this._setupEditable();\n }\n\n if (this._options.clickableRows) {\n this._setupClickableRows();\n }\n\n if (this._options.selectable) {\n this._setupSelectable();\n }\n\n this._setupScroll();\n\n this._setupSort();\n }\n\n _setupClickableRows() {\n SelectorEngine.find(SELECTOR_ROW, this._element).forEach((row) => {\n const index = Manipulator.getDataAttribute(row, 'index');\n\n EventHandler.on(row, 'click', (e) => {\n if (!SelectorEngine.matches(e.target, SELECTOR_ROW_CHECKBOX)) {\n EventHandler.trigger(this._element, EVENT_ROW_CLICKED, { index, row: this.rows[index] });\n }\n });\n });\n }\n\n _setupEditable() {\n SelectorEngine.find(SELECTOR_ROW, this._element).forEach((row) => {\n const index = Manipulator.getDataAttribute(row, 'index');\n\n SelectorEngine.find(SELECTOR_CELL, row).forEach((cell) => {\n EventHandler.on(cell, 'input', (e) => this._updateRow(e, index));\n });\n });\n }\n\n _setupScroll() {\n const datatableBody = SelectorEngine.findOne(SELECTOR_BODY, this._element);\n\n const style = {\n overflow: 'auto',\n position: 'relative',\n };\n\n if (this._options.maxHeight) {\n style.maxHeight = this._getCSSValue(this._options.maxHeight);\n }\n\n if (this._options.maxWidth) {\n const width = this._getCSSValue(this._options.maxWidth);\n\n style.maxWidth = width;\n\n Manipulator.style(this._element, { maxWidth: width });\n }\n\n Manipulator.style(datatableBody, style);\n\n if (this._options.fixedHeader) {\n let headers = SelectorEngine.find(SELECTOR_HEADER, this._element);\n\n if (this._options.selectable) {\n headers = headers.filter((header, index) => {\n Manipulator.addClass(header, CLASS_FIXED_CELL);\n\n if (this._options.color) {\n Manipulator.addClass(header, this._options.color);\n }\n\n return index !== 0;\n });\n }\n\n headers.forEach((header, i) => {\n Manipulator.addClass(header, CLASS_FIXED_CELL);\n\n if (this.columns[i].fixed) {\n Manipulator.addStyle(header, { zIndex: 4 });\n }\n\n if (this._options.color) {\n Manipulator.addClass(header, this._options.color);\n }\n });\n }\n\n this._perfectScrollbar = new PerfectScrollbar(datatableBody);\n }\n\n _setupSort() {\n SelectorEngine.find(SELECTOR_SORT_ICON, this._element).forEach((icon) => {\n const field = Manipulator.getDataAttribute(icon, 'sort');\n const [header] = SelectorEngine.parents(icon, 'th');\n Manipulator.style(header, { cursor: 'pointer' });\n\n if (field === this._options.sortField) {\n this._setActiveSortIcon(icon);\n }\n\n EventHandler.on(header, 'click', () => {\n if (this._options.sortField === field && this._options.sortOrder === 'asc') {\n this._options.sortOrder = 'desc';\n } else if (this._options.sortField === field && this._options.sortOrder === 'desc') {\n this._options.sortOrder = this._options.forceSort ? 'asc' : null;\n } else {\n this._options.sortOrder = 'asc';\n }\n\n this._options.sortField = field;\n\n this._activePage = 0;\n\n this._performSort();\n\n this._setActiveSortIcon(icon);\n });\n });\n }\n\n _performSort() {\n this._toggleDisableState();\n\n this._renderRows();\n }\n\n _setupSelectable() {\n this._checkboxes = SelectorEngine.find(SELECTOR_ROW_CHECKBOX, this._element);\n\n this._headerCheckbox = SelectorEngine.findOne(SELECTOR_HEADER_CHECKBOX, this._element);\n\n EventHandler.on(this._headerCheckbox, 'input', (e) => this._toggleSelectAll(e));\n\n this._checkboxes.forEach((checkbox) => {\n const rowIndex = Manipulator.getDataAttribute(checkbox, 'rowIndex');\n\n EventHandler.on(checkbox, 'input', (e) => this._toggleSelectRow(e, rowIndex));\n });\n }\n\n _setupPagination() {\n this._paginationRight = SelectorEngine.findOne(SELECTOR_PAGINATION_RIGHT, this._element);\n\n this._paginationLeft = SelectorEngine.findOne(SELECTOR_PAGINATION_LEFT, this._element);\n\n EventHandler.on(this._paginationRight, 'click', () =>\n this._changeActivePage(this._activePage + 1)\n );\n\n EventHandler.on(this._paginationLeft, 'click', () =>\n this._changeActivePage(this._activePage - 1)\n );\n\n if (this._options.fullPagination) {\n this._paginationStart = SelectorEngine.findOne(SELECTOR_PAGINATION_START, this._element);\n\n this._paginationEnd = SelectorEngine.findOne(SELECTOR_PAGINATION_END, this._element);\n\n EventHandler.on(this._paginationStart, 'click', () => this._changeActivePage(0));\n\n EventHandler.on(this._paginationEnd, 'click', () => this._changeActivePage(this.pages - 1));\n }\n\n this._toggleDisableState();\n\n this._setupPaginationSelect();\n }\n\n _setupPaginationSelect() {\n this._select = SelectorEngine.findOne(SELECTOR_SELECT, this._element);\n\n if (this._selectInstance) {\n this._selectInstance.dispose();\n }\n\n this._selectInstance = new Select(this._select);\n\n EventHandler.on(this._select, EVENT_VALUE_CHANGED_SELECT, (e) => this._setEntries(e));\n }\n\n _removeEventListeners() {\n if (this._options.pagination) {\n EventHandler.off(this._paginationRight, 'click');\n\n EventHandler.off(this._paginationLeft, 'click');\n\n EventHandler.off(this._select, EVENT_VALUE_CHANGED_SELECT);\n\n if (this._options.fullPagination) {\n EventHandler.off(this._paginationStart, 'click');\n\n EventHandler.off(this._paginationEnd, 'click');\n }\n }\n\n if (this._options.editable) {\n SelectorEngine.find(SELECTOR_CELL, this._element).forEach((cell) => {\n EventHandler.off(cell, 'input');\n });\n }\n\n if (this._options.clickableRows) {\n SelectorEngine.find(SELECTOR_ROW, this._element).forEach((row) => {\n EventHandler.off(row, 'click');\n });\n }\n\n SelectorEngine.find(SELECTOR_SORT_ICON, this._element).forEach((icon) => {\n const [header] = SelectorEngine.parents(icon, 'th');\n\n EventHandler.off(header, 'click');\n });\n\n if (this._options.selectable) {\n EventHandler.off(this._headerCheckbox, 'input');\n\n this._checkboxes.forEach((checkbox) => {\n EventHandler.off(checkbox, 'input');\n });\n }\n }\n\n _renderTable() {\n this._element.innerHTML = tableTemplate(this.tableOptions).table;\n\n this._formatCells();\n\n EventHandler.trigger(this._element, EVENT_RENDER);\n }\n\n _renderRows() {\n const body = SelectorEngine.findOne('tbody', this._element);\n\n if (this._options.pagination) {\n const navigation = SelectorEngine.findOne(SELECTOR_PAGINATION_NAV, this._element);\n navigation.innerText = this.navigationText;\n }\n\n body.innerHTML = tableTemplate(this.tableOptions).rows;\n\n this._formatCells();\n\n if (this._options.edit) {\n this._setupEditable();\n }\n\n if (this._options.selectable) {\n this._setupSelectable();\n\n this._setSelected();\n }\n\n if (this._options.clickableRows) {\n this._setupClickableRows();\n }\n\n EventHandler.trigger(this._element, EVENT_RENDER);\n }\n\n _formatCells() {\n const rows = SelectorEngine.find(SELECTOR_ROW, this._element);\n\n rows.forEach((row) => {\n const index = Manipulator.getDataAttribute(row, 'index');\n\n const cells = SelectorEngine.find(SELECTOR_CELL, row);\n\n cells.forEach((cell) => {\n const field = Manipulator.getDataAttribute(cell, 'field');\n\n const column = this.columns.find((column) => column.field === field);\n\n if (column && column.format !== null) {\n column.format(cell, this.rows[index][field]);\n }\n });\n });\n }\n\n _toggleDisableState() {\n if (this._options.pagination === false) {\n return;\n }\n if (this._activePage === 0 || this._options.loading) {\n this._paginationLeft.setAttribute('disabled', true);\n\n if (this._options.fullPagination) {\n this._paginationStart.setAttribute('disabled', true);\n }\n } else {\n this._paginationLeft.removeAttribute('disabled');\n\n if (this._options.fullPagination) {\n this._paginationStart.removeAttribute('disabled');\n }\n }\n\n if (this._activePage === this.pages - 1 || this._options.loading || this.pages === 0) {\n this._paginationRight.setAttribute('disabled', true);\n\n if (this._options.fullPagination) {\n this._paginationEnd.setAttribute('disabled', true);\n }\n } else {\n this._paginationRight.removeAttribute('disabled');\n\n if (this._options.fullPagination) {\n this._paginationEnd.removeAttribute('disabled');\n }\n }\n }\n\n _toggleSelectAll(e) {\n if (e.target.checked) {\n this._selected = this.rows.map((row) => row.rowIndex);\n } else this._selected = [];\n\n this._setSelected();\n\n this._emitSelectEvent();\n }\n\n _toggleSelectRow(e, rowIndex) {\n if (e.target.checked) {\n if (this._options.multi && !this._selected.includes(rowIndex)) {\n this._selected = [...this._selected, rowIndex];\n } else {\n this._selected = [rowIndex];\n\n this._checkboxes.forEach((checkbox) => {\n if (checkbox !== e.target) {\n checkbox.checked = false;\n }\n });\n }\n } else {\n this._selected = this._selected.filter((index) => index !== rowIndex);\n }\n if (this._options.multi && !e.target.checked) {\n this._headerCheckbox.checked = false;\n }\n\n this._setActiveRows();\n\n this._emitSelectEvent();\n }\n\n _updateRow(event, index) {\n const field = Manipulator.getDataAttribute(event.target, 'field');\n\n const value = event.target.textContent;\n\n const row = this._rows[index];\n\n if (Array.isArray(row)) {\n const column = this.columns.find((column) => {\n return column.field === field;\n });\n\n const columnIndex = column.columnIndex;\n\n row[columnIndex] = value;\n } else {\n row[field] = value;\n }\n\n EventHandler.trigger(this._element, EVENT_UPDATE, {\n rows: this._rows,\n columns: this._columns,\n });\n }\n\n static jQueryInterface(config, param1, param2) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data && /dispose/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Datatable(this, _config, param1);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](param1, param2);\n }\n });\n }\n}\n\nexport default Datatable;\n","import Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport Manipulator from '../mdb/dom/manipulator';\nimport { typeCheckConfig, isRTL } from '../mdb/util/index';\nimport {\n LEFT_ARROW,\n RIGHT_ARROW,\n UP_ARROW,\n DOWN_ARROW,\n HOME,\n END,\n ENTER,\n SPACE,\n TAB,\n} from '../mdb/util/keycodes';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'stepper';\nconst DATA_KEY = 'mdb.stepper';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst STEPPER_HORIZONTAL = 'horizontal';\nconst STEPPER_VERTICAL = 'vertical';\nconst STEPPER_MOBILE = 'mobile';\n\nconst DefaultType = {\n stepperType: 'string',\n stepperLinear: 'boolean',\n stepperNoEditable: 'boolean',\n stepperActive: 'string',\n stepperCompleted: 'string',\n stepperInvalid: 'string',\n stepperDisabled: 'string',\n stepperVerticalBreakpoint: 'number',\n stepperMobileBreakpoint: 'number',\n stepperMobileBarBreakpoint: 'number',\n animations: 'boolean',\n stepperHeadClick: 'boolean',\n stepperMobileNextBtn: 'string',\n stepperMobileBackBtn: 'string',\n stepperMobileStepTxt: 'string',\n stepperMobileOfTxt: 'string',\n};\n\nconst Default = {\n stepperType: STEPPER_HORIZONTAL,\n stepperLinear: false,\n stepperNoEditable: false,\n stepperActive: '',\n stepperCompleted: '',\n stepperInvalid: '',\n stepperDisabled: '',\n stepperVerticalBreakpoint: 0,\n stepperMobileBreakpoint: 0,\n stepperMobileBarBreakpoint: 4,\n animations: true,\n stepperHeadClick: true,\n stepperMobileNextBtn: 'NEXT',\n stepperMobileBackBtn: 'BACK',\n stepperMobileStepTxt: 'step',\n stepperMobileOfTxt: 'of',\n};\n\nconst EVENT_MOUSEDOWN = `mousedown${EVENT_KEY}`;\nconst EVENT_SUBMIT = `submit${EVENT_KEY}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`;\nconst EVENT_KEYUP = `keyup${EVENT_KEY}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY}`;\nconst EVENT_CLICK = `click${EVENT_KEY}`;\nconst EVENT_ANIMATIONEND = 'animationend';\nconst EVENT_CHANGE_STEP = `stepChange${EVENT_KEY}`;\nconst EVENT_CHANGED_STEP = `stepChanged${EVENT_KEY}`;\nconst EVENT_INVALID = `stepInvalid${EVENT_KEY}`;\nconst EVENT_VALID = `stepValid${EVENT_KEY}`;\n\nconst STEP_CLASS = `${NAME}-step`;\nconst HEAD_CLASS = `${NAME}-head`;\nconst HEAD_TEXT_CLASS = `${NAME}-head-text`;\nconst CONTENT_CLASS = `${NAME}-content`;\nconst ACTIVE_CLASS = `${NAME}-active`;\nconst COMPLETED_CLASS = `${NAME}-completed`;\nconst INVALID_CLASS = `${NAME}-invalid`;\nconst DISABLED_CLASS = `${NAME}-disabled`;\nconst VERTICAL_CLASS = `${NAME}-${STEPPER_VERTICAL}`;\nconst CONTENT_HIDE_CLASS = `${NAME}-content-hide`;\nconst HORIZONTAL_CLASS = `${NAME}-${STEPPER_HORIZONTAL}`;\nconst MOBILE_CLASS = `${NAME}-${STEPPER_MOBILE}`;\nconst MOBILE_HEAD_CLASS = `${NAME}-${STEPPER_MOBILE}-head`;\nconst MOBILE_FOOTER_CLASS = `${NAME}-${STEPPER_MOBILE}-footer`;\nconst MOBILE_PROGRESS_BAR_CLASS = `${NAME}-${STEPPER_MOBILE}-progress-bar`;\nconst MOBILE_PROGRESS_CLASS = `${NAME}-${STEPPER_MOBILE}-progress`;\nconst NEXT_BTN_CLASS = `${NAME}-next-btn`;\nconst BACK_BTN_CLASS = `${NAME}-back-btn`;\n\nconst MOBILE_ACTIVE_STEP_ID = `${NAME}-active-step`;\nconst MOBILE_NUMBER_OF_STEPS_ID = `${NAME}-all-steps`;\n\nconst MOBILE_BUTTON_NEXT = (options) => {\n return `\n <div class=\"${NEXT_BTN_CLASS}\">\n <button type=\"button\" class=\"btn btn-link\">\n ${options.stepperMobileNextBtn}\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n </div>\n`;\n};\nconst MOBILE_BUTTON_BACK = (options) => {\n return `\n <div class=\"${BACK_BTN_CLASS}\">\n <button type=\"button\" class=\"btn btn-link\">\n <i class=\"fas fa-chevron-left\"></i>\n ${options.stepperMobileBackBtn}\n </button>\n </div>\n`;\n};\nconst MOBILE_STEPPER_HEAD = (options) => {\n return `\n <div class =\"${MOBILE_HEAD_CLASS}\">\n ${options.stepperMobileStepTxt} <span id=\"${MOBILE_ACTIVE_STEP_ID}\"></span> ${options.stepperMobileOfTxt} <span id=\"${MOBILE_NUMBER_OF_STEPS_ID}\"></span>\n </div>\n`;\n};\nconst MOBILE_PROGRESS_BAR = `\n <div class=\"${MOBILE_PROGRESS_CLASS} gray-500\">\n <div class=\"${MOBILE_PROGRESS_BAR_CLASS}\"></div>\n </div>\n`;\nconst MOBILE_FOOTER = `\n <div class=\"${MOBILE_FOOTER_CLASS}\"></div>\n`;\n\nclass Stepper extends BaseComponent {\n constructor(element, options) {\n super(element);\n\n this._options = this._getConfig(options);\n this._elementHeight = 0;\n this._steps = SelectorEngine.find(`.${STEP_CLASS}`, this._element);\n this._currentView = '';\n this._activeStepIndex = 0;\n this._verticalStepperStyles = [];\n this._animations =\n !window.matchMedia('(prefers-reduced-motion: reduce)').matches && this._options.animations;\n\n if (this._element) {\n this._init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n get activeStep() {\n return this._steps[this._activeStepIndex];\n }\n\n get activeStepIndex() {\n return this._activeStepIndex;\n }\n\n // Public\n\n dispose() {\n this._steps.forEach((el) => {\n EventHandler.off(el, EVENT_MOUSEDOWN);\n EventHandler.off(el, EVENT_KEYDOWN);\n });\n\n EventHandler.off(window, EVENT_RESIZE);\n\n this._unbindMouseDown();\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n changeStep(index) {\n this._toggleStep(index);\n }\n\n nextStep() {\n this._toggleStep(this._activeStepIndex + 1);\n }\n\n prevStep() {\n this._toggleStep(this._activeStepIndex - 1);\n }\n\n resizeStepper() {\n if (this._currentView === STEPPER_VERTICAL) {\n this._setSingleStepHeight(this.activeStep);\n }\n\n if (this._currentView === STEPPER_HORIZONTAL) {\n this._setHeight(this.activeStep);\n }\n\n if (this._options.stepperVerticalBreakpoint || this._options.stepperMobileBreakpoint) {\n this._toggleStepperView();\n }\n }\n\n // Private\n _init() {\n const activeStep = SelectorEngine.findOne(`.${ACTIVE_CLASS}`, this._element);\n\n if (activeStep) {\n this._activeStepIndex = this._steps.indexOf(activeStep);\n this._toggleStepClass(this._activeStepIndex, 'add', this._options.stepperActive);\n } else {\n this._toggleStepClass(this._activeStepIndex, 'add', ACTIVE_CLASS);\n this._toggleStepClass(this._activeStepIndex, 'add', this._options.stepperActive);\n }\n\n this._setOptional();\n if (this._options.stepperHeadClick) {\n this._bindMouseDown();\n }\n this._bindKeysNavigation();\n\n switch (this._options.stepperType) {\n case STEPPER_VERTICAL:\n this._toggleVertical();\n break;\n case STEPPER_MOBILE:\n this._toggleMobile();\n break;\n default:\n this._toggleHorizontal();\n break;\n }\n\n if (this._options.stepperVerticalBreakpoint || this._options.stepperMobileBreakpoint) {\n this._toggleStepperView();\n }\n\n if (this._options.stepperLinear) {\n this._setValidation();\n }\n\n this._bindResize();\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n config = {\n ...Default,\n ...dataAttributes,\n ...config,\n };\n\n typeCheckConfig(NAME, config, DefaultType);\n\n return config;\n }\n\n _bindMouseDown() {\n this._steps.forEach((el) => {\n const stepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, el);\n\n EventHandler.on(stepHead, EVENT_MOUSEDOWN, (e) => {\n const step = SelectorEngine.parents(e.target, `.${STEP_CLASS}`)[0];\n const stepIndex = this._steps.indexOf(step);\n\n e.preventDefault();\n this._toggleStep(stepIndex);\n });\n });\n }\n\n _unbindMouseDown() {\n this._steps.forEach((el) => {\n const stepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, el);\n\n EventHandler.off(stepHead, EVENT_MOUSEDOWN);\n });\n }\n\n _bindResize() {\n EventHandler.on(window, EVENT_RESIZE, () => {\n this.resizeStepper();\n });\n }\n\n _toggleStepperView() {\n const shouldBeHorizontal = this._options.stepperVerticalBreakpoint < window.innerWidth;\n const shouldBeVertical = this._options.stepperVerticalBreakpoint > window.innerWidth;\n const shouldBeMobile = this._options.stepperMobileBreakpoint > window.innerWidth;\n\n if (shouldBeHorizontal && this._currentView !== STEPPER_HORIZONTAL) {\n this._toggleHorizontal();\n }\n\n if (shouldBeVertical && !shouldBeMobile && this._currentView !== STEPPER_VERTICAL) {\n this._steps.forEach((el) => {\n const stepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, el);\n\n this._resetStepperHeight();\n this._showElement(stepContent);\n });\n\n this._toggleVertical();\n }\n\n if (shouldBeMobile && this._currentView !== STEPPER_MOBILE) {\n this._toggleMobile();\n }\n }\n\n _toggleStep(index) {\n const numberOfSteps = this._steps.length;\n\n const isValid = this._validateStep(index);\n\n const activeStepIndex = this._activeStepIndex;\n\n if (!isValid) {\n return;\n }\n\n if (this._options.stepperLinear) {\n EventHandler.trigger(this.activeStep, EVENT_VALID, {\n currentStep: this._activeStepIndex,\n nextStep: index,\n });\n }\n\n if (this._options.stepperNoEditable) {\n this._toggleDisabled();\n }\n\n this._showElement(SelectorEngine.findOne(`.${CONTENT_CLASS}`, this._steps[index]));\n this._toggleActive(index);\n\n if (!this._options.stepperLinear || index > this._activeStepIndex) {\n this._toggleCompleted(this._activeStepIndex);\n }\n\n if (this._currentView === STEPPER_HORIZONTAL || this._currentView === STEPPER_MOBILE) {\n this._animateHorizontalStep(index);\n } else {\n this._animateVerticalStep(index);\n this._setSingleStepHeight(this._steps[index]);\n }\n\n this._toggleStepTabIndex(\n SelectorEngine.findOne(`.${HEAD_CLASS}`, this.activeStep),\n SelectorEngine.findOne(`.${HEAD_CLASS}`, this._steps[index])\n );\n\n this._activeStepIndex = index;\n\n if (this._currentView === STEPPER_MOBILE) {\n const activeStepElement = SelectorEngine.findOne(`#${MOBILE_ACTIVE_STEP_ID}`, this._element);\n\n activeStepElement.textContent = this._activeStepIndex + 1;\n\n if (numberOfSteps > this._options.stepperMobileBarBreakpoint) {\n this._updateProgressBar();\n }\n }\n\n const inputs = this.activeStep.querySelectorAll('.form-outline');\n const inputNotches = SelectorEngine.find('.form-notch', inputs[0]);\n if (inputs.length && inputNotches.length < 1) {\n inputs.forEach((formOutline) => {\n new mdb.Input(formOutline).init();\n });\n }\n\n EventHandler.trigger(this.activeStep, EVENT_CHANGED_STEP, {\n currentStep: this._activeStepIndex,\n prevStep: activeStepIndex,\n });\n }\n\n _resetStepperHeight() {\n this._element.style.height = '';\n }\n\n _setStepsHeight() {\n this._steps.forEach((el) => {\n const stepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, el);\n const stepComputed = window.getComputedStyle(stepContent);\n this._verticalStepperStyles.push({\n paddingTop: parseFloat(stepComputed.paddingTop),\n paddingBottom: parseFloat(stepComputed.paddingBottom),\n });\n const stepHeight = stepContent.scrollHeight;\n stepContent.style.height = `${stepHeight}px`;\n });\n }\n\n _setSingleStepHeight(step) {\n const stepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, step);\n const isActiveStep = this.activeStep === step;\n const stepIndex = this._steps.indexOf(step);\n let stepContentHeight;\n\n if (!isActiveStep) {\n stepContentHeight =\n stepContent.scrollHeight +\n this._verticalStepperStyles[stepIndex].paddingTop +\n this._verticalStepperStyles[stepIndex].paddingBottom;\n } else {\n stepContent.style.height = '';\n stepContentHeight = stepContent.scrollHeight;\n }\n\n stepContent.style.height = `${stepContentHeight}px`;\n }\n\n _createMobileElements() {\n this._element.insertAdjacentHTML('beforeend', MOBILE_FOOTER);\n\n const footer = SelectorEngine.findOne(`.${MOBILE_FOOTER_CLASS}`, this._element);\n\n if (this._steps.length > this._options.stepperMobileBarBreakpoint) {\n this._element.classList.add('stepper-progress-bar');\n\n footer.insertAdjacentHTML('afterbegin', MOBILE_PROGRESS_BAR);\n\n this._updateProgressBar();\n }\n\n footer.insertAdjacentHTML('afterbegin', MOBILE_BUTTON_BACK(this._options));\n footer.insertAdjacentHTML('beforeend', MOBILE_BUTTON_NEXT(this._options));\n\n this._element.insertAdjacentHTML('afterbegin', MOBILE_STEPPER_HEAD(this._options));\n\n const allStepsElement = SelectorEngine.findOne(`#${MOBILE_NUMBER_OF_STEPS_ID}`, this._element);\n allStepsElement.textContent = this._steps.length;\n\n const ActiveStepsElement = SelectorEngine.findOne(`#${MOBILE_ACTIVE_STEP_ID}`, this._element);\n ActiveStepsElement.textContent = this._activeStepIndex + 1;\n }\n\n _toggleMobile() {\n this._currentView = STEPPER_MOBILE;\n\n this._toggleStepperClass(MOBILE_CLASS);\n this._createMobileElements();\n this._bindMobileButtons();\n this._setHeight(this.activeStep);\n this._hideInactiveSteps();\n }\n\n _toggleVertical() {\n if (this._currentView === STEPPER_MOBILE) {\n this._deleteMobileElements();\n this._unbindMobileButtons();\n }\n\n this._currentView = STEPPER_VERTICAL;\n\n this._toggleStepperClass(VERTICAL_CLASS);\n this._setStepsHeight();\n this._hideInactiveSteps();\n }\n\n _toggleHorizontal() {\n if (this._currentView === STEPPER_MOBILE) {\n this._deleteMobileElements();\n this._unbindMobileButtons();\n }\n\n this._currentView = STEPPER_HORIZONTAL;\n\n this._toggleStepperClass(HORIZONTAL_CLASS);\n this._setHeight(this.activeStep);\n this._hideInactiveSteps();\n }\n\n _toggleStepperClass(className) {\n this._element.classList.remove(HORIZONTAL_CLASS, MOBILE_CLASS, VERTICAL_CLASS);\n this._element.classList.add(className);\n\n if (className !== VERTICAL_CLASS) {\n this._steps.forEach((el) => {\n SelectorEngine.findOne(`.${CONTENT_CLASS}`, el).classList.remove(CONTENT_HIDE_CLASS);\n });\n }\n }\n\n _toggleStepClass(index, action, className) {\n // condition to prevent errors if the user has not set any custom classes like active, disabled etc.\n if (className) {\n this._steps[index].classList[action](className);\n }\n }\n\n _deleteMobileElements() {\n const footer = SelectorEngine.findOne(`.${MOBILE_FOOTER_CLASS}`, this._element);\n const head = SelectorEngine.findOne(`.${MOBILE_HEAD_CLASS}`, this._element);\n\n footer.remove();\n head.remove();\n }\n\n _bindKeysNavigation() {\n this._toggleStepTabIndex(false, SelectorEngine.findOne(`.${HEAD_CLASS}`, this.activeStep));\n\n this._steps.forEach((el) => {\n const stepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, el);\n\n EventHandler.on(stepHead, EVENT_KEYDOWN, (e) => {\n const focusedStep = SelectorEngine.parents(e.currentTarget, `.${STEP_CLASS}`)[0];\n const nextStep = SelectorEngine.next(focusedStep, `.${STEP_CLASS}`)[0];\n const prevStep = SelectorEngine.prev(focusedStep, `.${STEP_CLASS}`)[0];\n const focusedStepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, focusedStep);\n const activeStepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, this.activeStep);\n let nextStepHead = null;\n let prevStepHead = null;\n\n if (nextStep) {\n nextStepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, nextStep);\n }\n\n if (prevStep) {\n prevStepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, prevStep);\n }\n\n if (e.keyCode === LEFT_ARROW && this._currentView !== STEPPER_VERTICAL) {\n if (!isRTL && prevStepHead) {\n this._toggleStepTabIndex(focusedStepHead, prevStepHead);\n this._toggleOutlineStyles(focusedStepHead, prevStepHead);\n\n prevStepHead.focus();\n } else if (isRTL && nextStepHead) {\n this._toggleStepTabIndex(focusedStepHead, nextStepHead);\n this._toggleOutlineStyles(focusedStepHead, nextStepHead);\n\n nextStepHead.focus();\n }\n }\n\n if (e.keyCode === RIGHT_ARROW && this._currentView !== STEPPER_VERTICAL) {\n if (!isRTL && nextStepHead) {\n this._toggleStepTabIndex(focusedStepHead, nextStepHead);\n this._toggleOutlineStyles(focusedStepHead, nextStepHead);\n\n nextStepHead.focus();\n } else if (isRTL && prevStepHead) {\n this._toggleStepTabIndex(focusedStepHead, prevStepHead);\n this._toggleOutlineStyles(focusedStepHead, prevStepHead);\n\n prevStepHead.focus();\n }\n }\n\n if (e.keyCode === DOWN_ARROW && this._currentView === STEPPER_VERTICAL) {\n e.preventDefault();\n\n if (nextStepHead) {\n this._toggleStepTabIndex(focusedStepHead, nextStepHead);\n this._toggleOutlineStyles(focusedStepHead, nextStepHead);\n\n nextStepHead.focus();\n }\n }\n\n if (e.keyCode === UP_ARROW && this._currentView === STEPPER_VERTICAL) {\n e.preventDefault();\n\n if (prevStepHead) {\n this._toggleStepTabIndex(focusedStepHead, prevStepHead);\n this._toggleOutlineStyles(focusedStepHead, prevStepHead);\n\n prevStepHead.focus();\n }\n }\n\n if (e.keyCode === HOME) {\n const firstStepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, this._steps[0]);\n\n this._toggleStepTabIndex(focusedStepHead, firstStepHead);\n this._toggleOutlineStyles(focusedStepHead, firstStepHead);\n\n firstStepHead.focus();\n }\n\n if (e.keyCode === END) {\n const lastStep = this._steps[this._steps.length - 1];\n const lastStepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, lastStep);\n this._toggleStepTabIndex(focusedStepHead, lastStepHead);\n this._toggleOutlineStyles(focusedStepHead, lastStepHead);\n\n lastStepHead.focus();\n }\n\n if (e.keyCode === ENTER || e.keyCode === SPACE) {\n e.preventDefault();\n\n this.changeStep(this._steps.indexOf(focusedStep));\n }\n\n if (e.keyCode === TAB) {\n this._toggleStepTabIndex(focusedStepHead, activeStepHead);\n this._toggleOutlineStyles(focusedStepHead, false);\n\n activeStepHead.focus();\n }\n });\n\n EventHandler.on(stepHead, EVENT_KEYUP, (e) => {\n const focusedStep = SelectorEngine.parents(e.currentTarget, `.${STEP_CLASS}`)[0];\n const focusedStepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, focusedStep);\n const activeStepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, this.activeStep);\n\n if (e.keyCode === TAB) {\n this._toggleStepTabIndex(focusedStepHead, activeStepHead);\n this._toggleOutlineStyles(false, activeStepHead);\n\n activeStepHead.focus();\n }\n });\n });\n }\n\n _bindMobileButtons() {\n const btnBack = SelectorEngine.findOne(`.${BACK_BTN_CLASS}`, this._element);\n const btnNext = SelectorEngine.findOne(`.${NEXT_BTN_CLASS}`, this._element);\n\n EventHandler.on(btnBack, EVENT_CLICK, () => this.prevStep());\n EventHandler.on(btnNext, EVENT_CLICK, () => this.nextStep());\n }\n\n _unbindMobileButtons() {\n const btnBack = SelectorEngine.findOne(`.${BACK_BTN_CLASS}`, this._element);\n const btnNext = SelectorEngine.findOne(`.${NEXT_BTN_CLASS}`, this._element);\n\n EventHandler.off(btnBack, EVENT_CLICK, () => this.prevStep());\n EventHandler.off(btnNext, EVENT_CLICK, () => this.nextStep());\n }\n\n _toggleStepTabIndex(focusedElement, newTarget) {\n if (focusedElement) {\n focusedElement.setAttribute('tabIndex', -1);\n }\n\n if (newTarget) {\n newTarget.setAttribute('tabIndex', 0);\n }\n }\n\n _validateActiveStepRequiredElements() {\n const isValid = SelectorEngine.find('[required]', this.activeStep).every((el) => {\n return el.checkValidity() === true;\n });\n\n return isValid;\n }\n\n _validateStep(index) {\n const numberOfSteps = this._steps.length;\n let result = true;\n\n // prevent any actions if the same step is chosen\n if (index === this._activeStepIndex) {\n result = false;\n }\n\n // prevent toggleSteps if next/prev step don't exist\n if (index >= numberOfSteps || index < 0) {\n result = false;\n }\n\n const changeStepEvent = EventHandler.trigger(this.activeStep, EVENT_CHANGE_STEP, {\n currentStep: this._activeStepIndex,\n nextStep: index,\n });\n\n if (this._options.stepperLinear) {\n // prevent toggleStep if one of the steps is skipped\n const stepsToCheck = index - this.activeStepIndex - 1;\n if (index > this._activeStepIndex + 1) {\n let nextStepToValidate = SelectorEngine.next(this.activeStep, 'li')[0];\n\n for (let i = 0; i < stepsToCheck; i++) {\n if (!nextStepToValidate.classList.contains('stepper-completed')) {\n nextStepToValidate.classList.add('stepper-invalid');\n result = false;\n }\n nextStepToValidate = SelectorEngine.next(nextStepToValidate, 'li')[0];\n }\n }\n\n if (index < this._activeStepIndex) {\n if (!this._validateActiveStepRequiredElements()) {\n this.activeStep.classList.remove('stepper-completed');\n }\n }\n\n if (index > this._activeStepIndex || index === numberOfSteps - 1) {\n this.activeStep.classList.add('was-validated');\n\n if (!this._validateActiveStepRequiredElements()) {\n this._toggleInvalid(this._activeStepIndex);\n EventHandler.trigger(this.activeStep, EVENT_INVALID, {\n currentStep: this._activeStepIndex,\n nextStep: index,\n });\n // wait for other elements transition end\n // the input transition takes 200ms. + 10ms is added, because without it it would not expand to the correct height\n\n if (this._currentView !== STEPPER_VERTICAL) {\n setTimeout(() => {\n this._setHeight(this.activeStep);\n }, 210);\n } else {\n setTimeout(() => {\n this._setSingleStepHeight(this.activeStep);\n }, 210);\n }\n\n result = false;\n }\n }\n }\n\n if (index > this._activeStepIndex && changeStepEvent.defaultPrevented) {\n result = false;\n }\n\n if (this._options.stepperNoEditable) {\n if (this._steps[index].classList.contains(DISABLED_CLASS)) {\n result = false;\n }\n }\n\n return result;\n }\n\n _updateProgressBar() {\n const numberOfSteps = this._steps.length;\n const progressBar = SelectorEngine.findOne(`.${MOBILE_PROGRESS_BAR_CLASS}`, this._element);\n\n progressBar.style.width = `${((this._activeStepIndex + 1) / numberOfSteps) * 100}%`;\n }\n\n _toggleOutlineStyles(focusedElement, newTarget) {\n if (focusedElement) {\n focusedElement.style.outline = '';\n }\n\n if (newTarget) {\n newTarget.style.outline = 'revert';\n }\n }\n\n _toggleDisabled() {\n this._toggleStepClass(this._activeStepIndex, 'add', DISABLED_CLASS);\n this._toggleStepClass(this._activeStepIndex, 'add', this._options.stepperDisabled);\n }\n\n _toggleActive(index) {\n this._toggleStepClass(index, 'add', ACTIVE_CLASS);\n this._toggleStepClass(this._activeStepIndex, 'remove', ACTIVE_CLASS);\n this._toggleStepClass(index, 'add', this._options.stepperActive);\n this._toggleStepClass(this._activeStepIndex, 'remove', this._options.stepperActive);\n }\n\n _toggleCompleted(index) {\n this._toggleStepClass(index, 'add', COMPLETED_CLASS);\n this._toggleStepClass(index, 'remove', INVALID_CLASS);\n this._toggleStepClass(index, 'add', this._options.stepperCompleted);\n this._toggleStepClass(index, 'remove', this._options.stepperInvalid);\n }\n\n _toggleInvalid(index) {\n this._toggleStepClass(index, 'add', INVALID_CLASS);\n this._toggleStepClass(index, 'remove', COMPLETED_CLASS);\n this._toggleStepClass(index, 'add', this._options.stepperInvalid);\n this._toggleStepClass(index, 'remove', this._options.stepperCompleted);\n }\n\n _setOptional() {\n this._steps.forEach((el) => {\n const isOptional = Manipulator.getDataAttribute(el, 'stepper-optional');\n\n if (isOptional) {\n const stepHeadText = SelectorEngine.findOne(`.${HEAD_TEXT_CLASS}`, el);\n stepHeadText.setAttribute('data-mdb-content', 'Optional');\n }\n });\n }\n\n _hideInactiveSteps() {\n this._steps.forEach((el) => {\n if (!el.classList.contains(ACTIVE_CLASS)) {\n this._hideElement(SelectorEngine.findOne(`.${CONTENT_CLASS}`, el));\n }\n });\n }\n\n _setValidation() {\n const form = SelectorEngine.findOne('.needs-validation.stepper-form', this._element);\n\n EventHandler.on(\n form,\n EVENT_SUBMIT,\n (event) => {\n if (!form.checkValidity()) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n this._steps.forEach((el, i) => {\n const isValid = this._validateStep(i);\n\n if (!isValid) {\n this._toggleInvalid(i);\n EventHandler.trigger(this.activeStep, EVENT_INVALID);\n }\n });\n },\n false\n );\n }\n\n _setHeight(stepElement) {\n const stepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, stepElement);\n const stepFooter = SelectorEngine.findOne(`.${MOBILE_FOOTER_CLASS}`, this._element);\n const contentStyle = getComputedStyle(stepContent);\n const footerStyle = stepFooter ? getComputedStyle(stepFooter) : '';\n let stepHead;\n\n if (this._currentView === STEPPER_MOBILE) {\n stepHead = SelectorEngine.findOne(`.${MOBILE_HEAD_CLASS}`, this._element);\n } else {\n stepHead = SelectorEngine.findOne(`.${HEAD_CLASS}`, stepElement);\n }\n\n const headStyle = getComputedStyle(stepHead);\n const stepContentHeight =\n stepContent.offsetHeight +\n parseFloat(contentStyle.marginTop) +\n parseFloat(contentStyle.marginBottom);\n\n const stepHeadHeight =\n stepHead.offsetHeight + parseFloat(headStyle.marginTop) + parseFloat(headStyle.marginBottom);\n\n const stepFooterHeight = footerStyle\n ? stepFooter.offsetHeight +\n parseFloat(footerStyle.marginTop) +\n parseFloat(footerStyle.marginBottom)\n : 0;\n\n this._element.style.height = `${stepHeadHeight + stepContentHeight + stepFooterHeight}px`;\n }\n\n _hideElement(stepContent) {\n const isActive = SelectorEngine.parents(stepContent, `.${STEP_CLASS}`)[0].classList.contains(\n ACTIVE_CLASS\n );\n\n // prevent hiding during a quick step change\n if (!isActive && this._currentView !== STEPPER_VERTICAL) {\n stepContent.style.display = 'none';\n } else {\n stepContent.classList.add(CONTENT_HIDE_CLASS);\n }\n }\n\n _showElement(stepContent) {\n if (this._currentView === STEPPER_VERTICAL) {\n stepContent.classList.remove(CONTENT_HIDE_CLASS);\n } else {\n stepContent.style.display = 'block';\n }\n }\n\n _animateHorizontalStep(index) {\n if (!this._animations) {\n this._steps.forEach((el, i) => {\n const stepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, el);\n\n if (i !== index) {\n this._hideElement(stepContent);\n }\n });\n\n this._setHeight(this._steps[index]);\n\n return;\n }\n\n const isForward = index > this._activeStepIndex;\n const nextStepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, this._steps[index]);\n const activeStepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, this.activeStep);\n\n let nextStepAnimation;\n let activeStepAnimation;\n\n this._steps.forEach((el, i) => {\n const stepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, el);\n\n this._clearStepAnimation(stepContent);\n\n if (i !== index && i !== this._activeStepIndex) {\n this._hideElement(stepContent);\n }\n });\n\n if (isForward) {\n activeStepAnimation = 'slide-out-left';\n nextStepAnimation = 'slide-in-right';\n } else {\n activeStepAnimation = 'slide-out-right';\n nextStepAnimation = 'slide-in-left';\n }\n\n if (this._animations) {\n activeStepContent.classList.add(activeStepAnimation, 'animation', 'fast');\n nextStepContent.classList.add(nextStepAnimation, 'animation', 'fast');\n }\n\n this._setHeight(this._steps[index]);\n\n EventHandler.one(activeStepContent, EVENT_ANIMATIONEND, (e) => {\n this._clearStepAnimation(e.target);\n this._hideElement(e.target);\n });\n\n EventHandler.one(nextStepContent, EVENT_ANIMATIONEND, (e) => {\n this._clearStepAnimation(e.target);\n });\n }\n\n _animateVerticalStep(index) {\n const nextStepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, this._steps[index]);\n const activeStepContent = SelectorEngine.findOne(`.${CONTENT_CLASS}`, this.activeStep);\n\n this._hideElement(activeStepContent);\n this._showElement(nextStepContent);\n }\n\n _clearStepAnimation(element) {\n element.classList.remove(\n 'slide-out-left',\n 'slide-in-right',\n 'slide-out-right',\n 'slide-in-left',\n 'animation',\n 'fast'\n );\n }\n\n // Static\n static jQueryInterface(config, options) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Stepper(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](options);\n }\n });\n }\n}\n\nexport default Stepper;\n","import { typeCheckConfig } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'sticky';\nconst DATA_KEY = 'mdb.sticky';\n\nconst ANIMATED_CLASS = 'animation';\n\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_ACTIVATED = `activated${EVENT_KEY}`;\nconst EVENT_DEACTIVATED = `deactivated${EVENT_KEY}`;\n\nconst Default = {\n stickyActiveClass: '',\n stickyAnimationSticky: '',\n stickyAnimationUnsticky: '',\n stickyBoundary: false,\n stickyDelay: 0,\n stickyDirection: 'down',\n stickyMedia: 0,\n stickyOffset: 0,\n stickyPosition: 'top',\n};\n\nconst DefaultType = {\n stickyActiveClass: 'string',\n stickyAnimationSticky: 'string',\n stickyAnimationUnsticky: 'string',\n stickyBoundary: '(boolean|string)',\n stickyDelay: 'number',\n stickyDirection: 'string',\n stickyMedia: 'number',\n stickyOffset: 'number',\n stickyPosition: 'string',\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Sticky extends BaseComponent {\n constructor(element, options) {\n super(element);\n\n this._hiddenElement = null;\n this._elementPositionStyles = {};\n this._scrollDirection = '';\n this._isSticked = false;\n this._elementOffsetTop = null;\n this._scrollTop = 0;\n this._pushPoint = '';\n this._manuallyDeactivated = false;\n\n if (this._element) {\n this._options = this._getConfig(options);\n this._init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n\n dispose() {\n const { stickyAnimationUnsticky } = this._options;\n let { animationDuration } = getComputedStyle(this._element);\n\n animationDuration = stickyAnimationUnsticky !== '' ? parseFloat(animationDuration) * 1000 : 0;\n\n this._disableSticky();\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n setTimeout(() => {\n super.dispose();\n }, animationDuration);\n }\n\n activate() {\n // prevent action if sticky is already active\n if (this._isSticked) {\n return;\n }\n\n this._createHiddenElement();\n this._enableSticky();\n this._changeBoundaryPosition();\n this._isSticked = true;\n this._manuallyDeactivated = false;\n }\n\n deactivate() {\n // prevent action if sticky is already inactive\n if (!this._isSticked) {\n return;\n }\n\n this._disableSticky();\n this._isSticked = false;\n this._manuallyDeactivated = true;\n }\n\n // Private\n _init() {\n this._userActivityListener();\n }\n\n _userActivityListener() {\n EventHandler.on(window, 'resize', () => {\n this._updateElementPosition();\n this._updateElementOffset();\n });\n\n EventHandler.on(window, 'scroll', () => {\n if (!this._element) {\n return;\n }\n\n // prevent action if browser resolution <= user acceptable resolution\n if (window.innerWidth <= this._options.stickyMedia) {\n return;\n }\n\n // prevent action if user deactivated sticky manually using public methods.\n if (this._manuallyDeactivated) {\n return;\n }\n\n const doc = document.documentElement;\n const { stickyDirection } = this._options;\n const scrollTop = window.pageYOffset || doc.scrollTop;\n\n this._updateElementOffset();\n this._updatePushPoint();\n this._updateScrollDirection(scrollTop);\n this._clearInProgressAnimations();\n\n const isCorrectScrollDirection = [this._scrollDirection, 'both'].includes(stickyDirection);\n const isPushPointReached = this._pushPoint <= scrollTop;\n\n const shouldBeSticky = isPushPointReached && !this._isSticked && isCorrectScrollDirection;\n const shouldNotBeSticky =\n (!isPushPointReached || !isCorrectScrollDirection) && this._isSticked;\n\n if (shouldBeSticky) {\n this._createHiddenElement();\n this._enableSticky();\n this._changeBoundaryPosition();\n this._isSticked = true;\n }\n\n if (shouldNotBeSticky) {\n this._disableSticky();\n this._isSticked = false;\n }\n\n if (this._isSticked) {\n this._updatePosition({ styles: this._elementPositionStyles });\n this._changeBoundaryPosition();\n }\n\n this._scrollTop = scrollTop <= 0 ? 0 : scrollTop; // Get last scrollTop position and fix negative scroll\n });\n }\n\n _updatePushPoint() {\n if (this._options.stickyPosition === 'top') {\n this._pushPoint = this._elementOffsetTop - this._options.stickyDelay;\n } else {\n this._pushPoint =\n this._elementOffsetTop +\n this._element.height -\n document.body.scrollHeight +\n this._options.stickyDelay;\n }\n }\n\n _updateElementOffset() {\n if (this._hiddenElement) {\n this._elementOffsetTop = this._hiddenElement.offsetTop;\n } else {\n this._elementOffsetTop = this._element.offsetTop;\n }\n\n if (this._options.stickyAnimationUnsticky) {\n this._elementOffsetTop += this._element.height || 0;\n }\n }\n\n _updateElementPosition() {\n if (this._hiddenElement) {\n const { left } = this._hiddenElement.getBoundingClientRect();\n\n this._elementPositionStyles = {\n left: `${left}px`,\n };\n } else {\n this._elementPositionStyles = {};\n }\n\n this._setStyle(this._element, this._elementPositionStyles);\n }\n\n _updateScrollDirection(scrollTop) {\n if (scrollTop > this._scrollTop) {\n this._scrollDirection = 'down';\n } else {\n this._scrollDirection = 'up';\n }\n }\n\n _clearInProgressAnimations() {\n const isScrollUp = this._scrollDirection === 'up';\n const isUnstickyAnimationInProgress = this._element.classList.contains(\n this._options.stickyAnimationUnsticky\n );\n const isScrolledAboveElement = window.scrollY <= this._elementOffsetTop - this._element.height;\n\n if (isScrollUp && isUnstickyAnimationInProgress && isScrolledAboveElement) {\n this._removeUnstickyAnimation();\n this._resetStyles();\n this._removeHiddenElement();\n }\n }\n\n _enableSticky() {\n const {\n stickyActiveClass,\n stickyAnimationSticky,\n stickyAnimationUnsticky,\n stickyOffset,\n stickyPosition,\n } = this._options;\n const { height, left, width } = this._element.getBoundingClientRect();\n\n if (stickyAnimationSticky !== '') {\n Manipulator.addClass(this._element, ANIMATED_CLASS);\n this._toggleClass(stickyAnimationSticky, stickyAnimationUnsticky, this._element);\n }\n\n this._toggleClass(stickyActiveClass, '', this._element);\n\n this._setStyle(this._element, {\n top: stickyPosition === 'top' && `${0 + stickyOffset}px`,\n bottom: stickyPosition === 'bottom' && `${0 + stickyOffset}px`,\n height: `${height}px`,\n width: `${width}px`,\n left: `${left}px`,\n zIndex: '100',\n position: 'fixed',\n });\n\n this._hiddenElement.hidden = false;\n\n EventHandler.trigger(this._element, EVENT_ACTIVATED);\n }\n\n _changeBoundaryPosition() {\n const { stickyPosition, stickyBoundary, stickyOffset } = this._options;\n const { height } = this._element.getBoundingClientRect();\n const parentOffset = {\n height: this._element.parentElement.getBoundingClientRect().height,\n ...this._getOffset(this._element.parentElement),\n };\n let stopPoint;\n const stopper = SelectorEngine.findOne(stickyBoundary);\n\n if (stopper) {\n stopPoint = this._getOffset(stopper).top - height - stickyOffset;\n } else {\n stopPoint = parentOffset.height + parentOffset[stickyPosition] - height - stickyOffset;\n }\n\n const isStickyTop = stickyPosition === 'top';\n const isStickyBottom = stickyPosition === 'bottom';\n const isStickyBoundary = stickyBoundary;\n const isBelowStopPoint = stopPoint < 0;\n const isBelowParentElementEnd = stopPoint > parentOffset.height - height;\n let elementStyle;\n\n if (isStickyTop) {\n if (isBelowStopPoint && isStickyBoundary) {\n elementStyle = { top: `${stickyOffset + stopPoint}px` };\n } else {\n elementStyle = { top: `${stickyOffset + 0}px` };\n }\n }\n\n if (isStickyBottom) {\n if (isBelowStopPoint && isStickyBoundary) {\n elementStyle = { bottom: `${stickyOffset + stopPoint}px` };\n } else if (isBelowParentElementEnd && isStickyBoundary) {\n elementStyle = { bottom: `${stickyOffset + parentOffset.bottom}px` };\n } else {\n elementStyle = { bottom: `${stickyOffset + 0}px` };\n }\n }\n\n this._setStyle(this._element, elementStyle);\n }\n\n _disableSticky() {\n const { stickyActiveClass, stickyAnimationUnsticky, stickyAnimationSticky } = this._options;\n\n let { animationDuration } = getComputedStyle(this._element);\n\n animationDuration = stickyAnimationUnsticky !== '' ? parseFloat(animationDuration) * 1000 : 0;\n\n if (this._options.stickyAnimationUnsticky !== '') {\n Manipulator.addClass(this._element, ANIMATED_CLASS);\n this._toggleClass(stickyAnimationUnsticky, stickyAnimationSticky, this._element);\n }\n\n setTimeout(() => {\n if (this._element.classList.contains(stickyAnimationSticky)) {\n return;\n }\n\n this._removeUnstickyAnimation();\n this._resetStyles();\n this._removeHiddenElement();\n this._toggleClass('', stickyActiveClass, this._element);\n\n EventHandler.trigger(this._element, EVENT_DEACTIVATED);\n }, animationDuration);\n }\n\n _createHiddenElement() {\n if (!this._hiddenElement) {\n this._hiddenElement = this._copyElement(this._element);\n }\n }\n\n _removeHiddenElement() {\n // prevent to throw error when hidden Element don't exist;\n if (!this._hiddenElement) {\n return;\n }\n\n this._hiddenElement.remove();\n this._hiddenElement = null;\n }\n\n _removeUnstickyAnimation() {\n this._toggleClass('', this._options.stickyAnimationUnsticky, this._element);\n }\n\n _resetStyles() {\n this._setStyle(this._element, {\n top: null,\n bottom: null,\n position: null,\n left: null,\n zIndex: null,\n width: null,\n height: null,\n });\n }\n\n _updatePosition({ styles }) {\n this._setStyle(this._element, styles);\n }\n\n _toggleClass(addClass, removeClass, target) {\n if (addClass) {\n Manipulator.addClass(target, addClass);\n }\n\n if (removeClass) {\n Manipulator.removeClass(target, removeClass);\n }\n }\n\n _getOffset(element) {\n const offsetElement = Manipulator.offset(element);\n const rectElement = element.getBoundingClientRect();\n\n const bottom =\n offsetElement.left === 0 && offsetElement.top === 0\n ? 0\n : window.innerHeight - rectElement.bottom;\n\n return {\n ...offsetElement,\n bottom,\n };\n }\n\n _copyElement(itemToCopy) {\n const { height, width } = itemToCopy.getBoundingClientRect();\n const COPIED_ITEM = itemToCopy.cloneNode(false);\n COPIED_ITEM.hidden = true;\n\n this._setStyle(COPIED_ITEM, {\n height: `${height}px`,\n width: `${width}px`,\n opacity: '0',\n });\n\n itemToCopy.parentElement.insertBefore(COPIED_ITEM, itemToCopy);\n\n return COPIED_ITEM;\n }\n\n _getConfig(config = {}) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n config = {\n ...Default,\n ...dataAttributes,\n ...config,\n };\n\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n\n _setStyle(element, styles) {\n Object.keys(styles).forEach((style) => {\n element.style[style] = styles[style];\n });\n }\n\n static jQueryInterface(config, options) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Sticky(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](options);\n }\n });\n }\n}\n\nexport default Sticky;\n","class TouchUtil {\n _getCoordinates(e) {\n const [touch] = e.touches;\n\n return {\n x: touch.clientX,\n y: touch.clientY,\n };\n }\n\n _getDirection({ x, y }) {\n return {\n x: {\n direction: x < 0 ? 'left' : 'right',\n value: Math.abs(x),\n },\n y: {\n direction: y < 0 ? 'up' : 'down',\n value: Math.abs(y),\n },\n };\n }\n\n _getOrigin({ x, y }, { x: x2, y: y2 }) {\n return {\n x: x - x2,\n y: y - y2,\n };\n }\n\n _getDistanceBetweenTwoPoints(x1, x2, y1, y2) {\n return Math.hypot(x2 - x1, y2 - y1);\n }\n\n _getMidPoint({ x1, x2, y1, y2 }) {\n return {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2,\n };\n }\n\n _getVectorLength({ x1, x2, y1, y2 }) {\n return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n }\n\n _getRightMostTouch(touches) {\n let rightMost = null;\n const distance = Number.MIN_VALUE;\n touches.forEach((touch) => {\n if (touch.clientX > distance) {\n rightMost = touch;\n }\n });\n return rightMost;\n }\n\n _getAngle(x1, y1, x2, y2) {\n return Math.atan2(y2 - y1, x2 - x1);\n }\n\n _getAngularDistance(start, end) {\n return end - start;\n }\n\n _getCenterXY({ x1, x2, y1, y2 }) {\n return {\n x: x1 + (x2 - x1) / 2,\n y: y1 + (y2 - y1) / 2,\n };\n }\n\n _getPinchTouchOrigin(touches) {\n const [t1, t2] = touches;\n\n const _position = {\n x1: t1.clientX,\n x2: t2.clientX,\n y1: t1.clientY,\n y2: t2.clientY,\n };\n\n return [this._getVectorLength(_position), this._getCenterXY(_position)];\n }\n\n _getPosition({ x1, x2, y1, y2 }) {\n return { x1, x2, y1, y2 };\n }\n}\n\nexport default TouchUtil;\n","import TouchUtil from './touchUtil';\nimport EventHandler from '../../mdb/dom/event-handler';\n\nconst DEFAULT_OPTIONS = {\n time: 250,\n pointers: 1,\n};\n\nconst NAME = 'press';\nconst EVENT_UP = 'pressup';\n\nclass Press extends TouchUtil {\n constructor(element, options = {}) {\n super();\n this._element = element;\n this._options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n this._timer = null;\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n handleTouchStart(e) {\n const { time, pointers } = this._options;\n\n if (e.touches.length === pointers) {\n this._timer = setTimeout(() => {\n EventHandler.trigger(this._element, NAME, { touch: e, time });\n EventHandler.trigger(this._element, EVENT_UP, { touch: e });\n }, time);\n }\n }\n\n handleTouchEnd() {\n clearTimeout(this._timer);\n }\n}\n\nexport default Press;\n","import EventHandler from '../../mdb/dom/event-handler';\n\nconst DEFAULT_OPTIONS = {\n threshold: 10,\n direction: 'all',\n};\n\nclass Swipe {\n constructor(element, options) {\n this._element = element;\n this._startPosition = null;\n this._options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n }\n\n handleTouchStart(e) {\n this._startPosition = this._getCoordinates(e);\n }\n\n handleTouchMove(e) {\n if (!this._startPosition) return;\n\n const position = this._getCoordinates(e);\n const displacement = {\n x: position.x - this._startPosition.x,\n y: position.y - this._startPosition.y,\n };\n\n const swipe = this._getDirection(displacement);\n\n if (this._options.direction === 'all') {\n if (swipe.y.value < this._options.threshold && swipe.x.value < this._options.threshold) {\n return;\n }\n const direction = swipe.y.value > swipe.x.value ? swipe.y.direction : swipe.x.direction;\n EventHandler.trigger(this._element, `swipe${direction}`, { touch: e });\n EventHandler.trigger(this._element, 'swipe', { touch: e, direction });\n this._startPosition = null;\n return;\n }\n\n const axis = this._options.direction === 'left' || this._options === 'right' ? 'x' : 'y';\n\n if (\n swipe[axis].direction === this._options.direction &&\n swipe[axis].value > this._options.threshold\n ) {\n EventHandler.trigger(this._element, `swipe${swipe[axis].direction}`, { touch: e });\n this._startPosition = null;\n }\n }\n\n handleTouchEnd() {\n this._startPosition = null;\n }\n\n _getCoordinates(e) {\n const [touch] = e.touches;\n return {\n x: touch.clientX,\n y: touch.clientY,\n };\n }\n\n _getDirection(displacement) {\n return {\n x: {\n direction: displacement.x < 0 ? 'left' : 'right',\n value: Math.abs(displacement.x),\n },\n y: {\n direction: displacement.y < 0 ? 'up' : 'down',\n value: Math.abs(displacement.y),\n },\n };\n }\n}\n\nexport default Swipe;\n","import TouchUtil from './touchUtil';\nimport EventHandler from '../../mdb/dom/event-handler';\n\nconst DEFAULT_OPTIONS = {\n threshold: 20,\n direction: 'all',\n pointers: 1,\n};\n\nconst NAME = 'pan';\nconst EVENT_START = `${NAME}start`;\nconst EVENT_END = `${NAME}end`;\nconst EVENT_MOVE = `${NAME}move`;\nconst LEFT = 'left';\nconst RIGHT = 'right';\n\nclass Pan extends TouchUtil {\n constructor(element, options = {}) {\n super();\n this._element = element;\n this._options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n this._startTouch = null;\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n handleTouchStart(e) {\n this._startTouch = this._getCoordinates(e);\n this._movedTouch = e;\n\n EventHandler.trigger(this._element, EVENT_START, { touch: e });\n }\n\n handleTouchMove(e) {\n // eslint-disable-next-line no-unused-expressions\n e.type === 'touchmove' && e.preventDefault();\n\n const { threshold, direction } = this._options;\n const postion = this._getCoordinates(e);\n const movedPosition = this._getCoordinates(this._movedTouch);\n\n const displacement = this._getOrigin(postion, this._startTouch);\n const displacementMoved = this._getOrigin(postion, movedPosition);\n\n const pan = this._getDirection(displacement);\n const movedDirection = this._getDirection(displacementMoved);\n\n const { x, y } = pan;\n\n if (direction === 'all' && (y.value > threshold || x.value > threshold)) {\n const direction = y.value > x.value ? y.direction : x.direction;\n\n EventHandler.trigger(this._element, `${NAME}${direction}`, { touch: e });\n EventHandler.trigger(this._element, NAME, { ...displacementMoved, touch: e });\n }\n\n const axis = direction === LEFT || direction === RIGHT ? 'x' : 'y';\n\n if (movedDirection[axis].direction === direction && pan[axis].value > threshold) {\n EventHandler.trigger(this._element, `${NAME}${direction}`, {\n touch: e,\n [axis]: postion[axis] - movedPosition[axis],\n });\n }\n\n this._movedTouch = e;\n\n EventHandler.trigger(this._element, EVENT_MOVE, { touch: e });\n }\n\n handleTouchEnd(e) {\n // eslint-disable-next-line no-unused-expressions\n e.type === 'touchend' && e.preventDefault();\n\n this._movedTouch = null;\n this._startTouch = null;\n\n EventHandler.trigger(this._element, EVENT_END, { touch: e });\n }\n}\n\nexport default Pan;\n","import TouchUtil from './touchUtil';\nimport EventHandler from '../../mdb/dom/event-handler';\n\nconst DEFAULT_OPTIONS = {\n pointers: 2,\n threshold: 10,\n};\n\nconst NAME = 'pinch';\nconst EVENT_END = `${NAME}end`;\nconst EVENT_START = `${NAME}start`;\nconst EVENT_MOVE = `${NAME}move`;\nclass Pinch extends TouchUtil {\n constructor(element, options = {}) {\n super();\n this._element = element;\n this._options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n this._startTouch = null;\n this._origin = null;\n this._touch = null;\n this._math = null;\n this._ratio = null;\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n get isNumber() {\n return (\n typeof this._startTouch === 'number' &&\n typeof this._touch === 'number' &&\n // eslint-disable-next-line no-restricted-globals\n !isNaN(this._startTouch) &&\n // eslint-disable-next-line no-restricted-globals\n !isNaN(this._touch)\n );\n }\n\n handleTouchStart(e) {\n if (e.touches.length !== this._options.pointers) return;\n\n // eslint-disable-next-line no-unused-expressions\n e.type === 'touchstart' && e.preventDefault();\n\n const [touch, origin] = this._getPinchTouchOrigin(e.touches);\n\n this._touch = touch;\n this._origin = origin;\n this._startTouch = this._touch;\n\n EventHandler.trigger(this._element, EVENT_START, {\n touch: e,\n ratio: this._ratio,\n origin: this._origin,\n });\n }\n\n handleTouchMove(e) {\n const { threshold, pointers } = this._options;\n\n if (e.touches.length !== pointers) return;\n\n // eslint-disable-next-line no-unused-expressions\n e.type === 'touchmove' && e.preventDefault();\n\n this._touch = this._getPinchTouchOrigin(e.touches)[0];\n this._ratio = this._touch / this._startTouch;\n\n if (this.isNumber) {\n if (this._origin.x > threshold || this._origin.y > threshold) {\n this._startTouch = this._touch;\n\n EventHandler.trigger(this._element, NAME, {\n touch: e,\n ratio: this._ratio,\n origin: this._origin,\n });\n EventHandler.trigger(this._element, EVENT_MOVE, {\n touch: e,\n ratio: this._ratio,\n origin: this._origin,\n });\n }\n }\n }\n\n handleTouchEnd(e) {\n if (this.isNumber) {\n this._startTouch = null;\n\n EventHandler.trigger(this._element, EVENT_END, {\n touch: e,\n ratio: this._ratio,\n origin: this._origin,\n });\n }\n }\n}\n\nexport default Pinch;\n","import TouchUtil from './touchUtil';\nimport EventHandler from '../../mdb/dom/event-handler';\n\nconst DEFAULT_OPTIONS = {\n interval: 500,\n time: 250,\n taps: 1,\n pointers: 1,\n};\nconst NAME = 'tap';\n\nclass Tap extends TouchUtil {\n constructor(element, options) {\n super();\n this._element = element;\n this._options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n this._timer = null;\n this._tapCount = 0;\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n handleTouchStart(e) {\n const { x, y } = this._getCoordinates(e);\n const { interval, taps, pointers } = this._options;\n\n if (e.touches.length === pointers) {\n this._tapCount += 1;\n\n if (this._tapCount === 1) {\n this._timer = setTimeout(() => {\n this._tapCount = 0;\n }, interval);\n }\n\n if (this._tapCount === taps) {\n clearTimeout(this._timer);\n this._tapCount = 0;\n EventHandler.trigger(this._element, NAME, {\n touch: e,\n origin: {\n x,\n y,\n },\n });\n }\n }\n\n return e;\n }\n\n handleTouchEnd() {\n return;\n }\n\n handleTouchMove() {\n return;\n }\n}\n\nexport default Tap;\n","/* eslint-disable no-multi-assign */\nimport TouchUtil from './touchUtil';\nimport EventHandler from '../../mdb/dom/event-handler';\n\nconst DEFAULT_OPTIONS = {\n angle: 0,\n pointers: 2,\n};\nconst NAME = 'rotate';\nconst EVENT_END = `${NAME}end`;\nconst EVENT_START = `${NAME}start`;\n\nclass Rotate extends TouchUtil {\n constructor(element, options) {\n super();\n this._element = element;\n this._options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n this._origin = {};\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n handleTouchStart(e) {\n // eslint-disable-next-line no-unused-expressions\n e.type === 'touchstart' && e.preventDefault();\n\n if (e.touches.length < 2) return;\n this._startTouch = e;\n this._origin = {};\n EventHandler.trigger(this._element, EVENT_START, { touch: e });\n return;\n }\n\n handleTouchMove(e) {\n // eslint-disable-next-line no-unused-expressions\n e.type === 'touchmove' && e.preventDefault();\n\n let origin;\n let input;\n const touches = e.touches;\n\n if (touches.length === 1 && this._options.pointers === 1) {\n const { left, top, width, height } = this._element.getBoundingClientRect();\n origin = {\n x: left + width / 2,\n y: top + height / 2,\n };\n\n input = touches[0];\n } else if (e.touches.length === 2 && this._options.pointers === 2) {\n const [t2, t1] = e.touches;\n const _position = {\n x1: t1.clientX,\n x2: t2.clientX,\n y1: t1.clientY,\n y2: t2.clientY,\n };\n\n origin = this._getMidPoint(_position);\n input = this._getRightMostTouch(e.touches);\n } else {\n return;\n }\n\n this.currentAngle = this._getAngle(origin.x, origin.y, input.clientX, input.clientY);\n\n if (!this._origin.initialAngle) {\n this._origin.initialAngle = this._origin.previousAngle = this.currentAngle;\n this._origin.distance = this._origin.change = 0;\n } else {\n this._origin.change = this._getAngularDistance(this._origin.previousAngle, this.currentAngle);\n this._origin.distance += this._origin.change;\n }\n\n this._origin.previousAngle = this.currentAngle;\n\n this.rotate = {\n currentAngle: this.currentAngle,\n distance: this._origin.distance,\n change: this._origin.change,\n };\n\n EventHandler.trigger(this._element, NAME, { ...this.rotate, touch: e });\n }\n\n handleTouchEnd(e) {\n // eslint-disable-next-line no-unused-expressions\n e.type === 'touchend' && e.preventDefault();\n\n this._origin = {};\n\n EventHandler.trigger(this._element, EVENT_END, { touch: e });\n }\n}\n\nexport default Rotate;\n","import Data from '../../mdb/dom/data';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport Press from './press';\nimport Swipe from './swipe';\nimport Pan from './pan';\nimport Pinch from './pinch';\nimport Tap from './tap';\nimport Rotate from './rotate';\nimport BaseComponent from '../../free/base-component';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\nconst NAME = 'touch';\nconst DATA_KEY = 'mdb.touch';\n\nclass Touch extends BaseComponent {\n constructor(element, event = 'swipe', options = {}) {\n super(element);\n\n this._options = this._getConfig(options);\n this._event = this._options.event || event;\n\n // events\n\n this.swipe = this._event === 'swipe' ? new Swipe(element, this._options) : null;\n this.press = this._event === 'press' ? new Press(element, this._options) : null;\n this.pan = this._event === 'pan' ? new Pan(element, this._options) : null;\n this.pinch = this._event === 'pinch' ? new Pinch(element, this._options) : null;\n this.tap = this._event === 'tap' ? new Tap(element, this._options) : null;\n this.rotate = this._event === 'rotate' ? new Rotate(element, this._options) : null;\n\n // handlers\n\n this._touchStartHandler = this._handleTouchStart.bind(this);\n this._touchMoveHandler = this._handleTouchMove.bind(this);\n this._touchEndHandler = this._handleTouchEnd.bind(this);\n\n this.init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n // Public\n\n dispose() {\n EventHandler.off(this._element, 'touchstart', this._touchStartHandler);\n EventHandler.off(this._element, 'touchmove', this._touchMoveHandler);\n EventHandler.off(this._element, 'touchend', this._touchEndHandler);\n\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n init() {\n // istanbul ignore next\n EventHandler.on(this._element, 'touchstart', this._touchStartHandler);\n\n // istanbul ignore next\n EventHandler.on(this._element, 'touchmove', this._touchMoveHandler);\n\n // istanbul ignore next\n EventHandler.on(this._element, 'touchend', this._touchEndHandler);\n }\n\n // Private\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n config = {\n ...dataAttributes,\n ...config,\n };\n\n return config;\n }\n\n _handleTouchStart(e) {\n this[this._event].handleTouchStart(e);\n }\n\n _handleTouchMove(e) {\n if (this[this._event].handleTouchMove) {\n this[this._event].handleTouchMove(e);\n }\n }\n\n _handleTouchEnd(e) {\n this[this._event].handleTouchEnd(e);\n }\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data && /dispose/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Touch(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n // eslint-disable-next-line consistent-return\n return data[config];\n }\n });\n }\n}\n\nexport default Touch;\n","import { element, typeCheckConfig } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\nconst NAME = 'smoothScroll';\nconst DATA_KEY = `mdb.${NAME}`;\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst DefaultType = {\n container: 'string',\n offset: 'number',\n easing: 'string',\n duration: 'number',\n};\n\nconst Default = {\n container: 'body',\n offset: 0,\n easing: 'linear',\n duration: 500,\n};\n\nconst EVENT_SCROLL_START = `scrollStart${EVENT_KEY}`;\nconst EVENT_SCROLL_END = `scrollEnd${EVENT_KEY}`;\nconst EVENT_SCROLL_CANCEL = `scrollCancel${EVENT_KEY}`;\n\nclass SmoothScroll extends BaseComponent {\n constructor(element, options = {}) {\n super(element);\n\n this._options = this._getConfig(options);\n this._href = this._element.getAttribute('href');\n this.isCancel = false;\n\n if (this._element) {\n this._setup();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n }\n\n // getters\n\n static get NAME() {\n return NAME;\n }\n\n get isWindow() {\n return this._options.container === 'body';\n }\n\n get containerToScroll() {\n return this.isWindow\n ? document.documentElement\n : SelectorEngine.findOne(this._options.container, document.documentElement);\n }\n\n get elFromHrefExist() {\n return !!SelectorEngine.findOne(this._href, this.containerToScroll);\n }\n\n get offsetFromEl() {\n const heightFromTop = this.containerToScroll.scrollTop;\n const el = SelectorEngine.findOne(this._href, this.containerToScroll);\n if (this.isWindow) {\n return Manipulator.offset(el).top - this._options.offset + heightFromTop;\n }\n const elY = el.getBoundingClientRect().y;\n const containerY = this.containerToScroll.getBoundingClientRect().y;\n const offsetFromContainer = elY - containerY;\n\n return offsetFromContainer - this._options.offset + heightFromTop;\n }\n\n get easingFunction() {\n const easing = this._options.easing;\n const motionName = `_motion${easing[0].toUpperCase()}${easing.slice(1)}`;\n return this[motionName] ? this[motionName] : this._motionLinear;\n }\n\n // public\n\n dispose() {\n EventHandler.off(this._element, 'click');\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n cancelScroll() {\n this.isCancel = true;\n }\n\n // private\n\n _getConfig(options) {\n const config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...options,\n };\n\n typeCheckConfig(NAME, config, DefaultType);\n\n return config;\n }\n\n _inViewport() {\n if (this.isWindow) {\n return true;\n }\n const rect = this.containerToScroll.getBoundingClientRect();\n return (\n rect.top >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n\n _setup() {\n const linkExist = typeof this._href !== 'undefined';\n const isHashInLink = this._href.includes('#');\n\n if (linkExist && isHashInLink && this.elFromHrefExist) {\n this._scrollOnClickEvent();\n this._preventNativeScroll();\n }\n }\n\n _scrollOnClickEvent() {\n EventHandler.on(this._element, 'click', (e) => {\n this._handleClick(e);\n });\n }\n\n _handleClick(e) {\n e.preventDefault();\n this.isCancel = false;\n\n EventHandler.trigger(this._element, EVENT_SCROLL_START);\n\n const scrollingContainer = this.containerToScroll;\n const positionFrom = this.containerToScroll.scrollTop;\n const positionTo = this.offsetFromEl;\n const scrollProgress = 0;\n const speed = 1 / this._options.duration;\n // Thanks to this value time of scrolling is almost equal to value which user set\n const step = 4.25;\n const easing = this.easingFunction;\n\n if (!this._inViewport()) {\n this._scrollOnNextTick(\n document.documentElement,\n document.documentElement.scrollTop,\n this.containerToScroll.offsetTop,\n scrollProgress,\n speed,\n step,\n easing\n );\n\n // Function which is waiting for ends scrolling to viewport\n setTimeout(() => {\n this._scrollOnNextTick(\n scrollingContainer,\n positionFrom,\n positionTo,\n scrollProgress,\n speed,\n step,\n easing\n );\n this.isCancel = false;\n }, this._options.duration);\n } else {\n this._scrollOnNextTick(\n scrollingContainer,\n positionFrom,\n positionTo,\n scrollProgress,\n speed,\n step,\n easing\n );\n }\n }\n\n _scrollOnNextTick(\n scrollingContainer,\n positionFrom,\n positionTo,\n scrollProgress,\n speed,\n step,\n easing\n ) {\n const progressWrongValue = scrollProgress < 0;\n const scrollEnd = scrollProgress > 1;\n const speedWrongValue = speed <= 0;\n if (progressWrongValue || scrollEnd || speedWrongValue || this.isCancel) {\n if (this.isCancel) {\n if (this.isInViewport) {\n this.isCancel = false;\n }\n EventHandler.trigger(this._element, EVENT_SCROLL_CANCEL);\n return;\n }\n EventHandler.trigger(this._element, EVENT_SCROLL_END);\n scrollingContainer.scrollTop = positionTo;\n return;\n }\n scrollingContainer.scrollTo({\n top: positionFrom - (positionFrom - positionTo) * easing(scrollProgress),\n });\n scrollProgress += speed * step;\n\n // After one tick ends next tick is able to run, otherwise scrolling aren't goint to be animated\n setTimeout(() => {\n this._scrollOnNextTick(\n scrollingContainer,\n positionFrom,\n positionTo,\n scrollProgress,\n speed,\n step,\n easing\n );\n });\n }\n\n _preventDefault(e) {\n e.preventDefault();\n }\n\n _preventNativeScroll() {\n let supportsPassive = false;\n try {\n window.addEventListener(\n 'test',\n null,\n Object.defineProperty({}, 'passive', {\n get: () => (supportsPassive = true),\n })\n );\n } catch (e) {\n this._scrollError = e;\n }\n\n const wheelOpt = supportsPassive ? { passive: false } : false;\n const wheelEvent = 'onwheel' in element('div') ? 'wheel' : 'mousewheel';\n if (this.isWindow) {\n this._deleteScrollOnStart(wheelOpt, wheelEvent);\n this._addScrollOnEnd(wheelOpt, wheelEvent);\n this._addScrollOnCancel(wheelOpt, wheelEvent);\n }\n }\n\n _deleteScrollOnStart(wheelOpt, wheelEvent) {\n EventHandler.on(this._element, 'scrollStart.mdb.smoothScroll', () => {\n window.addEventListener(wheelEvent, this._preventDefault, wheelOpt);\n window.addEventListener('touchmove', this._preventDefault, wheelOpt);\n });\n }\n\n _addScrollOnEnd(wheelOpt, wheelEvent) {\n EventHandler.on(this._element, 'scrollEnd.mdb.smoothScroll', () => {\n window.removeEventListener(wheelEvent, this._preventDefault, wheelOpt);\n window.removeEventListener('touchmove', this._preventDefault, wheelOpt);\n });\n }\n\n _addScrollOnCancel(wheelOpt, wheelEvent) {\n EventHandler.on(this._element, 'scrollCancel.mdb.smoothScroll', () => {\n window.removeEventListener(wheelEvent, this._preventDefault, wheelOpt);\n window.removeEventListener('touchmove', this._preventDefault, wheelOpt);\n });\n }\n\n // Motions\n\n // Linear\n\n _motionLinear(t) {\n return t;\n }\n\n // Ease-In\n\n _motionEaseInQuad(t) {\n return t * t;\n }\n\n _motionEaseInCubic(t) {\n return t * t * t;\n }\n\n _motionEaseInQuart(t) {\n return t * t * t * t;\n }\n\n _motionEaseInQuint(t) {\n return t * t * t * t * t;\n }\n\n // Ease-In-Out\n\n _motionEaseInOutQuad(t) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n }\n\n _motionEaseInOutCubic(t) {\n t /= 0.5;\n if (t < 1) return (t * t * t) / 2;\n t -= 2;\n return (t * t * t + 2) / 2;\n }\n\n _motionEaseInOutQuart(t) {\n t /= 0.5;\n if (t < 1) return 0.5 * t * t * t * t;\n t -= 2;\n return -(t * t * t * t - 2) / 2;\n }\n\n _motionEaseInOutQuint(t) {\n t /= 0.5;\n if (t < 1) return (t * t * t * t * t) / 2;\n t -= 2;\n return (t * t * t * t * t + 2) / 2;\n }\n\n // Ease-Out\n\n _motionEaseOutQuad(t) {\n return -t * (t - 2);\n }\n\n _motionEaseOutCubic(t) {\n t--;\n return t * t * t + 1;\n }\n\n _motionEaseOutQuart(t) {\n t--;\n return -(t * t * t * t - 1);\n }\n\n _motionEaseOutQuint(t) {\n t--;\n return t * t * t * t * t + 1;\n }\n\n // static\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new SmoothScroll(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](this);\n }\n });\n }\n}\n\nexport default SmoothScroll;\n","/*!\n * perfect-scrollbar v1.5.3\n * Copyright 2021 Hyunje Jun, MDBootstrap and Contributors\n * Licensed under MIT\n */\n\nfunction get(element) {\n return getComputedStyle(element);\n}\n\nfunction set(element, obj) {\n for (var key in obj) {\n var val = obj[key];\n if (typeof val === 'number') {\n val = val + \"px\";\n }\n element.style[key] = val;\n }\n return element;\n}\n\nfunction div(className) {\n var div = document.createElement('div');\n div.className = className;\n return div;\n}\n\nvar elMatches =\n typeof Element !== 'undefined' &&\n (Element.prototype.matches ||\n Element.prototype.webkitMatchesSelector ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector);\n\nfunction matches(element, query) {\n if (!elMatches) {\n throw new Error('No element matching method supported');\n }\n\n return elMatches.call(element, query);\n}\n\nfunction remove(element) {\n if (element.remove) {\n element.remove();\n } else {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n }\n}\n\nfunction queryChildren(element, selector) {\n return Array.prototype.filter.call(element.children, function (child) { return matches(child, selector); }\n );\n}\n\nvar cls = {\n main: 'ps',\n rtl: 'ps__rtl',\n element: {\n thumb: function (x) { return (\"ps__thumb-\" + x); },\n rail: function (x) { return (\"ps__rail-\" + x); },\n consuming: 'ps__child--consume',\n },\n state: {\n focus: 'ps--focus',\n clicking: 'ps--clicking',\n active: function (x) { return (\"ps--active-\" + x); },\n scrolling: function (x) { return (\"ps--scrolling-\" + x); },\n },\n};\n\n/*\n * Helper methods\n */\nvar scrollingClassTimeout = { x: null, y: null };\n\nfunction addScrollingClass(i, x) {\n var classList = i.element.classList;\n var className = cls.state.scrolling(x);\n\n if (classList.contains(className)) {\n clearTimeout(scrollingClassTimeout[x]);\n } else {\n classList.add(className);\n }\n}\n\nfunction removeScrollingClass(i, x) {\n scrollingClassTimeout[x] = setTimeout(\n function () { return i.isAlive && i.element.classList.remove(cls.state.scrolling(x)); },\n i.settings.scrollingThreshold\n );\n}\n\nfunction setScrollingClassInstantly(i, x) {\n addScrollingClass(i, x);\n removeScrollingClass(i, x);\n}\n\nvar EventElement = function EventElement(element) {\n this.element = element;\n this.handlers = {};\n};\n\nvar prototypeAccessors = { isEmpty: { configurable: true } };\n\nEventElement.prototype.bind = function bind (eventName, handler) {\n if (typeof this.handlers[eventName] === 'undefined') {\n this.handlers[eventName] = [];\n }\n this.handlers[eventName].push(handler);\n this.element.addEventListener(eventName, handler, false);\n};\n\nEventElement.prototype.unbind = function unbind (eventName, target) {\n var this$1 = this;\n\n this.handlers[eventName] = this.handlers[eventName].filter(function (handler) {\n if (target && handler !== target) {\n return true;\n }\n this$1.element.removeEventListener(eventName, handler, false);\n return false;\n });\n};\n\nEventElement.prototype.unbindAll = function unbindAll () {\n for (var name in this.handlers) {\n this.unbind(name);\n }\n};\n\nprototypeAccessors.isEmpty.get = function () {\n var this$1 = this;\n\n return Object.keys(this.handlers).every(\n function (key) { return this$1.handlers[key].length === 0; }\n );\n};\n\nObject.defineProperties( EventElement.prototype, prototypeAccessors );\n\nvar EventManager = function EventManager() {\n this.eventElements = [];\n};\n\nEventManager.prototype.eventElement = function eventElement (element) {\n var ee = this.eventElements.filter(function (ee) { return ee.element === element; })[0];\n if (!ee) {\n ee = new EventElement(element);\n this.eventElements.push(ee);\n }\n return ee;\n};\n\nEventManager.prototype.bind = function bind (element, eventName, handler) {\n this.eventElement(element).bind(eventName, handler);\n};\n\nEventManager.prototype.unbind = function unbind (element, eventName, handler) {\n var ee = this.eventElement(element);\n ee.unbind(eventName, handler);\n\n if (ee.isEmpty) {\n // remove\n this.eventElements.splice(this.eventElements.indexOf(ee), 1);\n }\n};\n\nEventManager.prototype.unbindAll = function unbindAll () {\n this.eventElements.forEach(function (e) { return e.unbindAll(); });\n this.eventElements = [];\n};\n\nEventManager.prototype.once = function once (element, eventName, handler) {\n var ee = this.eventElement(element);\n var onceHandler = function (evt) {\n ee.unbind(eventName, onceHandler);\n handler(evt);\n };\n ee.bind(eventName, onceHandler);\n};\n\nfunction createEvent(name) {\n if (typeof window.CustomEvent === 'function') {\n return new CustomEvent(name);\n } else {\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(name, false, false, undefined);\n return evt;\n }\n}\n\nfunction processScrollDiff(\n i,\n axis,\n diff,\n useScrollingClass,\n forceFireReachEvent\n) {\n if ( useScrollingClass === void 0 ) useScrollingClass = true;\n if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false;\n\n var fields;\n if (axis === 'top') {\n fields = [\n 'contentHeight',\n 'containerHeight',\n 'scrollTop',\n 'y',\n 'up',\n 'down' ];\n } else if (axis === 'left') {\n fields = [\n 'contentWidth',\n 'containerWidth',\n 'scrollLeft',\n 'x',\n 'left',\n 'right' ];\n } else {\n throw new Error('A proper axis should be provided');\n }\n\n processScrollDiff$1(i, diff, fields, useScrollingClass, forceFireReachEvent);\n}\n\nfunction processScrollDiff$1(\n i,\n diff,\n ref,\n useScrollingClass,\n forceFireReachEvent\n) {\n var contentHeight = ref[0];\n var containerHeight = ref[1];\n var scrollTop = ref[2];\n var y = ref[3];\n var up = ref[4];\n var down = ref[5];\n if ( useScrollingClass === void 0 ) useScrollingClass = true;\n if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false;\n\n var element = i.element;\n\n // reset reach\n i.reach[y] = null;\n\n // 1 for subpixel rounding\n if (element[scrollTop] < 1) {\n i.reach[y] = 'start';\n }\n\n // 1 for subpixel rounding\n if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) {\n i.reach[y] = 'end';\n }\n\n if (diff) {\n element.dispatchEvent(createEvent((\"ps-scroll-\" + y)));\n\n if (diff < 0) {\n element.dispatchEvent(createEvent((\"ps-scroll-\" + up)));\n } else if (diff > 0) {\n element.dispatchEvent(createEvent((\"ps-scroll-\" + down)));\n }\n\n if (useScrollingClass) {\n setScrollingClassInstantly(i, y);\n }\n }\n\n if (i.reach[y] && (diff || forceFireReachEvent)) {\n element.dispatchEvent(createEvent((\"ps-\" + y + \"-reach-\" + (i.reach[y]))));\n }\n}\n\nfunction toInt(x) {\n return parseInt(x, 10) || 0;\n}\n\nfunction isEditable(el) {\n return (\n matches(el, 'input,[contenteditable]') ||\n matches(el, 'select,[contenteditable]') ||\n matches(el, 'textarea,[contenteditable]') ||\n matches(el, 'button,[contenteditable]')\n );\n}\n\nfunction outerWidth(element) {\n var styles = get(element);\n return (\n toInt(styles.width) +\n toInt(styles.paddingLeft) +\n toInt(styles.paddingRight) +\n toInt(styles.borderLeftWidth) +\n toInt(styles.borderRightWidth)\n );\n}\n\nvar env = {\n isWebKit:\n typeof document !== 'undefined' &&\n 'WebkitAppearance' in document.documentElement.style,\n supportsTouch:\n typeof window !== 'undefined' &&\n ('ontouchstart' in window ||\n ('maxTouchPoints' in window.navigator &&\n window.navigator.maxTouchPoints > 0) ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)),\n supportsIePointer:\n typeof navigator !== 'undefined' && navigator.msMaxTouchPoints,\n isChrome:\n typeof navigator !== 'undefined' &&\n /Chrome/i.test(navigator && navigator.userAgent),\n};\n\nfunction updateGeometry(i) {\n var element = i.element;\n var roundedScrollTop = Math.floor(element.scrollTop);\n var rect = element.getBoundingClientRect();\n\n i.containerWidth = Math.round(rect.width);\n i.containerHeight = Math.round(rect.height);\n\n i.contentWidth = element.scrollWidth;\n i.contentHeight = element.scrollHeight;\n\n if (!element.contains(i.scrollbarXRail)) {\n // clean up and append\n queryChildren(element, cls.element.rail('x')).forEach(function (el) { return remove(el); }\n );\n element.appendChild(i.scrollbarXRail);\n }\n if (!element.contains(i.scrollbarYRail)) {\n // clean up and append\n queryChildren(element, cls.element.rail('y')).forEach(function (el) { return remove(el); }\n );\n element.appendChild(i.scrollbarYRail);\n }\n\n if (\n !i.settings.suppressScrollX &&\n i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth\n ) {\n i.scrollbarXActive = true;\n i.railXWidth = i.containerWidth - i.railXMarginWidth;\n i.railXRatio = i.containerWidth / i.railXWidth;\n i.scrollbarXWidth = getThumbSize(\n i,\n toInt((i.railXWidth * i.containerWidth) / i.contentWidth)\n );\n i.scrollbarXLeft = toInt(\n ((i.negativeScrollAdjustment + element.scrollLeft) *\n (i.railXWidth - i.scrollbarXWidth)) /\n (i.contentWidth - i.containerWidth)\n );\n } else {\n i.scrollbarXActive = false;\n }\n\n if (\n !i.settings.suppressScrollY &&\n i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight\n ) {\n i.scrollbarYActive = true;\n i.railYHeight = i.containerHeight - i.railYMarginHeight;\n i.railYRatio = i.containerHeight / i.railYHeight;\n i.scrollbarYHeight = getThumbSize(\n i,\n toInt((i.railYHeight * i.containerHeight) / i.contentHeight)\n );\n i.scrollbarYTop = toInt(\n (roundedScrollTop * (i.railYHeight - i.scrollbarYHeight)) /\n (i.contentHeight - i.containerHeight)\n );\n } else {\n i.scrollbarYActive = false;\n }\n\n if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {\n i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;\n }\n if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {\n i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;\n }\n\n updateCss(element, i);\n\n if (i.scrollbarXActive) {\n element.classList.add(cls.state.active('x'));\n } else {\n element.classList.remove(cls.state.active('x'));\n i.scrollbarXWidth = 0;\n i.scrollbarXLeft = 0;\n element.scrollLeft = i.isRtl === true ? i.contentWidth : 0;\n }\n if (i.scrollbarYActive) {\n element.classList.add(cls.state.active('y'));\n } else {\n element.classList.remove(cls.state.active('y'));\n i.scrollbarYHeight = 0;\n i.scrollbarYTop = 0;\n element.scrollTop = 0;\n }\n}\n\nfunction getThumbSize(i, thumbSize) {\n if (i.settings.minScrollbarLength) {\n thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);\n }\n if (i.settings.maxScrollbarLength) {\n thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);\n }\n return thumbSize;\n}\n\nfunction updateCss(element, i) {\n var xRailOffset = { width: i.railXWidth };\n var roundedScrollTop = Math.floor(element.scrollTop);\n\n if (i.isRtl) {\n xRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth -\n i.contentWidth;\n } else {\n xRailOffset.left = element.scrollLeft;\n }\n if (i.isScrollbarXUsingBottom) {\n xRailOffset.bottom = i.scrollbarXBottom - roundedScrollTop;\n } else {\n xRailOffset.top = i.scrollbarXTop + roundedScrollTop;\n }\n set(i.scrollbarXRail, xRailOffset);\n\n var yRailOffset = { top: roundedScrollTop, height: i.railYHeight };\n if (i.isScrollbarYUsingRight) {\n if (i.isRtl) {\n yRailOffset.right =\n i.contentWidth -\n (i.negativeScrollAdjustment + element.scrollLeft) -\n i.scrollbarYRight -\n i.scrollbarYOuterWidth -\n 9;\n } else {\n yRailOffset.right = i.scrollbarYRight - element.scrollLeft;\n }\n } else {\n if (i.isRtl) {\n yRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth * 2 -\n i.contentWidth -\n i.scrollbarYLeft -\n i.scrollbarYOuterWidth;\n } else {\n yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;\n }\n }\n set(i.scrollbarYRail, yRailOffset);\n\n set(i.scrollbarX, {\n left: i.scrollbarXLeft,\n width: i.scrollbarXWidth - i.railBorderXWidth,\n });\n set(i.scrollbarY, {\n top: i.scrollbarYTop,\n height: i.scrollbarYHeight - i.railBorderYWidth,\n });\n}\n\nfunction clickRail(i) {\n var element = i.element;\n\n i.event.bind(i.scrollbarY, 'mousedown', function (e) { return e.stopPropagation(); });\n i.event.bind(i.scrollbarYRail, 'mousedown', function (e) {\n var positionTop =\n e.pageY -\n window.pageYOffset -\n i.scrollbarYRail.getBoundingClientRect().top;\n var direction = positionTop > i.scrollbarYTop ? 1 : -1;\n\n i.element.scrollTop += direction * i.containerHeight;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n\n i.event.bind(i.scrollbarX, 'mousedown', function (e) { return e.stopPropagation(); });\n i.event.bind(i.scrollbarXRail, 'mousedown', function (e) {\n var positionLeft =\n e.pageX -\n window.pageXOffset -\n i.scrollbarXRail.getBoundingClientRect().left;\n var direction = positionLeft > i.scrollbarXLeft ? 1 : -1;\n\n i.element.scrollLeft += direction * i.containerWidth;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n}\n\nfunction dragThumb(i) {\n bindMouseScrollHandler(i, [\n 'containerWidth',\n 'contentWidth',\n 'pageX',\n 'railXWidth',\n 'scrollbarX',\n 'scrollbarXWidth',\n 'scrollLeft',\n 'x',\n 'scrollbarXRail' ]);\n bindMouseScrollHandler(i, [\n 'containerHeight',\n 'contentHeight',\n 'pageY',\n 'railYHeight',\n 'scrollbarY',\n 'scrollbarYHeight',\n 'scrollTop',\n 'y',\n 'scrollbarYRail' ]);\n}\n\nfunction bindMouseScrollHandler(\n i,\n ref\n) {\n var containerHeight = ref[0];\n var contentHeight = ref[1];\n var pageY = ref[2];\n var railYHeight = ref[3];\n var scrollbarY = ref[4];\n var scrollbarYHeight = ref[5];\n var scrollTop = ref[6];\n var y = ref[7];\n var scrollbarYRail = ref[8];\n\n var element = i.element;\n\n var startingScrollTop = null;\n var startingMousePageY = null;\n var scrollBy = null;\n\n function mouseMoveHandler(e) {\n if (e.touches && e.touches[0]) {\n e[pageY] = e.touches[0].pageY;\n }\n element[scrollTop] =\n startingScrollTop + scrollBy * (e[pageY] - startingMousePageY);\n addScrollingClass(i, y);\n updateGeometry(i);\n\n e.stopPropagation();\n if (e.type.startsWith('touch') && e.changedTouches.length > 1) {\n e.preventDefault();\n }\n }\n\n function mouseUpHandler() {\n removeScrollingClass(i, y);\n i[scrollbarYRail].classList.remove(cls.state.clicking);\n i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n }\n\n function bindMoves(e, touchMode) {\n startingScrollTop = element[scrollTop];\n if (touchMode && e.touches) {\n e[pageY] = e.touches[0].pageY;\n }\n startingMousePageY = e[pageY];\n scrollBy =\n (i[contentHeight] - i[containerHeight]) /\n (i[railYHeight] - i[scrollbarYHeight]);\n if (!touchMode) {\n i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);\n e.preventDefault();\n } else {\n i.event.bind(i.ownerDocument, 'touchmove', mouseMoveHandler);\n }\n\n i[scrollbarYRail].classList.add(cls.state.clicking);\n\n e.stopPropagation();\n }\n\n i.event.bind(i[scrollbarY], 'mousedown', function (e) {\n bindMoves(e);\n });\n i.event.bind(i[scrollbarY], 'touchstart', function (e) {\n bindMoves(e, true);\n });\n}\n\nfunction keyboard(i) {\n var element = i.element;\n\n var elementHovered = function () { return matches(element, ':hover'); };\n var scrollbarFocused = function () { return matches(i.scrollbarX, ':focus') || matches(i.scrollbarY, ':focus'); };\n\n function shouldPreventDefault(deltaX, deltaY) {\n var scrollTop = Math.floor(element.scrollTop);\n if (deltaX === 0) {\n if (!i.scrollbarYActive) {\n return false;\n }\n if (\n (scrollTop === 0 && deltaY > 0) ||\n (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n\n var scrollLeft = element.scrollLeft;\n if (deltaY === 0) {\n if (!i.scrollbarXActive) {\n return false;\n }\n if (\n (scrollLeft === 0 && deltaX < 0) ||\n (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n return true;\n }\n\n i.event.bind(i.ownerDocument, 'keydown', function (e) {\n if (\n (e.isDefaultPrevented && e.isDefaultPrevented()) ||\n e.defaultPrevented\n ) {\n return;\n }\n\n if (!elementHovered() && !scrollbarFocused()) {\n return;\n }\n\n var activeElement = document.activeElement\n ? document.activeElement\n : i.ownerDocument.activeElement;\n if (activeElement) {\n if (activeElement.tagName === 'IFRAME') {\n activeElement = activeElement.contentDocument.activeElement;\n } else {\n // go deeper if element is a webcomponent\n while (activeElement.shadowRoot) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n }\n if (isEditable(activeElement)) {\n return;\n }\n }\n\n var deltaX = 0;\n var deltaY = 0;\n\n switch (e.which) {\n case 37: // left\n if (e.metaKey) {\n deltaX = -i.contentWidth;\n } else if (e.altKey) {\n deltaX = -i.containerWidth;\n } else {\n deltaX = -30;\n }\n break;\n case 38: // up\n if (e.metaKey) {\n deltaY = i.contentHeight;\n } else if (e.altKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = 30;\n }\n break;\n case 39: // right\n if (e.metaKey) {\n deltaX = i.contentWidth;\n } else if (e.altKey) {\n deltaX = i.containerWidth;\n } else {\n deltaX = 30;\n }\n break;\n case 40: // down\n if (e.metaKey) {\n deltaY = -i.contentHeight;\n } else if (e.altKey) {\n deltaY = -i.containerHeight;\n } else {\n deltaY = -30;\n }\n break;\n case 32: // space bar\n if (e.shiftKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = -i.containerHeight;\n }\n break;\n case 33: // page up\n deltaY = i.containerHeight;\n break;\n case 34: // page down\n deltaY = -i.containerHeight;\n break;\n case 36: // home\n deltaY = i.contentHeight;\n break;\n case 35: // end\n deltaY = -i.contentHeight;\n break;\n default:\n return;\n }\n\n if (i.settings.suppressScrollX && deltaX !== 0) {\n return;\n }\n if (i.settings.suppressScrollY && deltaY !== 0) {\n return;\n }\n\n element.scrollTop -= deltaY;\n element.scrollLeft += deltaX;\n updateGeometry(i);\n\n if (shouldPreventDefault(deltaX, deltaY)) {\n e.preventDefault();\n }\n });\n}\n\nfunction wheel(i) {\n var element = i.element;\n\n function shouldPreventDefault(deltaX, deltaY) {\n var roundedScrollTop = Math.floor(element.scrollTop);\n var isTop = element.scrollTop === 0;\n var isBottom =\n roundedScrollTop + element.offsetHeight === element.scrollHeight;\n var isLeft = element.scrollLeft === 0;\n var isRight =\n element.scrollLeft + element.offsetWidth === element.scrollWidth;\n\n var hitsBound;\n\n // pick axis with primary direction\n if (Math.abs(deltaY) > Math.abs(deltaX)) {\n hitsBound = isTop || isBottom;\n } else {\n hitsBound = isLeft || isRight;\n }\n\n return hitsBound ? !i.settings.wheelPropagation : true;\n }\n\n function getDeltaFromEvent(e) {\n var deltaX = e.deltaX;\n var deltaY = -1 * e.deltaY;\n\n if (typeof deltaX === 'undefined' || typeof deltaY === 'undefined') {\n // OS X Safari\n deltaX = (-1 * e.wheelDeltaX) / 6;\n deltaY = e.wheelDeltaY / 6;\n }\n\n if (e.deltaMode && e.deltaMode === 1) {\n // Firefox in deltaMode 1: Line scrolling\n deltaX *= 10;\n deltaY *= 10;\n }\n\n if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) {\n // IE in some mouse drivers\n deltaX = 0;\n deltaY = e.wheelDelta;\n }\n\n if (e.shiftKey) {\n // reverse axis with shift key\n return [-deltaY, -deltaX];\n }\n return [deltaX, deltaY];\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n // FIXME: this is a workaround for <select> issue in FF and IE #571\n if (!env.isWebKit && element.querySelector('select:focus')) {\n return true;\n }\n\n if (!element.contains(target)) {\n return false;\n }\n\n var cursor = target;\n\n while (cursor && cursor !== element) {\n if (cursor.classList.contains(cls.element.consuming)) {\n return true;\n }\n\n var style = get(cursor);\n\n // if deltaY && vertical scrollable\n if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n var maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n if (maxScrollTop > 0) {\n if (\n (cursor.scrollTop > 0 && deltaY < 0) ||\n (cursor.scrollTop < maxScrollTop && deltaY > 0)\n ) {\n return true;\n }\n }\n }\n // if deltaX && horizontal scrollable\n if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n var maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n if (maxScrollLeft > 0) {\n if (\n (cursor.scrollLeft > 0 && deltaX < 0) ||\n (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n ) {\n return true;\n }\n }\n }\n\n cursor = cursor.parentNode;\n }\n\n return false;\n }\n\n function mousewheelHandler(e) {\n var ref = getDeltaFromEvent(e);\n var deltaX = ref[0];\n var deltaY = ref[1];\n\n if (shouldBeConsumedByChild(e.target, deltaX, deltaY)) {\n return;\n }\n\n var shouldPrevent = false;\n if (!i.settings.useBothWheelAxes) {\n // deltaX will only be used for horizontal scrolling and deltaY will\n // only be used for vertical scrolling - this is the default\n element.scrollTop -= deltaY * i.settings.wheelSpeed;\n element.scrollLeft += deltaX * i.settings.wheelSpeed;\n } else if (i.scrollbarYActive && !i.scrollbarXActive) {\n // only vertical scrollbar is active and useBothWheelAxes option is\n // active, so let's scroll vertical bar using both mouse wheel axes\n if (deltaY) {\n element.scrollTop -= deltaY * i.settings.wheelSpeed;\n } else {\n element.scrollTop += deltaX * i.settings.wheelSpeed;\n }\n shouldPrevent = true;\n } else if (i.scrollbarXActive && !i.scrollbarYActive) {\n // useBothWheelAxes and only horizontal bar is active, so use both\n // wheel axes for horizontal bar\n if (deltaX) {\n element.scrollLeft += deltaX * i.settings.wheelSpeed;\n } else {\n element.scrollLeft -= deltaY * i.settings.wheelSpeed;\n }\n shouldPrevent = true;\n }\n\n updateGeometry(i);\n\n shouldPrevent = shouldPrevent || shouldPreventDefault(deltaX, deltaY);\n if (shouldPrevent && !e.ctrlKey) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n if (typeof window.onwheel !== 'undefined') {\n i.event.bind(element, 'wheel', mousewheelHandler);\n } else if (typeof window.onmousewheel !== 'undefined') {\n i.event.bind(element, 'mousewheel', mousewheelHandler);\n }\n}\n\nfunction touch(i) {\n if (!env.supportsTouch && !env.supportsIePointer) {\n return;\n }\n\n var element = i.element;\n\n function shouldPrevent(deltaX, deltaY) {\n var scrollTop = Math.floor(element.scrollTop);\n var scrollLeft = element.scrollLeft;\n var magnitudeX = Math.abs(deltaX);\n var magnitudeY = Math.abs(deltaY);\n\n if (magnitudeY > magnitudeX) {\n // user is perhaps trying to swipe up/down the page\n\n if (\n (deltaY < 0 && scrollTop === i.contentHeight - i.containerHeight) ||\n (deltaY > 0 && scrollTop === 0)\n ) {\n // set prevent for mobile Chrome refresh\n return window.scrollY === 0 && deltaY > 0 && env.isChrome;\n }\n } else if (magnitudeX > magnitudeY) {\n // user is perhaps trying to swipe left/right across the page\n\n if (\n (deltaX < 0 && scrollLeft === i.contentWidth - i.containerWidth) ||\n (deltaX > 0 && scrollLeft === 0)\n ) {\n return true;\n }\n }\n\n return true;\n }\n\n function applyTouchMove(differenceX, differenceY) {\n element.scrollTop -= differenceY;\n element.scrollLeft -= differenceX;\n\n updateGeometry(i);\n }\n\n var startOffset = {};\n var startTime = 0;\n var speed = {};\n var easingLoop = null;\n\n function getTouch(e) {\n if (e.targetTouches) {\n return e.targetTouches[0];\n } else {\n // Maybe IE pointer\n return e;\n }\n }\n\n function shouldHandle(e) {\n if (e.pointerType && e.pointerType === 'pen' && e.buttons === 0) {\n return false;\n }\n if (e.targetTouches && e.targetTouches.length === 1) {\n return true;\n }\n if (\n e.pointerType &&\n e.pointerType !== 'mouse' &&\n e.pointerType !== e.MSPOINTER_TYPE_MOUSE\n ) {\n return true;\n }\n return false;\n }\n\n function touchStart(e) {\n if (!shouldHandle(e)) {\n return;\n }\n\n var touch = getTouch(e);\n\n startOffset.pageX = touch.pageX;\n startOffset.pageY = touch.pageY;\n\n startTime = new Date().getTime();\n\n if (easingLoop !== null) {\n clearInterval(easingLoop);\n }\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n if (!element.contains(target)) {\n return false;\n }\n\n var cursor = target;\n\n while (cursor && cursor !== element) {\n if (cursor.classList.contains(cls.element.consuming)) {\n return true;\n }\n\n var style = get(cursor);\n\n // if deltaY && vertical scrollable\n if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n var maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n if (maxScrollTop > 0) {\n if (\n (cursor.scrollTop > 0 && deltaY < 0) ||\n (cursor.scrollTop < maxScrollTop && deltaY > 0)\n ) {\n return true;\n }\n }\n }\n // if deltaX && horizontal scrollable\n if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n var maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n if (maxScrollLeft > 0) {\n if (\n (cursor.scrollLeft > 0 && deltaX < 0) ||\n (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n ) {\n return true;\n }\n }\n }\n\n cursor = cursor.parentNode;\n }\n\n return false;\n }\n\n function touchMove(e) {\n if (shouldHandle(e)) {\n var touch = getTouch(e);\n\n var currentOffset = { pageX: touch.pageX, pageY: touch.pageY };\n\n var differenceX = currentOffset.pageX - startOffset.pageX;\n var differenceY = currentOffset.pageY - startOffset.pageY;\n\n if (shouldBeConsumedByChild(e.target, differenceX, differenceY)) {\n return;\n }\n\n applyTouchMove(differenceX, differenceY);\n startOffset = currentOffset;\n\n var currentTime = new Date().getTime();\n\n var timeGap = currentTime - startTime;\n if (timeGap > 0) {\n speed.x = differenceX / timeGap;\n speed.y = differenceY / timeGap;\n startTime = currentTime;\n }\n\n if (shouldPrevent(differenceX, differenceY)) {\n e.preventDefault();\n }\n }\n }\n function touchEnd() {\n if (i.settings.swipeEasing) {\n clearInterval(easingLoop);\n easingLoop = setInterval(function() {\n if (i.isInitialized) {\n clearInterval(easingLoop);\n return;\n }\n\n if (!speed.x && !speed.y) {\n clearInterval(easingLoop);\n return;\n }\n\n if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {\n clearInterval(easingLoop);\n return;\n }\n\n if (!i.element) {\n clearInterval(easingLoop);\n return;\n }\n\n applyTouchMove(speed.x * 30, speed.y * 30);\n\n speed.x *= 0.8;\n speed.y *= 0.8;\n }, 10);\n }\n }\n\n if (env.supportsTouch) {\n i.event.bind(element, 'touchstart', touchStart);\n i.event.bind(element, 'touchmove', touchMove);\n i.event.bind(element, 'touchend', touchEnd);\n } else if (env.supportsIePointer) {\n if (window.PointerEvent) {\n i.event.bind(element, 'pointerdown', touchStart);\n i.event.bind(element, 'pointermove', touchMove);\n i.event.bind(element, 'pointerup', touchEnd);\n } else if (window.MSPointerEvent) {\n i.event.bind(element, 'MSPointerDown', touchStart);\n i.event.bind(element, 'MSPointerMove', touchMove);\n i.event.bind(element, 'MSPointerUp', touchEnd);\n }\n }\n}\n\nvar defaultSettings = function () { return ({\n handlers: ['click-rail', 'drag-thumb', 'keyboard', 'wheel', 'touch'],\n maxScrollbarLength: null,\n minScrollbarLength: null,\n scrollingThreshold: 1000,\n scrollXMarginOffset: 0,\n scrollYMarginOffset: 0,\n suppressScrollX: false,\n suppressScrollY: false,\n swipeEasing: true,\n useBothWheelAxes: false,\n wheelPropagation: true,\n wheelSpeed: 1,\n}); };\n\nvar handlers = {\n 'click-rail': clickRail,\n 'drag-thumb': dragThumb,\n keyboard: keyboard,\n wheel: wheel,\n touch: touch,\n};\n\nvar PerfectScrollbar = function PerfectScrollbar(element, userSettings) {\n var this$1 = this;\n if ( userSettings === void 0 ) userSettings = {};\n\n if (typeof element === 'string') {\n element = document.querySelector(element);\n }\n\n if (!element || !element.nodeName) {\n throw new Error('no element is specified to initialize PerfectScrollbar');\n }\n\n this.element = element;\n\n element.classList.add(cls.main);\n\n this.settings = defaultSettings();\n for (var key in userSettings) {\n this.settings[key] = userSettings[key];\n }\n\n this.containerWidth = null;\n this.containerHeight = null;\n this.contentWidth = null;\n this.contentHeight = null;\n\n var focus = function () { return element.classList.add(cls.state.focus); };\n var blur = function () { return element.classList.remove(cls.state.focus); };\n\n this.isRtl = get(element).direction === 'rtl';\n if (this.isRtl === true) {\n element.classList.add(cls.rtl);\n }\n this.isNegativeScroll = (function () {\n var originalScrollLeft = element.scrollLeft;\n var result = null;\n element.scrollLeft = -1;\n result = element.scrollLeft < 0;\n element.scrollLeft = originalScrollLeft;\n return result;\n })();\n this.negativeScrollAdjustment = this.isNegativeScroll\n ? element.scrollWidth - element.clientWidth\n : 0;\n this.event = new EventManager();\n this.ownerDocument = element.ownerDocument || document;\n\n this.scrollbarXRail = div(cls.element.rail('x'));\n element.appendChild(this.scrollbarXRail);\n this.scrollbarX = div(cls.element.thumb('x'));\n this.scrollbarXRail.appendChild(this.scrollbarX);\n this.scrollbarX.setAttribute('tabindex', 0);\n this.event.bind(this.scrollbarX, 'focus', focus);\n this.event.bind(this.scrollbarX, 'blur', blur);\n this.scrollbarXActive = null;\n this.scrollbarXWidth = null;\n this.scrollbarXLeft = null;\n var railXStyle = get(this.scrollbarXRail);\n this.scrollbarXBottom = parseInt(railXStyle.bottom, 10);\n if (isNaN(this.scrollbarXBottom)) {\n this.isScrollbarXUsingBottom = false;\n this.scrollbarXTop = toInt(railXStyle.top);\n } else {\n this.isScrollbarXUsingBottom = true;\n }\n this.railBorderXWidth =\n toInt(railXStyle.borderLeftWidth) + toInt(railXStyle.borderRightWidth);\n // Set rail to display:block to calculate margins\n set(this.scrollbarXRail, { display: 'block' });\n this.railXMarginWidth =\n toInt(railXStyle.marginLeft) + toInt(railXStyle.marginRight);\n set(this.scrollbarXRail, { display: '' });\n this.railXWidth = null;\n this.railXRatio = null;\n\n this.scrollbarYRail = div(cls.element.rail('y'));\n element.appendChild(this.scrollbarYRail);\n this.scrollbarY = div(cls.element.thumb('y'));\n this.scrollbarYRail.appendChild(this.scrollbarY);\n this.scrollbarY.setAttribute('tabindex', 0);\n this.event.bind(this.scrollbarY, 'focus', focus);\n this.event.bind(this.scrollbarY, 'blur', blur);\n this.scrollbarYActive = null;\n this.scrollbarYHeight = null;\n this.scrollbarYTop = null;\n var railYStyle = get(this.scrollbarYRail);\n this.scrollbarYRight = parseInt(railYStyle.right, 10);\n if (isNaN(this.scrollbarYRight)) {\n this.isScrollbarYUsingRight = false;\n this.scrollbarYLeft = toInt(railYStyle.left);\n } else {\n this.isScrollbarYUsingRight = true;\n }\n this.scrollbarYOuterWidth = this.isRtl ? outerWidth(this.scrollbarY) : null;\n this.railBorderYWidth =\n toInt(railYStyle.borderTopWidth) + toInt(railYStyle.borderBottomWidth);\n set(this.scrollbarYRail, { display: 'block' });\n this.railYMarginHeight =\n toInt(railYStyle.marginTop) + toInt(railYStyle.marginBottom);\n set(this.scrollbarYRail, { display: '' });\n this.railYHeight = null;\n this.railYRatio = null;\n\n this.reach = {\n x:\n element.scrollLeft <= 0\n ? 'start'\n : element.scrollLeft >= this.contentWidth - this.containerWidth\n ? 'end'\n : null,\n y:\n element.scrollTop <= 0\n ? 'start'\n : element.scrollTop >= this.contentHeight - this.containerHeight\n ? 'end'\n : null,\n };\n\n this.isAlive = true;\n\n this.settings.handlers.forEach(function (handlerName) { return handlers[handlerName](this$1); });\n\n this.lastScrollTop = Math.floor(element.scrollTop); // for onScroll only\n this.lastScrollLeft = element.scrollLeft; // for onScroll only\n this.event.bind(this.element, 'scroll', function (e) { return this$1.onScroll(e); });\n updateGeometry(this);\n};\n\nPerfectScrollbar.prototype.update = function update () {\n if (!this.isAlive) {\n return;\n }\n\n // Recalcuate negative scrollLeft adjustment\n this.negativeScrollAdjustment = this.isNegativeScroll\n ? this.element.scrollWidth - this.element.clientWidth\n : 0;\n\n // Recalculate rail margins\n set(this.scrollbarXRail, { display: 'block' });\n set(this.scrollbarYRail, { display: 'block' });\n this.railXMarginWidth =\n toInt(get(this.scrollbarXRail).marginLeft) +\n toInt(get(this.scrollbarXRail).marginRight);\n this.railYMarginHeight =\n toInt(get(this.scrollbarYRail).marginTop) +\n toInt(get(this.scrollbarYRail).marginBottom);\n\n // Hide scrollbars not to affect scrollWidth and scrollHeight\n set(this.scrollbarXRail, { display: 'none' });\n set(this.scrollbarYRail, { display: 'none' });\n\n updateGeometry(this);\n\n processScrollDiff(this, 'top', 0, false, true);\n processScrollDiff(this, 'left', 0, false, true);\n\n set(this.scrollbarXRail, { display: '' });\n set(this.scrollbarYRail, { display: '' });\n};\n\nPerfectScrollbar.prototype.onScroll = function onScroll (e) {\n if (!this.isAlive) {\n return;\n }\n\n updateGeometry(this);\n processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop);\n processScrollDiff(\n this,\n 'left',\n this.element.scrollLeft - this.lastScrollLeft\n );\n\n this.lastScrollTop = Math.floor(this.element.scrollTop);\n this.lastScrollLeft = this.element.scrollLeft;\n};\n\nPerfectScrollbar.prototype.destroy = function destroy () {\n if (!this.isAlive) {\n return;\n }\n\n this.event.unbindAll();\n remove(this.scrollbarX);\n remove(this.scrollbarY);\n remove(this.scrollbarXRail);\n remove(this.scrollbarYRail);\n this.removePsClasses();\n\n // unset elements\n this.element = null;\n this.scrollbarX = null;\n this.scrollbarY = null;\n this.scrollbarXRail = null;\n this.scrollbarYRail = null;\n\n this.isAlive = false;\n};\n\nPerfectScrollbar.prototype.removePsClasses = function removePsClasses () {\n this.element.className = this.element.className\n .split(' ')\n .filter(function (name) { return !name.match(/^ps([-_].+|)$/); })\n .join(' ');\n};\n\nexport default PerfectScrollbar;\n//# sourceMappingURL=perfect-scrollbar.esm.js.map\n","/* eslint-disable no-restricted-globals */\nimport PerfectScrollbar from 'perfect-scrollbar';\nimport { typeCheckConfig } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport Manipulator from '../mdb/dom/manipulator';\nimport EventHandler from '../mdb/dom/event-handler';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\nconst NAME = 'perfectScrollbar';\nconst CLASSNAME_PS = 'perfect-scrollbar';\nconst DATA_KEY = 'mdb.perfectScrollbar';\nconst MDB_NAME = 'mdb';\nconst PS_NAME = 'ps';\n\nconst EVENTS = [\n { mdb: `scrollX.${MDB_NAME}.${PS_NAME}`, ps: 'ps-scroll-x' },\n { mdb: `scrollY.${MDB_NAME}.${PS_NAME}`, ps: 'ps-scroll-y' },\n { mdb: `scrollUp.${MDB_NAME}.${PS_NAME}`, ps: 'ps-scroll-up' },\n { mdb: `scrollDown.${MDB_NAME}.${PS_NAME}`, ps: 'ps-scroll-down' },\n { mdb: `scrollLeft.${MDB_NAME}.${PS_NAME}`, ps: 'ps-scroll-left' },\n { mdb: `scrollRight.${MDB_NAME}.${PS_NAME}`, ps: 'ps-scroll-right' },\n { mdb: `scrollXEnd.${MDB_NAME}.${PS_NAME}`, ps: 'ps-x-reach-end' },\n { mdb: `scrollYEnd.${MDB_NAME}.${PS_NAME}`, ps: 'ps-y-reach-end' },\n { mdb: `scrollXStart.${MDB_NAME}.${PS_NAME}`, ps: 'ps-x-reach-start' },\n { mdb: `scrollYStart.${MDB_NAME}.${PS_NAME}`, ps: 'ps-y-reach-start' },\n];\n\nconst Default = {\n handlers: ['click-rail', 'drag-thumb', 'keyboard', 'wheel', 'touch'],\n wheelSpeed: 1,\n wheelPropagation: true,\n swipeEasing: true,\n minScrollbarLength: null,\n maxScrollbarLength: null,\n scrollingThreshold: 1000,\n useBothWheelAxes: false,\n suppressScrollX: false,\n suppressScrollY: false,\n scrollXMarginOffset: 0,\n scrollYMarginOffset: 0,\n};\n\nconst DefaultType = {\n handlers: '(string|array)',\n wheelSpeed: 'number',\n wheelPropagation: 'boolean',\n swipeEasing: 'boolean',\n minScrollbarLength: '(number|null)',\n maxScrollbarLength: '(number|null)',\n scrollingThreshold: 'number',\n useBothWheelAxes: 'boolean',\n suppressScrollX: 'boolean',\n suppressScrollY: 'boolean',\n scrollXMarginOffset: 'number',\n scrollYMarginOffset: 'number',\n};\n\nclass PerfectScrollbars extends BaseComponent {\n constructor(element, options = {}) {\n super(element);\n\n this._options = this._getConfig(options);\n this.perfectScrollbar = null;\n\n if (this._element) {\n Manipulator.addClass(this._element, CLASSNAME_PS);\n }\n\n this.init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n if (dataAttributes.handlers !== undefined) {\n dataAttributes.handlers = dataAttributes.handlers.split(' ');\n }\n\n config = {\n ...Default,\n ...dataAttributes,\n ...config,\n };\n\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n\n // Public\n dispose() {\n this.removeEvent(EVENTS);\n this.perfectScrollbar.destroy();\n this.perfectScrollbar = null;\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n init() {\n this.perfectScrollbar = new PerfectScrollbar(this._element, this._options);\n\n this._initEvents(EVENTS);\n }\n\n update() {\n return this.perfectScrollbar.update();\n }\n\n _initEvents(events = []) {\n events.forEach(({ ps, mdb }) =>\n EventHandler.on(this._element, ps, (e) => EventHandler.trigger(this._element, mdb, { e }))\n );\n }\n\n removeEvent(event) {\n let filter = [];\n\n if (typeof event === 'string') {\n filter = EVENTS.filter(({ mdb }) => mdb === event);\n }\n\n filter.forEach(({ ps, mdb }) => {\n EventHandler.off(this._element, ps);\n EventHandler.off(this._element, mdb);\n });\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new PerfectScrollbars(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n }\n });\n }\n}\n\nexport default PerfectScrollbars;\n","/* eslint-disable import/prefer-default-export */\nimport Manipulator from '../../mdb/dom/manipulator';\nimport { element } from '../../mdb/util/index';\n\nexport function getBackdropTemplate({ backdropID, backdropOpacity, backdropColor }) {\n const backdrop = element('div');\n\n Manipulator.addClass(backdrop, 'loading-backdrop');\n backdrop.id = backdropID;\n Manipulator.addStyle(backdrop, { opacity: backdropOpacity, backgroundColor: backdropColor });\n\n return backdrop;\n}\n","import { typeCheckConfig } from '../../mdb/util/index';\nimport Data from '../../mdb/dom/data';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport { getBackdropTemplate } from './templates';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\nconst NAME = 'loading';\nconst CLASS_SPINNER = 'loading-spinner';\nconst DATA_KEY = 'mdb.loading';\n\nconst SELECTOR_LOADING_ICON = '.loading-icon';\nconst SELECTOR_LOADING_TEXT = '.loading-text';\n\nconst SHOW_EVENT = 'show.mdb.loading';\n\nconst DefaultType = {\n backdrop: '(null|boolean)',\n backdropColor: 'string',\n backdropOpacity: '(number|string)',\n delay: '(null|number)',\n loader: 'string',\n loadingIcon: 'boolean',\n loadingText: 'boolean',\n scroll: 'boolean',\n};\n\nconst Default = {\n backdrop: true,\n backdropColor: 'rgba(0, 0, 0)',\n backdropOpacity: 0.4,\n backdropID: '',\n delay: null,\n loader: '',\n parentSelector: null,\n scroll: true,\n loadingText: true,\n loadingIcon: true,\n};\n\nclass Loading extends BaseComponent {\n constructor(element, options = {}) {\n super(element);\n\n this._options = this._getConfig(options);\n\n this._backdropElement = null;\n this._parentElement = SelectorEngine.findOne(this._options.parentSelector);\n\n this._loadingIcon = SelectorEngine.findOne(SELECTOR_LOADING_ICON, this._element);\n this._loadingText = SelectorEngine.findOne(SELECTOR_LOADING_TEXT, this._element);\n\n this.init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n\n init() {\n const spinnerCloned = this._loadingIcon.cloneNode(true);\n const loadingCloned = this._loadingText.cloneNode(true);\n\n this._removeElementsOnStart();\n\n setTimeout(() => {\n Manipulator.addClass(this._element, CLASS_SPINNER);\n\n this._setBackdrop();\n this._setLoadingIcon(spinnerCloned);\n this._setLoadingText(loadingCloned);\n this._setScrollOption();\n\n EventHandler.trigger(this._element, SHOW_EVENT);\n }, this._options.delay);\n }\n\n dispose() {\n Manipulator.removeClass(this._element, CLASS_SPINNER);\n\n const delay = this._options.delay;\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n setTimeout(() => {\n this._removeBackdrop();\n\n setTimeout(() => {\n super.dispose();\n }, delay);\n }, delay);\n }\n\n // Private\n\n _setBackdrop() {\n const { backdrop } = this._options;\n\n if (!backdrop) return;\n\n this._backdropElement = getBackdropTemplate(this._options);\n\n if (this._parentElement !== null) {\n Manipulator.addClass(this._element, 'position-absolute');\n Manipulator.addClass(this._parentElement, 'position-relative');\n Manipulator.addClass(this._backdropElement, 'position-absolute');\n\n this._parentElement.appendChild(this._backdropElement);\n } else {\n Manipulator.addClass(this._element, 'position-fixed');\n\n document.body.appendChild(this._backdropElement);\n document.body.appendChild(this._element);\n }\n }\n\n _removeBackdrop() {\n const { backdrop } = this._options;\n\n if (!backdrop) return;\n\n if (this._parentElement !== null) {\n Manipulator.removeClass(this._element, 'position-absolute');\n Manipulator.removeClass(this._parentElement, 'position-relative');\n\n this._backdropElement.remove();\n } else {\n this._backdropElement.remove();\n this._element.remove();\n }\n }\n\n _setLoadingIcon(spinner) {\n if (!this._options.loadingIcon) {\n spinner.remove();\n return;\n }\n this._element.appendChild(spinner);\n spinner.id = this._options.loader;\n }\n\n _setLoadingText(text) {\n if (!this._options.loadingText) {\n text.remove();\n return;\n }\n\n this._element.appendChild(text);\n }\n\n _removeElementsOnStart() {\n if (this._element === null) return;\n\n this._loadingIcon.remove();\n this._loadingText.remove();\n }\n\n _setScrollOption() {\n if (!this._options.scroll) {\n if (this._parentElement === null) {\n document.body.style.overflow = 'hidden';\n return;\n }\n\n Manipulator.addStyle(this._parentElement, { overflow: 'hidden' });\n } else {\n if (this._parentElement === null) {\n document.body.style.overflow = '';\n return;\n }\n\n Manipulator.addStyle(this._parentElement, { overflow: '' });\n }\n }\n\n _getConfig(options) {\n const config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...options,\n };\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n if (!data) {\n data = new Loading(this, _config);\n }\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n }\n });\n }\n}\n\nexport default Loading;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href',\n]);\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi;\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN =\n /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n const attrName = attr.nodeName.toLowerCase();\n\n if (allowedAttributeList.includes(attrName)) {\n if (uriAttrs.has(attrName)) {\n return Boolean(\n attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN)\n );\n }\n\n return true;\n }\n\n const regExp = allowedAttributeList.filter((attrRegex) => attrRegex instanceof RegExp);\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (regExp[i].test(attrName)) {\n return true;\n }\n }\n\n return false;\n};\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: [],\n};\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml);\n }\n\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const whitelistKeys = Object.keys(whiteList);\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i];\n const elName = el.nodeName.toLowerCase();\n\n if (whitelistKeys.indexOf(elName) === -1) {\n el.parentNode.removeChild(el);\n\n continue;\n }\n\n const attributeList = [].concat(...el.attributes);\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n\n attributeList.forEach((attr) => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName);\n }\n });\n }\n\n return createdDocument.body.innerHTML;\n}\n","import { element } from '../../mdb/util/index';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport { sanitizeHtml, DefaultWhitelist } from '../../mdb/util/sanitizer';\n\nconst CLASS_NAME_AUTOCOMPLETE_DROPDOWN_CONTAINER = 'autocomplete-dropdown-container';\nconst CLASS_NAME_AUTOCOMPLETE_DROPDOWN = 'autocomplete-dropdown';\nconst CLASS_NAME_AUTOCOMPLETE_ITEMS_LIST = 'autocomplete-items-list';\nconst CLASS_NAME_AUTOCOMPLETE_ITEM = 'autocomplete-item';\nconst CLASS_NAME_LOADER = 'autocomplete-loader';\nconst CLASS_NAME_SPINNER_BORDER = 'spinner-border';\nconst CLASS_NAME_NO_RESULTS = 'autocomplete-item autocomplete-no-results';\n\n// eslint-disable-next-line import/prefer-default-export\nexport function getDropdownTemplate(settings) {\n const { id, items, width, options } = settings;\n\n const dropdownContainer = element('div');\n Manipulator.addClass(dropdownContainer, CLASS_NAME_AUTOCOMPLETE_DROPDOWN_CONTAINER);\n Manipulator.addStyle(dropdownContainer, { width: `${width}px` });\n dropdownContainer.setAttribute('id', id);\n\n const dropdown = element('div');\n Manipulator.addClass(dropdown, CLASS_NAME_AUTOCOMPLETE_DROPDOWN);\n\n const itemsList = element('ul');\n const listHeight = options.listHeight;\n Manipulator.addClass(itemsList, CLASS_NAME_AUTOCOMPLETE_ITEMS_LIST);\n Manipulator.addStyle(itemsList, { maxHeight: `${listHeight}px` });\n itemsList.setAttribute('role', 'listbox');\n\n const itemsListTemplate = getItemsTemplate(items, options);\n\n itemsList.innerHTML = itemsListTemplate;\n\n dropdown.appendChild(itemsList);\n dropdownContainer.appendChild(dropdown);\n\n return dropdownContainer;\n}\n\nexport function getItemsTemplate(items = [], options) {\n const displayValue = options.displayValue;\n const itemContent = options.itemContent;\n return `\n ${items\n .map((item, index) => {\n const content =\n typeof itemContent === 'function'\n ? sanitizeHtml(itemContent(item), DefaultWhitelist, null)\n : displayValue(item);\n return `<li data-mdb-index=\"${index}\" role=\"option\" class=\"${CLASS_NAME_AUTOCOMPLETE_ITEM}\">${content}</li>`;\n })\n .join('')}\n `;\n}\n\nexport function getLoaderTemplate() {\n const container = element('div');\n Manipulator.addClass(container, CLASS_NAME_LOADER);\n Manipulator.addClass(container, CLASS_NAME_SPINNER_BORDER);\n container.setAttribute('role', 'status');\n\n const content = '<span class=\"sr-only\">Loading...</span>';\n container.innerHTML = content;\n\n return container;\n}\n\nexport function getNoResultsTemplate(message) {\n return `<li class=\"${CLASS_NAME_NO_RESULTS}\">${message}</li>`;\n}\n","import { createPopper } from '@popperjs/core';\nimport Data from '../../mdb/dom/data';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport { typeCheckConfig, getUID, defineJQueryPlugin } from '../../mdb/util/index';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport {\n getDropdownTemplate,\n getItemsTemplate,\n getLoaderTemplate,\n getNoResultsTemplate,\n} from './templates';\nimport { ESCAPE, UP_ARROW, DOWN_ARROW, HOME, END, ENTER, TAB } from '../../mdb/util/keycodes';\nimport { sanitizeHtml, DefaultWhitelist } from '../../mdb/util/sanitizer';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\nconst Default = {\n autoSelect: false,\n container: 'body',\n customContent: '',\n debounce: 300,\n displayValue: (value) => value,\n filter: null,\n itemContent: null,\n listHeight: 190,\n noResults: 'No results found',\n threshold: 0,\n};\n\nconst DefaultType = {\n autoSelect: 'boolean',\n container: 'string',\n customContent: 'string',\n debounce: 'number',\n displayValue: 'function',\n filter: '(null|function)',\n itemContent: '(null|function)',\n listHeight: 'number',\n noResults: 'string',\n threshold: 'number',\n};\n\nconst NAME = 'autocomplete';\nconst DATA_KEY = 'mdb.autocomplete';\n\nconst CLASS_NAME_CUSTOM_INPUT = 'autocomplete-input';\nconst CLASS_NAME_CUSTOM_LABEL = 'autocomplete-label';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FOCUSED = 'focused';\nconst CLASS_NAME_FOCUSING = 'focusing';\nconst CLASS_NAME_OPEN = 'open';\n\nconst SELECTOR_DROPDOWN = '.autocomplete-dropdown';\nconst SELECTOR_ITEMS_LIST = '.autocomplete-items-list';\nconst SELECTOR_ITEM = '.autocomplete-item';\nconst SELECTOR_LOADER = '.autocomplete-loader';\nconst SELECTOR_INPUT = '.form-control';\nconst SELECTOR_LABEL = '.form-label';\nconst SELECTOR_CUSTOM_CONTENT = '.autocomplete-custom-content';\n\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLOSE = `close${EVENT_KEY}`;\nconst EVENT_OPEN = `open${EVENT_KEY}`;\nconst EVENT_SELECT = `itemSelect${EVENT_KEY}`;\nconst EVENT_UPDATE = `update${EVENT_KEY}`;\n\nconst LOADER_CLOSE_DELAY = 300;\n\nclass Autocomplete extends BaseComponent {\n constructor(element, options) {\n super(element);\n\n this._options = this._getConfig(options);\n this._getContainer();\n this._input = SelectorEngine.findOne(SELECTOR_INPUT, element);\n this._label = SelectorEngine.findOne(SELECTOR_LABEL, element);\n this._customContent = SelectorEngine.findOne(SELECTOR_CUSTOM_CONTENT, element);\n this._loader = getLoaderTemplate();\n this._popper = null;\n this._debounceTimeoutId = null;\n this._loaderTimeout = null;\n this._activeItemIndex = -1;\n this._activeItem = null;\n this._filteredResults = null;\n this._lastQueryValue = null;\n this._canOpenOnFocus = true;\n this._isOpen = false;\n\n this._outsideClickHandler = this._handleOutsideClick.bind(this);\n this._inputFocusHandler = this._handleInputFocus.bind(this);\n this._userInputHandler = this._handleUserInput.bind(this);\n this._keydownHandler = this._handleKeydown.bind(this);\n\n this._init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n static get NAME() {\n return NAME;\n }\n\n get filter() {\n return this._options.filter;\n }\n\n get dropdown() {\n return SelectorEngine.findOne(SELECTOR_DROPDOWN, this._dropdownContainer);\n }\n\n get items() {\n return SelectorEngine.find(SELECTOR_ITEM, this._dropdownContainer);\n }\n\n get itemsList() {\n return SelectorEngine.findOne(SELECTOR_ITEMS_LIST, this._dropdownContainer);\n }\n\n search(value) {\n this._filterResults(value);\n }\n\n _getContainer() {\n this._container = SelectorEngine.findOne(this._options.container);\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n config = {\n ...Default,\n ...dataAttributes,\n ...config,\n };\n\n typeCheckConfig(NAME, config, DefaultType);\n\n return config;\n }\n\n _init() {\n this._initDropdown();\n this._setInputAndLabelClasses();\n this._updateLabelPosition();\n this._setInputAriaAttributes();\n this._listenToInputFocus();\n this._listenToUserInput();\n this._listenToKeydown();\n }\n\n _initDropdown() {\n this._dropdownContainerId = this._element.id\n ? `autocomplete-dropdown-${this._element.id}`\n : getUID('autocomplete-dropdown-');\n const settings = {\n id: this._dropdownContainerId,\n items: [],\n width: this._input.offsetWidth,\n options: this._options,\n };\n\n this._dropdownContainer = getDropdownTemplate(settings);\n\n if (this._options.customContent !== '') {\n const customContent = this._options.customContent;\n const sanitizedCustomContent = sanitizeHtml(customContent, DefaultWhitelist, null);\n this.dropdown.insertAdjacentHTML('beforeend', sanitizedCustomContent);\n }\n }\n\n _setInputAndLabelClasses() {\n Manipulator.addClass(this._input, CLASS_NAME_CUSTOM_INPUT);\n\n if (this._label) {\n Manipulator.addClass(this._label, CLASS_NAME_CUSTOM_LABEL);\n }\n }\n\n _setInputAriaAttributes() {\n this._input.setAttribute('role', 'combobox');\n this._input.setAttribute('aria-expanded', false);\n this._input.setAttribute('aria-owns', this._dropdownContainerId);\n this._input.setAttribute('aria-haspopup', true);\n this._input.setAttribute('autocomplete', 'off');\n }\n\n _updateLabelPosition() {\n if (!this._label) {\n return;\n }\n\n if (this._input.value !== '' || this._isOpen) {\n Manipulator.addClass(this._label, CLASS_NAME_ACTIVE);\n } else {\n Manipulator.removeClass(this._label, CLASS_NAME_ACTIVE);\n }\n }\n\n _listenToInputFocus() {\n EventHandler.on(this._input, 'focus', this._inputFocusHandler);\n }\n\n _handleInputFocus(event) {\n const { value } = event.target;\n const threshold = this._options.threshold;\n\n if (!this._canOpenOnFocus) {\n this._canOpenOnFocus = true;\n return;\n }\n\n if (value.length < threshold) {\n return;\n }\n\n if (this._lastQueryValue !== value) {\n this._filterResults(value);\n } else {\n this.open();\n }\n }\n\n _listenToWindowResize() {\n EventHandler.on(window, 'resize', this._handleWindowResize.bind(this));\n }\n\n _handleWindowResize() {\n if (this._dropdownContainer) {\n this._updateDropdownWidth();\n }\n }\n\n _updateDropdownWidth() {\n const inputWidth = this._input.offsetWidth;\n Manipulator.addStyle(this._dropdownContainer, { width: `${inputWidth}px` });\n }\n\n _listenToUserInput() {\n EventHandler.on(this._input, 'input', this._userInputHandler);\n }\n\n _handleUserInput(event) {\n const { value } = event.target;\n const threshold = this._options.threshold;\n const debounceTime = this._options.debounce;\n\n if (!this.filter) {\n return;\n }\n\n if (value.length < threshold) {\n if (this._isOpen) {\n this.close();\n }\n return;\n }\n\n this._debounceFilter(value, debounceTime);\n }\n\n _debounceFilter(searchTerm, debounceTime) {\n if (this._debounceTimeoutId) {\n clearTimeout(this._debounceTimeoutId);\n }\n\n this._debounceTimeoutId = setTimeout(() => {\n this._filterResults(searchTerm);\n }, debounceTime);\n }\n\n _filterResults(value) {\n this._lastQueryValue = value;\n const data = this.filter(value);\n\n if (this._isPromise(data)) {\n this._asyncUpdateResults(data);\n } else {\n this._updateResults(data);\n }\n }\n\n _isPromise(value) {\n return !!value && typeof value.then === 'function';\n }\n\n _asyncUpdateResults(data) {\n this._resetActiveItem();\n this._showLoader();\n\n data.then((items) => {\n this._updateResults(items);\n\n this._loaderTimeout = setTimeout(() => {\n this._hideLoader();\n this._loaderTimeout = null;\n }, LOADER_CLOSE_DELAY);\n });\n }\n\n _resetActiveItem() {\n const currentActive = this._activeItem;\n\n if (currentActive) {\n Manipulator.removeClass(currentActive, 'active');\n this._activeItem = null;\n this._activeItemIndex = -1;\n }\n }\n\n _showLoader() {\n this._element.appendChild(this._loader);\n }\n\n _hideLoader() {\n const loader = SelectorEngine.findOne(SELECTOR_LOADER, this._element);\n\n if (loader) {\n this._element.removeChild(this._loader);\n }\n }\n\n _updateResults(data) {\n this._resetActiveItem();\n this._filteredResults = data;\n EventHandler.trigger(this._element, EVENT_UPDATE, { results: data });\n\n const itemsList = SelectorEngine.findOne('.autocomplete-items-list', this._dropdownContainer);\n const newTemplate = getItemsTemplate(data, this._options);\n const noResultsTemplate = getNoResultsTemplate(this._options.noResults);\n\n if (data.length === 0 && this._options.noResults !== '') {\n itemsList.innerHTML = noResultsTemplate;\n } else {\n itemsList.innerHTML = newTemplate;\n }\n\n if (!this._isOpen) {\n this.open();\n }\n\n if (this._popper) {\n this._popper.forceUpdate();\n }\n }\n\n _listenToKeydown() {\n EventHandler.on(this._element, 'keydown', this._keydownHandler);\n }\n\n _handleKeydown(event) {\n if (this._isOpen) {\n this._handleOpenKeydown(event);\n } else {\n this._handleClosedKeydown(event);\n }\n }\n\n _handleOpenKeydown(event) {\n const key = event.keyCode;\n\n if (key === TAB && this._options.autoSelect) {\n this._selectActiveItem();\n }\n\n // fix for flashing notch\n if (key === ESCAPE || (key === UP_ARROW && event.altKey)) {\n if (!this._input.value) {\n Manipulator.addClass(this._input, CLASS_NAME_FOCUSING);\n }\n\n this.close();\n this._input.focus();\n\n if (!this._input.value) {\n setTimeout(() => {\n Manipulator.removeClass(this._input, CLASS_NAME_FOCUSING);\n }, 10);\n }\n return;\n }\n\n const isCloseKey = key === ESCAPE || (key === UP_ARROW && event.altKey) || key === TAB;\n\n if (isCloseKey) {\n this.close();\n this._input.focus();\n return;\n }\n\n switch (key) {\n case DOWN_ARROW:\n this._setActiveItem(this._activeItemIndex + 1);\n this._scrollToItem(this._activeItem);\n break;\n case UP_ARROW:\n this._setActiveItem(this._activeItemIndex - 1);\n this._scrollToItem(this._activeItem);\n break;\n case HOME:\n if (this._activeItemIndex > -1) {\n this._setActiveItem(0);\n this._scrollToItem(this._activeItem);\n } else {\n this._input.setSelectionRange(0, 0);\n }\n break;\n case END:\n if (this._activeItemIndex > -1) {\n this._setActiveItem(this.items.length - 1);\n this._scrollToItem(this._activeItem);\n } else {\n const end = this._input.value.length;\n this._input.setSelectionRange(end, end);\n }\n break;\n case ENTER:\n event.preventDefault();\n if (this._activeItemIndex > -1) {\n const item = this._filteredResults[this._activeItemIndex];\n this._handleSelection(item);\n }\n return;\n default:\n return;\n }\n\n event.preventDefault();\n }\n\n _setActiveItem(index) {\n const items = this.items;\n\n if (!items[index]) {\n return;\n }\n\n this._updateActiveItem(items[index], index);\n }\n\n _updateActiveItem(newActiveItem, index) {\n const currentActiveItem = this._activeItem;\n\n if (currentActiveItem) {\n Manipulator.removeClass(currentActiveItem, 'active');\n }\n\n Manipulator.addClass(newActiveItem, 'active');\n this._activeItemIndex = index;\n this._activeItem = newActiveItem;\n }\n\n _scrollToItem(item) {\n if (!item) {\n return;\n }\n\n const list = this.itemsList;\n const listHeight = list.offsetHeight;\n const itemIndex = this.items.indexOf(item);\n const itemHeight = item.offsetHeight;\n const scrollTop = list.scrollTop;\n\n if (itemIndex > -1) {\n const itemOffset = itemIndex * itemHeight;\n const isBelow = itemOffset + itemHeight > scrollTop + listHeight;\n const isAbove = itemOffset < scrollTop;\n\n if (isAbove) {\n list.scrollTop = itemOffset;\n } else if (isBelow) {\n list.scrollTop = itemOffset - listHeight + itemHeight;\n } else {\n list.scrollTop = scrollTop;\n }\n }\n }\n\n _handleClosedKeydown(event) {\n if (event.key === 'Enter') {\n event.preventDefault();\n }\n const key = event.keyCode;\n const isOpenKey = key === ENTER || key === DOWN_ARROW || key === DOWN_ARROW;\n\n if (isOpenKey) {\n this.open();\n }\n }\n\n open() {\n if (this._lastQueryValue === null) {\n this._filterResults('');\n }\n\n const openEvent = EventHandler.trigger(this._element, EVENT_OPEN);\n\n if (this._isOpen || openEvent.defaultPrevented) {\n return;\n }\n this._updateDropdownWidth();\n this._listenToWindowResize();\n\n this._popper = createPopper(this._element, this._dropdownContainer, {\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: [0, 1],\n },\n },\n ],\n });\n this._container.appendChild(this._dropdownContainer);\n\n this._listenToOutsideClick();\n this._listenToItemsClick();\n\n // We need to add delay to wait for the popper initialization\n // and position update\n setTimeout(() => {\n Manipulator.addClass(this.dropdown, CLASS_NAME_OPEN);\n this._isOpen = true;\n this._setInputActiveStyles();\n this._updateLabelPosition();\n }, 0);\n }\n\n _listenToOutsideClick() {\n EventHandler.on(document, 'click', this._outsideClickHandler);\n }\n\n _handleOutsideClick(event) {\n const isInput = this._input === event.target;\n const isDropdown = event.target === this._dropdownContainer;\n const isDropdownContent =\n this._dropdownContainer && this._dropdownContainer.contains(event.target);\n\n if (!isInput && !isDropdown && !isDropdownContent) {\n this.close();\n }\n }\n\n _listenToItemsClick() {\n const itemsList = SelectorEngine.findOne(SELECTOR_ITEMS_LIST, this._dropdownContainer);\n EventHandler.on(itemsList, 'click', this._handleItemsClick.bind(this));\n }\n\n _handleItemsClick(event) {\n const target = SelectorEngine.closest(event.target, SELECTOR_ITEM);\n const targetIndex = Manipulator.getDataAttribute(target, 'index');\n const item = this._filteredResults[targetIndex];\n\n this._handleSelection(item);\n }\n\n _selectActiveItem() {\n const item = this._filteredResults[this._activeItemIndex];\n\n if (!item) {\n return;\n }\n\n const value = this._options.displayValue(item);\n const selectEvent = EventHandler.trigger(this._element, EVENT_SELECT, { value: item });\n\n if (selectEvent.defaultPrevented) {\n return;\n }\n\n setTimeout(() => {\n this._canOpenOnFocus = false;\n this._updateInputValue(value);\n this._updateLabelPosition();\n }, 0);\n }\n\n _handleSelection(item) {\n const value = this._options.displayValue(item);\n const selectEvent = EventHandler.trigger(this._element, EVENT_SELECT, { value: item });\n\n if (item === undefined) {\n return;\n }\n\n if (selectEvent.defaultPrevented) {\n return;\n }\n\n setTimeout(() => {\n this._canOpenOnFocus = false;\n this._updateInputValue(value);\n this._updateLabelPosition();\n this._input.focus();\n this.close();\n }, 0);\n }\n\n _updateInputValue(value) {\n this._input.value = value;\n }\n\n _setInputActiveStyles() {\n Manipulator.addClass(this._input, CLASS_NAME_FOCUSED);\n }\n\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n if (!this._isOpen || closeEvent.defaultPrevented) {\n return;\n }\n\n this._resetActiveItem();\n this._removeDropdownEvents();\n\n Manipulator.removeClass(this.dropdown, CLASS_NAME_OPEN);\n\n EventHandler.on(this.dropdown, 'transitionend', this._handleDropdownTransitionEnd.bind(this));\n\n Manipulator.removeClass(this._input, CLASS_NAME_FOCUSED);\n Manipulator.removeClass(this._input, CLASS_NAME_ACTIVE);\n\n if (!this._input.value && this._label) {\n Manipulator.removeClass(this._label, CLASS_NAME_ACTIVE);\n }\n }\n\n _removeDropdownEvents() {\n const itemsList = SelectorEngine.findOne(SELECTOR_ITEMS_LIST, this._dropdownContainer);\n EventHandler.off(itemsList, 'click');\n EventHandler.off(document, 'click', this._outsideClickHandler);\n EventHandler.off(window, 'resize', this._handleWindowResize.bind(this));\n }\n\n _handleDropdownTransitionEnd(event) {\n // This event fires for each animated property. We only want\n // to run this code once\n if (this._isOpen && event && event.propertyName === 'opacity') {\n this._popper.destroy();\n\n if (this._dropdownContainer) {\n this._container.removeChild(this._dropdownContainer);\n }\n\n this._isOpen = false;\n EventHandler.off(this.dropdown, 'transitionend');\n }\n }\n\n dispose() {\n if (this._isOpen) {\n this.close();\n }\n\n this._removeInputAndElementEvents();\n this._dropdownContainer.remove();\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n _removeInputAndElementEvents() {\n EventHandler.off(this._input, 'focus', this._inputFocusHandler);\n EventHandler.off(this._input, 'input', this._userInputHandler);\n EventHandler.off(this._element, 'keydown', this._keydownHandler);\n }\n\n static jQueryInterface(config, options) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data && /dispose/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Autocomplete(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](options);\n }\n });\n }\n}\n\ndefineJQueryPlugin(Autocomplete);\n\nexport default Autocomplete;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js';\nimport EventHandler from './dom/event-handler.js';\nimport SelectorEngine from './dom/selector-engine.js';\nimport Backdrop from './util/backdrop.js';\nimport { enableDismissTrigger } from './util/component-functions.js';\nimport FocusTrap from './util/focustrap.js';\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js';\nimport ScrollBarHelper from './util/scrollbar.js';\n\n/**\n * Constants\n */\n\nconst NAME = 'modal';\nconst DATA_KEY = 'bs.modal';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\nconst ESCAPE_KEY = 'Escape';\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;\n\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\n\nconst OPEN_SELECTOR = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE = '[data-mdb-toggle=\"modal\"]';\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true,\n};\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean',\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._isShown = false;\n this._isTransitioning = false;\n this._scrollBar = new ScrollBarHelper();\n\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n\n static get DefaultType() {\n return DefaultType;\n }\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return;\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget,\n });\n\n if (showEvent.defaultPrevented) {\n return;\n }\n\n this._isShown = true;\n this._isTransitioning = true;\n\n this._scrollBar.hide();\n\n document.body.classList.add(CLASS_NAME_OPEN);\n\n this._adjustDialog();\n\n this._backdrop.show(() => this._showElement(relatedTarget));\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n this._isShown = false;\n this._isTransitioning = true;\n this._focustrap.deactivate();\n\n this._element.classList.remove(CLASS_NAME_SHOW);\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n }\n\n dispose() {\n EventHandler.off(window, EVENT_KEY);\n EventHandler.off(this._dialog, EVENT_KEY);\n\n this._backdrop.dispose();\n this._focustrap.deactivate();\n\n super.dispose();\n }\n\n handleUpdate() {\n this._adjustDialog();\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop) && Boolean(!this._config.modalNonInvasive), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated(),\n });\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element,\n });\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element);\n }\n\n this._element.style.display = 'block';\n this._element.removeAttribute('aria-hidden');\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.scrollTop = 0;\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n if (modalBody) {\n modalBody.scrollTop = 0;\n }\n\n reflow(this._element);\n\n this._element.classList.add(CLASS_NAME_SHOW);\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate();\n }\n\n this._isTransitioning = false;\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget,\n });\n };\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, (event) => {\n if (event.key !== ESCAPE_KEY) {\n return;\n }\n\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n\n this._triggerBackdropTransition();\n });\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog();\n }\n });\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, (event) => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, (event2) => {\n if (this._element !== event.target || this._element !== event2.target) {\n return;\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition();\n return;\n }\n\n if (this._config.backdrop) {\n this.hide();\n }\n });\n });\n }\n\n _hideModal() {\n this._element.style.display = 'none';\n this._element.setAttribute('aria-hidden', true);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n this._isTransitioning = false;\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN);\n this._resetAdjustments();\n this._scrollBar.reset();\n EventHandler.trigger(this._element, EVENT_HIDDEN);\n });\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE);\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const initialOverflowY = this._element.style.overflowY;\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return;\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n\n this._element.classList.add(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY;\n }, this._dialog);\n }, this._dialog);\n\n this._element.focus();\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const scrollbarWidth = this._scrollBar.getWidth();\n const isBodyOverflowing = scrollbarWidth > 0;\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config);\n\n if (typeof config !== 'string') {\n return;\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](relatedTarget);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\n// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n// const target = SelectorEngine.getElementFromSelector(this);\n\n// if (['A', 'AREA'].includes(this.tagName)) {\n// event.preventDefault();\n// }\n\n// EventHandler.one(target, EVENT_SHOW, (showEvent) => {\n// if (showEvent.defaultPrevented) {\n// // only register focus restorer if modal will actually get shown\n// return;\n// }\n\n// EventHandler.one(target, EVENT_HIDDEN, () => {\n// if (isVisible(this)) {\n// this.focus();\n// }\n// });\n// });\n\n// // avoid conflict when clicking modal toggler while another one is open\n// const allreadyOpenedModals = SelectorEngine.find(OPEN_SELECTOR);\n// allreadyOpenedModals.forEach((modal) => {\n// if (!modal.classList.contains('modal-non-invasive-show')) {\n// Modal.getInstance(modal).hide();\n// }\n// });\n\n// const data = Modal.getOrCreateInstance(target);\n\n// data.toggle(this);\n// });\n\n// enableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\n// defineJQueryPlugin(Modal);\n\nexport default Modal;\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine';\nimport Manipulator from '../dom/manipulator';\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nconst getWidth = () => {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n};\n\nconst hide = (width = getWidth()) => {\n _disableOverFlow();\n // give padding to element to balances the hidden scrollbar width\n _setElementAttributes('body', 'paddingRight', (calculatedValue) => calculatedValue + width);\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements, to keep shown fullwidth\n _setElementAttributes(\n SELECTOR_FIXED_CONTENT,\n 'paddingRight',\n (calculatedValue) => calculatedValue + width\n );\n _setElementAttributes(\n SELECTOR_STICKY_CONTENT,\n 'marginRight',\n (calculatedValue) => calculatedValue - width\n );\n};\n\nconst _disableOverFlow = () => {\n const actualValue = document.body.style.overflow;\n if (actualValue) {\n Manipulator.setDataAttribute(document.body, 'overflow', actualValue);\n }\n\n document.body.style.overflow = 'hidden';\n};\n\nconst _setElementAttributes = (selector, styleProp, callback) => {\n const scrollbarWidth = getWidth();\n SelectorEngine.find(selector).forEach((element) => {\n if (element !== document.body && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return;\n }\n\n const actualValue = element.style[styleProp];\n const calculatedValue = window.getComputedStyle(element)[styleProp];\n Manipulator.setDataAttribute(element, styleProp, actualValue);\n element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n });\n};\n\nconst reset = () => {\n _resetElementAttributes('body', 'overflow');\n _resetElementAttributes('body', 'paddingRight');\n _resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n _resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n};\n\nconst _resetElementAttributes = (selector, styleProp) => {\n SelectorEngine.find(selector).forEach((element) => {\n const value = Manipulator.getDataAttribute(element, styleProp);\n if (typeof value === 'undefined') {\n element.style.removeProperty(styleProp);\n } else {\n Manipulator.removeDataAttribute(element, styleProp);\n element.style[styleProp] = value;\n }\n });\n};\n\nconst isBodyOverflowing = () => {\n return getWidth() > 0;\n};\n\nexport { getWidth, hide, isBodyOverflowing, reset };\n","import { typeCheckConfig, getElementFromSelector } from '../mdb/util/index';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Data from '../mdb/dom/data';\nimport Manipulator from '../mdb/dom/manipulator';\nimport BSModal from '../bootstrap/mdb-prefix/modal';\nimport { reset as scrollBarReset } from '../mdb/util/scrollbar';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal';\nconst DATA_KEY = 'bs.modal';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\n// width below which, according to css rules, modal position changes - modal gets position relative instead of absolute.\nconst MODAL_CSS_BREAKPOINT = 992;\n\nconst NON_INVASIVE_CLASS = 'modal-non-invasive-open';\nconst NON_INVASIVE_SHOW_CLASS = 'modal-non-invasive-show';\nconst SHOW_CLASS = 'show';\nconst MODAL_CLASS = 'modal';\nconst MODAL_OPEN_CLASS = 'modal-open';\nconst MODAL_CONTENT_CLASS = 'modal-content';\nconst MODAL_BOTTOM_CLASS = 'modal-bottom';\nconst MODAL_BOTTOM_RIGHT_CLASS = 'modal-bottom-right';\nconst MODAL_BOTTOM_LEFT_CLASS = 'modal-bottom-left';\nconst MODAL_TOP_RIGHT_CLASS = 'modal-top-right';\nconst MODAL_TOP_LEFT_CLASS = 'modal-top-left';\nconst MODAL_DIALOG_SCROLLABLE_CLASS = 'modal-dialog-scrollable';\nconst MODAL_DIALOG_CLASS = 'modal-dialog';\n\nconst SELECTOR_MODAL_CONTENT = `.${MODAL_CONTENT_CLASS}`;\nconst SELECTOR_MODAL_BOTTOM = `.${MODAL_BOTTOM_CLASS}`;\nconst SELECTOR_MODAL_BOTTOM_RIGHT = `.${MODAL_BOTTOM_RIGHT_CLASS}`;\nconst SELECTOR_MODAL_BOTTOM_LEFT = `.${MODAL_BOTTOM_LEFT_CLASS}`;\nconst SELECTOR_MODAL_TOP_RIGHT = `.${MODAL_TOP_RIGHT_CLASS}`;\nconst SELECTOR_MODAL_TOP_LEFT = `.${MODAL_TOP_LEFT_CLASS}`;\nconst SELECTOR_MODAL_DIALOG_SCROLLABLE = `.${MODAL_DIALOG_SCROLLABLE_CLASS}`;\nconst SELECTOR_MODAL_DIALOG = `.${MODAL_DIALOG_CLASS}`;\n\nconst EVENT_SHOW_BS_MODAL = `show${EVENT_KEY}`;\nconst EVENT_SHOWN_BS_MODAL = `shown${EVENT_KEY}`;\nconst EVENT_HIDDEN_BS_MODAL = `hidden${EVENT_KEY}`;\nconst EVENT_HIDE_BS_MODAL = 'hide.bs.modal';\nconst EVENT_HIDE_PREVENTED_BS_MODAL = 'hidePrevented.bs.modal';\n\nconst EXTENDED_EVENTS = [\n { name: 'show', parametersToCopy: ['relatedTarget'] },\n { name: 'shown', parametersToCopy: ['relatedTarget'] },\n { name: 'hide' },\n { name: 'hidePrevented' },\n { name: 'hidden' },\n];\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true,\n modalNonInvasive: false,\n};\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean',\n modalNonInvasive: 'boolean',\n};\n\nclass Modal extends BSModal {\n constructor(element, data) {\n super(element, data);\n this._config = this._getConfig(data);\n this._modalContentRect = '';\n this._modalContentComputedStyles = '';\n this._isNonInvasive = this._config.modalNonInvasive;\n this._isScrollable = '';\n this._isBottomRight = '';\n this._isBottomLeft = '';\n this._isTopRight = '';\n this._isTopLeft = '';\n this._isSideTopModal = '';\n this._isSideBottomModal = '';\n this._isSideModal = '';\n this._isModalBottom = '';\n\n if (this._isNonInvasive) {\n this._config.backdrop = false;\n this._config.focus = false;\n this._isBodyOverflowing = true;\n this._onModalShow();\n this._onModalShown();\n this._onModalHidden();\n this._listenToWindowResize();\n }\n Data.setData(element, DATA_KEY, this);\n\n this._bindMdbEvents();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n // Getters\n static get NAME() {\n return NAME;\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_SHOW_BS_MODAL);\n EventHandler.off(this._element, EVENT_SHOWN_BS_MODAL);\n EventHandler.off(this._element, EVENT_HIDE_BS_MODAL);\n EventHandler.off(this._element, EVENT_HIDDEN_BS_MODAL);\n EventHandler.off(this._element, EVENT_HIDE_PREVENTED_BS_MODAL);\n\n this._modalContentRect = null;\n this._modalContentComputedStyles = null;\n this._isNonInvasive = null;\n this._isScrollable = null;\n this._isBottomRight = null;\n this._isBottomLeft = null;\n this._isTopRight = null;\n this._isTopLeft = null;\n this._isSideTopModal = null;\n this._isSideBottomModal = null;\n this._isSideModal = null;\n this._isModalBottom = null;\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Private\n _onModalShow() {\n EventHandler.on(this._element, EVENT_SHOW_BS_MODAL, () => {\n this._addNonInvasiveClass();\n });\n }\n\n _onModalShown() {\n EventHandler.on(this._element, EVENT_SHOWN_BS_MODAL, () => {\n const modalContent = SelectorEngine.findOne(SELECTOR_MODAL_CONTENT, this._element);\n\n this._isScrollable = SelectorEngine.findOne(SELECTOR_MODAL_DIALOG_SCROLLABLE, this._element);\n this._isBottomRight = SelectorEngine.findOne(SELECTOR_MODAL_BOTTOM_RIGHT, this._element);\n this._isBottomLeft = SelectorEngine.findOne(SELECTOR_MODAL_BOTTOM_LEFT, this._element);\n this._isTopRight = SelectorEngine.findOne(SELECTOR_MODAL_TOP_RIGHT, this._element);\n this._isTopLeft = SelectorEngine.findOne(SELECTOR_MODAL_TOP_LEFT, this._element);\n this._isSideTopModal = this._isTopLeft || this._isTopRight;\n this._isSideBottomModal = this._isBottomLeft || this._isBottomRight;\n this._isSideModal = this._isSideTopModal || this._isSideBottomModal;\n this._isModalBottom = SelectorEngine.findOne(SELECTOR_MODAL_BOTTOM, this._element);\n this._modalContentRect = modalContent.getBoundingClientRect();\n this._modalContentComputedStyles = window.getComputedStyle(modalContent);\n this._modalDialogComputedStyles = window.getComputedStyle(\n SelectorEngine.findOne(SELECTOR_MODAL_DIALOG, this._element)\n );\n this._topOffset = parseInt(this._modalDialogComputedStyles.top, 0);\n this._leftOffset = parseInt(this._modalDialogComputedStyles.left, 0);\n this._rightOffset = parseInt(this._modalDialogComputedStyles.right, 0);\n this._bottomOffset = parseInt(this._modalDialogComputedStyles.bottom, 0);\n\n this._addOpenClass();\n this._setStyles();\n });\n }\n\n _listenToWindowResize() {\n EventHandler.on(window, 'resize', this._handleWindowResize.bind(this));\n }\n\n _handleWindowResize() {\n const modalContent = SelectorEngine.findOne(SELECTOR_MODAL_CONTENT, this._element);\n this._resetStyles();\n\n this._modalContentRect = modalContent.getBoundingClientRect();\n this._modalContentComputedStyles = window.getComputedStyle(modalContent);\n\n if (this._isSideTopModal || this._isSideBottomModal) {\n let sideOffset = 0;\n let topOffset = 0;\n if (this._isBottomRight || this._isBottomLeft) {\n topOffset = -this._bottomOffset;\n }\n if (this._isBottomRight || this._isTopRight) {\n sideOffset = -this._rightOffset;\n }\n if (this._isBottomLeft || this._isTopLeft) {\n sideOffset = this._leftOffset;\n }\n\n this._setStyles(sideOffset, topOffset);\n\n return;\n }\n this._setStyles();\n }\n\n _showBackdrop(callback) {\n if (this._isNonInvasive) {\n if (typeof callback === 'function') {\n callback();\n }\n } else {\n super._showBackdrop(callback);\n }\n }\n\n _adjustDialog() {\n super._adjustDialog();\n const isNonInvasiveModalOpen = document.body.classList.contains(NON_INVASIVE_CLASS);\n\n if (this._isNonInvasive || isNonInvasiveModalOpen) {\n this._isBodyOverflowing = false;\n }\n\n if (this._isNonInvasive) {\n this._resetAdjustments();\n scrollBarReset();\n }\n }\n\n _onModalHidden() {\n EventHandler.on(this._element, EVENT_HIDDEN_BS_MODAL, (e) => {\n // Prevent Bootstrap default behavior - focus the button after closing the modal. Users still can use this event\n e.stopImmediatePropagation();\n this._removeOpenClass();\n this._resetStyles();\n this._removeNonInvasiveClass();\n });\n }\n\n _addOpenClass() {\n this._element.classList.add(NON_INVASIVE_SHOW_CLASS);\n }\n\n _removeOpenClass() {\n this._element.classList.remove(NON_INVASIVE_SHOW_CLASS);\n }\n\n _addNonInvasiveClass() {\n document.body.classList.add(NON_INVASIVE_CLASS);\n }\n\n _removeNonInvasiveClass() {\n const isOtherModalOpen = SelectorEngine.findOne(\n `.${MODAL_CLASS}.${SHOW_CLASS}.${NON_INVASIVE_SHOW_CLASS}`,\n document.body\n );\n\n if (!isOtherModalOpen) {\n document.body.classList.remove(NON_INVASIVE_CLASS);\n } else {\n // if other modal open add bootstrap modal open class back\n document.body.classList.add(MODAL_OPEN_CLASS);\n }\n }\n\n _setStyles(leftOffset = 0, topOffset = 0) {\n const isAboveBreakpoint = window.innerWidth >= MODAL_CSS_BREAKPOINT;\n this._element.style.left = `${this._modalContentRect.left + leftOffset}px`;\n this._element.style.width = this._modalContentComputedStyles.width;\n\n if (!this._isScrollable) {\n this._element.style.height = this._modalContentComputedStyles.height;\n this._element.style.display = '';\n }\n\n if (isAboveBreakpoint) {\n if (this._isSideBottomModal || this._isModalBottom) {\n this._element.style.top = `${this._modalContentRect.top + topOffset}px`;\n }\n\n if (this._isSideModal) {\n this._element.style.overflowX = 'auto';\n }\n }\n\n if (!isAboveBreakpoint) {\n this._element.style.height = '';\n }\n }\n\n _resetStyles() {\n this._element.style.left = '';\n this._element.style.top = '';\n this._element.style.height = '';\n this._element.style.width = '';\n\n if (!this._isScrollable) {\n this._element.style.display = '';\n }\n\n if (this._isSideModal) {\n this._element.style.overflowX = '';\n }\n }\n\n _getConfig(options) {\n let target;\n if (this._element) {\n target = getElementFromSelector(this._element);\n }\n\n const config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...Manipulator.getDataAttributes(target),\n ...options,\n };\n\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n\n // Private\n _bindMdbEvents() {\n EventHandler.extend(this._element, EXTENDED_EVENTS, NAME);\n }\n\n // Static\n\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = {\n ...Default,\n ...Manipulator.getDataAttributes(this),\n // eslint-disable-next-line no-extra-parens\n ...(typeof config === 'object' && config ? config : {}),\n };\n\n if (!data) {\n data = new Modal(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](relatedTarget);\n } else if (_config.show) {\n data.show(relatedTarget);\n }\n });\n }\n}\n\nexport default Modal;\n","import { typeCheckConfig, element } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\nimport BaseComponent from '../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'clipboard';\nconst DATA_KEY = 'mdb.clipboard';\nconst EVENT_KEY = `.${DATA_KEY}`;\n\nconst DEFAULT_OPTIONS = {\n clipboardTarget: null,\n};\n\nconst OPTIONS_TYPE = {\n clipboardTarget: 'null|string',\n};\n\nconst EVENT_COPIED = `copied${EVENT_KEY}`;\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Clipboard extends BaseComponent {\n constructor(element, options = {}) {\n super(element);\n\n this._options = options;\n\n if (this._element) {\n this._initCopy = this._initCopy.bind(this);\n\n this._setup();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n get options() {\n const config = {\n ...DEFAULT_OPTIONS,\n ...Manipulator.getDataAttributes(this._element),\n ...this._options,\n };\n\n typeCheckConfig(NAME, config, OPTIONS_TYPE);\n\n return config;\n }\n\n get clipboardTarget() {\n return SelectorEngine.findOne(this.options.clipboardTarget);\n }\n\n get copyText() {\n const clipboardTextExist = this.clipboardTarget.hasAttribute('data-mdb-clipboard-text');\n const inputValue = this.clipboardTarget.value;\n const targetText = this.clipboardTarget.textContent;\n\n if (clipboardTextExist) {\n return this.clipboardTarget.getAttribute('data-mdb-clipboard-text');\n }\n\n if (inputValue) {\n return inputValue;\n }\n\n return targetText;\n }\n\n // Public\n\n dispose() {\n EventHandler.off(this._element, 'click', this._initCopy);\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Private\n _setup() {\n EventHandler.on(this._element, 'click', this._initCopy);\n }\n\n _initCopy() {\n const inputToCopy = this._createNewInput();\n document.body.appendChild(inputToCopy);\n this._selectInput(inputToCopy);\n EventHandler.trigger(this._element, EVENT_COPIED, { copyText: this.copyText });\n\n inputToCopy.remove();\n }\n\n _createNewInput() {\n const tag = this.clipboardTarget.tagName === 'TEXTAREA' ? 'textarea' : 'input';\n const newInput = element(tag);\n newInput.value = this.copyText;\n Manipulator.style(newInput, { left: '-9999px', position: 'absolute' });\n\n return newInput;\n }\n\n _selectInput(input) {\n input.select();\n input.focus();\n input.setSelectionRange(0, 99999);\n\n document.execCommand('copy');\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new Clipboard(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n }\n });\n }\n}\n\nexport default Clipboard;\n","/* eslint-disable import/prefer-default-export */\nexport const getInputField = ({ inputID, labelText }) => {\n return `<div class=\"form-outline chips-input-wrapper\">\n <input type=\"text\" id=\"${inputID}\" class=\"form-control chips-input\" />\n <label class=\"form-label\" for=\"${inputID}\">\n ${labelText}\n </label>\n\n <div class=\"form-notch\">\n <div class=\"form-notch-leading\" style=\"width: 9px;\"></div>\n <div class=\"form-notch-middle\" style=\"width: 87.2px;\"></div>\n <div class=\"form-notch-trailing\"></div>\n </div>\n </div>`;\n};\n\nexport const getChip = ({ text }) => {\n return `<div class=\"chip btn\"><span class=\"text-chip\">${text}</span> <i class=\"close fas fa-times\"></i></div>`;\n};\n","import { element, typeCheckConfig } from '../../mdb/util/index';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport Data from '../../mdb/dom/data';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport { getChip } from './templates';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\n/**\n *\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'chip';\nconst DATA_KEY = `mdb.${NAME}`;\nconst SELECTOR_CLOSE = '.close';\nconst EVENT_DELETE = 'delete.mdb.chips';\nconst EVENT_SELECT = 'select.mdb.chip';\n\nconst DefaultType = { text: 'string', closeIcon: 'boolean', img: 'object' };\n\nconst Default = { text: '', closeIcon: false, img: { path: '', alt: '' } };\n\nclass Chip extends BaseComponent {\n constructor(element, data = {}) {\n super(element, data);\n this._options = this._getConfig(data);\n\n if (this._element) {\n Data.setData(element, DATA_KEY, this);\n }\n\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n\n init() {\n this._appendCloseIcon();\n this._handleDelete();\n this._handleTextChip();\n this._handleClickOnChip();\n }\n\n dispose() {\n EventHandler.off(this._element, 'click');\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n appendChip() {\n const { text, closeIcon } = this._options;\n const chip = getChip({ text, closeIcon });\n\n return chip;\n }\n\n // Private\n\n _appendCloseIcon(el = this._element) {\n if (SelectorEngine.find(SELECTOR_CLOSE, this._element).length > 0) return;\n\n if (this._options.closeIcon) {\n const createIcon = element('i');\n createIcon.classList = 'close fas fa-times';\n\n el.insertAdjacentElement('beforeend', createIcon);\n }\n }\n\n _handleClickOnChip() {\n EventHandler.on(this._element, 'click', (event) => {\n const { textContent } = event.target;\n const obj = {};\n\n obj.tag = textContent.trim();\n\n EventHandler.trigger(EVENT_SELECT, { event, obj });\n });\n }\n\n _handleDelete() {\n const deleteElement = SelectorEngine.find(SELECTOR_CLOSE, this._element);\n if (deleteElement.length === 0) return;\n\n EventHandler.on(this._element, 'click', SELECTOR_CLOSE, () => {\n EventHandler.trigger(this._element, EVENT_DELETE);\n this._element.remove();\n });\n }\n\n _handleTextChip() {\n if (this._element.innerText !== '') return;\n\n this._element.innerText = this._options.text;\n }\n\n _getConfig(options) {\n const config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...options,\n };\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Chip(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n }\n });\n }\n}\n\nexport default Chip;\n","import { typeCheckConfig, element } from '../../mdb/util/index';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport Chip from './chip';\nimport Data from '../../mdb/dom/data';\nimport { getInputField } from './templates';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport {\n LEFT_ARROW,\n RIGHT_ARROW,\n ENTER,\n BACKSPACE,\n UP_ARROW,\n DOWN_ARROW,\n DELETE,\n} from '../../mdb/util/keycodes';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\n// import FocusTrap from '../../mdb/util/focusTrap';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'chips';\n\nconst DATA_KEY = `mdb.${NAME}`;\n\nconst CLASSNAME_ACTIVE = 'active';\nconst CLASSNAME_CHIPS_INITIAL = `${NAME}-initial`;\nconst CLASSNAME_CHIPS_PLACEHOLDER = `${NAME}-placeholder`;\nconst CLASSNAME_CLOSE_OPACITY = 'close-opacity';\nconst CLASSNAME_CHIP_OPACITY = 'chip-opacity';\nconst CLASSNAME_CHIPS_PADDING = `${NAME}-padding`;\nconst CLASSNAME_CHIPS_TANSITION = `${NAME}-transition`;\nconst CLASSNAME_CHIPS_WRAPPER = `${NAME}-input-wrapper`;\n\nconst SELECTOR_CHIP = '.chip';\nconst SELECTOR_CHIP_ACTIVE = `${SELECTOR_CHIP}.${CLASSNAME_ACTIVE}`;\nconst SELECTOR_CLOSE = '.close';\n\nconst EVENT_ADD = 'add.mdb.chips';\nconst EVENT_ADDED = 'added.mdb.chips';\nconst EVENT_ARROW_DOWN = 'arrowDown.mdb.chips';\nconst EVENT_ARROW_LEFT = 'arrowLeft.mdb.chips';\nconst EVENT_ARROW_RIGHT = 'arrowRight.mdb.chips';\nconst EVENT_ARROW_UP = 'arrowUp.mdb.chips';\nconst EVENT_DELETE = 'delete.mdb.chips';\nconst EVENT_SELECT = 'select.mdb.chips';\n\nconst DefaultType = {\n inputID: 'string',\n parentSelector: 'string',\n initialValues: 'array',\n editable: 'boolean',\n labelText: 'string',\n};\n\nconst Default = {\n inputID: '',\n parentSelector: '',\n initialValues: [{ tag: 'init1' }, { tag: 'init2' }],\n editable: false,\n labelText: 'Example label',\n};\n\nclass ChipsInput extends Chip {\n constructor(element, data = {}) {\n super(element, data);\n this._options = this._getConfig(data);\n this.numberClicks = 0;\n\n this.init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n get activeChip() {\n return SelectorEngine.findOne(SELECTOR_CHIP_ACTIVE, this._element);\n }\n\n get input() {\n return SelectorEngine.findOne('input', this._element);\n }\n\n get allChips() {\n return SelectorEngine.find(SELECTOR_CHIP, this._element);\n }\n\n get chipsInputWrapper() {\n return SelectorEngine.findOne(`.${CLASSNAME_CHIPS_WRAPPER}`, this._element);\n }\n\n // Public\n\n init() {\n this._setChipsClass();\n this._appendInputToElement(CLASSNAME_CHIPS_PLACEHOLDER);\n this._handleInitialValue();\n this._handleInputText();\n this._handleKeyboard();\n this._handleChipsOnSelect();\n this._handleEditable();\n this._handleChipsFocus();\n this._handleClicksOnChips();\n }\n\n dispose() {\n Manipulator.removeClass(this._element, 'chips');\n this.allChips.forEach((chip) => {\n const instance = Chip.getInstance(chip);\n if (instance) {\n chip.remove();\n EventHandler.off(chip, 'dblclick');\n instance.dispose();\n }\n });\n this.chipsInputWrapper.remove();\n EventHandler.off(this._element, 'click');\n EventHandler.off(this._element, 'keyup');\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Private\n\n _setChipsClass() {\n Manipulator.addClass(this._element, 'chips');\n }\n\n _handleDeleteEvents(event) {\n const [last] = this.allChips.slice(-1);\n\n if (this.activeChip === null) {\n last.remove();\n\n this._handleEvents(event, EVENT_DELETE);\n } else {\n const index = this.allChips.findIndex((chip) => chip === this.activeChip);\n const activeChipAfter = this._handleActiveChipAfterRemove(index);\n const arr = [];\n\n if (this.activeChip === null) return;\n\n this.activeChip.remove();\n this._handleEvents(event, EVENT_DELETE);\n\n this.numberClicks = index;\n\n Manipulator.addClass(activeChipAfter, CLASSNAME_ACTIVE);\n\n this.allChips.forEach((chip) => {\n if (Manipulator.hasClass(chip, CLASSNAME_ACTIVE)) {\n arr.push(chip);\n\n if (arr.length > 1) {\n this.allChips.forEach((chip) => chip.remove());\n }\n }\n });\n }\n }\n\n _handleUpEvents(event) {\n this.numberClicks += 1;\n\n if (this.numberClicks === this.allChips.length + 1) this.numberClicks = 0;\n\n this._handleRightKeyboardArrow(this.numberClicks);\n\n this._handleEvents(event, EVENT_ARROW_RIGHT);\n this._handleEvents(event, EVENT_ARROW_UP);\n }\n\n _handleDownEvents(event) {\n this.numberClicks -= 1;\n\n if (this.numberClicks <= 0) this.numberClicks = this.allChips.length;\n\n this._handleLeftKeyboardArrow(this.numberClicks);\n\n this._handleEvents(event, EVENT_ARROW_LEFT);\n this._handleEvents(event, EVENT_ARROW_DOWN);\n }\n\n _keyboardEvents(event) {\n const { target, keyCode, ctrlKey } = event;\n\n if (target.value.length > 0 || this.allChips.length === 0) return;\n\n if (keyCode === BACKSPACE || keyCode === DELETE) {\n this._handleDeleteEvents(event);\n } else if (keyCode === RIGHT_ARROW || keyCode === UP_ARROW) {\n this._handleUpEvents(event);\n } else if (keyCode === LEFT_ARROW || keyCode === DOWN_ARROW) {\n this._handleDownEvents(event);\n } else if (keyCode === 65 && ctrlKey) {\n this._handleAddActiveClass();\n }\n }\n\n _handleKeyboard() {\n EventHandler.on(this.input, 'keydown', (event) => this._keyboardEvents(event));\n }\n\n _handleEditable() {\n const { editable } = this._options;\n\n if (!editable) return;\n\n this.allChips.forEach((chip) => {\n EventHandler.on(chip, 'dblclick', (e) => {\n const close = SelectorEngine.findOne('.close', chip);\n\n chip.contentEditable = true;\n chip.focus();\n\n setTimeout(() => {\n Manipulator.addStyle(close, { display: 'none' });\n }, 200);\n Manipulator.addClass(close, 'close-opacity');\n\n const obj = {};\n\n obj.tag = e.target.textContent;\n\n EventHandler.trigger(chip, EVENT_SELECT, { event: e, allChips: this.allChips });\n });\n\n EventHandler.on(document, 'click', ({ target }) => {\n const close = SelectorEngine.findOne('.close', chip);\n const chipText = SelectorEngine.findOne('.text-chip', chip);\n\n const isContainer = target === chip;\n const isContainerContent = chip && chip.contains(target);\n\n if (!isContainer && !isContainerContent) {\n chip.contentEditable = false;\n if (chipText.textContent !== '') {\n setTimeout(() => {\n Manipulator.addStyle(close, { display: 'block' });\n Manipulator.removeClass(close, 'close-opacity');\n }, 160);\n }\n }\n\n if (chipText.textContent === '') {\n setTimeout(() => {\n Manipulator.addClass(chip, CLASSNAME_CHIP_OPACITY);\n }, 200);\n\n setTimeout(() => {\n chip.remove();\n }, 300);\n }\n });\n });\n }\n\n _handleRemoveActiveClass() {\n this.allChips.forEach((chip) => Manipulator.removeClass(chip, CLASSNAME_ACTIVE));\n }\n\n _handleAddActiveClass() {\n this.allChips.forEach((chip) => Manipulator.addClass(chip, CLASSNAME_ACTIVE));\n }\n\n _handleRightKeyboardArrow(num) {\n this._handleRemoveActiveClass();\n\n if (num === 0) num = 1;\n\n this._handleAddActiveClassWithKeyboard(num);\n }\n\n _handleLeftKeyboardArrow(num) {\n this._handleRemoveActiveClass();\n this._handleAddActiveClassWithKeyboard(num);\n }\n\n _handleActiveChipAfterRemove(index) {\n const chipIndex = index === 0 ? 1 : index - 1;\n\n return this.allChips[chipIndex];\n }\n\n _handleClicksOnChips() {\n EventHandler.on(this._element, 'click', () => {\n if (this.allChips.length === 0) {\n Manipulator.removeClass(this.chipsInputWrapper, CLASSNAME_CHIPS_PADDING);\n Manipulator.removeClass(this.input, CLASSNAME_ACTIVE);\n }\n });\n }\n\n _handleTextContent() {\n const arr = [];\n\n this.allChips.forEach((chip) => arr.push({ tag: chip.textContent.trim() }));\n\n return arr;\n }\n\n _handleEvents(event, eventName) {\n const arr = this._handleTextContent();\n\n const filterActive = this.allChips.filter(\n (chip) => Manipulator.hasClass(chip, CLASSNAME_ACTIVE) && chip\n );\n\n EventHandler.trigger(this._element, eventName, {\n event,\n allChips: this.allChips,\n arrOfObjects: arr,\n active: filterActive,\n activeObj: {\n tag: filterActive.length <= 0 ? '' : filterActive[0].textContent.trim(),\n },\n });\n }\n\n _handleChipsFocus() {\n EventHandler.on(this._element, 'click', ({ target: { classList } }) => {\n if (\n classList.contains('chip') ||\n classList.contains('close') ||\n classList.contains('text-chip')\n ) {\n return;\n }\n\n this.input.focus();\n });\n }\n\n _handleInitialValue() {\n this._appendInputToElement(CLASSNAME_CHIPS_INITIAL);\n\n if (Manipulator.hasClass(this._element, CLASSNAME_CHIPS_INITIAL)) {\n const { initialValues } = this._options;\n\n initialValues.forEach(({ tag }) => this._handleCreateChip(this.input, tag));\n\n Manipulator.addClass(this.input, CLASSNAME_ACTIVE);\n }\n\n if (this.allChips.length > 0) {\n Manipulator.addClass(this.chipsInputWrapper, CLASSNAME_CHIPS_PADDING);\n Manipulator.addClass(this.chipsInputWrapper, CLASSNAME_CHIPS_TANSITION);\n }\n }\n\n _handleKeysInputToElement(event) {\n const { keyCode, target } = event;\n\n if (Manipulator.hasClass(target, 'chip')) {\n const close = SelectorEngine.findOne(SELECTOR_CLOSE, target);\n\n if (keyCode === ENTER) {\n target.contentEditable = false;\n\n if (target.textContent !== '') {\n setTimeout(() => {\n Manipulator.addStyle(close, { display: 'block' });\n Manipulator.removeClass(close, CLASSNAME_CLOSE_OPACITY);\n }, 160);\n } else if (target.textContent === '') {\n setTimeout(() => {\n Manipulator.addClass(target, CLASSNAME_CHIP_OPACITY);\n }, 200);\n\n setTimeout(() => {\n target.remove();\n }, 300);\n }\n }\n\n return;\n }\n\n if (keyCode === ENTER) {\n if (target.value === '') return;\n\n this._handleCreateChip(target, target.value);\n\n this._handleRemoveActiveClass();\n this.numberClicks = this.allChips.length + 1;\n }\n\n if (this.allChips.length > 0) {\n Manipulator.addClass(this.chipsInputWrapper, CLASSNAME_CHIPS_PADDING);\n Manipulator.addClass(this.chipsInputWrapper, CLASSNAME_CHIPS_TANSITION);\n } else {\n Manipulator.removeClass(this.chipsInputWrapper, CLASSNAME_CHIPS_PADDING);\n }\n }\n\n _handleBlurInput(event) {\n const { target } = event;\n if (target.value.length > 0) {\n this._handleCreateChip(target, target.value);\n }\n\n if (this.allChips.length > 0) {\n Manipulator.addClass(target, CLASSNAME_ACTIVE);\n Manipulator.addClass(this.chipsInputWrapper, CLASSNAME_CHIPS_PADDING);\n } else {\n Manipulator.removeClass(target, CLASSNAME_ACTIVE);\n Manipulator.removeClass(this.chipsInputWrapper, CLASSNAME_CHIPS_PADDING);\n }\n\n this.allChips.forEach((chip) => Manipulator.removeClass(chip, CLASSNAME_ACTIVE));\n }\n\n _handleInputText() {\n const placeholder = SelectorEngine.findOne(CLASSNAME_CHIPS_PLACEHOLDER, this._element);\n\n EventHandler.on(this._element, 'keyup', placeholder, (e) => this._handleKeysInputToElement(e));\n EventHandler.on(this.input, 'blur', (e) => this._handleBlurInput(e));\n }\n\n _appendInputToElement(selector) {\n if (!Manipulator.hasClass(this._element, selector)) return;\n\n const inputField = getInputField(this._options);\n\n this._element.insertAdjacentHTML('beforeend', inputField);\n }\n\n _handleCreateChip(target, value) {\n const addEvent = EventHandler.trigger(this._element, EVENT_ADD, { value });\n\n if (addEvent.defaultPrevented) {\n return;\n }\n\n const divElement = element('div');\n const divWithChips = new Chip(divElement, { text: value });\n\n let chipsContainer;\n\n if (this._options.parentSelector !== '') {\n const parent = document.querySelector(this._options.parentSelector);\n parent.insertAdjacentHTML('beforeend', divWithChips.appendChip());\n chipsContainer = parent;\n } else {\n target.insertAdjacentHTML('beforebegin', divWithChips.appendChip());\n chipsContainer = target.parentNode;\n }\n\n target.value = '';\n\n SelectorEngine.find(SELECTOR_CHIP, chipsContainer).forEach((chip) => {\n let instance = Chip.getInstance(chip);\n if (!instance) {\n instance = new Chip(chip);\n instance.init();\n }\n });\n\n this._handleEditable();\n\n EventHandler.trigger(this._element, EVENT_ADDED, { value });\n }\n\n _handleChipsOnSelect() {\n this.allChips.forEach((chip) => {\n EventHandler.on(this._element, 'click', (e) => {\n EventHandler.trigger(chip, EVENT_SELECT, { event: e, allChips: this.allChips });\n });\n });\n }\n\n _handleAddActiveClassWithKeyboard(num) {\n let chip;\n\n if (this.allChips[num - 1] === undefined) {\n chip = this.allChips[num - 2];\n } else {\n chip = this.allChips[num - 1];\n }\n\n Manipulator.addClass(chip, CLASSNAME_ACTIVE);\n }\n\n _getConfig(options) {\n const config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...options,\n };\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new ChipsInput(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config]();\n }\n });\n }\n}\n\nexport default ChipsInput;\n","/* eslint-disable import/prefer-default-export */\n\nconst getConnectsTemplate = () => {\n return `<div class=\"multi-range-slider-connects\">\n<div class=\"multi-range-slider-connect\"></div>\n</div>`;\n};\n\nconst getHandleTemplate = () => {\n return `<div class=\"multi-range-slider-hand\">\n <div class=\"multi-range-slider-handle\"></div>\n</div>`;\n};\n\nconst getTooltipTemplate = (value) => {\n return `\n <span class=\"multi-range-slider-tooltip\">\n <span class=\"multi-range-slider-tooltip-value\">${value}</span>\n </span>\n `;\n};\n\nexport { getConnectsTemplate, getHandleTemplate, getTooltipTemplate };\n","// eslint-disable-next-line import/prefer-default-export\nexport const getEventTypeClientX = (ev) => {\n const event = ev.type === 'touchmove' ? ev.touches[0].clientX : ev.clientX;\n\n return event;\n};\n","import { typeCheckConfig } from '../../mdb/util/index';\nimport EventHandler, { EventHandlerMulti } from '../../mdb/dom/event-handler';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport Data from '../../mdb/dom/data';\nimport { getConnectsTemplate, getHandleTemplate, getTooltipTemplate } from './template';\nimport { getEventTypeClientX } from './utils';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'multiRangeSlider';\nconst DATA_KEY = `mdb.${NAME}`;\nconst SELECTOR_MULTI = 'multi-range-slider';\n\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_VALUE_CHANGED = `valueChanged${EVENT_KEY}`;\nconst EVENT_START = `start${EVENT_KEY}`;\n\nconst CLASSNAME_HAND = '.multi-range-slider-hand';\nconst CLASSNAME_CONNECT = '.multi-range-slider-connect';\nconst CLASSNAME_TOOLTIP = '.multi-range-slider-tooltip';\n\nconst SELECTOR_ACTIVE = 'active';\nconst SELECTOR_HORIZONTAL = 'multi-range-slider-horizontal';\nconst SELECTOR_VERTICAL = 'multi-range-slider-vertical';\n\nconst DefaultType = {\n direction: 'string',\n margin: '(string||number||null)',\n max: 'number',\n min: 'number',\n numberOfRanges: 'number',\n orientation: 'string',\n padding: '(string||number||null)',\n startValues: 'array',\n step: '(string||null||number)',\n tooltips: 'boolean',\n};\n\nconst Default = {\n direction: '',\n margin: null,\n max: 100,\n min: 0,\n numberOfRanges: 2,\n orientation: 'horizontal',\n padding: null,\n startValues: [0, 100],\n step: null,\n tooltips: false,\n};\n\nclass MultiRangeSlider extends BaseComponent {\n constructor(element, data = {}) {\n super(element);\n this._options = this._getConfig(data);\n this._mousemove = false;\n\n this.init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n get hands() {\n return SelectorEngine.find(CLASSNAME_HAND, this._element);\n }\n\n get connect() {\n return SelectorEngine.findOne(CLASSNAME_CONNECT, this._element);\n }\n\n get leftConnectRect() {\n return this.connect.getBoundingClientRect().left;\n }\n\n get handsNoActive() {\n return this.hands.filter((hand) => !Manipulator.hasClass(hand, 'active'));\n }\n\n get handActive() {\n return SelectorEngine.findOne(`${CLASSNAME_HAND}.active`);\n }\n\n get activeTooltip() {\n return SelectorEngine.findOne(CLASSNAME_TOOLTIP);\n }\n\n get activeTooltipValue() {\n const handTooltip = SelectorEngine.findOne(`${CLASSNAME_HAND}.active`);\n\n // fast fix to correct in future\n const tooltip = handTooltip.children[1].children[0];\n return tooltip;\n }\n\n // Public\n\n init() {\n this._setClassHorizontalOrVertical();\n this._setRangeConnectsElement();\n this._setRangeHandleElements();\n this._setTransofrmationOnStart();\n this._handleClickEventOnHand();\n this._handleEndMoveEventDocument();\n this._handleClickOnRange();\n this._setValueEventOnMouseDown();\n this._setTooltipToHand();\n }\n\n dispose() {\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n // Private\n\n _setTransofrmationOnStart() {\n const { startValues, max, min } = this._options;\n\n if (startValues.length === 0) {\n this.hands.forEach((hand) => {\n const translation = -hand.offsetWidth;\n\n Manipulator.setDataAttribute(hand, 'translation', Math.round(translation));\n\n Manipulator.addStyle(hand, {\n transform: `translate(${translation}px,-25%)`,\n });\n });\n } else {\n this.hands.forEach((hand, i) => {\n if (startValues[i] > max || startValues[i] < min) return;\n const normalizedValue = (startValues[i] - min) / (max - min);\n const translation = normalizedValue * this.connect.offsetWidth - hand.offsetWidth / 2;\n\n Manipulator.setDataAttribute(hand, 'translation', Math.round(translation));\n\n Manipulator.addStyle(hand, {\n transform: `translate(${translation}px,-25%)`,\n });\n });\n }\n }\n\n _handleClickEventOnHand() {\n const { max, min } = this._options;\n this.hands.forEach((hand, index) => {\n EventHandlerMulti.on(hand, 'mousedown touchstart', (ev) => {\n this._mousemove = true;\n const translation = getEventTypeClientX(ev) - this.leftConnectRect - hand.offsetWidth / 2;\n\n const value =\n ((getEventTypeClientX(ev) - this.leftConnectRect) /\n (this.connect.offsetWidth / (max - min))) %\n (max - min);\n\n Manipulator.addStyle(hand, {\n transform: `translate(${translation}px,-25%)`,\n });\n\n Manipulator.setDataAttribute(hand, 'translation', translation);\n\n Manipulator.addClass(hand, SELECTOR_ACTIVE);\n\n if (this._options.tooltip) {\n Manipulator.addClass(hand.children[1], 'active');\n this.activeTooltipValue.innerText = Math.round(value);\n }\n\n this._handleMoveEvent(hand, index);\n this._handleEndMoveEvent(hand, ev);\n });\n });\n }\n\n _setValueEventOnMouseDown() {\n EventHandlerMulti.on(this.connect, 'mousedown touchstart', (ev) => {\n const { max, min, numberOfRanges } = this._options;\n\n if (numberOfRanges < 2) {\n const value =\n Math.round(\n (getEventTypeClientX(ev) - this.leftConnectRect) / (ev.target.offsetWidth / (max - min))\n ) %\n (max - min);\n\n EventHandler.trigger(this._element, EVENT_START, {\n values: { value: value + min, rounded: Math.round(value + min) },\n });\n }\n });\n }\n\n _setClassHorizontalOrVertical() {\n if (this._element) {\n Manipulator.addClass(this._element, SELECTOR_MULTI);\n }\n\n if (this._options.orientation === 'horizontal') {\n Manipulator.addClass(this._element, SELECTOR_HORIZONTAL);\n } else {\n Manipulator.addClass(this._element, SELECTOR_VERTICAL);\n }\n }\n\n _setRangeConnectsElement() {\n this._element.insertAdjacentHTML('afterbegin', getConnectsTemplate());\n }\n\n _setRangeHandleElements() {\n for (let i = 0; i < this._options.numberOfRanges; i++) {\n this._element.insertAdjacentHTML('beforeend', getHandleTemplate());\n }\n\n this.hands.forEach((hand, i) => {\n hand.setAttribute('aria-orientation', this._options.orientation);\n hand.setAttribute('role', 'slider');\n\n Manipulator.setDataAttribute(hand, 'handle', i);\n });\n }\n\n _setTooltipToHand() {\n if (this._options.tooltip) {\n this.hands.forEach((hand) => {\n return hand.insertAdjacentHTML('beforeend', getTooltipTemplate());\n });\n }\n }\n\n _handleMoveEvent(hand) {\n const { tooltip, step } = this._options;\n\n EventHandlerMulti.on(document, 'mousemove touchmove', (ev) => {\n if (ev.type === 'mousemove') ev.preventDefault();\n\n const { max, min, numberOfRanges } = this._options;\n\n if (Manipulator.hasClass(hand, SELECTOR_ACTIVE)) {\n const maxValue =\n ((getEventTypeClientX(ev) - this.leftConnectRect) / this.connect.offsetWidth) * max;\n let value =\n (((getEventTypeClientX(ev) - this.leftConnectRect) /\n (this.connect.offsetWidth / (max - min))) %\n (max - min)) +\n min;\n\n let translation = getEventTypeClientX(ev) - this.leftConnectRect - hand.offsetWidth / 2;\n\n const handActiveHandle = Manipulator.getDataAttribute(this.handActive, 'handle');\n const handActiveTranslation = Manipulator.getDataAttribute(this.handActive, 'translation');\n if (value < min) {\n translation = min - hand.offsetWidth / 2;\n value = min;\n } else if (maxValue >= max) {\n return;\n }\n\n const handleDataHandle = this.handsNoActive.map((hand) =>\n Manipulator.getDataAttribute(hand, 'handle')\n );\n const handleDataTranslate = this.handsNoActive.map((hand) =>\n Manipulator.getDataAttribute(hand, 'translation')\n );\n\n if (handActiveHandle < handleDataHandle && handActiveTranslation <= handleDataTranslate) {\n if (Math.round(value) % step === 0 && step !== null) {\n Manipulator.addStyle(hand, {\n transform: `translate(${translation}px,-25%)`,\n });\n\n if (tooltip) this.activeTooltipValue.innerText = Math.round(value);\n } else if (step === null) {\n Manipulator.addStyle(hand, {\n transform: `translate(${translation}px,-25%)`,\n });\n\n if (tooltip) this.activeTooltipValue.innerText = Math.round(value);\n }\n } else if (\n handActiveHandle > handleDataHandle &&\n handActiveTranslation >= handleDataTranslate\n ) {\n if (Math.round(value) % step === 0 && step !== null) {\n Manipulator.addStyle(hand, {\n transform: `translate(${translation}px,-25%)`,\n });\n\n if (tooltip) this.activeTooltipValue.innerText = Math.round(value);\n } else if (step === null) {\n Manipulator.addStyle(hand, {\n transform: `translate(${translation}px,-25%)`,\n });\n\n if (tooltip) this.activeTooltipValue.innerText = Math.round(value);\n }\n }\n\n if (numberOfRanges < 2) {\n if (Math.round(value) % step === 0 && step !== null) {\n Manipulator.addStyle(hand, {\n transform: `translate(${translation}px,-25%)`,\n });\n\n if (tooltip) this.activeTooltipValue.innerText = Math.round(value);\n } else if (step === null) {\n Manipulator.addStyle(hand, {\n transform: `translate(${translation}px,-25%)`,\n });\n\n if (tooltip) this.activeTooltipValue.innerText = Math.round(value);\n }\n }\n\n Manipulator.setDataAttribute(hand, 'translation', translation);\n\n if (numberOfRanges < 2) {\n EventHandler.trigger(this._element, EVENT_VALUE_CHANGED, {\n values: { value: value + min, rounded: Math.round(value + min) },\n });\n } else {\n this._handleMultiValuesOnRange();\n }\n }\n });\n }\n\n _handleMultiValuesOnRange() {\n const { max, min } = this._options;\n const arr = [];\n\n this.hands.forEach((hand) => {\n const translation =\n hand.getBoundingClientRect().left - this.leftConnectRect + hand.offsetWidth / 2;\n\n let value = (translation / (this.connect.offsetWidth / (max - min))) % (max - min);\n\n if (translation === this.connect.offsetWidth) {\n value = max;\n } else {\n value += min;\n }\n\n Manipulator.setDataAttribute(hand, 'value', Math.round(value * 10) / 10);\n\n arr.push({ value });\n });\n\n EventHandler.trigger(this._element, EVENT_VALUE_CHANGED, {\n values: {\n value: arr.map(({ value }) => value),\n rounded: arr.map(({ value }) => Math.round(value)),\n },\n });\n }\n\n _handleEndMoveEventDocument() {\n EventHandlerMulti.on(document, 'mouseup touchend', () => {\n if (this._mousemove) {\n this.hands.forEach((hand) => {\n EventHandler.off(hand, 'mousemove');\n Manipulator.removeClass(hand, SELECTOR_ACTIVE);\n\n if (this._options.tooltip) Manipulator.removeClass(hand.children[1], 'active');\n });\n\n this._mousemove = false;\n }\n });\n }\n\n _handleEndMoveEvent(hand) {\n EventHandlerMulti.on(hand, 'mouseup touchend', () => {\n EventHandler.off(hand, 'mousemove');\n Manipulator.removeClass(hand, SELECTOR_ACTIVE);\n\n if (this._options.tooltip) Manipulator.removeClass(hand.children[1], 'active');\n\n this._mousemove = false;\n });\n }\n\n _handleClickOnRange() {\n EventHandlerMulti.on(this.connect, 'mousedown touchstart', (ev) => {\n this.hands.forEach((hand) => {\n Manipulator.addClass(hand, SELECTOR_ACTIVE);\n this._mousemove = true;\n if (this._options.numberOfRanges < 2) {\n Manipulator.addStyle(hand, {\n transform: `translate(${\n getEventTypeClientX(ev) - this.leftConnectRect - hand.offsetWidth / 2\n }px,-25%)`,\n });\n } else {\n Manipulator.addStyle(this.hands[0], {\n transform: `translate(${\n getEventTypeClientX(ev) - this.leftConnectRect - hand.offsetWidth / 2\n }px,-25%)`,\n });\n }\n });\n });\n }\n\n _handlePadding() {\n EventHandlerMulti.on(this.connect, 'mousedown touchstart', (ev) => {\n const { padding, numberOfRanges } = this._options;\n let value;\n if (numberOfRanges < 2) {\n value =\n Math.round(\n (getEventTypeClientX(ev) - this.leftConnectRect) / (ev.target.offsetWidth / padding)\n ) % padding;\n }\n\n return value;\n });\n }\n\n _setMovingTooltipEvent() {\n EventHandlerMulti.on(this.connect, 'mousemove', (ev) => {\n const value = (getEventTypeClientX(ev) - this.leftConnectRect) / ev.target.offsetWidth;\n const percent = `${Math.round(value * 100)}%`;\n EventHandler.trigger(this._element, 'movetooltip', {\n percents: { value, percent },\n });\n });\n }\n\n static jQueryInterface(config, options) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new MultiRangeSlider(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](options);\n }\n });\n }\n\n _getConfig(options) {\n const config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...options,\n };\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n}\n\nexport default MultiRangeSlider;\n","import { createDate } from '../datepicker/date-utils';\n\nconst isValidTime = (time) => {\n const AmPmReg = /^(0?[1-9]|1[012])(:[0-5]\\d) [APap][mM]$/;\n const timeReg = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$/;\n return time.match(AmPmReg) || time.match(timeReg);\n};\n\nconst isValidDate = (date) => {\n // eslint-disable-next-line no-restricted-globals\n return date && Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date);\n};\n\nconst getMonth = (date) => {\n return date.getMonth();\n};\n\nconst getYear = (date) => {\n return date.getFullYear();\n};\n\nconst getDelimeters = (format) => {\n return format.match(/[^(dmy)]{1,}/g);\n};\n\nconst parseDate = (dateString, format, delimeters, options) => {\n let delimeterPattern;\n\n if (delimeters[0] !== delimeters[1]) {\n delimeterPattern = delimeters[0] + delimeters[1];\n } else {\n delimeterPattern = delimeters[0];\n }\n\n const regExp = new RegExp(`[${delimeterPattern}]`);\n const dateParts = dateString.split(regExp);\n const formatParts = format.split(regExp);\n const isMonthString = format.indexOf('mmm') !== -1;\n\n const datesArray = [];\n\n for (let i = 0; i < formatParts.length; i++) {\n if (formatParts[i].indexOf('yy') !== -1) {\n datesArray[0] = { value: dateParts[i], format: formatParts[i] };\n }\n if (formatParts[i].indexOf('m') !== -1) {\n datesArray[1] = { value: dateParts[i], format: formatParts[i] };\n }\n if (formatParts[i].indexOf('d') !== -1 && formatParts[i].length <= 2) {\n datesArray[2] = { value: dateParts[i], format: formatParts[i] };\n }\n }\n\n let monthsNames;\n\n if (format.indexOf('mmmm') !== -1) {\n monthsNames = options.monthsFull;\n } else {\n monthsNames = options.monthsShort;\n }\n\n const year = Number(datesArray[0].value);\n const month = isMonthString\n ? getMonthNumberByMonthName(datesArray[1].value, monthsNames)\n : Number(datesArray[1].value) - 1;\n const day = Number(datesArray[2].value);\n\n const parsedDate = createDate(year, month, day);\n return parsedDate;\n};\n\nconst getMonthNumberByMonthName = (monthValue, monthLabels) => {\n return monthLabels.findIndex((monthLabel) => monthLabel === monthValue);\n};\n\nexport {\n getDelimeters,\n parseDate,\n getMonth,\n getYear,\n getMonthNumberByMonthName,\n isValidDate,\n isValidTime,\n};\n","export const ICON_BUTTONS = `\n <button type=\"button\" class=\"datepicker-button-toggle\" data-mdb-toggle=\"datepicker\">\n <i class=\"far fa-calendar datepicker-toggle-icon\"></i>\n </button>\n <button type=\"button\" class=\"timepicker-button-toggle\" data-mdb-toggle=\"timepicker\">\n <i class=\"far fa-clock fa-sm timepicker-icon\"></i>\n </button>\n`;\n\nexport const TOGGLE_BUTTON = `\n <button type=\"button\" class=\"datetimepicker-toggle-button\" data-mdb-toggle=\"datetimepicker\">\n <i class=\"far fa-calendar datepicker-toggle-icon\"></i>\n </button>\n`;\n","import { element, getUID, typeCheckConfig } from '../../mdb/util/index';\nimport { getDelimeters, parseDate, getMonth, getYear, isValidDate, isValidTime } from './utils';\nimport { ICON_BUTTONS, TOGGLE_BUTTON } from './templates';\nimport ScrollBarHelper from '../../bootstrap/mdb-prefix/util/scrollbar';\nimport Data from '../../mdb/dom/data';\nimport EventHandler from '../../mdb/dom/event-handler';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport Datepicker from '../datepicker/index';\nimport Timepicker from '../timepicker';\nimport BaseComponent from '../../free/base-component';\nimport { bindCallbackEventsIfNeeded } from '../../autoinit/init';\n\nconst NAME = 'datetimepicker';\nconst DATA_KEY = `mdb.${NAME}`;\n\nconst CLASSNAME_DATEPICKER = 'datepicker';\nconst CLASSNAME_TIMEPICKER = 'timepicker';\nconst CLASSNAME_TOGGLE_BUTTON = `${NAME}-toggle-button`;\nconst CLASSNAME_INVALID_FEEDBACK = 'invalid-feedback';\nconst CLASSNAME_IS_INVALID = 'is-invalid';\n\nconst SELECTOR_TIMEPICKER = `.${CLASSNAME_TIMEPICKER}`;\nconst SELECTOR_DATEPICKER = `.${CLASSNAME_DATEPICKER}`;\nconst SELECTOR_DATA_TOGGLE = `[data-mdb-toggle=\"${NAME}\"]`;\nconst SELECTOR_TOGGLE_BUTTON = `.${CLASSNAME_TOGGLE_BUTTON}`;\nconst SELECTOR_INVALID_FEEDBACK = `.${CLASSNAME_INVALID_FEEDBACK}`;\n\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_OPEN = `open${EVENT_KEY}`;\nconst EVENT_CLOSE = `close${EVENT_KEY}`;\nconst EVENT_VALUE_CHANGED = `valueChanged${EVENT_KEY}`;\n\nconst EVENT_CLOSE_DATEPICKER = 'close.mdb.datepicker';\nconst EVENT_VALUE_CHANGED_TIMEPICKER = 'valueChanged.mdb.timepicker';\n\nconst BUTTONS_WRAPPER = element('div');\n\nconst Default = {\n appendValidationInfo: true,\n inline: false,\n toggleButton: true,\n container: 'body',\n disabled: false,\n disablePast: false,\n disableFuture: false,\n defaultTime: '',\n defaultDate: '',\n timepicker: {},\n datepicker: {},\n invalidLabel: 'Invalid Date or Time Format',\n showFormat: false,\n};\n\nconst DefaultType = {\n appendValidationInfo: 'boolean',\n inline: 'boolean',\n toggleButton: 'boolean',\n container: 'string',\n disabled: 'boolean',\n disablePast: 'boolean',\n disableFuture: 'boolean',\n defaultTime: '(string|date|number)',\n defaultDate: '(string|date|number)',\n timepicker: 'object',\n datepicker: 'object',\n invalidLabel: 'string',\n showFormat: 'boolean',\n};\n\nclass Datetimepicker extends BaseComponent {\n constructor(element, options) {\n super(element);\n\n this._input = SelectorEngine.findOne('input', this._element);\n this._options = this._getConfig(options);\n this._timepicker = null;\n this._datepicker = null;\n this._dateValue = this._options.defaultDate ? this._options.defaultDate : '';\n this._timeValue = this._options.defaultTime ? this._options.defaultTime : '';\n this._isInvalidTimeFormat = false;\n this._validationInfo = null;\n this._format = this._options.datepicker.format ? this._options.datepicker.format : 'dd/mm/yyyy';\n this._cancel = false;\n\n this._scrollBar = new ScrollBarHelper();\n\n this._init();\n Manipulator.setDataAttribute(this._element, `${this.constructor.NAME}-initialized`, true);\n bindCallbackEventsIfNeeded(this.constructor);\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n get toggleButton() {\n return SelectorEngine.findOne(SELECTOR_TOGGLE_BUTTON, this._element);\n }\n\n dispose() {\n EventHandler.off(this._element, 'click', this._openDatePicker);\n EventHandler.off(this._input, 'input', this._handleInput);\n EventHandler.off(this._element, 'click');\n\n this._removeTimePicker();\n this._removeDatepicker();\n const toggleButton = this.toggleButton;\n if (toggleButton) {\n this.toggleButton.remove();\n }\n Manipulator.removeDataAttribute(this._element, `${this.constructor.NAME}-initialized`);\n\n super.dispose();\n }\n\n update(options = {}) {\n const tempOptions = this._getConfig({ ...this._options, ...options });\n\n EventHandler.off(this._element, 'click', this._openDatePicker);\n EventHandler.off(this._input, 'input', this._handleInput);\n EventHandler.off(this._element, 'click');\n\n this._removeTimePicker();\n this._removeDatepicker();\n const toggleButton = this.toggleButton;\n if (toggleButton) {\n this.toggleButton.remove();\n }\n\n this._options = Default;\n this._timepicker = null;\n this._datepicker = null;\n this._dateValue = null;\n this._timeValue = null;\n this._isInvalidTimeFormat = null;\n this._validationInfo = null;\n\n this._options = tempOptions;\n\n this._init();\n }\n\n // Private\n\n _init() {\n this._addDatepicker();\n this._addTimePicker();\n this._appendToggleButton();\n this._listenToToggleClick();\n this._listenToUserInput();\n this._disableInput();\n this._setInitialDefaultInput();\n this._appendValidationInfo();\n this._applyFormatPlaceholder();\n\n if (this._options.disablePast) {\n this._handleTimepickerDisablePast();\n }\n if (this._options.disableFuture) {\n this._handleTimepickerDisableFuture();\n }\n }\n\n _removeDatepicker() {\n const datepicker = this._element.querySelector('.datepicker');\n if (datepicker) {\n datepicker.remove();\n }\n }\n\n _addDatepicker() {\n const DATEPICKER_WRAPPER = element('div');\n DATEPICKER_WRAPPER.id = this._element.id\n ? `datepicker-${this._element.id}`\n : getUID('datepicker-');\n\n const DATEPICKER_INPUT = '<input type=\"text\" class=\"form-control\">';\n DATEPICKER_WRAPPER.innerHTML = DATEPICKER_INPUT;\n\n Manipulator.addClass(DATEPICKER_WRAPPER, CLASSNAME_DATEPICKER);\n this._element.appendChild(DATEPICKER_WRAPPER);\n Manipulator.style(DATEPICKER_WRAPPER, { display: 'none' });\n\n let datepickerOptions = {\n ...this._options.datepicker,\n ...{\n container: this._options.container,\n disablePast: this._options.disablePast,\n disableFuture: this._options.disableFuture,\n },\n };\n\n if (this._options.inline || this._options.datepicker.inline) {\n datepickerOptions = { ...datepickerOptions, ...{ inline: true } };\n }\n this._datepicker = new Datepicker(DATEPICKER_WRAPPER, datepickerOptions);\n this._datepicker._input.value = this._dateValue;\n }\n\n _removeTimePicker() {\n const timepicker = this._element.querySelector('.timepicker');\n if (timepicker) {\n timepicker.remove();\n this._scrollBar.reset();\n }\n }\n\n _addTimePicker() {\n const TIMEPICKER_WRAPPER = element('div');\n TIMEPICKER_WRAPPER.id = this._element.id\n ? `timepicker-${this._element.id}`\n : getUID('timepicker-');\n\n const TIMEPICKER_INPUT = '<input type=\"text\" class=\"form-control\">';\n TIMEPICKER_WRAPPER.innerHTML = TIMEPICKER_INPUT;\n\n Manipulator.addClass(TIMEPICKER_WRAPPER, CLASSNAME_TIMEPICKER);\n this._element.appendChild(TIMEPICKER_WRAPPER);\n Manipulator.style(TIMEPICKER_WRAPPER, { display: 'none' });\n\n let timepickerOptions = {\n ...this._options.timepicker,\n ...{ container: this._options.container },\n };\n\n if (this._options.inline || this._options.timepicker.inline) {\n timepickerOptions = { timepickerOptions, ...{ inline: true } };\n }\n\n this._timepicker = new Timepicker(TIMEPICKER_WRAPPER, timepickerOptions);\n this._timepicker.input.value = this._timeValue;\n }\n\n _addIconButtons() {\n Manipulator.addClass(BUTTONS_WRAPPER, 'buttons-container');\n BUTTONS_WRAPPER.innerHTML = ICON_BUTTONS;\n\n if (this._options.inline || this._options.datepicker.inline) {\n return;\n }\n\n this._scrollBar.hide();\n\n if (this._datepicker._isOpen) {\n const headerDate = SelectorEngine.findOne(`${SELECTOR_DATEPICKER}-header`, document.body);\n headerDate.appendChild(BUTTONS_WRAPPER);\n } else if (this._timepicker._modal && !this._options.timepicker.inline) {\n const header = SelectorEngine.findOne(`${SELECTOR_TIMEPICKER}-elements`, document.body);\n const headerTime = SelectorEngine.findOne(\n `${SELECTOR_TIMEPICKER}-clock-wrapper`,\n document.body\n );\n header.insertBefore(BUTTONS_WRAPPER, headerTime);\n }\n }\n\n _enableOrDisableToggleButton() {\n if (this._options.disabled) {\n this.toggleButton.disabled = true;\n this.toggleButton.style.pointerEvents = 'none';\n } else {\n this.toggleButton.disabled = false;\n this.toggleButton.style.pointerEvents = 'pointer';\n }\n }\n\n _appendToggleButton() {\n if (!this._options.toggleButton) {\n return;\n }\n this._element.insertAdjacentHTML('beforeend', TOGGLE_BUTTON);\n\n this._enableOrDisableToggleButton();\n }\n\n _appendValidationInfo() {\n const { invalidLabel, appendValidationInfo } = this._options;\n\n if (appendValidationInfo) {\n this._validationInfo = element('div');\n Manipulator.addClass(this._validationInfo, CLASSNAME_INVALID_FEEDBACK);\n this._validationInfo.innerHTML = invalidLabel;\n\n Manipulator.addStyle(this._input, { marginBottom: 0 });\n Manipulator.addStyle(this._validationInfo, { bottom: '-23px' });\n }\n }\n\n _applyFormatPlaceholder() {\n if (this._options.showFormat) {\n this._input.placeholder = this._format;\n }\n }\n\n _listenToCancelClick() {\n const DATEPICKER_CANCEL_BTN = SelectorEngine.findOne(\n `${SELECTOR_DATEPICKER}-cancel-btn`,\n document.body\n );\n\n EventHandler.one(DATEPICKER_CANCEL_BTN, 'mousedown', () => {\n this._cancel = true;\n this._scrollBar.reset();\n EventHandler.off(DATEPICKER_CANCEL_BTN, 'mousedown');\n });\n }\n\n _listenToToggleClick() {\n EventHandler.on(this._element, 'click', SELECTOR_DATA_TOGGLE, (event) => {\n event.preventDefault();\n this._openDatePicker();\n });\n }\n\n _listenToUserInput() {\n EventHandler.on(this._input, 'input', (event) => {\n this._handleInput(event.target.value);\n });\n }\n\n _disableInput() {\n if (this._options.disabled) {\n this._input.disabled = 'true';\n }\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n config = {\n ...Default,\n ...dataAttributes,\n ...config,\n };\n\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n\n _handleInput(input) {\n const dateTimeSplited = input.split(', ');\n const dateDelimeters = getDelimeters(this._format);\n\n const inputFirstValue = dateTimeSplited[0];\n const inputSecondValue = dateTimeSplited[1] || '';\n\n const date = parseDate(\n inputFirstValue,\n this._format,\n dateDelimeters,\n this._datepicker._options\n );\n\n if (!inputFirstValue) {\n this._removeInvalidClass(this._input);\n } else if (dateTimeSplited.length === 2) {\n const isInputValid = isValidDate(date) && isValidTime(inputSecondValue);\n\n if (isInputValid) {\n this._dateValue = inputFirstValue;\n this._timeValue = inputSecondValue;\n this._removeInvalidClass(this._input);\n this._datepicker._input.value = this._dateValue;\n this._datepicker._activeDate = this._dateValue;\n this._datepicker._selectedYear = getYear(date);\n this._datepicker._selectedMonth = getMonth(date);\n this._datepicker._headerDate = date;\n this._timepicker.input.value = this._timeValue;\n this._timepicker._isInvalidTimeFormat = false;\n } else {\n this._datepicker._activeDate = new Date();\n this._datepicker._selectedDate = null;\n this._datepicker._selectedMonth = null;\n this._datepicker._selectedYear = null;\n this._datepicker._headerDate = null;\n this._datepicker._headerMonth = null;\n this._datepicker._headerYear = null;\n this._timepicker._isInvalidTimeFormat = true;\n this._addInvalidClass(this._input, this._validationInfo);\n }\n } else {\n this._addInvalidClass(this._input, this._validationInfo);\n }\n }\n\n _addInvalidClass() {\n const { appendValidationInfo } = this._options;\n if (appendValidationInfo) {\n Manipulator.addClass(this._input, CLASSNAME_IS_INVALID);\n\n if (!SelectorEngine.findOne(SELECTOR_INVALID_FEEDBACK)) {\n this._input.parentNode.insertBefore(this._validationInfo, this._input.nextSibling);\n }\n }\n }\n\n _removeInvalidClass(input) {\n Manipulator.removeClass(input, CLASSNAME_IS_INVALID);\n this._isInvalidTimeFormat = false;\n const allInvalid = SelectorEngine.findOne(SELECTOR_INVALID_FEEDBACK);\n\n if (allInvalid === null) {\n return;\n }\n allInvalid.remove();\n }\n\n _openDatePicker() {\n const openEvent = EventHandler.trigger(this._element, EVENT_OPEN);\n\n if (openEvent.defaultPrevented) {\n return;\n }\n\n this._datepicker.open();\n\n if (!this._options.inline) {\n this._scrollBar.hide();\n }\n\n if (this._options.inline || this._options.datepicker.inline) {\n this._openDropdownDate();\n }\n this._addIconButtons();\n\n this._listenToCancelClick();\n\n if (this._options.inline && this._datepicker._isOpen) {\n this.toggleButton.style.pointerEvents = 'none';\n }\n\n EventHandler.one(this._datepicker._element, EVENT_CLOSE_DATEPICKER, () => {\n this._dateValue = this._datepicker._input.value;\n this._updateInputValue();\n\n if (this._cancel) {\n this._cancel = false;\n return;\n }\n\n EventHandler.on(this._datepicker.container, 'click', (e) => {\n if (!this._datepicker._selectedDate && e.target.classList.contains('datepicker-ok-btn')) {\n return;\n }\n this._openTimePicker();\n });\n setTimeout(() => {\n const timepicker = SelectorEngine.findOne(`${SELECTOR_TIMEPICKER}-wrapper`, document.body);\n if (!timepicker) {\n this._scrollBar.reset();\n }\n }, 10);\n if (this._options.inline) {\n this.toggleButton.style.pointerEvents = 'auto';\n }\n });\n\n const CLOCK_BTN = SelectorEngine.findOne(`${SELECTOR_TIMEPICKER}-button-toggle`, document.body);\n EventHandler.on(CLOCK_BTN, 'click', () => {\n this._datepicker.close();\n this._scrollBar.hide();\n EventHandler.trigger(this._datepicker._element, EVENT_CLOSE_DATEPICKER);\n });\n }\n\n _handleTimepickerDisablePast() {\n const currentDate = new Date();\n currentDate.setHours(0, 0, 0, 0);\n\n EventHandler.on(this._datepicker._element, 'dateChange.mdb.datepicker', () => {\n if (this._datepicker._selectedDate.getTime() === currentDate.getTime()) {\n this._timepicker.update({ disablePast: true });\n } else {\n this._timepicker.update({ disablePast: false });\n }\n });\n }\n\n _handleTimepickerDisableFuture() {\n const currentDate = new Date();\n currentDate.setHours(0, 0, 0, 0);\n\n EventHandler.on(this._datepicker._element, 'dateChange.mdb.datepicker', () => {\n if (this._datepicker._selectedDate.getTime() === currentDate.getTime()) {\n this._timepicker.update({ disableFuture: true });\n } else {\n this._timepicker.update({ disableFuture: false });\n }\n });\n }\n\n _handleEscapeKey() {\n EventHandler.one(document.body, 'keyup', () => {\n setTimeout(() => {\n const timepicker = SelectorEngine.findOne(`${SELECTOR_TIMEPICKER}-wrapper`, document.body);\n if (!timepicker) {\n this._scrollBar.reset();\n }\n }, 250);\n });\n }\n\n _handleCancelButton() {\n const CANCEL_BTN = SelectorEngine.findOne(`${SELECTOR_TIMEPICKER}-cancel`, document.body);\n EventHandler.one(CANCEL_BTN, 'mousedown', () => {\n this._scrollBar.reset();\n });\n }\n\n _openDropdownDate() {\n const datePopper = this._datepicker._popper;\n datePopper.state.elements.reference = this._input;\n this._scrollBar.reset();\n }\n\n _openTimePicker() {\n EventHandler.trigger(this._timepicker.elementToggle, 'click');\n setTimeout(() => {\n this._addIconButtons();\n\n if (this._options.inline || this._options.timepicker.inline) {\n this._openDropdownTime();\n }\n if (this._timepicker._modal) {\n const CANCEL_BTN = SelectorEngine.findOne(`${SELECTOR_TIMEPICKER}-cancel`, document.body);\n this._handleEscapeKey();\n this._handleCancelButton();\n EventHandler.on(this._timepicker._modal, 'click', (e) => {\n if (\n e.target.classList.contains(`${CLASSNAME_TIMEPICKER}-wrapper`) ||\n e.target.classList.contains(`${CLASSNAME_TIMEPICKER}-submit`)\n ) {\n setTimeout(() => {\n this._scrollBar.reset();\n }, 200);\n }\n if (e.target.classList.contains(`${CLASSNAME_TIMEPICKER}-clear`)) {\n EventHandler.trigger(this._timepicker._element, EVENT_VALUE_CHANGED_TIMEPICKER);\n }\n if (e.target.classList.contains(`${CLASSNAME_DATEPICKER}-button-toggle`)) {\n EventHandler.trigger(CANCEL_BTN, 'click');\n setTimeout(() => {\n this._openDatePicker();\n this._scrollBar.hide();\n }, 200);\n }\n });\n }\n });\n\n EventHandler.one(this._timepicker._element, EVENT_VALUE_CHANGED_TIMEPICKER, () => {\n this._timeValue = this._timepicker.input.value;\n this._updateInputValue();\n EventHandler.trigger(this._element, EVENT_CLOSE);\n });\n }\n\n _openDropdownTime() {\n const timePopper = this._timepicker._popper;\n timePopper.state.elements.reference = this._input;\n timePopper.update();\n this._scrollBar.reset();\n }\n\n _setInitialDefaultInput() {\n const shouldUpdate = this._options.defaultDate || this._options.defaultTime;\n\n if (shouldUpdate) {\n this._updateInputValue();\n }\n }\n\n _updateInputValue() {\n const isDateTimeFilled = this._timeValue && this._dateValue;\n\n if (isDateTimeFilled) {\n this._input.value = `${this._dateValue}, ${this._timeValue}`;\n this._removeInvalidClass(this._input);\n\n const changeEvent = EventHandler.trigger(this._element, EVENT_VALUE_CHANGED);\n\n if (changeEvent.defaultPrevented) {\n return;\n }\n }\n\n EventHandler.trigger(this._input, 'focus');\n }\n\n // static\n\n static jQueryInterface(config, options) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data && /dispose/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Datetimepicker(this, _config);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n\n data[config](options);\n }\n });\n }\n}\n\nexport default Datetimepicker;\n","import EventHandler from '../../mdb/dom/event-handler';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport Manipulator from '../../mdb/dom/manipulator';\nimport {\n isDisabled,\n getElementFromSelector,\n isVisible,\n getSelectorFromElement,\n} from '../../mdb/util';\nimport { enableDismissTrigger } from '../../bootstrap/mdb-prefix/util/component-functions';\n\nconst alertCallback = (component, initSelector) => {\n const Alert = component;\n\n enableDismissTrigger(Alert, 'close');\n\n // MDB init\n SelectorEngine.find(initSelector).forEach((element) => {\n return Alert.getOrCreateInstance(element);\n });\n};\n\nconst buttonCallback = (component, initSelector) => {\n const Button = component;\n const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n\n // BS init\n EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, (event) => {\n event.preventDefault();\n\n const button = event.target.closest(initSelector);\n const data = Button.getOrCreateInstance(button);\n\n data.toggle();\n });\n\n // MDB init\n SelectorEngine.find(initSelector).forEach((element) => {\n return Button.getOrCreateInstance(element);\n });\n};\n\nconst carouselCallback = (component, initSelector) => {\n const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n const SELECTOR_DATA_SLIDE = '[data-mdb-slide], [data-mdb-slide-to]';\n const CLASS_NAME_CAROUSEL = 'carousel';\n const Carousel = component;\n const EVENT_LOAD_DATA_API = `load.bs.${component.name}.data-api`;\n const SELECTOR_DATA_RIDE = initSelector;\n\n EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = getElementFromSelector(this);\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return;\n }\n\n event.preventDefault();\n\n const carousel = Carousel.getOrCreateInstance(target);\n const slideIndex = this.getAttribute('data-mdb-slide-to');\n\n if (slideIndex) {\n carousel.to(slideIndex);\n carousel._maybeEnableCycle();\n return;\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next();\n carousel._maybeEnableCycle();\n return;\n }\n\n carousel.prev();\n carousel._maybeEnableCycle();\n });\n\n EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n carousels.forEach((carousel) => {\n Carousel.getOrCreateInstance(carousel);\n });\n });\n};\n\nconst collapseCallback = (component, initSelector) => {\n const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n const SELECTOR_DATA_TOGGLE = initSelector;\n const Collapse = component;\n\n EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (\n event.target.tagName === 'A' ||\n (event.delegateTarget && event.delegateTarget.tagName === 'A')\n ) {\n event.preventDefault();\n }\n\n const selector = getSelectorFromElement(this);\n const selectorElements = SelectorEngine.find(selector);\n\n selectorElements.forEach((element) => {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle();\n });\n });\n\n SelectorEngine.find(SELECTOR_DATA_TOGGLE).forEach((el) => {\n const selector = getSelectorFromElement(el);\n const selectorElements = SelectorEngine.find(selector);\n\n selectorElements.forEach((element) => {\n Collapse.getOrCreateInstance(element, { toggle: false });\n });\n });\n};\n\nconst dropdownCallback = (component, initSelector) => {\n const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n const EVENT_KEYDOWN_DATA_API = `keydown.bs.${component.name}.data-api`;\n const EVENT_KEYUP_DATA_API = `keyup.bs.${component.name}.data-api`;\n const SELECTOR_MENU = '.dropdown-menu';\n const SELECTOR_DATA_TOGGLE = `[data-mdb-${component.NAME}-initialized]`;\n const Dropdown = component;\n\n EventHandler.on(\n document,\n EVENT_KEYDOWN_DATA_API,\n SELECTOR_DATA_TOGGLE,\n Dropdown.dataApiKeydownHandler\n );\n EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);\n EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault();\n Dropdown.getOrCreateInstance(this).toggle();\n });\n\n SelectorEngine.find(initSelector).forEach((el) => {\n Dropdown.getOrCreateInstance(el);\n });\n};\n\nconst inputCallback = (component, initSelector) => {\n const SELECTOR_DATA_INIT = initSelector;\n const SELECTOR_OUTLINE_INPUT = `${SELECTOR_DATA_INIT} input`;\n const SELECTOR_OUTLINE_TEXTAREA = `${SELECTOR_DATA_INIT} textarea`;\n const Input = component;\n\n EventHandler.on(document, 'focus', SELECTOR_OUTLINE_INPUT, Input.activate(new Input()));\n EventHandler.on(document, 'input', SELECTOR_OUTLINE_INPUT, Input.activate(new Input()));\n EventHandler.on(document, 'blur', SELECTOR_OUTLINE_INPUT, Input.deactivate(new Input()));\n\n EventHandler.on(document, 'focus', SELECTOR_OUTLINE_TEXTAREA, Input.activate(new Input()));\n EventHandler.on(document, 'input', SELECTOR_OUTLINE_TEXTAREA, Input.activate(new Input()));\n EventHandler.on(document, 'blur', SELECTOR_OUTLINE_TEXTAREA, Input.deactivate(new Input()));\n\n EventHandler.on(window, 'shown.bs.modal', (e) => {\n SelectorEngine.find(SELECTOR_OUTLINE_INPUT, e.target).forEach((element) => {\n const instance = Input.getInstance(element.parentNode);\n if (!instance) {\n return;\n }\n instance.update();\n });\n SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, e.target).forEach((element) => {\n const instance = Input.getInstance(element.parentNode);\n if (!instance) {\n return;\n }\n instance.update();\n });\n });\n\n EventHandler.on(window, 'shown.bs.dropdown', (e) => {\n const target = e.target.parentNode.querySelector('.dropdown-menu');\n if (target) {\n SelectorEngine.find(SELECTOR_OUTLINE_INPUT, target).forEach((element) => {\n const instance = Input.getInstance(element.parentNode);\n if (!instance) {\n return;\n }\n instance.update();\n });\n SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, target).forEach((element) => {\n const instance = Input.getInstance(element.parentNode);\n if (!instance) {\n return;\n }\n instance.update();\n });\n }\n });\n\n EventHandler.on(window, 'shown.bs.tab', (e) => {\n let targetId;\n\n if (e.target.href) {\n targetId = e.target.href.split('#')[1];\n } else {\n targetId = Manipulator.getDataAttribute(e.target, 'target').split('#')[1];\n }\n\n const target = SelectorEngine.findOne(`#${targetId}`);\n SelectorEngine.find(SELECTOR_OUTLINE_INPUT, target).forEach((element) => {\n const instance = Input.getInstance(element.parentNode);\n if (!instance) {\n return;\n }\n instance.update();\n });\n SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, target).forEach((element) => {\n const instance = Input.getInstance(element.parentNode);\n if (!instance) {\n return;\n }\n instance.update();\n });\n });\n\n // auto-init\n SelectorEngine.find(SELECTOR_DATA_INIT).map((element) => new Input(element));\n\n // form reset handler\n EventHandler.on(window, 'reset', (e) => {\n SelectorEngine.find(SELECTOR_OUTLINE_INPUT, e.target).forEach((element) => {\n const instance = Input.getInstance(element.parentNode);\n if (!instance) {\n return;\n }\n instance.forceInactive();\n });\n SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, e.target).forEach((element) => {\n const instance = Input.getInstance(element.parentNode);\n if (!instance) {\n return;\n }\n instance.forceInactive();\n });\n });\n\n // auto-fill\n EventHandler.on(window, 'onautocomplete', (e) => {\n const instance = Input.getInstance(e.target.parentNode);\n if (!instance || !e.cancelable) {\n return;\n }\n instance.forceActive();\n });\n};\n\nconst modalCallback = (component, initSelector) => {\n const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n const OPEN_SELECTOR = '.modal.show';\n const Modal = component;\n const EVENT_SHOW = `show.bs.${component.name}`;\n const EVENT_HIDDEN = `hidden.bs.${component.name}`;\n\n EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, function (event) {\n const target = getElementFromSelector(this);\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n\n EventHandler.one(target, EVENT_SHOW, (showEvent) => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return;\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus();\n }\n });\n });\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpenedModals = SelectorEngine.find(OPEN_SELECTOR);\n alreadyOpenedModals.forEach((modal) => {\n if (!modal.classList.contains('modal-non-invasive-show')) {\n Modal.getInstance(modal).hide();\n }\n });\n\n const data = Modal.getOrCreateInstance(target);\n\n data.toggle(this);\n });\n\n enableDismissTrigger(Modal);\n\n SelectorEngine.find(initSelector).forEach((el) => {\n const selector = getSelectorFromElement(el);\n const selectorElement = SelectorEngine.findOne(selector);\n\n Modal.getOrCreateInstance(selectorElement);\n });\n};\n\nconst popoverCallback = (component, initSelector) => {\n const Popover = component;\n const SELECTOR_DATA_TOGGLE = initSelector;\n\n SelectorEngine.find(SELECTOR_DATA_TOGGLE).forEach((el) => {\n Popover.getOrCreateInstance(el);\n });\n};\n\nconst offcanvasCallback = (component, initSelector) => {\n const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n const OPEN_SELECTOR = '.offcanvas.show';\n const Offcanvas = component;\n const EVENT_HIDDEN = `hidden.bs.${component.name}`;\n const EVENT_LOAD_DATA_API = `load.bs.${component.name}.data-api`;\n const EVENT_RESIZE = `resize.bs.${component.name}`;\n\n EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, function (event) {\n const target = getElementFromSelector(this);\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n\n if (isDisabled(this)) {\n return;\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus();\n }\n });\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide();\n }\n\n const data = Offcanvas.getOrCreateInstance(target);\n data.toggle(this);\n });\n\n EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n SelectorEngine.find(OPEN_SELECTOR).forEach((selector) => {\n Offcanvas.getOrCreateInstance(selector).show();\n });\n });\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]').forEach((element) => {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide();\n }\n });\n });\n\n enableDismissTrigger(Offcanvas);\n};\n\nconst scrollspyCallback = (component, initSelector) => {\n const EVENT_LOAD_DATA_API = `load.bs.${component.name}.data-api`;\n const ScrollSpy = component;\n\n EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n SelectorEngine.find(initSelector).forEach((el) => {\n ScrollSpy.getOrCreateInstance(el);\n });\n });\n};\n\nconst tabCallback = (component, initSelector) => {\n const EVENT_LOAD_DATA_API = `load.bs.${component.name}.data-api`;\n const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n const CLASS_NAME_ACTIVE = 'active';\n const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-mdb-tab-init], .${CLASS_NAME_ACTIVE}[data-mdb-pill-init], .${CLASS_NAME_ACTIVE}[data-mdb-toggle=\"list\"]`;\n const Tab = component;\n\n EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n\n if (isDisabled(this)) {\n return;\n }\n\n Tab.getOrCreateInstance(this).show();\n });\n\n EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE).forEach((element) => {\n Tab.getOrCreateInstance(element);\n });\n });\n};\n\nconst toastCallback = (component, initSelector) => {\n const Toast = component;\n\n enableDismissTrigger(Toast);\n\n // MDB init\n SelectorEngine.find(initSelector).forEach((element) => {\n return Toast.getOrCreateInstance(element);\n });\n};\n\nconst rippleCallback = (component, initSelector) => {\n const Ripple = component;\n\n EventHandler.one(document, 'mousedown', initSelector, Ripple.autoInitial(new Ripple()));\n};\n\nexport {\n alertCallback,\n buttonCallback,\n carouselCallback,\n collapseCallback,\n dropdownCallback,\n inputCallback,\n modalCallback,\n offcanvasCallback,\n tabCallback,\n toastCallback,\n popoverCallback,\n rippleCallback,\n scrollspyCallback,\n};\n","import {\n alertCallback,\n lightboxCallback,\n sidenavCallback,\n modalCallback,\n toastCallback,\n} from '../callbacks/pro';\nimport * as freeSelectors from './free';\nimport chartsCallback from '../callbacks/charts';\n\nconst defaultInitSelectors = {\n ...freeSelectors.default,\n chart: {\n name: 'Chart',\n selector: '[data-mdb-chart-init]',\n isToggler: false,\n advanced: chartsCallback,\n },\n chips: {\n name: 'ChipsInput',\n selector: '[data-mdb-chips-input-init]',\n isToggler: false,\n },\n chip: {\n name: 'Chip',\n selector: '[data-mdb-chip-init]',\n isToggler: false,\n onInit: 'init',\n },\n datatable: {\n name: 'Datatable',\n selector: '[data-mdb-datatable-init]',\n isToggler: false,\n },\n datetimepicker: {\n name: 'Datetimepicker',\n selector: '[data-mdb-datetimepicker-init]',\n isToggler: false,\n },\n datepicker: {\n name: 'Datepicker',\n selector: '[data-mdb-datepicker-init]',\n isToggler: false,\n },\n loading: {\n name: 'Loading',\n selector: '[data-mdb-loading-init]',\n isToggler: false,\n },\n multiRangeSlider: {\n name: 'MultiRangeSlider',\n selector: '[data-mdb-multi-range-slider-init]',\n isToggler: false,\n },\n select: {\n name: 'Select',\n selector: '[data-mdb-select-init]',\n isToggler: false,\n },\n timepicker: {\n name: 'Timepicker',\n selector: '[data-mdb-timepicker-init]',\n isToggler: false,\n },\n touch: {\n name: 'Touch',\n selector: '[data-mdb-touch-init]',\n isToggler: false,\n },\n alert: {\n name: 'Alert',\n selector: '[data-mdb-alert-init]',\n isToggler: true,\n callback: alertCallback,\n },\n animation: {\n name: 'Animate',\n selector: '[data-mdb-animation-init]',\n isToggler: false,\n onInit: 'init',\n },\n clipboard: {\n name: 'Clipboard',\n selector: '[data-mdb-clipboard-init]',\n isToggler: false,\n },\n infiniteScroll: {\n name: 'InfiniteScroll',\n selector: '[data-mdb-infinite-scroll-init]',\n isToggler: false,\n },\n lazyLoad: {\n name: 'LazyLoad',\n selector: '[data-mdb-lazy-load-init]',\n isToggler: false,\n },\n lightbox: {\n name: 'Lightbox',\n selector: '[data-mdb-lightbox-init]',\n isToggler: true,\n callback: lightboxCallback,\n },\n modal: {\n name: 'Modal',\n selector: '[data-mdb-modal-init]',\n isToggler: true,\n callback: modalCallback,\n },\n navbar: {\n name: 'Navbar',\n selector: '[data-mdb-navbar-init]',\n isToggler: false,\n },\n perfectScrollbar: {\n name: 'PerfectScrollbar',\n selector: '[data-mdb-perfect-scrollbar-init]',\n isToggler: false,\n },\n popconfirm: {\n name: 'Popconfirm',\n selector: '[data-mdb-popconfirm-init]',\n isToggler: false,\n },\n rating: {\n name: 'Rating',\n selector: '[data-mdb-rating-init]',\n isToggler: false,\n },\n sidenav: {\n name: 'Sidenav',\n selector: '[data-mdb-sidenav-init]',\n isToggler: true,\n callback: sidenavCallback,\n },\n smoothScroll: {\n name: 'SmoothScroll',\n selector: '[data-mdb-smooth-scroll-init]',\n isToggler: false,\n },\n stepper: {\n name: 'Stepper',\n selector: '[data-mdb-stepper-init]',\n isToggler: false,\n },\n sticky: {\n name: 'Sticky',\n selector: '[data-mdb-sticky-init]',\n isToggler: false,\n },\n toast: {\n name: 'Toast',\n selector: '[data-mdb-toast-init]',\n isToggler: true,\n callback: toastCallback,\n },\n};\n\nexport default defaultInitSelectors;\n","import {\n alertCallback,\n dropdownCallback,\n offcanvasCallback,\n tabCallback,\n buttonCallback,\n modalCallback,\n rippleCallback,\n collapseCallback,\n carouselCallback,\n scrollspyCallback,\n toastCallback,\n inputCallback,\n} from '../callbacks/free';\n\nconst defaultInitSelectors = {\n // Bootstrap Components\n alert: {\n name: 'Alert',\n selector: '[data-mdb-alert-init]',\n isToggler: true,\n callback: alertCallback,\n },\n button: {\n name: 'Button',\n selector: '[data-mdb-button-init]',\n isToggler: true,\n callback: buttonCallback,\n },\n carousel: {\n name: 'Carousel',\n selector: '[data-mdb-carousel-init]',\n isToggler: true,\n callback: carouselCallback,\n },\n collapse: {\n name: 'Collapse',\n selector: '[data-mdb-collapse-init]',\n isToggler: true,\n callback: collapseCallback,\n },\n dropdown: {\n name: 'Dropdown',\n selector: '[data-mdb-dropdown-init]',\n isToggler: true,\n callback: dropdownCallback,\n },\n modal: {\n name: 'Modal',\n selector: '[data-mdb-modal-init]',\n isToggler: true,\n callback: modalCallback,\n },\n offcanvas: {\n name: 'Offcanvas',\n selector: '[data-mdb-offcanvas-init]',\n isToggler: true,\n callback: offcanvasCallback,\n },\n scrollspy: {\n name: 'ScrollSpy',\n selector: '[data-mdb-scrollspy-init]',\n isToggler: true,\n callback: scrollspyCallback,\n },\n tab: {\n name: 'Tab',\n selector: '[data-mdb-tab-init], [data-mdb-pill-init], [data-mdb-list-init]',\n isToggler: true,\n callback: tabCallback,\n },\n toast: {\n name: 'Toast',\n selector: '[data-mdb-toast-init]',\n isToggler: true,\n callback: toastCallback,\n },\n tooltip: {\n name: 'Tooltip',\n selector: '[data-mdb-tooltip-init]',\n isToggler: false,\n },\n input: {\n name: 'Input',\n selector: '[data-mdb-input-init]',\n isToggler: true,\n callback: inputCallback,\n },\n range: {\n name: 'Range',\n selector: '[data-mdb-range-init]',\n isToggler: false,\n },\n ripple: {\n name: 'Ripple',\n selector: '[data-mdb-ripple-init]',\n isToggler: true,\n callback: rippleCallback,\n },\n popover: {\n name: 'Popover',\n selector: '[data-mdb-popover-init]',\n isToggler: false,\n callback: rippleCallback,\n },\n};\n\nexport default defaultInitSelectors;\n","import Manipulator from '../../mdb/dom/manipulator';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport DEFAULT_OPTIONS from '../../pro/charts/chartsDefaults';\n\nconst chartsCallback = (Component, initSelector) => {\n // eslint-disable-next-line consistent-return\n const IS_COMPLEX = (data) => {\n return (\n (data[0] === '{' && data[data.length - 1] === '}') ||\n (data[0] === '[' && data[data.length - 1] === ']')\n );\n };\n\n const CONVERT_DATA_TYPE = (data) => {\n if (typeof data !== 'string') return data;\n if (IS_COMPLEX(data)) {\n return JSON.parse(data.replace(/'/g, '\"'));\n }\n return data;\n };\n\n const PARSE_DATA = (data) => {\n const dataset = {};\n Object.keys(data).forEach((property) => {\n if (property.match(/dataset.*/)) {\n const chartProperty = property.slice(7, 8).toLowerCase().concat(property.slice(8));\n dataset[chartProperty] = CONVERT_DATA_TYPE(data[property]);\n }\n });\n return dataset;\n };\n\n SelectorEngine.find(initSelector).forEach((el) => {\n if (\n !Component.getInstance(el) &&\n Manipulator.getDataAttribute(el, 'chart') !== 'bubble' &&\n Manipulator.getDataAttribute(el, 'chart') !== 'scatter'\n ) {\n const dataSet = Manipulator.getDataAttributes(el);\n const dataAttr = {\n data: {\n datasets: [PARSE_DATA(dataSet)],\n },\n };\n if (dataSet.chart) {\n dataAttr.type = dataSet.chart;\n }\n if (dataSet.labels) {\n dataAttr.data.labels = JSON.parse(dataSet.labels.replace(/'/g, '\"'));\n }\n\n return new Component(el, {\n ...dataAttr,\n ...DEFAULT_OPTIONS[dataAttr.type],\n });\n }\n return null;\n });\n};\n\nexport default chartsCallback;\n","import EventHandler from '../../mdb/dom/event-handler';\nimport SelectorEngine from '../../mdb/dom/selector-engine';\nimport { getElementFromSelector, isVisible, getSelectorFromElement } from '../../mdb/util';\nimport { enableDismissTrigger } from '../../bootstrap/mdb-prefix/util/component-functions';\nimport {\n buttonCallback,\n carouselCallback,\n collapseCallback,\n dropdownCallback,\n offcanvasCallback,\n scrollspyCallback,\n tabCallback,\n} from './free';\n\nconst alertCallback = (component, initSelector) => {\n const Alert = component;\n\n enableDismissTrigger(Alert, 'close');\n // MDB init\n SelectorEngine.find(initSelector).forEach((element) => {\n return Alert.getOrCreateInstance(element);\n });\n};\n\nconst lightboxCallback = (component, initSelector) => {\n const EVENT_CLICK_DATA_API = `click.mdb.${component.name}.data-api`;\n const SELECTOR_DATA_INIT = initSelector;\n const SELECTOR_TOGGLE = `${SELECTOR_DATA_INIT} img:not(.lightbox-disabled)`;\n const Lightbox = component;\n\n SelectorEngine.find(SELECTOR_DATA_INIT).forEach((el) => new Lightbox(el));\n EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_TOGGLE, Lightbox.toggle());\n};\n\nconst modalCallback = (component, initSelector) => {\n const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;\n const OPEN_SELECTOR = '.modal.show';\n const Modal = component;\n const EVENT_SHOW = `show.bs.${component.name}`;\n const EVENT_HIDDEN = `hidden.bs.${component.name}`;\n\n EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, function (event) {\n const target = getElementFromSelector(this);\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n\n EventHandler.one(target, EVENT_SHOW, (showEvent) => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return;\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus();\n }\n });\n });\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpenedModals = SelectorEngine.find(OPEN_SELECTOR);\n alreadyOpenedModals.forEach((modal) => {\n if (!modal.classList.contains('modal-non-invasive-show')) {\n Modal.getInstance(modal).hide();\n }\n });\n\n const data = Modal.getOrCreateInstance(target);\n\n data.toggle(this);\n });\n\n enableDismissTrigger(Modal);\n\n SelectorEngine.find(initSelector).forEach((el) => {\n const selector = getSelectorFromElement(el);\n const selectorElement = SelectorEngine.findOne(selector);\n\n Modal.getOrCreateInstance(selectorElement);\n });\n};\n\nconst sidenavCallback = (component, initSelector) => {\n const SELECTOR_DATA_INIT = initSelector;\n const SELECTOR_TOGGLE = '[data-mdb-toggle=\"sidenav\"]';\n const Sidenav = component;\n\n EventHandler.on(document, 'click', SELECTOR_TOGGLE, Sidenav.toggleSidenav());\n\n SelectorEngine.find(SELECTOR_DATA_INIT).forEach((sidenav) => {\n return Sidenav.getOrCreateInstance(sidenav);\n });\n};\n\nconst toastCallback = (component, initSelector) => {\n const SELECTOR_DATA_INIT = initSelector;\n const Toast = component;\n\n enableDismissTrigger(Toast);\n\n SelectorEngine.find(SELECTOR_DATA_INIT).forEach((toast) => {\n return Toast.getOrCreateInstance(toast);\n });\n};\n\nexport {\n alertCallback,\n lightboxCallback,\n buttonCallback,\n carouselCallback,\n collapseCallback,\n dropdownCallback,\n modalCallback,\n offcanvasCallback,\n scrollspyCallback,\n sidenavCallback,\n tabCallback,\n toastCallback,\n};\n","import defaultInitSelectors from './initSelectors/pro';\nimport { InitMDB } from './init';\n\nconst initMDBInstance = new InitMDB(defaultInitSelectors);\nconst initMDB = initMDBInstance.initMDB;\n\nexport default initMDB;\n","// BOOTSTRAP CORE COMPONENTS\nimport Button from './free/button';\nimport Offcanvas from './bootstrap/mdb-prefix/offcanvas';\nimport Carousel from './free/carousel';\nimport Popover from './free/popover';\nimport ScrollSpy from './free/scrollspy';\nimport Tab from './free/tab';\nimport Tooltip from './free/tooltip';\n\n// MDB FREE COMPONENTS\nimport Input from './free/input';\nimport Collapse from './free/collapse';\nimport Dropdown from './free/dropdown';\nimport Ripple from './free/ripple';\nimport Range from './free/range';\n\n// MDB PRO COMPONENTS\nimport Animate from './pro/animate';\nimport Chart from './pro/charts/charts';\nimport Lightbox from './pro/lightbox';\nimport Rating from './pro/rating';\nimport Sidenav from './pro/sidenav';\nimport Alert from './pro/alert';\nimport Toast from './pro/toast';\nimport Timepicker from './pro/timepicker';\nimport Navbar from './pro/navbar';\nimport InfiniteScroll from './pro/infinite-scroll';\nimport LazyLoad from './pro/lazy-load';\nimport Datepicker from './pro/datepicker';\nimport Popconfirm from './pro/popconfirm';\nimport Datatable from './pro/datatable';\nimport Stepper from './pro/stepper';\nimport Sticky from './pro/sticky';\nimport Select from './pro/select';\nimport Touch from './pro/touch';\nimport SmoothScroll from './pro/smooth-scroll';\nimport PerfectScrollbar from './pro/perfect-scrollbar';\nimport Loading from './pro/loading-management';\nimport Autocomplete from './pro/autocomplete';\nimport Modal from './pro/modal';\nimport Clipboard from './pro/clipboard';\nimport ChipsInput from './pro/chips';\nimport Chip from './pro/chips/chip';\nimport MultiRangeSlider from './pro/multi-range';\nimport Datetimepicker from './pro/date-time-picker';\n\nimport initMDB from './autoinit/index.pro';\n\nconst mdb = {\n // FREE\n Button,\n Carousel,\n Collapse,\n Offcanvas,\n Dropdown,\n Input,\n Modal,\n Popover,\n ScrollSpy,\n Ripple,\n Tab,\n Tooltip,\n Range,\n // PRO\n Alert,\n Animate,\n Chart,\n Datepicker,\n Datatable,\n Lightbox,\n Navbar,\n Popconfirm,\n Rating,\n Sidenav,\n SmoothScroll,\n Timepicker,\n Toast,\n InfiniteScroll,\n LazyLoad,\n Stepper,\n Sticky,\n Select,\n Touch,\n PerfectScrollbar,\n Loading,\n Autocomplete,\n Clipboard,\n ChipsInput,\n Chip,\n MultiRangeSlider,\n Datetimepicker,\n};\n\ninitMDB(mdb);\n\nexport {\n // FREE\n Button,\n Carousel,\n Collapse,\n Offcanvas,\n Dropdown,\n Input,\n Modal,\n Popover,\n ScrollSpy,\n Ripple,\n Tab,\n Tooltip,\n Range,\n // PRO\n Alert,\n Animate,\n Chart,\n Datepicker,\n Datatable,\n Lightbox,\n Navbar,\n Popconfirm,\n Rating,\n Sidenav,\n SmoothScroll,\n Timepicker,\n Toast,\n InfiniteScroll,\n LazyLoad,\n Stepper,\n Sticky,\n Select,\n Touch,\n PerfectScrollbar,\n Loading,\n Autocomplete,\n Clipboard,\n ChipsInput,\n Chip,\n MultiRangeSlider,\n Datetimepicker,\n initMDB,\n};\n"],"names":["mapData","storeData","id","element","key","data","keyProperties","Data","instance","MAX_UID","toType","obj","getUID","prefix","getSelector","selector","hrefAttr","getSelectorFromElement","getElementFromSelector","isElement","getElement","typeCheckConfig","componentName","config","configTypes","property","expectedTypes","value","valueType","isVisible","elementStyle","parentNodeStyle","isDisabled","getjQuery","jQuery","onDOMContentLoaded","callback","isRTL","array","collection","tag","defineJQueryPlugin","plugin","$","name","JQUERY_NO_CONFLICT","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","nativeEvents","getUidEvent","uid","getEvent","bootstrapHandler","fn","handler","event","EventHandler","bootstrapDelegationHandler","domElements","target","i","findHandler","events","delegationSelector","uidEventList","len","normalizeParams","originalTypeEvent","delegationFn","delegation","originalHandler","typeEvent","custom","addHandler","oneOff","handlers","previousFn","removeHandler","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","e","eventParameters","param","inNamespace","isNamespace","elementEvent","keyHandlers","args","isNative","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","evt","EventHandlerMulti","eventsName","normalizeData","val","normalizeDataKey","chr","Manipulator","attributes","pureKey","rect","style","className","NODE_TEXT","SelectorEngine","child","parents","ancestor","previous","next","elementMap","instanceMap","MILLISECONDS_MULTIPLIER","TRANSITION_END","parseSelector","match","object","getTransitionDurationFromElement","transitionDuration","transitionDelay","floatTransitionDuration","floatTransitionDelay","triggerTransitionEnd","elementIsVisible","closedDetails","summary","findShadowRoot","root","noop","reflow","execute","possibleCallback","defaultValue","executeAfterTransition","transitionElement","waitForTransition","durationPadding","emulatedDuration","called","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","makeEventUid","getElementEvents","hydrateObj","domElement","callable","normalizeParameters","delegationFunction","isDelegated","getTypeEvent","previousFunction","meta","mdbKeys","Config$1","jsonConfig","VERSION","Config","propertyName","isAnimated","NAME","CLASS_NAME_ACTIVE","Button","BaseComponent","mapComponentsData","componentsData","InitializedComponents","isInitialized","bindCallbackEventsIfNeeded","component","initComponent","manualInit","thisComponent","_defaultInitSelectors","isToggler","InitMDB","defaultInitSelectors","__publicField","components","checkOtherImports","componentList","DATA_KEY","EVENT_KEY","EVENT_CLICK","EVENT_TRANSITIONEND","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","CLASS_NAME_SHOWN","CLASS_NAME_FIXED_ACTION_BTN","SELECTOR_ACTION_BUTTON","SELECTOR_LIST_ELEMENT","SELECTOR_LIST","BSButton","options","_config","action","listTranslate","el","computed","hrefAttribute","focusables","CLASS_NAME_FADE","CLASS_NAME_SHOW","EVENT_MOUSEDOWN","Default","DefaultType","Backdrop","backdrop","enableDismissTrigger","method","clickEvent","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_KEY","TAB_NAV_FORWARD","TAB_NAV_BACKWARD","trapElement","elements","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","documentWidth","width","calculatedValue","styleProperty","scrollbarWidth","manipulationCallBack","actualValue","callBack","sel","ESCAPE_KEY","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","CLASS_NAME_BACKDROP","EVENT_HIDE_PREVENTED","EVENT_KEYDOWN_DISMISS","Offcanvas","relatedTarget","completeCallBack","completeCallback","clickCallback","FocusTrap","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","POINTER_TYPE_TOUCH","POINTER_TYPE_PEN","CLASS_NAME_POINTER_EVENT","SWIPE_THRESHOLD","Swipe","absDeltaX","direction","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","TOUCHEVENT_COMPAT_WAIT","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_DRAG_START","CLASS_NAME_CAROUSEL","CLASS_NAME_SLIDE","CLASS_NAME_END","CLASS_NAME_START","CLASS_NAME_NEXT","CLASS_NAME_PREV","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM_IMG","SELECTOR_INDICATORS","KEY_TO_DIRECTION","Carousel","items","activeIndex","order","img","swipeConfig","activeIndicator","newActiveIndicator","elementInterval","isNext","nextElement","nextElementIndex","triggerEvent","eventName","isCycling","directionalClassName","orderClassName","EVENT_SLIDE_BS","EVENT_SLID_BS","EXTENDED_EVENTS","BSCarousel","top","bottom","right","left","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","getWindow","node","ownerDocument","OwnElement","isHTMLElement","isShadowRoot","applyStyles","_ref","state","effect","_ref2","initialStyles","styleProperties","attribute","applyStyles$1","getBasePlacement","max","min","round","getUAString","uaData","item","isLayoutViewport","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","visualViewport","addVisualOffsets","x","y","height","getLayoutRect","contains","parent","rootNode","getComputedStyle","isTableElement","getDocumentElement","getParentNode","getTrueOffsetParent","getContainingBlock","isFirefox","isIE","elementCss","currentNode","css","getOffsetParent","window","offsetParent","getMainAxisFromPlacement","within","mathMax","mathMin","withinMaxClamp","v","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","keys","hashMap","toPaddingObject","padding","arrow","_state$modifiersData$","arrowElement","popperOffsets","basePlacement","axis","isVertical","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","center","offset","axisProp","_options$element","arrow$1","getVariation","unsetSides","roundOffsetsByDPR","win","dpr","mapToStyles","_Object$assign2","popperRect","variation","offsets","position","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","heightProp","widthProp","offsetY","offsetX","commonStyles","_ref4","_Object$assign","computeStyles","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","computeStyles$1","passive","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","eventListeners","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","scrollTop","getWindowScrollBarX","getViewportRect","strategy","html","layoutViewport","getDocumentRect","_element$ownerDocumen","winScroll","body","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","isBody","updatedList","rectToClientRect","getInnerBoundingClientRect","getClientRectFromMixedType","clippingParent","getClippingParents","canEscapeClipping","clipperElement","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","a","getExpandedFallbackPlacements","oppositePlacement","flip","_options$mainAxis","checkMainAxis","_options$altAxis","checkAltAxis","specifiedFallbackPlacements","_options$flipVariatio","preferredPlacement","isBasePlacement","fallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","mainVariationSide","altVariationSide","checks","check","numberOfChecks","_loop","_i","fittingPlacement","_ret","flip$1","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","hide","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","hide$1","distanceAndSkiddingToXY","rects","invertDistance","skidding","distance","_options$offset","_data$state$placement","offset$1","popperOffsets$1","getAltAxis","preventOverflow","_options$tether","tether","_options$tetherOffset","tetherOffset","altAxis","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","preventOverflow$1","getHTMLElementScroll","getNodeScroll","isElementScaled","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","documentElement","modifiers","map","visited","result","modifier","sort","requires","dep","depModifier","orderModifiers","orderedModifiers","phase","debounce","pending","resolve","mergeByName","merged","current","existing","DEFAULT_OPTIONS","areValidElements","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","effectCleanupFns","isDestroyed","setOptionsAction","cleanupModifierEffects","m","runModifierEffects","_state$elements","_state$orderedModifie","_state$orderedModifie2","_ref$options","cleanupFn","noopFn","createPopper","DefaultAllowlist","uriAttributes","SAFE_URL_PATTERN","allowedAttribute","allowedAttributeList","attributeName","attributeRegex","regex","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","createdDocument","elementName","attributeList","allowedAttributes","DefaultContentType","TemplateFactory","content","templateWrapper","text","template","extraClass","arg","templateElement","DISALLOWED_ATTRIBUTES","CLASS_NAME_MODAL","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","EVENT_INSERTED","EVENT_FOCUSOUT","AttachmentMap","Tooltip","Popper","showEvent","isInTheDom","tip","container","complete","tipId","attachment","Popper.createPopper","popperData","defaultBsPopperConfig","triggers","trigger","eventIn","eventOut","context","title","timeout","dataAttributes","dataAttribute","SELECTOR_TITLE","SELECTOR_CONTENT","Popover","EVENT_SHOW_BS","EVENT_SHOWN_BS","EVENT_HIDE_BS","EVENT_HIDDEN_BS","EVENT_INSERTED_BS","BSPopover","EVENT_ACTIVATE","CLASS_NAME_DROPDOWN_ITEM","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","ScrollSpy","section","observableSection","entries","targetElement","entry","activate","parentScrollTop","userScrollsDown","entryIsLowerThanPrevious","targetLinks","anchor","listGroup","activeNodes","EVENT_ACTIVATE_BS","CLASS_COLLAPSIBLE","CLASS_ACTIVE","SELECTOR_COLLAPSIBLE_SCROLLSPY","BSScrollSpy","itemsToHide","destinedHeight","collapsibleElements","collapsibleElement","listParent","listHeight","active","collapsible","unactive","ARROW_UP_KEY","ARROW_DOWN_KEY","HOME_KEY","END_KEY","CLASS_DROPDOWN","SELECTOR_DROPDOWN_MENU","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_TAB_PANEL","SELECTOR_OUTER","SELECTOR_INNER_ELEM","Tab","innerElem","hideEvent","relatedElem","children","nextActiveElement","isActive","outerElem","open","toggle","elem","BSTab","hideEventMdb","showEventMdb","BSTooltip","t","n","o","r","u","c","l","s","d","f","p","CLASSNAME_ACTIVE","CLASSNAME_NOTCH","CLASSNAME_NOTCH_LEADING","CLASSNAME_NOTCH_MIDDLE","CLASSNAME_NOTCH_TRAILING","CLASSNAME_PLACEHOLDER_ACTIVE","CLASSNAME_HELPER","CLASSNAME_COUNTER","SELECTOR_NOTCH","SELECTOR_NOTCH_LEADING","SELECTOR_NOTCH_MIDDLE","SELECTOR_HELPER","Input","actualLength","input","allNotchWrappers","notchWrapper","border","prevLabelWidth","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","CLASS_NAME_DEEPER_CHILDREN","CLASS_NAME_HORIZONTAL","WIDTH","HEIGHT","SELECTOR_ACTIVES","SELECTOR_DATA_TOGGLE","Collapse","toggleList","filterElement","foundElement","activeChildren","activeInstance","dimension","scrollSize","selected","triggerArray","isOpen","BSCollapse","RIGHT_MOUSE_BUTTON","CLASS_NAME_DROPUP","CLASS_NAME_DROPEND","CLASS_NAME_DROPSTART","CLASS_NAME_DROPUP_CENTER","CLASS_NAME_DROPDOWN_CENTER","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","SELECTOR_NAVBAR","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","PLACEMENT_TOPCENTER","PLACEMENT_BOTTOMCENTER","Dropdown","referenceElement","popperConfig","parentDropdown","isEnd","openToggles","composedPath","isMenuTarget","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","EVENT_HIDE_MDB","EVENT_HIDDEN_MDB","EVENT_SHOW_MDB","EVENT_SHOWN_MDB","ANIMATION_CLASS","ANIMATION_SHOW_CLASS","ANIMATION_HIDE_CLASS","BSDropdown","isPrefersReducedMotionSet","CLASSNAME_RIPPLE","CLASSNAME_RIPPLE_WAVE","CLASSNAME_RIPPLE_WRAPPER","SELECTOR_COMPONENT","CLASSNAME_UNBOUND","GRADIENT","DEFAULT_RIPPLE_COLOR","BOOTSTRAP_COLORS","TRANSITION_BREAK_OPACITY","Ripple","shadow","btn","wrapper","layerX","layerY","duration","diameterOptions","diameter","radiusValue","opacity","styles","rippleHTML","ripple","rippleEl","time","pythagorean","sideA","sideB","positionCenter","quadrant","getCorner","color","rgbValue","gradientImage","REGEXP_CLASS_COLOR","hexToRgb","namedColorsToRgba","tempElem","flag","rgbaToRgb","CLASSNAME_THUMB","SELECTOR_THUMB_VALUE","SELECTOR_THUMB","Range","RANGE_THUMB","rangeInput","inputValue","minValue","maxValue","thumbValue","newValue","Animate","animation","targetId","elementOffsetTop","elementHeight","windowHeight","shouldBeVisible","isElementVisible","isNullOrUndef","isArray","type","isObject","isNumberFinite","finiteOrDefault","valueOrDefault","toPercentage","toDimension","thisArg","each","loopable","reverse","_elementsEqual","a0","a1","ilen","v0","v1","clone$1","source","klen","k","isValidKey","_merger","tval","sval","merge","sources","merger","mergeIf","_mergerIf","keyResolvers","resolveObjectKey","_getKeyResolver","_splitKey","parts","tmp","part","_capitalize","str","defined","isFunction","setsEqual","b","_isClickEvent","PI","TAU","PITAU","INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","niceNum","range","roundedRange","almostEquals","niceRange","fraction","_factorize","sqrt","isNumber","epsilon","almostWhole","rounded","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","table","cmp","hi","lo","mid","_lookupByKey","last","_rlookupByKey","_filterBetween","values","arrayEvents","listenArrayEvents","listener","base","res","unlistenArrayEvents","stub","listeners","_arrayUnique","set","requestAnimFrame","throttled","updateFn","updateArgs","ticking","rest","delay","_toLeftRightCenter","align","_alignStartEnd","_textX","rtl","_getStartAndCountOfVisiblePoints","points","animationsDisabled","pointCount","count","iScale","_parsed","minDefined","maxDefined","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","changed","atEdge","elasticIn","elasticOut","effects","lim","h","p2b","n2b","b2n","n2p","map$1","hex","h1","h2","eq","isShort","hexParse","ret","alpha","hexString","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","hueValue","g","rgb2hsl","calln","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","p1","p2","rotate","deg","hslString","names$1","unpack","unpacked","tkeys","j","ok","nk","names","nameParse","RGB_RE","rgbParse","rgbString","to","from","interpolate","rgb1","rgb2","modHSL","ratio","clone","proto","fromObject","functionParse","Color","weight","c1","c2","w2","w1","index_esm","isPatternOrGradient","getHoverColor","overrides","descriptors","getScope$1","scope","Defaults","_descriptors","ctx","targetScope","targetName","scopeObject","targetScopeObject","privateName","local","defaults","toFontString","font","_measureText","gc","longest","string","textWidth","_longestText","arrayOfThings","cache","jlen","thing","nestedThing","gcLen","_alignPixel","chart","pixel","devicePixelRatio","halfWidth","clearCanvas","canvas","drawPoint","drawPointLegend","xOffset","yOffset","size","cornerRadius","rotation","radius","rad","_isPointInArea","point","area","margin","clipArea","unclipArea","_steppedLineTo","mode","midpoint","_bezierCurveTo","renderText","opts","lines","stroke","line","setRenderOpts","decorateText","metrics","yDecoration","addRoundedRectPath","LINE_HEIGHT","FONT_STYLE","toLineHeight","matches","numberOrZero","_readValueToProps","props","objProps","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","inputs","info","cacheable","_addGrace","minmax","grace","beginAtZero","change","keepZero","add","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","_resolve","_cached","_resolveWithPrefixes","getKeysFromAllScopes","storage","_attachContext","proxy","subProxy","descriptorDefaults","receiver","_resolveWithContext","_scriptable","_indexable","_allKeys","readKey","needsSubResolver","_proxy","_context","_subProxy","_resolveScriptable","_resolveArray","_stack","createSubResolver","isIndexable","arr","resolver","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","parsed","EPSILON","getPoint","getValueAxis","indexAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","delta","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","pt","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","loop","controlPoints","prev","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","getStyle","positions","getPositionedStyle","suffix","pos","useOffsetPos","getCanvasPosition","touches","box","getRelativePosition","currentDevicePixelRatio","borderBox","paddings","borders","getContainerSize","maxWidth","maxHeight","containerStyle","containerBorder","containerPadding","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","supportsEventListenerOptions","passiveSupported","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","getNumberFormat","locale","cacheKey","formatter","formatNumber","num","getRightToLeftAdapter","rectX","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","original","restoreTextDirection","propertyFn","normalizeSegment","getSegment","segment","bounds","startBound","endBound","between","normalize","_boundSegment","compare","inside","subStart","prevValue","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","spanGaps","solidSegments","cur","_computeSegments","segmentOptions","splitByStyles","completeLoop","doSplitByStyles","chartContext","baseStyle","readStyle","datasetIndex","prevStyle","addStyle","st","dir","styleChanged","Animator","anims","date","callbacks","numSteps","remaining","draw","charts","cb","animator","transparent","interpolators","factor","c0","Animation","cfg","currentValue","elapsed","remain","promises","rej","resolved","numbers","colors","animationOptions","Animations","animatedProps","option","newOptions","resolveTargetOptions","animations","awaitAll","running","properties","anim","scaleClip","scale","allowedOverflow","defaultClip","toClip","getSortedDatasetIndices","filterVisible","metasets","applyStack","stack","dsIndex","singleMode","otherValue","convertObjectDataToArray","adata","isStacked","stacked","getStackKey","indexScale","valueScale","getUserBounds","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","updateStacks","controller","iAxis","vAxis","itemStacks","getFirstScaleId","scales","createDatasetContext","createDataContext","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","createStack","canStack","DatasetController","dataset","chooseId","xid","yid","rid","iid","vid","scaleID","_data","resetNewElements","stackChanged","oldStacked","scopeKeys","_stacked","sorted","isNotInOrderComparedToPrev","labels","singleScale","xAxisKey","yAxisKey","parsedValue","otherScale","otherMin","otherMax","_skip","drawActiveElementsOnTop","elementType","sharing","transition","sharedOptions","firstOpts","previouslySharedOptions","includeOptions","arg1","arg2","numMeta","numData","move","removed","newCount","getAllScaleValues","visibleMetas","computeMinSampleSize","curr","updateMinAndPrev","computeFitCategoryTraits","ruler","stackCount","thickness","computeFlexCategoryTraits","pixels","percent","parseFloatBar","startValue","endValue","barStart","barEnd","parseValue","parseArrayOrPrimitive","isFloatBar","barSign","actualBase","borderProps","setBorderSkipped","edge","parseEdge","swap","startEnd","orig","v2","setInflateAmount","inflateAmount","BarController","iAxisKey","vAxisKey","bars","reset","horizontal","vpixels","ipixels","dataIndex","skipNull","barThickness","baseValue","minBarLength","floating","length","head","startPixel","endPixel","halfGrid","maxBarThickness","stackIndex","BubbleController","getRatioAndOffset","circumference","cutout","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","DoughnutController","getter","chartArea","arcs","spacing","maxSize","chartWeight","maxRadius","outerRadius","innerRadius","radiusLength","animationOpts","centerX","centerY","animateScale","arc","metaData","total","ringWeightOffset","pointStyle","label","legendItem","legend","tooltipItem","dataLabel","LineController","_dataset","maxGapLength","directUpdate","prevParsed","nullData","lastPoint","PolarAreaController","minSize","datasetStartAngle","defaultAngle","PieController","RadarController","pointPosition","Element$1","useFinalPosition","final","Element","formatters","tickValue","ticks","notation","maxTick","calculateDelta","logDelta","numDecimal","Ticks","_ctx","autoSkip","tickOpts","ticksLimit","determineMaxTicks","majorIndices","getMajorIndices","numMajorIndices","first","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","skip","tickLength","maxScale","maxChart","evenMajorSpacing","getEvenSpacing","factors","majorStart","majorEnd","diff","reverseAlign","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","garbageCollect","caches","getTickMarkLength","getTitleHeight","createScaleContext","createTickContext","tick","titleAlign","titleArgs","titleX","titleY","positionAxisID","Scale","raw","_userMin","_userMax","_suggestedMin","_suggestedMax","metas","sampleSize","samplingEnabled","reversePixels","numTicks","minRotation","maxRotation","labelRotation","tickWidth","maxLabelDiagonal","labelSizes","maxLabelWidth","maxLabelHeight","titleOpts","gridOpts","display","isHorizontal","titleHeight","widest","highest","tickPadding","angleRadians","cos","sin","labelHeight","labelWidth","isRotated","labelsBelowTicks","offsetLeft","offsetRight","paddingLeft","paddingRight","paddingTop","paddingBottom","widths","heights","widestLabelSize","highestLabelSize","tickFont","fontString","lineHeight","nestedLabel","valueAt","idx","decimal","optionTicks","rot","grid","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","limit","step","optsAtIndex","lineWidth","lineColor","borderDash","borderDashOffset","tickColor","tickBorderDash","tickBorderDashOffset","crossAlign","mirror","tickAndPadding","hTickAndPadding","textAlign","lineCount","textOffset","textBaseline","halfCount","strokeColor","strokeWidth","tickTextAlign","labelPadding","backgroundColor","drawLine","lastLineWidth","tz","gz","axisID","fontSize","TypedRegistry","override","parentScope","isIChartComponent","registerDefaults","itemDefaults","routeDefaults","routes","propertyParts","sourceName","sourceScope","Registry","typedRegistry","reg","itemReg","registry","camelMethod","ScatterController","showLine","abstract","DateAdapter","chartOptions","format","timestamp","amount","unit","weekday","members","adapters","binarySearch","metaset","intersect","_sorted","lookupMethod","evaluateInteractionItems","getDistanceMetricForAxis","useX","useY","deltaX","deltaY","getIntersectItems","includeInvisible","getNearestRadialItems","evaluationFunc","getNearestCartesianItems","distanceMetric","minDistance","inRange","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","wrap","setLayoutDims","params","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","buildLayoutBoxes","centerHorizontal","centerVertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","newWidth","newHeight","widthChanged","heightChanged","handleMaxPadding","updatePos","getMargins","marginForPositions","fitBoxes","refitBoxes","refit","same","other","setBoxDims","placeBoxes","userPadding","layoutItem","minPadding","availableWidth","availableHeight","verticalBoxes","horizontalBoxes","visibleVerticalBoxCount","BasePlatform","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","isNullOrEmpty","initCanvas","renderHeight","renderWidth","displayWidth","displayHeight","eventListenerOptions","addListener","removeListener","fromNativeEvent","nodeListContains","nodeList","createAttachObserver","observer","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","releaseObserver","createProxyAndListen","DomPlatform","initial","proxies","_detectPlatform","PluginService","hook","filter","descriptor","all","plugins","allPlugins","createDescriptors","previousDescriptors","localIds","getOpts","pluginOpts","getIndexAxis","datasetDefaults","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","axisFromPosition","determineAxis","scaleOptions","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","defaultScaleOptions","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","generate","addIfFound","datasetType","mainScope","resetCache","_scopeCache","keyLists","subPrefixes","getResolver","needContext","subResolver","resolverCache","hasFunction","isScriptable","scriptable","indexable","version","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onAnimationProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","Chart$1","userConfig","initialCanvas","existingChart","maintainAspectRatio","_aspectRatio","newSize","newRatio","scalesOptions","axisOptions","scaleOpts","updated","isRadial","scaleType","scaleClass","hasUpdated","datasets","newControllers","ControllerClass","datasetElementType","dataElementType","animsDisabled","_active","_lastEvent","existingEvents","newEvents","_hiddenIndices","changes","_dataChanges","datasetCount","makeSet","changeSet","noArea","layers","clip","useClip","visible","platform","_add","_remove","detached","attached","enabled","activeElements","lastActive","replay","hoverOptions","deactivated","activated","eventFilter","invalidatePlugins","Chart","enumerable","clipArc","pixelMargin","angleMargin","toRadiusCorners","parseBorderRadius$1","angleDelta","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","rThetaToXY","theta","pathArc","circular","innerR","spacingOffset","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStart","outerEnd","innerStart","innerEnd","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","p8","outerStartX","outerStartY","outerEndX","outerEndY","drawArc","fullCircles","drawFullCircleBorders","inner","drawBorder","borderWidth","borderJoinStyle","ArcElement","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","setStyle","lineTo","getLineMethod","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","avgX","countX","prevX","lastY","pointIndex","drawX","truncX","_getSegmentMethod","_getInterpolationMethod","strokePathWithCache","path","strokePathDirect","segmentMethod","usePath2D","LineElement","_interpolate","interpolated","inRange$1","PointElement","mouseX","mouseY","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","parseBorderRadius","enableBorderRadius","maxR","enableBorder","boundingRects","skipX","skipY","hasRadius","addNormalRectPath","inflateRect","refRect","BarElement","borderColor","outer","addRectPath","lttbDecimation","samples","decimated","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","minMaxDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","cleanDecimatedDataset","cleanDecimatedData","getStartAndCountOfVisiblePointsSimplified","plugin_decimation","xAxis","threshold","_segments","tpoints","_findSegmentEnd","_getBounds","targetSegments","tgt","subBounds","fillSources","fillSource","_getEdge","_pointsFromSegments","linePoints","_createBoundaryLine","_shouldApplyFill","_resolveTarget","propagate","fill","_decodeFill","parseFillOption","decodeTargetIndex","firstCh","_getTargetPixel","_getTargetValue","fillOption","_buildStackLine","sourcePoints","linesBelow","getLinesBelow","addPointsBelow","below","sourcePoint","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","_getTarget","getLineByIndex","computeBoundary","computeCircularBoundary","computeLinearBoundary","_drawfill","lineOpts","above","doFill","clipVertical","clipY","lineLoop","src","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","_args","getBoxSize","labelOpts","boxHeight","boxWidth","itemsEqual","Legend","legendItems","labelFont","itemHeight","hitboxes","lineWidths","totalHeight","row","columnSizes","heightLimit","totalWidth","currentColWidth","currentColHeight","col","rtlHelper","hitbox","defaultColor","fontColor","halfFontSize","cursor","drawLegendBox","drawOptions","yBoxTop","xBoxLeft","borderRadius","fillText","realX","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","isListened","hoveredItem","sameItem","plugin_legend","ci","usePointStyle","Title","textSize","fontOpts","createTitle","plugin_title","titleBlock","plugin_subtitle","positioners","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","getTooltipSize","tooltip","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","bodyLineHeight","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","caretSize","caretPadding","topLeft","topRight","bottomLeft","bottomRight","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","beforeTitle","afterTitle","bodyItems","scoped","beforeFooter","afterFooter","labelColors","labelPointStyles","labelTextColors","positionAndSize","backgroundPoint","tooltipPoint","caretPosition","ptX","ptY","x3","y3","titleSpacing","labelPointStyle","colorX","rtlColorX","yOffSet","colorY","outerX","innerX","bodySpacing","bodyAlign","displayColors","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","tooltipSize","animX","animY","hasTooltipContent","positionChanged","caretX","caretY","plugin_tooltip","labelCount","addIfString","addedLabels","findOrAddLabel","CategoryScale","added","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","decimalPlaces","relativeLabelSize","LinearScaleBase","setMin","setMax","minSign","maxSign","maxTicksLimit","stepSize","numericGeneratorOptions","LinearScale","isMajor","tickVal","generateTicks","endExp","endSignificand","exp","significand","lastTick","LogarithmicScale","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","limits","valueCount","pointLabelOpts","additionalAngle","plFont","hLimits","vLimits","updateLimits","buildPointLabelItems","extra","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","drawPointLabels","pointLabels","backdropColor","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","drawRadiusLine","gridLineOpts","createPointLabelContext","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","scaledDistance","pointLabel","distanceFromCenter","angleLines","INTERVALS","UNITS","sorter","parse","adapter","parser","isoWeekday","determineUnitForAutoTicks","minUnit","capacity","interval","determineUnitForFormatting","determineMajorUnit","addTick","timestamps","setMajorTicks","majorUnit","major","ticksFromTimestamps","TimeScale","_applyBounds","timeOpts","minor","hasWeekday","formats","minorFormat","majorFormat","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","displayFormats","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","isMergeableObject","isNonNullObject","isSpecial","stringValue","isReactElement","canUseSymbol","REACT_ELEMENT_TYPE","emptyTarget","cloneUnlessOtherwiseSpecified","deepmerge","defaultArrayMerge","getMergeFunction","customMerge","getEnumerableOwnPropertySymbols","symbol","getKeys","propertyIsOnObject","propertyIsUnsafe","mergeObject","destination","sourceIsArray","targetIsArray","sourceAndTargetTypesMatch","deepmerge_1","cjs","DEFAULT_LEGEND_COLOR","Chartjs","Decimation","Filler","SubTitle","CLASSNAME_CHARTS","GENERATE_DATA","defaultType","mergeObjects","DEFAULT_DARK_OPTIONS","DARK_OPTIONS_TYPE","darkOptions","configOptions","MyType","theme","dataAttr","xyScale","rScale","radials","opt","systemColor","mutationList","mutation","dark","chartData","EVENT_CLICK_DATA_API","CLASSNAME_LIGHTBOX","CLASSNAME_GALLERY","CLASSNAME_TOOLBAR","CLASSNAME_GALLERY_CONTENT","CLASSNAME_FULLSCREEN_BTN","CLASSNAME_ZOOM_BTN","CLASSNAME_LEFT_TOOLS","CLASSNAME_RIGHT_TOOLS","CLASSNAME_CLOSE_BTN","CLASSNAME_LOADER","CLASSNAME_ARROW_LEFT","CLASSNAME_ARROW_RIGHT","CLASSNAME_CAPTION_WRAPPER","CLASSNAME_CAPTION","CLASSNAME_IMG","SELECTOR_TOGGLE","OPTIONS_TYPE","Lightbox","images","lightboxImages","image","leftTools","rightTools","closeBtn","spinner","spinnerContent","leftArrow","captionWrapper","caption","promiseArray","imageArray","positionLeft","newImg","newImgWrapper","newPositionLeft","touch","initialDistance","finalDistance","distanceChange","screenWidth","movement","tapLength","currentImg","startEvent","completeEvent","lightbox","EVENT_SELECT","EVENT_HOVER","EVENT_KEYUP","Rating","indexBeforeChange","hasOwnTooltips","after","before","classList","get","div","elMatches","query","remove","queryChildren","cls","scrollingClassTimeout","addScrollingClass","removeScrollingClass","setScrollingClassInstantly","EventElement$1","EventManager$1","ee","EventElement","onceHandler","createEvent","processScrollDiff$2","useScrollingClass","forceFireReachEvent","fields","processScrollDiff","contentHeight","containerHeight","up","down","toInt","isEditable","DOM.matches","outerWidth","CSS.get","env","updateGeometry$1","roundedScrollTop","DOM.queryChildren","DOM.remove","getThumbSize","updateCss","thumbSize","xRailOffset","CSS.set","yRailOffset","clickRail$1","updateGeometry","dragThumb$1","bindMouseScrollHandler","pageY","railYHeight","scrollbarY","scrollbarYHeight","scrollbarYRail","startingScrollTop","startingMousePageY","scrollBy","mouseMoveHandler","mouseUpHandler","bindMoves","touchMode","keyboard$1","elementHovered","scrollbarFocused","shouldPreventDefault","wheel$1","isTop","isBottom","isLeft","isRight","hitsBound","getDeltaFromEvent","shouldBeConsumedByChild","maxScrollTop","maxScrollLeft","mousewheelHandler","shouldPrevent","touch$1","magnitudeX","magnitudeY","applyTouchMove","differenceX","differenceY","startOffset","startTime","speed","easingLoop","getTouch","shouldHandle","touchStart","touchMove","currentOffset","currentTime","timeGap","touchEnd","defaultSettings","clickRail","dragThumb","keyboard","wheel","PerfectScrollbar$1","userSettings","focus","blur","originalScrollLeft","EventManager","DOM.div","railXStyle","railYStyle","handlerName","toggler","ancestors","allElements","hasDisabledAttribute","LEFT_ARROW","UP_ARROW","RIGHT_ARROW","DOWN_ARROW","HOME","END","PAGE_UP","PAGE_DOWN","ENTER","SPACE","ESCAPE","TAB","BACKSPACE","DELETE","Swipe$1","displacement","swipe","Touch$1","ARROW_CLASS","BACKDROP_CLASS","SELECTOR_TOGGLE_COLLAPSE","SELECTOR_SHOW_SLIM","SELECTOR_HIDE_SLIM","SELECTOR_NAVIGATION","SELECTOR_COLLAPSE","SELECTOR_LINK","TRANSLATION_LEFT","TRANSLATION_RIGHT","instanceCount","Sidenav","findContainer","containerStart","containerEnd","boundry","scrollBarWidth","menu","classes","show","initialValue","inverseDirecion","link","menuIndex","ID","marginLeft","marginRight","siblingsHeight","PerfectScrollbar","wave","Touch","collapse","category","collapseToggler","optionColor","slim","slimCollapsedElements","fullWidthElements","toggleElements","translation","paddingPosition","marginPosition","elementSelector","EVENT_CLOSE","EVENT_CLOSED","Alert","TYPE_OPTIONS","Stack","basicCondition","parentTopOffset","parentBottomBoundry","parentRect","previousElement","SELECTOR_ALERT","EVENT_CLOSE_BS","EVENT_CLOSED_BS","BSAlert","updatedData","oppositeY","oppositeX","EVENT_MOUSEOVER","EVENT_MOUSEOUT","CLASS_NAME_HIDE","Toast","isInteracting","SELECTOR_TOAST","SELECTOR_HEADER","BSToast","header","toasts","getTimepickerTemplate","format24","okLabel","cancelLabel","headId","footerId","bodyId","pickerId","clearLabel","inline","showClearBtn","amLabel","pmLabel","normalTemplate","inlineTemplate","getToggleButtonTemplate","iconClass","formatToAmPm","hours","minutes","amOrPm","originalHours","isValidDate","takeValue","formatNormalHours","toggleClassHandler","findMousePosition","clientX","clientY","isMobile","checkBrowser","valueInput","compareTimes","time1","time2","time1Hour","time1Minutes","time1maxTimeFormat","time2Hour","time2Minutes","time2maxTimeFormat","bothFormatsEqual","getCurrentTime","currentHours","currentMinutes","setMinTime","minTime","disabledPast","format12","setMaxTime","maxTime","disabledFuture","checkValueBeforeAccept","disablePast","disableFuture","hourHeader","minutesHeader","minute","maxTimeHour","maxTimeMin","maxTimeFormat","minTimeHour","minTimeMin","minTimeFormat","_verifyMaxTimeHourAndAddDisabledClass","tips","_verifyMinTimeHourAndAddDisabledClass","_verifyMaxTimeMinutesTipsAndAddDisabledClass","maxMinutes","maxHour","currHour","_verifyMinTimeMinutesTipsAndAddDisabledClass","minMinutes","minHour","_convertHourToNumber","hour","DATA_API_KEY","EVENT_KEYDOWN_DATA_API","EVENT_MOUSEDOWN_DATA_API","EVENT_MOUSEUP_DATA_API","EVENT_MOUSEMOVE_DATA_API","EVENT_MOUSELEAVE_DATA_API","EVENT_MOUSEOVER_DATA_API","EVENT_TOUCHMOVE_DATA_API","EVENT_TOUCHEND_DATA_API","EVENT_TOUCHSTART_DATA_API","EVENT_VALUE_CHANGED","ACTIVE_CLASS","AM_CLASS","BUTTON_CANCEL_CLASS","BUTTON_CLEAR_CLASS","BUTTON_SUBMIT_CLASS","CIRCLE_CLASS","CLOCK_ANIMATION_CLASS","CLOCK_CLASS","CLOCK_INNER_CLASS","CLOCK_WRAPPER_CLASS","CURRENT_CLASS","CURRENT_INLINE_CLASS","WRAPPER_OPEN_ANIMATION_CLASS","WRAPPER_CLOSE_ANIMATION_CLASS","HAND_CLASS","HOUR_CLASS","HOUR_MODE_CLASS","ICON_DOWN_CLASS","ICON_INLINE_HOUR_CLASS","ICON_INLINE_MINUTE_CLASS","ICON_UP_CLASS","ICONS_HOUR_INLINE","MIDDLE_DOT_CLASS","MINUTE_CLASS","MODAL_CLASS","PM_CLASS","TIPS_ELEMENT_CLASS","TIPS_HOURS_CLASS","TIPS_INNER_ELEMENT_CLASS","TIPS_INNER_HOURS_CLASS","TIPS_MINUTES_CLASS","TRANSFORM_CLASS","WRAPPER_CLASS","INPUT_CLASS","Timepicker","textContent","findInArray","clockClass","tipsClass","maxTimeMinutes","minTimeMinutes","clock","clockWidth","clockHeight","currentFormat","spanToTips","zero","hoursFormat","_amOrPm","toggleButton","maxFormat","minFormat","_isAmEnabled","_isPmEnabled","_isMouseOnInnerClock","maxHourDegrees","minHourDegrees","_handleKeyboardEvents","innerTips","currentHour","nextHourTip","numberToAdd","nextHour","innerTip","_handle24FormatMouseEvents","minInnerHourDegrees","maxInnerHourDegrees","minFormatAndCurrentFormatEqual","maxFormatAndCurrentFormatEqual","isMinHourValid","isMaxHourValid","innerHour","hoursView","innerHoursExist","allTipsMinutes","allTipsHours","allInnerTips","hourTime","hourObjDegrees","addDegrees","minHourMinutes","minObjDegrees","addMinDegrees","innerHourDegrees","cancelBtn","rotateDegrees","fixForInput","checkInputValue","modalId","selectedHour","minuteNumber","countMinutes","countHours","incrementHours","counteredNumber","incrementMinutes","addHours","addMinutes","subHours","subMinutes","_clearAsyncs","_clearAndSetThisInterval","addHoursOrAddMinutes","isEventTypeMousedownOrTouchstart","isHourBtnFocused","isMinuteBtnFocused","isBodyFocused","closeModalOnBackdropClick","runRemoveFunction","readOnly","focusInputAfterApprove","hourModeActive","selectedMinutes","isHourLessThanMinHour","isHourGreaterThanMaxHour","hourEqualToMaxAndMinutesGreaterThanMax","hourEqualToMinAndMinutesLessThanMin","allIconsInlineHour","allIconsInlineMinute","icon","hourValue","minuteValue","switchTips","toggleActiveClass","allTipsInnerHours","selectedFormat","outerHoursTips","innerHoursTips","allTipsHour","clockWrapper","closeModalOnMinutesClick","switchHoursToMinutesOnClick","innerHours","mouseClick","rds","touchClick","xPos","yPos","elFromPoint","isHourLessThanMinOrGreaterThanMax","submitBtn","minDegrees","minTimeObj","_degrees","minuteTimes","changeMinutes","makeDegrees","touchDegrees","touchHours","movedDegrees","movedHours","allTipsInner","maxMin","minMin","maxHourTime","minHourTime","maxMinDegrees","minMinDegrees","isToRemove","number","regexAMFormat","regexNormalFormat","testedAMRegex","Navbar","EVENT_COMPLETED","InfiniteScroll","CLASSNAME_LAZYLOAD","SELECTOR_LAZYLOAD","SELECTOR_ELEMENTS","EVENT_LOADED","EVENT_ERROR","LazyLoad","attr","getDate","getDayNumber","getMonth","getYear","getFirstDayOfWeek","year","month","firstDayIndex","sundayIndex","getDaysInMonth","getMonthEnd","createDate","getToday","addYears","years","addMonths","months","dayOfPreviousMonth","dayOfNewMonth","addDays","days","day","convertStringToDate","dateString","dateArr","compareDates","date1","date2","isSameDate","getYearsOffset","activeDate","yearsInView","yearsDifference","getStartYear","modulo","minDate","maxDate","startYear","isDateDisabled","currentDate","isBeforeMin","isAfterMax","isDisabledPast","isDisabledFuture","isMonthDisabled","maxYear","maxMonth","minYear","minMonth","currentYear","currentMonth","isMonthAndYearAfterMax","isMonthAndYearBeforeMin","isMonthAndYearDisabledPast","isMonthAndYearDisabledFuture","isYearDisabled","isNextDateDisabled","view","lastYearInView","firstYearInView","areDatesInSameView","isPreviousDateDisabled","getDatepickerTemplate","selectedDate","selectedYear","selectedMonth","monthsInRow","yearsInRow","dayNumber","inlineContent","createMainContent","modalContent","createHeader","getBackdropTemplate","createCustomHeader","weekdaysShort","weekdaysFull","monthsShort","headerTemplateModifier","headerTemplate","mainContentTemplate","createControls","createViewTemplate","createFooter","viewTemplate","createDayViewTemplate","createMonthViewTemplate","createYearViewTemplate","okBtn","cancelButton","clearButton","headerDate","dates","getDatesArray","tableHeadContent","tableBodyContent","week","previousMonth","nextMonth","firstDay","daysInMonth","daysInPreviousMonth","daysInWeek","isCurrentMonth","previousMonthDay","daysLeft","getMonthsArray","monthIndex","monthsRow","getYearsArray","activeYear","yearsOffset","yearsRow","YEARS_IN_VIEW","YEARS_IN_ROW","MONTHS_IN_ROW","EVENT_OPEN","BACKDROP_OPEN_ANIMATION_CLASS","BACKDROP_CLOSE_ANIMATION_CLASS","CONTAINER_OPEN_ANIMATION_CLASS","CONTAINER_CLOSE_ANIMATION_CLASS","CLASS_FORM_ICON_TRAILING","SELECTOR_MODAL_CONTAINER","SELECTOR_DROPDOWN_CONTAINER","SELECTOR_VIEW_CHANGE_BUTTON","SELECTOR_PREVIOUS_BUTTON","SELECTOR_NEXT_BUTTON","SELECTOR_OK_BUTTON","SELECTOR_CANCEL_BUTTON","SELECTOR_CLEAR_BUTTON","SELECTOR_DATES_CONTAINER","Datepicker","activeCell","sortedWeekdaysNarrow","weekdaysNarrow","openEvent","cell","monthNames","dayNames","headerDateEl","datepickerHeaderContainer","isContainer","isContainerContent","oldActiveDate","previousActiveCell","cells","cellDate","cellYear","cellMonth","yearsPerRow","yearsPerPage","closeEvent","datepicker","generatedToggleButton","currentSelected","currentFocused","dd","ddd","dddd","mm","mmm","mmmm","yy","yyyy","preformatted","formatted","datePart","newDate","nextYear","previousYear","delimeters","delimeterPattern","regExp","dateParts","formatParts","isMonthString","datesArray","monthsNames","monthValue","monthLabels","monthLabel","SELECTOR_POPCONFIRM_BODY","EVENT_CANCEL","EVENT_CONFIRM","Popconfirm","tempElement","confirmButton","popoverTemplate","popover","popconfirmTemplate","modal","isElementContent","pagination","entriesOptions","fullPagination","rowsText","allText","loading","columns","selectable","multi","checkboxHeader","headers","column","fixedOffset","rows","noFoundMessage","edit","rowsTemplate","checkbox","innerRow","tableTemplate","loadingMessage","loaderClass","generateRows","columnsTemplate","generateColumns","paginationTemplate","field","fieldA","fieldB","search","paginate","activePage","firstVisibleEntry","SELECTOR_FORM_CHECK_INPUT","CLASS_NAME_SELECTED","CLASS_NAME_ACITVE","SelectOption","nativeOption","multiple","disabled","hidden","secondaryText","groupId","SelectionModel","optionIndex","selection","allOptionsSelected","preventKeydown","getWrapperTemplate","formOutline","role","multiselectable","validFeedback","validFeedBackText","invalidFeedback","invalidFeedBackText","clearBtn","clearBtnText","getDropdownTemplate","selectAllOption","customContent","dropdownContainer","dropdown","optionsWrapper","optionsList","getOptionsListTemplate","getFilterTemplate","optionsNodes","getMultipleOptionsNodes","getSingleOptionsNodes","placeholder","inputGroup","getOptionsNodes","selectAllNode","createSelectAllNode","nodes","group","createOptionGroupTemplate","createOptionTemplate","isSelected","optionNode","getOptionContentTemplate","getOptionIconTemplate","getCheckboxTemplate","getSecondaryTextTemplate","optionGroup","getFakeValueTemplate","fakeValue","EVENT_SELECTED","EVENT_DESELECTED","EVENT_CHANGE_NATIVE","EVENT_OPENED","SELECTOR_LABEL","SELECTOR_INPUT","SELECTOR_FILTER_INPUT","SELECTOR_OPTIONS_WRAPPER","SELECTOR_OPTIONS_LIST","SELECTOR_OPTION","SELECTOR_CUSTOM_CONTENT","SELECTOR_NO_RESULTS","SELECTOR_FORM_OUTLINE","CLASS_NAME_INITIALIZED","CLASS_NAME_OPEN","CLASS_NAME_FOCUSED","CLASS_NAME_OPTION_GROUP_LABEL","CLASS_NAME_SELECT_ALL_OPTION","ANIMATION_TRANSITION_TIME","Select","select","optionsToRender","nestedOption","groupDisabled","availableOptions","containerSelector","inputWrapper","isCloseKey","visibleOptions","groupsNumber","scrollToIndex","optionHeight","optionOffset","isBelow","groupsList","newActiveOption","currentActiveOption","isValueEmpty","selectAllSelected","allSelected","inputWidth","currentActive","firstSelected","searchTerm","debounceTime","filtered","filterFn","isOptionGroup","isValidOption","hasNoResultsText","hasFilteredOptions","noResultsTemplate","optionsWrapperContent","optionsListTemplate","filterValue","isSelectContent","isDropdown","isDropdownContent","isButton","button","hasFilterValue","wrapperParent","selectionValue","correspondingOption","CLASS_DATATABLE","CLASS_FIXED_CELL","SELECTOR_BODY","SELECTOR_CELL","SELECTOR_HEADER_CHECKBOX","SELECTOR_PAGINATION_RIGHT","SELECTOR_PAGINATION_LEFT","SELECTOR_PAGINATION_START","SELECTOR_PAGINATION_END","SELECTOR_PAGINATION_NAV","SELECTOR_SELECT","SELECTOR_SORT_ICON","SELECTOR_ROW","SELECTOR_ROW_CHECKBOX","EVENT_RENDER","EVENT_ROW_CLICKED","EVENT_UPDATE","EVENT_VALUE_CHANGED_SELECT","TYPE_COLUMN_FIELDS","DEFAUL_COLUMN","Datatable","output","headerRow","entriesOptionsAsArray","datatableBody","rowIndex","navigation","columnIndex","param1","param2","STEPPER_HORIZONTAL","STEPPER_VERTICAL","STEPPER_MOBILE","EVENT_SUBMIT","EVENT_RESIZE","EVENT_ANIMATIONEND","EVENT_CHANGE_STEP","EVENT_CHANGED_STEP","EVENT_INVALID","EVENT_VALID","STEP_CLASS","HEAD_CLASS","HEAD_TEXT_CLASS","CONTENT_CLASS","COMPLETED_CLASS","INVALID_CLASS","DISABLED_CLASS","VERTICAL_CLASS","CONTENT_HIDE_CLASS","HORIZONTAL_CLASS","MOBILE_CLASS","MOBILE_HEAD_CLASS","MOBILE_FOOTER_CLASS","MOBILE_PROGRESS_BAR_CLASS","MOBILE_PROGRESS_CLASS","NEXT_BTN_CLASS","BACK_BTN_CLASS","MOBILE_ACTIVE_STEP_ID","MOBILE_NUMBER_OF_STEPS_ID","MOBILE_BUTTON_NEXT","MOBILE_BUTTON_BACK","MOBILE_STEPPER_HEAD","MOBILE_PROGRESS_BAR","MOBILE_FOOTER","Stepper","activeStep","stepHead","stepIndex","shouldBeHorizontal","shouldBeVertical","shouldBeMobile","stepContent","numberOfSteps","isValid","activeStepIndex","activeStepElement","inputNotches","stepComputed","stepHeight","isActiveStep","stepContentHeight","allStepsElement","ActiveStepsElement","focusedStep","nextStep","prevStep","focusedStepHead","activeStepHead","nextStepHead","prevStepHead","firstStepHead","lastStep","lastStepHead","btnBack","btnNext","focusedElement","newTarget","changeStepEvent","stepsToCheck","nextStepToValidate","progressBar","form","stepElement","stepFooter","contentStyle","footerStyle","headStyle","stepHeadHeight","stepFooterHeight","isForward","nextStepContent","activeStepContent","nextStepAnimation","activeStepAnimation","ANIMATED_CLASS","EVENT_ACTIVATED","EVENT_DEACTIVATED","Sticky","stickyAnimationUnsticky","animationDuration","doc","stickyDirection","isCorrectScrollDirection","isPushPointReached","shouldBeSticky","shouldNotBeSticky","isScrollUp","isUnstickyAnimationInProgress","isScrolledAboveElement","stickyActiveClass","stickyAnimationSticky","stickyOffset","stickyPosition","stickyBoundary","parentOffset","stopPoint","stopper","isStickyTop","isStickyBottom","isStickyBoundary","isBelowStopPoint","isBelowParentElementEnd","addClass","removeClass","offsetElement","rectElement","itemToCopy","COPIED_ITEM","TouchUtil","rightMost","t1","t2","_position","EVENT_UP","Press","pointers","EVENT_START","EVENT_END","EVENT_MOVE","LEFT","RIGHT","Pan","postion","movedPosition","displacementMoved","pan","movedDirection","Pinch","origin","Tap","taps","Rotate","EVENT_SCROLL_START","EVENT_SCROLL_END","EVENT_SCROLL_CANCEL","SmoothScroll","heightFromTop","elY","containerY","easing","motionName","linkExist","isHashInLink","scrollingContainer","positionFrom","positionTo","scrollProgress","progressWrongValue","scrollEnd","speedWrongValue","supportsPassive","wheelOpt","wheelEvent","prototypeAccessors","this$1","processScrollDiff$1","ref","positionTop","CLASSNAME_PS","MDB_NAME","PS_NAME","EVENTS","PerfectScrollbars","ps","mdb","backdropID","backdropOpacity","CLASS_SPINNER","SELECTOR_LOADING_ICON","SELECTOR_LOADING_TEXT","SHOW_EVENT","Loading","spinnerCloned","loadingCloned","uriAttrs","ARIA_ATTRIBUTE_PATTERN","DATA_URL_PATTERN","attrName","attrRegex","DefaultWhitelist","whiteList","sanitizeFn","whitelistKeys","elName","whitelistedAttributes","CLASS_NAME_AUTOCOMPLETE_DROPDOWN_CONTAINER","CLASS_NAME_AUTOCOMPLETE_DROPDOWN","CLASS_NAME_AUTOCOMPLETE_ITEMS_LIST","CLASS_NAME_AUTOCOMPLETE_ITEM","CLASS_NAME_LOADER","CLASS_NAME_SPINNER_BORDER","CLASS_NAME_NO_RESULTS","settings","itemsList","itemsListTemplate","getItemsTemplate","displayValue","itemContent","getLoaderTemplate","getNoResultsTemplate","message","CLASS_NAME_CUSTOM_INPUT","CLASS_NAME_CUSTOM_LABEL","CLASS_NAME_FOCUSING","SELECTOR_ITEMS_LIST","SELECTOR_LOADER","LOADER_CLOSE_DELAY","Autocomplete","sanitizedCustomContent","newTemplate","newActiveItem","currentActiveItem","itemIndex","itemOffset","targetIndex","selectEvent","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","CLASS_NAME_STATIC","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","Modal","modalBody","transitionComplete","event2","isModalOverflowing","initialOverflowY","isBodyOverflowing","_resetElementAttributes","styleProp","MODAL_CSS_BREAKPOINT","NON_INVASIVE_CLASS","NON_INVASIVE_SHOW_CLASS","SHOW_CLASS","MODAL_OPEN_CLASS","MODAL_CONTENT_CLASS","MODAL_BOTTOM_CLASS","MODAL_BOTTOM_RIGHT_CLASS","MODAL_BOTTOM_LEFT_CLASS","MODAL_TOP_RIGHT_CLASS","MODAL_TOP_LEFT_CLASS","MODAL_DIALOG_SCROLLABLE_CLASS","MODAL_DIALOG_CLASS","SELECTOR_MODAL_CONTENT","SELECTOR_MODAL_BOTTOM","SELECTOR_MODAL_BOTTOM_RIGHT","SELECTOR_MODAL_BOTTOM_LEFT","SELECTOR_MODAL_TOP_RIGHT","SELECTOR_MODAL_TOP_LEFT","SELECTOR_MODAL_DIALOG_SCROLLABLE","SELECTOR_MODAL_DIALOG","EVENT_SHOW_BS_MODAL","EVENT_SHOWN_BS_MODAL","EVENT_HIDDEN_BS_MODAL","EVENT_HIDE_BS_MODAL","EVENT_HIDE_PREVENTED_BS_MODAL","BSModal","sideOffset","topOffset","isNonInvasiveModalOpen","scrollBarReset","leftOffset","isAboveBreakpoint","EVENT_COPIED","Clipboard","clipboardTextExist","targetText","inputToCopy","newInput","getInputField","inputID","labelText","getChip","SELECTOR_CLOSE","EVENT_DELETE","Chip","closeIcon","createIcon","CLASSNAME_CHIPS_INITIAL","CLASSNAME_CHIPS_PLACEHOLDER","CLASSNAME_CLOSE_OPACITY","CLASSNAME_CHIP_OPACITY","CLASSNAME_CHIPS_PADDING","CLASSNAME_CHIPS_TANSITION","CLASSNAME_CHIPS_WRAPPER","SELECTOR_CHIP","SELECTOR_CHIP_ACTIVE","EVENT_ADD","EVENT_ADDED","EVENT_ARROW_DOWN","EVENT_ARROW_LEFT","EVENT_ARROW_RIGHT","EVENT_ARROW_UP","ChipsInput","chip","activeChipAfter","keyCode","ctrlKey","editable","close","chipText","chipIndex","filterActive","initialValues","inputField","divElement","divWithChips","chipsContainer","getConnectsTemplate","getHandleTemplate","getTooltipTemplate","getEventTypeClientX","ev","SELECTOR_MULTI","CLASSNAME_HAND","CLASSNAME_CONNECT","CLASSNAME_TOOLTIP","SELECTOR_HORIZONTAL","SELECTOR_VERTICAL","MultiRangeSlider","hand","startValues","numberOfRanges","handActiveHandle","handActiveTranslation","handleDataHandle","handleDataTranslate","isValidTime","AmPmReg","timeReg","getDelimeters","parseDate","getMonthNumberByMonthName","ICON_BUTTONS","TOGGLE_BUTTON","CLASSNAME_DATEPICKER","CLASSNAME_TIMEPICKER","CLASSNAME_TOGGLE_BUTTON","CLASSNAME_INVALID_FEEDBACK","CLASSNAME_IS_INVALID","SELECTOR_TIMEPICKER","SELECTOR_DATEPICKER","SELECTOR_TOGGLE_BUTTON","SELECTOR_INVALID_FEEDBACK","EVENT_CLOSE_DATEPICKER","EVENT_VALUE_CHANGED_TIMEPICKER","BUTTONS_WRAPPER","Datetimepicker","tempOptions","DATEPICKER_WRAPPER","DATEPICKER_INPUT","datepickerOptions","timepicker","TIMEPICKER_WRAPPER","TIMEPICKER_INPUT","timepickerOptions","headerTime","invalidLabel","appendValidationInfo","DATEPICKER_CANCEL_BTN","dateTimeSplited","dateDelimeters","inputFirstValue","inputSecondValue","allInvalid","CLOCK_BTN","CANCEL_BTN","datePopper","timePopper","alertCallback","initSelector","buttonCallback","carouselCallback","SELECTOR_DATA_SLIDE","EVENT_LOAD_DATA_API","SELECTOR_DATA_RIDE","carousel","slideIndex","collapseCallback","dropdownCallback","EVENT_KEYUP_DATA_API","inputCallback","SELECTOR_DATA_INIT","SELECTOR_OUTLINE_INPUT","SELECTOR_OUTLINE_TEXTAREA","modalCallback","OPEN_SELECTOR","selectorElement","offcanvasCallback","alreadyOpen","scrollspyCallback","tabCallback","SELECTOR_DATA_TOGGLE_ACTIVE","toastCallback","rippleCallback","Component","IS_COMPLEX","CONVERT_DATA_TYPE","PARSE_DATA","chartProperty","dataSet","sidenav","toast","initMDB"],"mappings":"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","x_google_ignoreList":[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,88,98,99,100,160]}