{"version":3,"file":"materialize.min.js","mappings":"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","sources":["webpack://@materializecss/materialize/webpack/universalModuleDefinition","webpack://@materializecss/materialize/./src/autocomplete.ts","webpack://@materializecss/materialize/./src/buttons.ts","webpack://@materializecss/materialize/./src/cards.ts","webpack://@materializecss/materialize/./src/carousel.ts","webpack://@materializecss/materialize/./src/characterCounter.ts","webpack://@materializecss/materialize/./src/chips.ts","webpack://@materializecss/materialize/./src/collapsible.ts","webpack://@materializecss/materialize/./src/component.ts","webpack://@materializecss/materialize/./src/datepicker.ts","webpack://@materializecss/materialize/./src/dropdown.ts","webpack://@materializecss/materialize/./src/forms.ts","webpack://@materializecss/materialize/./src/materialbox.ts","webpack://@materializecss/materialize/./src/modal.ts","webpack://@materializecss/materialize/./src/parallax.ts","webpack://@materializecss/materialize/./src/pushpin.ts","webpack://@materializecss/materialize/./src/range.ts","webpack://@materializecss/materialize/./src/scrollspy.ts","webpack://@materializecss/materialize/./src/select.ts","webpack://@materializecss/materialize/./src/sidenav.ts","webpack://@materializecss/materialize/./src/slider.ts","webpack://@materializecss/materialize/./src/tabs.ts","webpack://@materializecss/materialize/./src/tapTarget.ts","webpack://@materializecss/materialize/./src/timepicker.ts","webpack://@materializecss/materialize/./src/toasts.ts","webpack://@materializecss/materialize/./src/tooltip.ts","webpack://@materializecss/materialize/./src/utils.ts","webpack://@materializecss/materialize/./src/waves.ts","webpack://@materializecss/materialize/webpack/bootstrap","webpack://@materializecss/materialize/./src/global.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function() {\nreturn ","import { Utils } from \"./utils\";\nimport { Dropdown, DropdownOptions } from \"./dropdown\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface AutocompleteData {\n  /** \n   * A primitive value that can be converted to string.\n   * If \"text\" is not provided, it will also be used as \"option text\" as well\n   */\n  id: string | number;\n  /**\n   * This optional attribute is used as \"display value\" for the current entry.\n   * When provided, it will also be taken into consideration by the standard search function.\n   */\n  text?: string;\n  /**\n   * This optional attribute is used to provide a valid image URL to the current option.\n   */\n  image?: string;\n  /**\n   * Optional attributes which describes the option.\n   */\n  description?: string;\n}\n\nexport interface AutocompleteOptions extends BaseOptions {\n  /**\n   * Data object defining autocomplete options with\n   * optional icon strings.\n   */\n  data: AutocompleteData[];\n  /**\n   * Flag which can be set if multiple values can be selected. The Result will be an Array.\n   * @default false\n   */\n  isMultiSelect: boolean;\n  /**\n   * Callback for when autocompleted.\n   */\n  onAutocomplete: (entries: AutocompleteData[]) => void;\n  /**\n   * Minimum number of characters before autocomplete starts.\n   * @default 1\n   */\n  minLength: number;\n  /**\n   * The height of the Menu which can be set via css-property.\n   * @default '300px'\n   */\n  maxDropDownHeight: string;\n  /**\n   * Function is called when the input text is altered and data can also be loaded asynchronously.\n   * If the results are collected the items in the list can be updated via the function setMenuItems(collectedItems).\n   * @param text Searched text.\n   * @param autocomplete Current autocomplete instance.\n   */\n  onSearch: (text: string, autocomplete: Autocomplete) => void;\n  /**\n   * If true will render the key from each item directly as HTML.\n   * User input MUST be properly sanitized first.\n   * @default false\n   */\n  allowUnsafeHTML: boolean;\n  /**\n   * Pass options object to select dropdown initialization.\n   * @default {}\n   */\n  dropdownOptions: Partial<DropdownOptions>;\n};\n\nlet _defaults: AutocompleteOptions = {\n  data: [], // Autocomplete data set\n  onAutocomplete: null, // Callback for when autocompleted\n  dropdownOptions: {\n    // Default dropdown options\n    autoFocus: false,\n    closeOnClick: false,\n    coverTrigger: false\n  },\n  minLength: 1, // Min characters before autocomplete starts\n  isMultiSelect: false,\n  onSearch: (text: string, autocomplete: Autocomplete) => {\n    const normSearch = text.toLocaleLowerCase();\n    autocomplete.setMenuItems(\n      autocomplete.options.data.filter((option) => \n        option.id.toString().toLocaleLowerCase().includes(normSearch)\n          || option.text?.toLocaleLowerCase().includes(normSearch)\n      )\n    );\n  },\n  maxDropDownHeight: '300px',\n  allowUnsafeHTML: false\n};\n\n\nexport class Autocomplete extends Component<AutocompleteOptions> {\n  declare el: HTMLInputElement;\n  /** If the autocomplete is open. */\n  isOpen: boolean;\n  /** Number of matching autocomplete options. */\n  count: number;\n  /** Index of the current selected option. */\n  activeIndex: number;\n  private oldVal: string;\n  private $active: HTMLElement|null;\n  private _mousedown: boolean;\n  container: HTMLElement;\n  /** Instance of the dropdown plugin for this autocomplete. */\n  dropdown: Dropdown;\n  static _keydown: boolean;\n  selectedValues: AutocompleteData[];\n  menuItems: AutocompleteData[];\n\n\n  constructor(el: HTMLInputElement, options: Partial<AutocompleteOptions>) {\n    super(el, options, Autocomplete);\n    (this.el as any).M_Autocomplete = this;\n\n    this.options = {\n      ...Autocomplete.defaults,\n      ...options\n    };\n    \n    this.isOpen = false;\n    this.count = 0;\n    this.activeIndex = -1;\n    this.oldVal = \"\";\n    this.selectedValues = [];\n    this.menuItems = [];\n    this.$active = null;\n    this._mousedown = false;\n    this._setupDropdown();\n    this._setupEventHandlers();\n  }\n\n  static get defaults(): AutocompleteOptions {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of Autocomplete.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLInputElement, options?: Partial<AutocompleteOptions>): Autocomplete;\n  /**\n   * Initializes instances of Autocomplete.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<HTMLInputElement | MElement>, options?: Partial<AutocompleteOptions>): Autocomplete[];\n  /**\n   * Initializes instances of Autocomplete.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLInputElement | InitElements<HTMLInputElement | MElement>, options: Partial<AutocompleteOptions> = {}): Autocomplete | Autocomplete[] {\n    return super.init(els, options, Autocomplete);\n  }\n\n  static getInstance(el: HTMLElement): Autocomplete {\n    return (el as any).M_Autocomplete;\n  }\n\n  destroy() {\n    this._removeEventHandlers();\n    this._removeDropdown();\n    (this.el as any).M_Autocomplete = undefined;\n  }\n\n  _setupEventHandlers() {\n    this.el.addEventListener('blur', this._handleInputBlur);\n    this.el.addEventListener('keyup', this._handleInputKeyupAndFocus);\n    this.el.addEventListener('focus', this._handleInputKeyupAndFocus);\n    this.el.addEventListener('keydown', this._handleInputKeydown);\n    this.el.addEventListener('click', this._handleInputClick);\n    this.container.addEventListener(\n      'mousedown',\n      this._handleContainerMousedownAndTouchstart\n    );\n    this.container.addEventListener('mouseup', this._handleContainerMouseupAndTouchend);\n    if (typeof window.ontouchstart !== 'undefined') {\n      this.container.addEventListener(\n        'touchstart',\n        this._handleContainerMousedownAndTouchstart\n      );\n      this.container.addEventListener('touchend', this._handleContainerMouseupAndTouchend);\n    }\n  }\n\n  _removeEventHandlers() {\n    this.el.removeEventListener('blur', this._handleInputBlur);\n    this.el.removeEventListener('keyup', this._handleInputKeyupAndFocus);\n    this.el.removeEventListener('focus', this._handleInputKeyupAndFocus);\n    this.el.removeEventListener('keydown', this._handleInputKeydown);\n    this.el.removeEventListener('click', this._handleInputClick);\n    this.container.removeEventListener(\n      'mousedown',\n      this._handleContainerMousedownAndTouchstart\n    );\n    this.container.removeEventListener('mouseup', this._handleContainerMouseupAndTouchend);\n\n    if (typeof window.ontouchstart !== 'undefined') {\n      this.container.removeEventListener(\n        'touchstart',\n        this._handleContainerMousedownAndTouchstart\n      );\n      this.container.removeEventListener(\n        'touchend',\n        this._handleContainerMouseupAndTouchend\n      );\n    }\n  }\n\n  _setupDropdown() {\n    this.container = document.createElement('ul');\n    this.container.style.maxHeight = this.options.maxDropDownHeight;\n    this.container.id = `autocomplete-options-${Utils.guid()}`;\n    this.container.classList.add('autocomplete-content', 'dropdown-content');\n    this.el.setAttribute('data-target', this.container.id);\n\n    // ! Issue in Component Dropdown: _placeDropdown moves dom-position\n    this.el.parentElement.appendChild(this.container);\n\n    // Initialize dropdown\n    let dropdownOptions = {\n      ...Autocomplete.defaults.dropdownOptions,\n      ...this.options.dropdownOptions\n    };\n    let userOnItemClick = dropdownOptions.onItemClick;\n    // Ensuring the select Option call when user passes custom onItemClick function to dropdown\n    dropdownOptions.onItemClick = (li) => {\n      if (!li) return;\n      const entryID = li.getAttribute('data-id');\n      this.selectOption(entryID);\n      // Handle user declared onItemClick if needed\n      if (userOnItemClick && typeof userOnItemClick === 'function')\n        userOnItemClick.call(this.dropdown, this.el);\n    };\n    this.dropdown = Dropdown.init(this.el, dropdownOptions);\n\n    // ! Workaround for Label: move label up again\n    // TODO: Just use PopperJS in future!\n    const label = this.el.parentElement.querySelector('label');\n    if (label) this.el.after(label);\n\n    // Sketchy removal of dropdown click handler\n    this.el.removeEventListener('click', this.dropdown._handleClick);\n    // Set Value if already set in HTML\n    if (this.el.value) this.selectOption(this.el.value);\n    // Add StatusInfo\n    const div = document.createElement('div');\n    div.classList.add('status-info');\n    div.setAttribute('style', 'position: absolute;right:0;top:0;');\n    this.el.parentElement.appendChild(div);\n    this._updateSelectedInfo();\n  }\n\n  _removeDropdown() {\n    this.container.parentNode.removeChild(this.container);\n  }\n\n  _handleInputBlur = () => {\n    if (!this._mousedown) {\n      this.close();\n      this._resetAutocomplete();\n    }\n  }\n\n  _handleInputKeyupAndFocus = (e: KeyboardEvent) => {\n    if (e.type === 'keyup') Autocomplete._keydown = false;\n    this.count = 0;\n    const actualValue = this.el.value.toLocaleLowerCase();\n    // Don't capture enter or arrow key usage.\n    if (Utils.keys.ENTER.includes(e.key) || Utils.keys.ARROW_UP.includes(e.key) || Utils.keys.ARROW_DOWN.includes(e.key)) return;\n    // Check if the input isn't empty\n    // Check if focus triggered by tab\n    if (this.oldVal !== actualValue && (Utils.tabPressed || e.type !== 'focus')) {\n      this.open();\n    }\n    // Value has changed!\n    if (this.oldVal !== actualValue) {\n      this._setStatusLoading();\n      this.options.onSearch(this.el.value, this);\n    }\n    // Reset Single-Select when Input cleared\n    if (!this.options.isMultiSelect && this.el.value.length === 0) {\n      this.selectedValues = [];\n      this._triggerChanged();\n    }\n    this.oldVal = actualValue;\n  }\n\n  _handleInputKeydown = (e: KeyboardEvent) => {\n    Autocomplete._keydown = true;\n    // Arrow keys and enter key usage\n    const numItems = this.container.querySelectorAll('li').length;\n    // select element on Enter\n    if (Utils.keys.ENTER.includes(e.key) && this.activeIndex >= 0) {\n      const liElement = this.container.querySelectorAll('li')[this.activeIndex];\n      if (liElement) {\n        this.selectOption(liElement.getAttribute('data-id'));\n        e.preventDefault();\n      }\n      return;\n    }\n    // Capture up and down key\n    if (Utils.keys.ARROW_UP.includes(e.key) || Utils.keys.ARROW_DOWN.includes(e.key)) {\n      e.preventDefault();\n      if (Utils.keys.ARROW_UP.includes(e.key) && this.activeIndex > 0) this.activeIndex--;\n      if (Utils.keys.ARROW_DOWN.includes(e.key) && this.activeIndex < numItems - 1) this.activeIndex++;\n      this.$active?.classList.remove('active');\n      if (this.activeIndex >= 0) {\n        this.$active = this.container.querySelectorAll('li')[this.activeIndex];\n        this.$active?.classList.add('active');\n        // Focus selected\n        this.container.children[this.activeIndex].scrollIntoView({\n          behavior: 'smooth',\n          block: 'nearest',\n          inline: 'nearest'\n        });\n      }\n    }\n  }\n\n  _handleInputClick = () => {\n    this.open();\n  }\n\n  _handleContainerMousedownAndTouchstart = () => {\n    this._mousedown = true;\n  }\n\n  _handleContainerMouseupAndTouchend = () => {\n    this._mousedown = false;\n  }\n\n  _resetCurrentElementPosition() {\n    this.activeIndex = -1;\n    this.$active?.classList.remove('active');\n  }\n\n  _resetAutocomplete() {\n    this.container.replaceChildren();\n    this._resetCurrentElementPosition();\n    this.oldVal = null;\n    this.isOpen = false;\n    this._mousedown = false;\n  }\n\n  _highlightPartialText(input: string, label: string) {\n    const start = label.toLocaleLowerCase().indexOf('' + input.toLocaleLowerCase() + '');\n    const end = start + input.length - 1;\n    //custom filters may return results where the string does not match any part\n    if (start == -1 || end == -1) {\n      return [label, '', ''];\n    }\n    return [label.slice(0, start), label.slice(start, end + 1), label.slice(end + 1)];\n  }\n\n  _createDropdownItem(entry: AutocompleteData) {\n    const item = document.createElement('li');\n    item.setAttribute('data-id', <string>entry.id);\n    item.setAttribute(\n      'style',\n      'display:grid; grid-auto-flow: column; user-select: none; align-items: center;'\n    );\n    // Checkbox\n    if (this.options.isMultiSelect) {\n      item.innerHTML = `\n        <div class=\"item-selection\" style=\"text-align:center;\">\n        <input type=\"checkbox\"${\n          this.selectedValues.some((sel) => sel.id === entry.id) ? ' checked=\"checked\"' : ''\n        }><span style=\"padding-left:21px;\"></span>\n      </div>`;\n    }\n    // Image\n    if (entry.image) {\n      const img = document.createElement('img');\n      img.classList.add('circle');\n      img.src = entry.image;\n      item.appendChild(img);\n    }\n\n    // Text\n    const inputText = this.el.value.toLocaleLowerCase();\n    const parts = this._highlightPartialText(inputText, (entry.text || entry.id).toString());\n    const div = document.createElement('div');\n    div.setAttribute('style', 'line-height:1.2;font-weight:500;');\n    if (this.options.allowUnsafeHTML) {\n      div.innerHTML = parts[0] + '<span class=\"highlight\">' + parts[1] + '</span>' + parts[2];\n    } else {\n      div.appendChild(document.createTextNode(parts[0]));\n      if (parts[1]) {\n        const highlight = document.createElement('span');\n        highlight.textContent = parts[1];\n        highlight.classList.add('highlight');\n        div.appendChild(highlight);\n        div.appendChild(document.createTextNode(parts[2]));\n      }\n    }\n\n    const itemText = document.createElement('div');\n    itemText.classList.add('item-text');\n    itemText.setAttribute('style', 'padding:5px;overflow:hidden;');\n    item.appendChild(itemText);\n    item.querySelector('.item-text').appendChild(div);\n    // Description\n    if (typeof entry.description === 'string' || (typeof entry.description === 'number' && !isNaN(entry.description))) {\n      const description = document.createElement('small');\n      description.setAttribute(\n        'style',\n        'line-height:1.3;color:grey;white-space:nowrap;text-overflow:ellipsis;display:block;width:90%;overflow:hidden;'\n      );\n      description.innerText = entry.description;\n      item.querySelector('.item-text').appendChild(description);\n    }\n    // Set Grid\n    const getGridConfig = () => {\n      if (this.options.isMultiSelect) {\n        if (entry.image) return '40px min-content auto'; // cb-img-txt\n        return '40px auto'; // cb-txt\n      }\n      if (entry.image) return 'min-content auto'; // img-txt\n      return 'auto'; // txt\n    };\n    item.style.gridTemplateColumns = getGridConfig();\n    return item;\n  }\n\n  _renderDropdown() {\n    this._resetAutocomplete();\n    // Check if Data is empty\n    if (this.menuItems.length === 0) {\n      this.menuItems = this.selectedValues; // Show selected Items\n    }\n    for (let i = 0; i < this.menuItems.length; i++) {\n      const item = this._createDropdownItem(this.menuItems[i]);\n      this.container.append(item);\n    }\n  }\n\n  _setStatusLoading() {\n    this.el.parentElement.querySelector(\n      '.status-info'\n    ).innerHTML = `<div style=\"height:100%;width:50px;\"><svg version=\"1.1\" id=\"L4\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 100 100\" enable-background=\"new 0 0 0 0\" xml:space=\"preserve\">\n    <circle fill=\"#888c\" stroke=\"none\" cx=\"6\" cy=\"50\" r=\"6\"><animate attributeName=\"opacity\" dur=\"1s\" values=\"0;1;0\" repeatCount=\"indefinite\" begin=\"0.1\"/></circle>\n    <circle fill=\"#888c\" stroke=\"none\" cx=\"26\" cy=\"50\" r=\"6\"><animate attributeName=\"opacity\" dur=\"1s\" values=\"0;1;0\" repeatCount=\"indefinite\" begin=\"0.2\"/></circle>\n    <circle fill=\"#888c\" stroke=\"none\" cx=\"46\" cy=\"50\" r=\"6\"><animate attributeName=\"opacity\" dur=\"1s\" values=\"0;1;0\" repeatCount=\"indefinite\"  begin=\"0.3\"/></circle>\n  </svg></div>`;\n  }\n\n  _updateSelectedInfo() {\n    const statusElement = this.el.parentElement.querySelector('.status-info');\n    if (statusElement) {\n      if (this.options.isMultiSelect) statusElement.innerHTML = this.selectedValues.length.toString();\n      else statusElement.innerHTML = '';\n    }\n  }\n\n  _refreshInputText() {\n    if (this.selectedValues.length === 1) {\n      const entry = this.selectedValues[0];\n      this.el.value = entry.text || <string>entry.id; // Write Text to Input\n    }\n  }\n\n  _triggerChanged() {\n    this.el.dispatchEvent(new Event('change'));\n    // Trigger Autocomplete Event\n    if (typeof this.options.onAutocomplete === 'function')\n      this.options.onAutocomplete.call(this, this.selectedValues);\n  }\n\n  /**\n   * Show autocomplete.\n   */\n  open = () => {\n    const inputText = this.el.value.toLocaleLowerCase();\n    this._resetAutocomplete();\n    if (inputText.length >= this.options.minLength) {\n      this.isOpen = true;\n      this._renderDropdown();\n    }\n    // Open dropdown\n    if (!this.dropdown.isOpen) {\n      setTimeout(() => {\n        this.dropdown.open();\n      }, 100);\n    }\n    else this.dropdown.recalculateDimensions(); // Recalculate dropdown when its already open\n  }\n\n  /**\n   * Hide autocomplete.\n   */\n  close = () => {\n    this.dropdown.close();\n  }\n\n  /**\n   * Updates the visible or selectable items shown in the menu.\n   * @param menuItems Items to be available.\n   */\n  setMenuItems(menuItems: AutocompleteData[]) {\n    this.menuItems = menuItems;\n    this.open();\n    this._updateSelectedInfo();\n  }\n\n  /**\n   * Sets selected values.\n   * @param entries\n   */\n  setValues(entries: AutocompleteData[]) {\n    this.selectedValues = entries;\n    this._updateSelectedInfo();\n    if (!this.options.isMultiSelect) {\n      this._refreshInputText();\n    }\n    this._triggerChanged();\n  }\n\n  /**\n   * Select a specific autocomplete option via id-property.\n   * @param id The id of a data-entry.\n   */\n  selectOption(id: number | string) {\n    const entry = this.menuItems.find((item) => item.id == id);\n    if (!entry) return;\n    // Toggle Checkbox\n    const li = this.container.querySelector('li[data-id=\"'+id+'\"]');\n    if (!li) return;\n    if (this.options.isMultiSelect) {\n      const checkbox = <HTMLInputElement|null>li.querySelector('input[type=\"checkbox\"]');\n      checkbox.checked = !checkbox.checked;\n      if (checkbox.checked) this.selectedValues.push(entry);\n      else\n        this.selectedValues = this.selectedValues.filter(\n          (selectedEntry) => selectedEntry.id !== entry.id\n        );\n      this.el.focus();\n    } else {\n      // Single-Select\n      this.selectedValues = [entry];\n      this._refreshInputText();\n      this._resetAutocomplete();\n      this.close();\n    }\n    this._updateSelectedInfo();\n    this._triggerChanged();\n  }\n}\n","import { Component, BaseOptions, InitElements, MElement, Openable } from \"./component\";\n\nexport interface FloatingActionButtonOptions extends BaseOptions {\n  /**\n   * Direction FAB menu opens.\n   * @default \"top\"\n   */\n  direction: \"top\" | \"right\" | \"bottom\" | \"left\";\n  /**\n   * true: FAB menu appears on hover, false: FAB menu appears on click.\n   * @default true\n   */\n  hoverEnabled: boolean;\n  /**\n   * Enable transit the FAB into a toolbar on click.\n   * @default false\n   */\n  toolbarEnabled: boolean;\n};\n\nlet _defaults: FloatingActionButtonOptions = {\n  direction: 'top',\n  hoverEnabled: true,\n  toolbarEnabled: false\n};\n\nexport class FloatingActionButton extends Component<FloatingActionButtonOptions> implements Openable {\n  /**\n   * Describes open/close state of FAB.\n   */\n  isOpen: boolean;\n\n  private _anchor: HTMLAnchorElement;\n  private _menu: HTMLElement|null;\n  private _floatingBtns: HTMLElement[];\n  private _floatingBtnsReverse: HTMLElement[];\n\n  offsetY: number;\n  offsetX: number;\n  btnBottom: number;\n  btnLeft: number;\n  btnWidth: number;\n\n  constructor(el: HTMLElement, options: Partial<FloatingActionButtonOptions>) {\n    super(el, options, FloatingActionButton);\n    (this.el as any).M_FloatingActionButton = this;\n\n    this.options = {\n      ...FloatingActionButton.defaults,\n      ...options\n    };\n\n    this.isOpen = false;\n    this._anchor = this.el.querySelector('a');\n    this._menu = this.el.querySelector('ul');\n    this._floatingBtns = Array.from(this.el.querySelectorAll('ul .btn-floating'));\n    this._floatingBtnsReverse = this._floatingBtns.reverse();\n    this.offsetY = 0;\n    this.offsetX = 0;\n\n    this.el.classList.add(`direction-${this.options.direction}`);\n    if (this.options.direction === 'top')\n      this.offsetY = 40;\n    else if (this.options.direction === 'right')\n      this.offsetX = -40;\n    else if (this.options.direction === 'bottom')\n      this.offsetY = -40;\n    else\n      this.offsetX = 40;\n    this._setupEventHandlers();\n  }\n\n  static get defaults() {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of FloatingActionButton.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLElement, options?: Partial<FloatingActionButtonOptions>): FloatingActionButton\n  /**\n   * Initializes instances of FloatingActionButton.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<MElement>, options?: Partial<FloatingActionButtonOptions>): FloatingActionButton[];\n  /**\n   * Initializes instances of FloatingActionButton.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLElement | InitElements<MElement>, options: Partial<FloatingActionButtonOptions> = {}): FloatingActionButton | FloatingActionButton[] {\n    return super.init(els, options, FloatingActionButton);\n  }\n\n  static getInstance(el: HTMLElement): FloatingActionButton {\n    return (el as any).M_FloatingActionButton;\n  }\n\n  destroy() {\n    this._removeEventHandlers();\n    (this.el as any).M_FloatingActionButton = undefined;\n  }\n\n  _setupEventHandlers() {\n    if (this.options.hoverEnabled && !this.options.toolbarEnabled) {\n      this.el.addEventListener('mouseenter', this.open);\n      this.el.addEventListener('mouseleave', this.close);\n    } else {\n      this.el.addEventListener('click', this._handleFABClick);\n    }\n  }\n\n  _removeEventHandlers() {\n    if (this.options.hoverEnabled && !this.options.toolbarEnabled) {\n      this.el.removeEventListener('mouseenter', this.open);\n      this.el.removeEventListener('mouseleave', this.close);\n    } else {\n      this.el.removeEventListener('click', this._handleFABClick);\n    }\n  }\n\n  _handleFABClick = () => {\n    if (this.isOpen) {\n      this.close();\n    } else {\n      this.open();\n    }\n  }\n\n  _handleDocumentClick = (e: MouseEvent) => {\n    const elem = e.target;\n    if (elem !== this._menu) this.close;\n  }\n\n  /**\n   * Open FAB.\n   */\n  open = (): void => {\n    if (this.isOpen) return;\n    if (this.options.toolbarEnabled)\n      this._animateInToolbar();\n    else\n      this._animateInFAB();\n    this.isOpen = true;\n  }\n\n  /**\n   * Close FAB.\n   */\n  close = (): void => {\n    if (!this.isOpen) return;\n    if (this.options.toolbarEnabled) {\n      window.removeEventListener('scroll', this.close, true);\n      document.body.removeEventListener('click', this._handleDocumentClick, true);\n    }\n    else {\n      this._animateOutFAB();\n    }\n    this.isOpen = false;\n  }\n\n  _animateInFAB() {\n    this.el.classList.add('active');\n    const delayIncrement = 40;\n    const duration = 275;\n    \n    this._floatingBtnsReverse.forEach((el, index) => {\n      const delay = delayIncrement * index;\n      el.style.transition = 'none';\n      el.style.opacity = '0';\n      el.style.transform = `translate(${this.offsetX}px, ${this.offsetY}px) scale(0.4)`;\n      setTimeout(() => {\n        // from:\n        el.style.opacity = '0.4';\n        // easeInOutQuad\n        setTimeout(() => {\n          // to:\n          el.style.transition = `opacity ${duration}ms ease, transform ${duration}ms ease`;\n          el.style.opacity = '1';\n          el.style.transform = 'translate(0, 0) scale(1)';\n        }, 1);\n      }, delay);\n    });\n  }\n\n  _animateOutFAB() {\n    const duration = 175;\n    setTimeout(() => this.el.classList.remove('active'), duration);\n    this._floatingBtnsReverse.forEach((el) => {\n      el.style.transition = `opacity ${duration}ms ease, transform ${duration}ms ease`;\n      // to\n      el.style.opacity = '0';\n      el.style.transform = `translate(${this.offsetX}px, ${this.offsetY}px) scale(0.4)`;\n    });\n  }\n\n  _animateInToolbar() {\n    let scaleFactor;\n    let windowWidth = window.innerWidth;\n    let windowHeight = window.innerHeight;\n    let btnRect = this.el.getBoundingClientRect();\n\n    const backdrop =  document.createElement('div');\n    backdrop.classList.add('fab-backdrop'); //  $('<div class=\"fab-backdrop\"></div>');\n\n    const fabColor = getComputedStyle(this._anchor).backgroundColor; // css('background-color');\n\n    this._anchor.append(backdrop);\n\n    this.offsetX = btnRect.left - windowWidth / 2 + btnRect.width / 2;\n    this.offsetY = windowHeight - btnRect.bottom;\n    scaleFactor = windowWidth / backdrop[0].clientWidth;\n    this.btnBottom = btnRect.bottom;\n    this.btnLeft = btnRect.left;\n    this.btnWidth = btnRect.width;\n\n    // Set initial state\n    this.el.classList.add('active');\n    this.el.style.textAlign = 'center';\n    this.el.style.width = '100%';\n    this.el.style.bottom = '0';\n    this.el.style.left = '0';\n    this.el.style.transform = 'translateX(' + this.offsetX + 'px)';\n    this.el.style.transition = 'none';\n\n    this._anchor.style.transform = `translateY(${this.offsetY}px`;\n    this._anchor.style.transition = 'none';\n\n    backdrop.style.backgroundColor = fabColor;\n\n    setTimeout(() => {\n      this.el.style.transform = '';\n      this.el.style.transition  = 'transform .2s cubic-bezier(0.550, 0.085, 0.680, 0.530), background-color 0s linear .2s';\n\n      this._anchor.style.overflow = 'visible';\n      this._anchor.style.transform = '';\n      this._anchor.style.transition = 'transform .2s';\n\n      setTimeout(() => {\n        this.el.style.overflow = 'hidden';\n        this.el.style.backgroundColor = fabColor;\n\n        backdrop.style.transform = 'scale(' + scaleFactor + ')';\n        backdrop.style.transition = 'transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)';\n\n        this._menu.querySelectorAll('li > a').forEach((a: HTMLAnchorElement) => a.style.opacity = '1');\n\n        // Scroll to close.\n        window.addEventListener('scroll', this.close, true);\n        document.body.addEventListener('click', this._handleDocumentClick, true);\n      }, 100);\n    }, 0);\n  }\n}\n","export class Cards {\n\n  static Init() {\n\n    document.addEventListener(\"DOMContentLoaded\", () => {\n      document.body.addEventListener('click', e => {\n        const trigger = <HTMLElement>e.target;\n\n        const card: HTMLElement = trigger.closest('.card');\n        if (!card) return;\n\n        const cardReveal = <HTMLElement|null>Array.from(card.children).find(elem => elem.classList.contains('card-reveal'));\n        if (!cardReveal) return;\n        const initialOverflow = getComputedStyle(card).overflow;\n\n        // Close Card\n        const closeArea = cardReveal.querySelector('.card-reveal .card-title');\n        if (trigger === closeArea || closeArea.contains(trigger)) {\n          const duration = 225;\n          cardReveal.style.transition = `transform ${duration}ms ease`; //easeInOutQuad\n          cardReveal.style.transform = 'translateY(0)';            \n          setTimeout(() => {\n            cardReveal.style.display = 'none';\n            card.style.overflow = initialOverflow;\n          }, duration);\n        };\n\n        // Reveal Card\n        const activators = card.querySelectorAll('.activator');\n        activators.forEach(activator => {\n          if (trigger === activator || activator.contains(trigger)) {\n            card.style.overflow = 'hidden';\n            cardReveal.style.display = 'block';\n            setTimeout(() => {\n              const duration = 300;\n              cardReveal.style.transition = `transform ${duration}ms ease`; //easeInOutQuad\n              cardReveal.style.transform = 'translateY(-100%)';              \n            }, 1);\n          }\n        });\n\n      });\n    });\n\n  }\n}\n","import { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface CarouselOptions extends BaseOptions{\n  /**\n   * Transition duration in milliseconds.\n   * @default 200\n   */\n  duration: number;\n  /**\n   * Perspective zoom. If 0, all items are the same size.\n   * @default -100\n   */\n  dist: number;\n  /**\n   * Set the spacing of the center item.\n   * @default 0\n   */\n  shift: number;\n  /**\n   * Set the padding between non center items.\n   * @default 0\n   */\n  padding: number;\n  /**\n   * Set the number of visible items.\n   * @default 5\n   */\n  numVisible: number;\n  /**\n   * Make the carousel a full width slider like the second example.\n   * @default false\n   */\n  fullWidth: boolean;\n  /**\n   * Set to true to show indicators.\n   * @default false\n   */\n  indicators: boolean;\n  /**\n   * Don't wrap around and cycle through items.\n   * @default false\n   */\n  noWrap: boolean;\n  /**\n   * Callback for when a new slide is cycled to.\n   * @default null\n   */\n  onCycleTo: (current: Element, dragged: boolean) => void;\n}\n\nlet _defaults: CarouselOptions = {\n  duration: 200, // ms\n  dist: -100, // zoom scale TODO: make this more intuitive as an option\n  shift: 0, // spacing for center image\n  padding: 0, // Padding between non center items\n  numVisible: 5, // Number of visible items in carousel\n  fullWidth: false, // Change to full width styles\n  indicators: false, // Toggle indicators\n  noWrap: false, // Don't wrap around and cycle through items.\n  onCycleTo: null // Callback for when a new slide is cycled to.\n};\n\nexport class Carousel extends Component<CarouselOptions> {\n  hasMultipleSlides: boolean;\n  showIndicators: boolean;\n  noWrap: boolean;\n  /** If the carousel is being clicked or tapped. */\n  pressed: boolean;\n  /** If the carousel is currently being dragged. */\n  dragged: boolean;\n  offset: number;\n  target: number;\n  images: HTMLElement[];\n  itemWidth: any;\n  itemHeight: any;\n  dim: number;\n  _indicators: any;\n  count: number;\n  xform: string;\n  verticalDragged: boolean;\n  reference: any;\n  referenceY: any;\n  velocity: number;\n  frame: number;\n  timestamp: number;\n  ticker: string | number | NodeJS.Timeout;\n  amplitude: number;\n  /** The index of the center carousel item. */\n  center: number = 0;\n  imageHeight: any;\n  scrollingTimeout: any;\n  oneTimeCallback: any;\n\n  constructor(el: HTMLElement, options: Partial<CarouselOptions>) {\n    super(el, options, Carousel);\n    (this.el as any).M_Carousel = this;\n\n    this.options = {\n      ...Carousel.defaults,\n      ...options\n    };\n\n    // Setup\n    this.hasMultipleSlides = this.el.querySelectorAll('.carousel-item').length > 1;\n    this.showIndicators = this.options.indicators && this.hasMultipleSlides;\n    this.noWrap = this.options.noWrap || !this.hasMultipleSlides;\n    this.pressed = false;\n    this.dragged = false;\n    this.offset = this.target = 0;\n    this.images = [];\n    this.itemWidth = this.el.querySelector('.carousel-item').clientWidth;\n    this.itemHeight = this.el.querySelector('.carousel-item').clientHeight;\n    this.dim = this.itemWidth * 2 + this.options.padding || 1; // Make sure dim is non zero for divisions.\n\n    // Full Width carousel setup\n    if (this.options.fullWidth) {\n      this.options.dist = 0;\n      this._setCarouselHeight();\n\n      // Offset fixed items when indicators.\n      if (this.showIndicators) {\n        this.el.querySelector('.carousel-fixed-item')?.classList.add('with-indicators');\n      }\n    }\n\n    // Iterate through slides\n    this._indicators = document.createElement('ul');\n    this._indicators.classList.add('indicators');\n\n    this.el.querySelectorAll('.carousel-item').forEach((item: HTMLElement, i) => {\n      this.images.push(item);\n      if (this.showIndicators) {\n        const indicator = document.createElement('li');\n        indicator.classList.add('indicator-item');\n        if (i === 0) {\n          indicator.classList.add('active');\n        }\n        this._indicators.appendChild(indicator);\n      }\n    });\n\n    if (this.showIndicators)\n      this.el.appendChild(this._indicators);\n\n    this.count = this.images.length;\n\n    // Cap numVisible at count\n    this.options.numVisible = Math.min(this.count, this.options.numVisible);\n\n    // Setup cross browser string\n    this.xform = 'transform';\n    ['webkit', 'Moz', 'O', 'ms'].every((prefix) => {\n      var e = prefix + 'Transform';\n      if (typeof document.body.style[e] !== 'undefined') {\n        this.xform = e;\n        return false;\n      }\n      return true;\n    });\n\n    this._setupEventHandlers();\n    this._scroll(this.offset);\n  }\n\n  static get defaults(): CarouselOptions {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of Carousel.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLElement, options?: Partial<CarouselOptions>): Carousel;\n  /**\n   * Initializes instances of Carousel.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<MElement>, options?: Partial<CarouselOptions>): Carousel[];\n  /**\n   * Initializes instances of Carousel.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLElement | InitElements<MElement>, options: Partial<CarouselOptions> = {}): Carousel | Carousel[] {\n    return super.init(els, options, Carousel);\n  }\n\n  static getInstance(el: HTMLElement): Carousel {\n    return (el as any).M_Carousel;\n  }\n\n  destroy() {\n    this._removeEventHandlers();\n    (this.el as any).M_Carousel = undefined;\n  }\n\n  _setupEventHandlers() {\n    if (typeof window.ontouchstart !== 'undefined') {\n      this.el.addEventListener('touchstart', this._handleCarouselTap);\n      this.el.addEventListener('touchmove', this._handleCarouselDrag);\n      this.el.addEventListener('touchend', this._handleCarouselRelease);\n    }\n    this.el.addEventListener('mousedown', this._handleCarouselTap);\n    this.el.addEventListener('mousemove', this._handleCarouselDrag);\n    this.el.addEventListener('mouseup', this._handleCarouselRelease);\n    this.el.addEventListener('mouseleave', this._handleCarouselRelease);\n    this.el.addEventListener('click', this._handleCarouselClick);\n    if (this.showIndicators && this._indicators) {\n      this._indicators.querySelectorAll('.indicator-item').forEach((el) => {\n        el.addEventListener('click', this._handleIndicatorClick);\n      });\n    }\n    // Resize\n    window.addEventListener('resize', this._handleThrottledResize);\n  }\n\n  _removeEventHandlers() {\n    if (typeof window.ontouchstart !== 'undefined') {\n      this.el.removeEventListener('touchstart', this._handleCarouselTap);\n      this.el.removeEventListener('touchmove', this._handleCarouselDrag);\n      this.el.removeEventListener('touchend', this._handleCarouselRelease);\n    }\n    this.el.removeEventListener('mousedown', this._handleCarouselTap);\n    this.el.removeEventListener('mousemove', this._handleCarouselDrag);\n    this.el.removeEventListener('mouseup', this._handleCarouselRelease);\n    this.el.removeEventListener('mouseleave', this._handleCarouselRelease);\n    this.el.removeEventListener('click', this._handleCarouselClick);\n    if (this.showIndicators && this._indicators) {\n      this._indicators.querySelectorAll('.indicator-item').forEach((el) => {\n        el.removeEventListener('click', this._handleIndicatorClick);\n      });\n    }\n    window.removeEventListener('resize', this._handleThrottledResize);\n  }\n\n  _handleThrottledResize: () => void = Utils.throttle(function(){ this._handleResize(); }, 200, null).bind(this);\n\n  _handleCarouselTap = (e: MouseEvent | TouchEvent) => {\n    // Fixes firefox draggable image bug\n    if (e.type === 'mousedown' && (<HTMLElement>e.target).tagName === 'IMG') {\n      e.preventDefault();\n    }\n    this.pressed = true;\n    this.dragged = false;\n    this.verticalDragged = false;\n    this.reference = this._xpos(e);\n    this.referenceY = this._ypos(e);\n\n    this.velocity = this.amplitude = 0;\n    this.frame = this.offset;\n    this.timestamp = Date.now();\n    clearInterval(this.ticker);\n    this.ticker = setInterval(this._track, 100);\n  }\n\n  _handleCarouselDrag = (e: MouseEvent | TouchEvent) => {\n    let x: number, y: number, delta: number, deltaY: number;\n    if (this.pressed) {\n      x = this._xpos(e);\n      y = this._ypos(e);\n      delta = this.reference - x;\n      deltaY = Math.abs(this.referenceY - y);\n      if (deltaY < 30 && !this.verticalDragged) {\n        // If vertical scrolling don't allow dragging.\n        if (delta > 2 || delta < -2) {\n          this.dragged = true;\n          this.reference = x;\n          this._scroll(this.offset + delta);\n        }\n      } else if (this.dragged) {\n        // If dragging don't allow vertical scroll.\n        e.preventDefault();\n        e.stopPropagation();\n        return false;\n      } else {\n        // Vertical scrolling.\n        this.verticalDragged = true;\n      }\n    }\n    if (this.dragged) {\n      // If dragging don't allow vertical scroll.\n      e.preventDefault();\n      e.stopPropagation();\n      return false;\n    }\n  }\n\n  _handleCarouselRelease = (e: MouseEvent | TouchEvent) => {\n    if (this.pressed) {\n      this.pressed = false;\n    } else {\n      return;\n    }\n    clearInterval(this.ticker);\n    this.target = this.offset;\n    if (this.velocity > 10 || this.velocity < -10) {\n      this.amplitude = 0.9 * this.velocity;\n      this.target = this.offset + this.amplitude;\n    }\n    this.target = Math.round(this.target / this.dim) * this.dim;\n    // No wrap of items.\n    if (this.noWrap) {\n      if (this.target >= this.dim * (this.count - 1)) {\n        this.target = this.dim * (this.count - 1);\n      } else if (this.target < 0) {\n        this.target = 0;\n      }\n    }\n    this.amplitude = this.target - this.offset;\n    this.timestamp = Date.now();\n    requestAnimationFrame(this._autoScroll);\n    if (this.dragged) {\n      e.preventDefault();\n      e.stopPropagation();\n    }\n    return false;\n  }\n\n  _handleCarouselClick = (e: MouseEvent | TouchEvent) => {\n    // Disable clicks if carousel was dragged.\n    if (this.dragged) {\n      e.preventDefault();\n      e.stopPropagation();\n      return false;\n    }\n    else if (!this.options.fullWidth) {\n      const clickedElem = (<HTMLElement>e.target).closest('.carousel-item');\n      if (!clickedElem) return;\n      const clickedIndex = [...clickedElem.parentNode.children].indexOf(clickedElem);\n      const diff = this._wrap(this.center) - clickedIndex;\n      // Disable clicks if carousel was shifted by click\n      if (diff !== 0) {\n        e.preventDefault();\n        e.stopPropagation();\n      }\n      // fixes https://github.com/materializecss/materialize/issues/180\n      if (clickedIndex < 0) {\n        // relative X position > center of carousel = clicked at the right part of the carousel\n        if ((e as MouseEvent).clientX - (e.target as HTMLElement).getBoundingClientRect().left > this.el.clientWidth / 2) {\n          this.next();\n        } else {\n          this.prev();\n        }\n      } else {\n        this._cycleTo(clickedIndex);\n      }\n    }\n  }\n\n  _handleIndicatorClick = (e: Event) => {\n    e.stopPropagation();\n    const indicator = (<HTMLElement>e.target).closest('.indicator-item');\n    if (indicator) {\n      const index = [...indicator.parentNode.children].indexOf(indicator);\n      this._cycleTo(index);\n    }\n  }\n\n  _handleResize = () => {\n    if (this.options.fullWidth) {\n      this.itemWidth = this.el.querySelector('.carousel-item').clientWidth;\n      this.imageHeight = this.el.querySelector('.carousel-item.active').clientHeight;\n      this.dim = this.itemWidth * 2 + this.options.padding;\n      this.offset = this.center * 2 * this.itemWidth;\n      this.target = this.offset;\n      this._setCarouselHeight(true);\n    }\n    else {\n      this._scroll();\n    }\n  }\n\n  _setCarouselHeight(imageOnly: boolean = false) {\n    const firstSlide = this.el.querySelector('.carousel-item.active')\n      ? this.el.querySelector('.carousel-item.active')\n      : this.el.querySelector('.carousel-item');\n\n    const firstImage = firstSlide.querySelector('img');\n    if (firstImage) {\n      if (firstImage.complete) {\n        // If image won't trigger the load event\n        const imageHeight = firstImage.clientHeight;\n        if (imageHeight > 0) {\n          this.el.style.height = imageHeight+'px';\n        }\n        else {\n          // If image still has no height, use the natural dimensions to calculate\n          const naturalWidth = firstImage.naturalWidth;\n          const naturalHeight = firstImage.naturalHeight;\n          const adjustedHeight = (this.el.clientWidth / naturalWidth) * naturalHeight;\n          this.el.style.height = adjustedHeight+'px';\n        }\n      } else {\n        // Get height when image is loaded normally\n        firstImage.addEventListener('load', () => {\n          this.el.style.height = firstImage.offsetHeight+'px';\n        });\n      }\n    }\n    else if (!imageOnly) {\n      const slideHeight = firstSlide.clientHeight;\n      this.el.style.height = slideHeight+'px';\n    }\n  }\n\n  _xpos(e: MouseEvent | TouchEvent) {\n    // touch event\n    if (e.type.startsWith(\"touch\") && (e as TouchEvent).targetTouches.length >= 1) {\n      return (e as TouchEvent).targetTouches[0].clientX;\n    }\n    // mouse event\n    return (e as MouseEvent).clientX;\n  }\n\n  _ypos(e: MouseEvent | TouchEvent) {\n    // touch event\n    if (e.type.startsWith(\"touch\") && (e as TouchEvent).targetTouches.length >= 1) {\n      return (e as TouchEvent).targetTouches[0].clientY;\n    }\n    // mouse event\n    return (e as MouseEvent).clientY;\n  }\n\n  _wrap(x: number) {\n    return x >= this.count\n      ? x % this.count\n      : x < 0\n      ? this._wrap(this.count + (x % this.count))\n      : x;\n  }\n\n  _track = () => {\n    let now: number, elapsed: number, delta: number, v: number;\n    now = Date.now();\n    elapsed = now - this.timestamp;\n    this.timestamp = now;\n    delta = this.offset - this.frame;\n    this.frame = this.offset;\n    v = (1000 * delta) / (1 + elapsed);\n    this.velocity = 0.8 * v + 0.2 * this.velocity;\n  }\n\n  _autoScroll = () => {\n    let elapsed: number, delta: number;\n    if (this.amplitude) {\n      elapsed = Date.now() - this.timestamp;\n      delta = this.amplitude * Math.exp(-elapsed / this.options.duration);\n      if (delta > 2 || delta < -2) {\n        this._scroll(this.target - delta);\n        requestAnimationFrame(this._autoScroll);\n      } else {\n        this._scroll(this.target);\n      }\n    }\n  }\n\n  _scroll(x: number = 0) {\n    // Track scrolling state\n    if (!this.el.classList.contains('scrolling')) {\n      this.el.classList.add('scrolling');\n    }\n    if (this.scrollingTimeout != null) {\n      window.clearTimeout(this.scrollingTimeout);\n    }\n    this.scrollingTimeout = window.setTimeout(() => {\n      this.el.classList.remove('scrolling');\n    }, this.options.duration);\n\n    // Start actual scroll\n    let i: number,\n      half: number,\n      delta: number,\n      dir: number,\n      tween: number,\n      el: HTMLElement,\n      alignment: string,\n      zTranslation: number,\n      tweenedOpacity: number,\n      centerTweenedOpacity: number;\n    let lastCenter = this.center;\n    let numVisibleOffset = 1 / this.options.numVisible;\n\n    this.offset = typeof x === 'number' ? x : this.offset;\n    this.center = Math.floor((this.offset + this.dim / 2) / this.dim);\n\n    delta = this.offset - this.center * this.dim;\n    dir = delta < 0 ? 1 : -1;\n    tween = (-dir * delta * 2) / this.dim;\n    half = this.count >> 1;\n\n    if (this.options.fullWidth) {\n      alignment = 'translateX(0)';\n      centerTweenedOpacity = 1;\n    }\n    else {\n      alignment = 'translateX(' + (this.el.clientWidth - this.itemWidth) / 2 + 'px) ';\n      alignment += 'translateY(' + (this.el.clientHeight - this.itemHeight) / 2 + 'px)';\n      centerTweenedOpacity = 1 - numVisibleOffset * tween;\n    }\n\n    // Set indicator active\n    if (this.showIndicators) {\n      const diff = this.center % this.count;\n      const activeIndicator = this._indicators.querySelector('.indicator-item.active');\n      const activeIndicatorIndex = [...activeIndicator.parentNode.children].indexOf(activeIndicator);\n      if (activeIndicatorIndex !== diff) {\n        activeIndicator.classList.remove('active');\n        const pos = diff < 0 ? this.count + diff : diff;\n        this._indicators.querySelectorAll('.indicator-item')[pos].classList.add('active');\n      }\n    }\n\n    // center\n    // Don't show wrapped items.\n    if (!this.noWrap || (this.center >= 0 && this.center < this.count)) {\n      el = this.images[this._wrap(this.center)];\n\n      // Add active class to center item.\n      if (!el.classList.contains('active')) {\n        this.el.querySelector('.carousel-item').classList.remove('active');\n        el.classList.add('active');\n      }\n\n      let transformString = `${alignment} translateX(${-delta / 2}px) translateX(${dir *\n        this.options.shift *\n        tween *\n        i}px) translateZ(${this.options.dist * tween}px)`;\n      this._updateItemStyle(el, centerTweenedOpacity, 0, transformString);\n    }\n\n    for (i = 1; i <= half; ++i) {\n      // right side\n      if (this.options.fullWidth) {\n        zTranslation = this.options.dist;\n        tweenedOpacity = i === half && delta < 0 ? 1 - tween : 1;\n      } else {\n        zTranslation = this.options.dist * (i * 2 + tween * dir);\n        tweenedOpacity = 1 - numVisibleOffset * (i * 2 + tween * dir);\n      }\n      // Don't show wrapped items.\n      if (!this.noWrap || this.center + i < this.count) {\n        el = this.images[this._wrap(this.center + i)];\n        let transformString = `${alignment} translateX(${this.options.shift +\n          (this.dim * i - delta) / 2}px) translateZ(${zTranslation}px)`;\n        this._updateItemStyle(el, tweenedOpacity, -i, transformString);\n      }\n      // left side\n      if (this.options.fullWidth) {\n        zTranslation = this.options.dist;\n        tweenedOpacity = i === half && delta > 0 ? 1 - tween : 1;\n      } else {\n        zTranslation = this.options.dist * (i * 2 - tween * dir);\n        tweenedOpacity = 1 - numVisibleOffset * (i * 2 - tween * dir);\n      }\n      // Don't show wrapped items.\n      if (!this.noWrap || this.center - i >= 0) {\n        el = this.images[this._wrap(this.center - i)];\n        let transformString = `${alignment} translateX(${-this.options.shift +\n          (-this.dim * i - delta) / 2}px) translateZ(${zTranslation}px)`;\n        this._updateItemStyle(el, tweenedOpacity, -i, transformString);\n      }\n    }\n    // center\n    // Don't show wrapped items.\n    if (!this.noWrap || (this.center >= 0 && this.center < this.count)) {\n      el = this.images[this._wrap(this.center)];\n      let transformString = `${alignment} translateX(${-delta / 2}px) translateX(${dir *\n        this.options.shift *\n        tween}px) translateZ(${this.options.dist * tween}px)`;\n      this._updateItemStyle(el, centerTweenedOpacity, 0, transformString);\n    }\n    // onCycleTo callback\n    const _currItem = this.el.querySelectorAll('.carousel-item')[this._wrap(this.center)];\n\n    if (lastCenter !== this.center && typeof this.options.onCycleTo === 'function') {\n      this.options.onCycleTo.call(this, _currItem, this.dragged);\n    }\n    // One time callback\n    if (typeof this.oneTimeCallback === 'function') {\n      this.oneTimeCallback.call(this, _currItem, this.dragged);\n      this.oneTimeCallback = null;\n    }\n  }\n\n  _updateItemStyle(el: HTMLElement, opacity: number, zIndex: number, transform: string) {\n    el.style[this.xform] = transform;\n    el.style.zIndex = zIndex.toString();\n    el.style.opacity = opacity.toString();\n    el.style.visibility = 'visible';\n  }\n\n  _cycleTo(n: number, callback: CarouselOptions[\"onCycleTo\"] = null) {\n    let diff = (this.center % this.count) - n;\n    // Account for wraparound.\n    if (!this.noWrap) {\n      if (diff < 0) {\n        if (Math.abs(diff + this.count) < Math.abs(diff)) {\n          diff += this.count;\n        }\n      } else if (diff > 0) {\n        if (Math.abs(diff - this.count) < diff) {\n          diff -= this.count;\n        }\n      }\n    }\n    this.target = this.dim * Math.round(this.offset / this.dim);\n    // Next\n    if (diff < 0) {\n      this.target += this.dim * Math.abs(diff);\n    } // Prev\n    else if (diff > 0) {\n      this.target -= this.dim * diff;\n    }\n    // Set one time callback\n    if (typeof callback === 'function') {\n      this.oneTimeCallback = callback;\n    }\n    // Scroll\n    if (this.offset !== this.target) {\n      this.amplitude = this.target - this.offset;\n      this.timestamp = Date.now();\n      requestAnimationFrame(this._autoScroll);\n    }\n  }\n\n  /**\n   * Move carousel to next slide or go forward a given amount of slides.\n   * @param n How many times the carousel slides.\n   */\n  next(n: number = 1) {\n    if (n === undefined || isNaN(n)) {\n      n = 1;\n    }\n    let index = this.center + n;\n    if (index >= this.count || index < 0) {\n      if (this.noWrap) return;\n      index = this._wrap(index);\n    }\n    this._cycleTo(index);\n  }\n\n  /**\n   * Move carousel to previous slide or go back a given amount of slides.\n   * @param n How many times the carousel slides.\n   */\n  prev(n: number = 1) {\n    if (n === undefined || isNaN(n)) {\n      n = 1;\n    }\n    let index = this.center - n;\n    if (index >= this.count || index < 0) {\n      if (this.noWrap) return;\n      index = this._wrap(index);\n    }\n    this._cycleTo(index);\n  }\n\n  /**\n   * Move carousel to nth slide.\n   * @param n Index of slide.\n   * @param callback \"onCycleTo\" optional callback.\n   */\n  set(n: number, callback?: CarouselOptions[\"onCycleTo\"]) {\n    if (n === undefined || isNaN(n)) {\n      n = 0;\n    }\n    if (n > this.count || n < 0) {\n      if (this.noWrap) return;\n      n = this._wrap(n);\n    }\n    this._cycleTo(n, callback);\n  }\n}\n","import { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface CharacterCounterOptions extends BaseOptions {};\n\nconst _defaults = Object.freeze({});\n\ntype InputElement = HTMLInputElement | HTMLTextAreaElement;\n\nexport class CharacterCounter extends Component<{}> {\n  \n  declare el: InputElement;\n  /** Stores the reference to the counter HTML element. */\n  counterEl: HTMLSpanElement;\n  /** Specifies whether the input is valid or not. */\n  isInvalid: boolean;\n  /** Specifies whether the input text has valid length or not. */\n  isValidLength: boolean;\n\n  constructor(el: HTMLInputElement | HTMLTextAreaElement, options: Partial<CharacterCounterOptions>) {\n    super(el, {}, CharacterCounter);\n    (this.el as any).M_CharacterCounter = this;\n\n    this.options = {\n      ...CharacterCounter.defaults,\n      ...options\n    };\n\n    this.isInvalid = false;\n    this.isValidLength = false;\n    \n    this._setupCounter();\n    this._setupEventHandlers();\n  }\n\n  static get defaults(): CharacterCounterOptions {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of CharacterCounter.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: InputElement, options?: Partial<CharacterCounterOptions>): CharacterCounter;\n  /**\n   * Initializes instances of CharacterCounter.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<InputElement | MElement>, options?: Partial<CharacterCounterOptions>): CharacterCounter[];\n  /**\n   * Initializes instances of CharacterCounter.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InputElement | InitElements<InputElement | MElement>, options: Partial<CharacterCounterOptions> = {}): CharacterCounter | CharacterCounter[] {\n    return super.init(els, options, CharacterCounter);\n  }\n\n  static getInstance(el: InputElement): CharacterCounter {\n    return (el as any).M_CharacterCounter;\n  }\n\n  destroy() {\n    this._removeEventHandlers();\n    (this.el as any).CharacterCounter = undefined;\n    this._removeCounter();\n  }\n\n  _setupEventHandlers() {\n    this.el.addEventListener('focus', this.updateCounter, true);\n    this.el.addEventListener('input', this.updateCounter, true);\n  }\n\n  _removeEventHandlers() {\n    this.el.removeEventListener('focus', this.updateCounter, true);\n    this.el.removeEventListener('input', this.updateCounter, true);\n  }\n\n  _setupCounter() {\n    this.counterEl = document.createElement('span');\n    this.counterEl.classList.add('character-counter');\n    this.counterEl.style.float = 'right';\n    this.counterEl.style.fontSize = '12px';\n    this.counterEl.style.height = '1';\n    this.el.parentElement.appendChild(this.counterEl);\n  }\n\n  _removeCounter() {\n    this.counterEl.remove();\n  }\n\n  updateCounter = () => {\n    let maxLength = parseInt(this.el.getAttribute('maxlength')),\n      actualLength = (this.el as HTMLInputElement).value.length;\n\n    this.isValidLength = actualLength <= maxLength;\n    let counterString = actualLength.toString();\n    if (maxLength) {\n      counterString += '/' + maxLength;\n      this._validateInput();\n    }\n    this.counterEl.innerHTML = counterString;\n  }\n\n  _validateInput() {\n    if (this.isValidLength && this.isInvalid) {\n      this.isInvalid = false;\n      this.el.classList.remove('invalid');\n    }\n    else if (!this.isValidLength && !this.isInvalid) {\n      this.isInvalid = true;\n      this.el.classList.remove('valid');\n      this.el.classList.add('invalid');\n    }\n  }\n}\n","import { Utils } from \"./utils\";\nimport { Autocomplete, AutocompleteOptions } from \"./autocomplete\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface ChipData {\n  /**\n   * Unique identifier.\n   */\n  id: number|string;\n  /**\n   * Chip text. If not specified, \"id\" will be used.\n   */\n  text?: string;\n  /**\n   * Chip image (URL).\n   */\n  image?: string;\n}\n\nexport interface ChipsOptions extends BaseOptions{\n  /**\n   * Set the chip data.\n   * @default []\n   */\n  data: ChipData[];\n  /**\n   * Set first placeholder when there are no tags.\n   * @default \"\"\n   */\n  placeholder: string;\n  /**\n   * Set second placeholder when adding additional tags.\n   * @default \"\"\n   */\n  secondaryPlaceholder: string;\n  /**\n   * Set autocomplete options.\n   * @default {}\n   */\n  autocompleteOptions: Partial<AutocompleteOptions>;\n  /**\n   * Toggles abililty to add custom value not in autocomplete list.\n   * @default false\n   */\n  autocompleteOnly: boolean;\n  /**\n   * Set chips limit.\n   * @default Infinity\n   */\n  limit: number;\n  /**\n   * Specifies class to be used in \"close\" button (useful when working with Material Symbols icon set).\n   * @default 'material-icons'\n   */\n  closeIconClass: string;\n  /**\n   * Callback for chip add.\n   * @default null\n   */\n  onChipAdd: (element: HTMLElement, chip: HTMLElement) => void;\n  /**\n   * Callback for chip select.\n   * @default null\n   */\n  onChipSelect: (element: HTMLElement, chip: HTMLElement) => void;\n  /**\n   * Callback for chip delete.\n   * @default null\n   */\n  onChipDelete: (element: HTMLElement, chip: HTMLElement) => void;\n}\n\nlet _defaults: ChipsOptions = {\n  data: [],\n  placeholder: '',\n  secondaryPlaceholder: '',\n  closeIconClass: 'material-icons',\n  autocompleteOptions: {},\n  autocompleteOnly: false,\n  limit: Infinity,\n  onChipAdd: null,\n  onChipSelect: null,\n  onChipDelete: null\n};\n\nfunction gGetIndex(el: HTMLElement): number {\n  return [...el.parentNode.children].indexOf(el);\n}\n\nexport class Chips extends Component<ChipsOptions> {\n  /** Array of the current chips data. */\n  chipsData: ChipData[];\n  /** If the chips has autocomplete enabled. */\n  hasAutocomplete: boolean;\n  /** Autocomplete instance, if any. */\n  autocomplete: Autocomplete;\n  _input: HTMLInputElement;\n  _label: any;\n  _chips: HTMLElement[];\n  static _keydown: boolean;\n  private _selectedChip: any;\n\n  constructor(el: HTMLElement, options: Partial<ChipsOptions>) {\n    super(el, options, Chips);\n    (this.el as any).M_Chips = this;\n\n    this.options = {\n      ...Chips.defaults,\n      ...options\n    };\n\n    this.el.classList.add('chips', 'input-field');\n    this.chipsData = [];\n    this._chips = [];\n    this._setupInput();\n    this.hasAutocomplete = Object.keys(this.options.autocompleteOptions).length > 0;\n\n    // Set input id\n    if (!this._input.getAttribute('id'))\n      this._input.setAttribute('id', Utils.guid());\n\n    // Render initial chips\n    if (this.options.data.length) {\n      this.chipsData = this.options.data;\n      this._renderChips();\n    }\n    // Setup autocomplete if needed\n    if (this.hasAutocomplete) this._setupAutocomplete();\n    this._setPlaceholder();\n    this._setupLabel();\n    this._setupEventHandlers();\n  }\n\n  static get defaults() {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of Chips.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: InitElements<MElement>, options?: Partial<ChipsOptions>): Chips;\n  /**\n   * Initializes instances of Chips.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<MElement>, options?: Partial<ChipsOptions>): Chips[];\n  /**\n   * Initializes instances of Chips.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLElement | InitElements<MElement>, options: Partial<ChipsOptions> = {}): Chips | Chips[] {\n    return super.init(els, options, Chips);\n  }\n\n  static getInstance(el: HTMLElement): Chips {\n    return (el as any).M_Chips;\n  }\n\n  getData() {\n    return this.chipsData;\n  }\n\n  destroy() {\n    this._removeEventHandlers();\n    this._chips.forEach(c => c.remove());\n    this._chips = [];\n    (this.el as any).M_Chips = undefined;\n  }\n\n  _setupEventHandlers() {\n    this.el.addEventListener('click', this._handleChipClick);\n    document.addEventListener('keydown', Chips._handleChipsKeydown);\n    document.addEventListener('keyup', Chips._handleChipsKeyup);\n    this.el.addEventListener('blur', Chips._handleChipsBlur, true);\n    this._input.addEventListener('focus', this._handleInputFocus);\n    this._input.addEventListener('blur', this._handleInputBlur);\n    this._input.addEventListener('keydown', this._handleInputKeydown);\n  }\n\n  _removeEventHandlers() {\n    this.el.removeEventListener('click', this._handleChipClick);\n    document.removeEventListener('keydown', Chips._handleChipsKeydown);\n    document.removeEventListener('keyup', Chips._handleChipsKeyup);\n    this.el.removeEventListener('blur', Chips._handleChipsBlur, true);\n    this._input.removeEventListener('focus', this._handleInputFocus);\n    this._input.removeEventListener('blur', this._handleInputBlur);\n    this._input.removeEventListener('keydown', this._handleInputKeydown);\n  }\n\n  _handleChipClick = (e: MouseEvent) => {\n    const _chip = (<HTMLElement>e.target).closest('.chip');\n    const clickedClose = (<HTMLElement>e.target).classList.contains('close');\n    if (_chip) {\n      const index = [..._chip.parentNode.children].indexOf(_chip);\n      if (clickedClose) {\n        this.deleteChip(index);\n        this._input.focus();\n      }\n      else {\n        this.selectChip(index);\n      }\n      // Default handle click to focus on input\n    }\n    else {\n      this._input.focus();\n    }\n  }\n\n  static _handleChipsKeydown(e: KeyboardEvent) {\n    Chips._keydown = true;\n    const chips = (<HTMLElement>e.target).closest('.chips');\n    const chipsKeydown = e.target && chips;\n\n    // Don't handle keydown inputs on input and textarea\n    const tag = (<HTMLElement>e.target).tagName;\n    if (tag === 'INPUT' || tag === 'TEXTAREA' || !chipsKeydown) return;\n\n    const currChips: Chips = (chips as any).M_Chips;\n\n    if (Utils.keys.BACKSPACE.includes(e.key) || Utils.keys.DELETE.includes(e.key)) {\n      e.preventDefault();\n      let selectIndex = currChips.chipsData.length;\n      if (currChips._selectedChip) {\n        const index = gGetIndex(currChips._selectedChip);\n        currChips.deleteChip(index);\n        currChips._selectedChip = null;\n        // Make sure selectIndex doesn't go negative\n        selectIndex = Math.max(index - 1, 0);\n      }\n      if (currChips.chipsData.length)\n        currChips.selectChip(selectIndex);\n      else\n        currChips._input.focus();\n    }\n    else if (Utils.keys.ARROW_LEFT.includes(e.key)) {\n      if (currChips._selectedChip) {\n        const selectIndex = gGetIndex(currChips._selectedChip) - 1;\n        if (selectIndex < 0) return;\n        currChips.selectChip(selectIndex);\n      }\n    }\n    else if (Utils.keys.ARROW_RIGHT.includes(e.key)) {\n      if (currChips._selectedChip) {\n        const selectIndex = gGetIndex(currChips._selectedChip) + 1;\n        if (selectIndex >= currChips.chipsData.length)\n          currChips._input.focus();\n        else\n          currChips.selectChip(selectIndex);\n      }\n    }\n  }\n\n  static _handleChipsKeyup(e: Event) {\n    Chips._keydown = false;\n  }\n\n  static _handleChipsBlur(e: Event) {\n    if (!Chips._keydown && document.hidden) {\n      const chips = (<HTMLElement>e.target).closest('.chips');\n      const currChips: Chips = (chips as any).M_Chips;\n      currChips._selectedChip = null;\n    }\n  }\n\n  _handleInputFocus = () => {\n    this.el.classList.add('focus');\n  }\n\n  _handleInputBlur = () => {\n    this.el.classList.remove('focus');\n  }\n\n  _handleInputKeydown = (e: KeyboardEvent) => {\n    Chips._keydown = true;\n    if (Utils.keys.ENTER.includes(e.key)) {\n      // Override enter if autocompleting.\n      if (this.hasAutocomplete && this.autocomplete && this.autocomplete.isOpen) {\n        return;\n      }\n      e.preventDefault();\n      if (!this.hasAutocomplete || (this.hasAutocomplete && !this.options.autocompleteOnly)) {\n        this.addChip({id: this._input.value});\n      }\n      this._input.value = '';\n    }\n    else if (      \n      (Utils.keys.BACKSPACE.includes(e.key) || Utils.keys.ARROW_LEFT.includes(e.key)) &&\n      this._input.value === '' &&\n      this.chipsData.length\n    ) {\n      e.preventDefault();\n      this.selectChip(this.chipsData.length - 1);\n    }\n  }\n\n  _renderChip(chip: ChipData): HTMLDivElement {\n    if (!chip.id) return;\n    const renderedChip = document.createElement('div');\n    renderedChip.classList.add('chip');\n    renderedChip.innerText = chip.text || <string>chip.id;\n    renderedChip.setAttribute('tabindex', \"0\");\n    const closeIcon = document.createElement('i');\n    closeIcon.classList.add(this.options.closeIconClass, 'close');\n    closeIcon.innerText = 'close';\n    // attach image if needed\n    if (chip.image) {\n      const img = document.createElement('img');\n      img.setAttribute('src', chip.image);\n      renderedChip.insertBefore(img, renderedChip.firstChild);\n    }\n    renderedChip.appendChild(closeIcon);\n    return renderedChip;\n  }\n\n  _renderChips() {\n    this._chips = []; //.remove();\n    for (let i = 0; i < this.chipsData.length; i++) {\n      const chipElem = this._renderChip(this.chipsData[i]);\n      this.el.appendChild(chipElem);\n      this._chips.push(chipElem);\n    }\n    // move input to end\n    this.el.append(this._input);\n  }\n\n  _setupAutocomplete() {\n    this.options.autocompleteOptions.onAutocomplete = (items) => {\n      if (items.length > 0) this.addChip({\n        id: items[0].id,\n        text: items[0].text,\n        image: items[0].image\n      });\n      this._input.value = '';\n      this._input.focus();\n    };\n    this.autocomplete = Autocomplete.init(this._input, this.options.autocompleteOptions);\n  }\n\n  _setupInput() {\n    this._input = this.el.querySelector('input');\n    if (!this._input) {\n      this._input = document.createElement('input');\n      this.el.append(this._input);\n    }\n    this._input.classList.add('input');\n  }\n\n  _setupLabel() {\n    this._label = this.el.querySelector('label');\n    if (this._label) this._label.setAttribute('for', this._input.getAttribute('id'));\n  }\n\n  _setPlaceholder() {\n    if (this.chipsData !== undefined && !this.chipsData.length && this.options.placeholder) {\n      this._input.placeholder = this.options.placeholder;\n    }\n    else if (\n      (this.chipsData === undefined || !!this.chipsData.length) &&\n      this.options.secondaryPlaceholder\n    ) {\n      this._input.placeholder = this.options.secondaryPlaceholder;\n    }\n  }\n\n  _isValidAndNotExist(chip: ChipData) {\n    const isValid = !!chip.id;\n    const doesNotExist = !this.chipsData.some(item => item.id == chip.id);\n    return isValid && doesNotExist;\n  }\n\n  /**\n   * Add chip to input.\n   * @param chip Chip data object\n   */\n  addChip(chip: ChipData) {\n    if (!this._isValidAndNotExist(chip) || this.chipsData.length >= this.options.limit) return;\n    const renderedChip = this._renderChip(chip);\n    this._chips.push(renderedChip);\n    this.chipsData.push(chip);\n    //$(this._input).before(renderedChip);\n    this._input.before(renderedChip);\n    this._setPlaceholder();\n    // fire chipAdd callback\n    if (typeof this.options.onChipAdd === 'function') {\n      this.options.onChipAdd(this.el, renderedChip);\n    }\n  }\n\n  /**\n   * Delete nth chip.\n   * @param chipIndex  Index of chip\n   */\n  deleteChip(chipIndex: number) {\n    const chip = this._chips[chipIndex];\n    this._chips[chipIndex].remove();\n    this._chips.splice(chipIndex, 1);\n    this.chipsData.splice(chipIndex, 1);\n    this._setPlaceholder();\n    // fire chipDelete callback\n    if (typeof this.options.onChipDelete === 'function') {\n      this.options.onChipDelete(this.el, chip);\n    }\n  }\n\n  /**\n   * Select nth chip.\n   * @param chipIndex Index of chip\n   */\n  selectChip(chipIndex: number) {\n    const chip = this._chips[chipIndex];\n    this._selectedChip = chip;\n    chip.focus();\n    // fire chipSelect callback\n    if (typeof this.options.onChipSelect === 'function') {\n      this.options.onChipSelect(this.el, chip);\n    }\n  }\n\n  static Init(){\n    document.addEventListener(\"DOMContentLoaded\", () => {\n      // Handle removal of static chips.\n      document.body.addEventListener('click', e => {\n        if ((<HTMLElement>e.target).closest('.chip .close')) {\n          const chips = (<HTMLElement>e.target).closest('.chips');\n          if (chips && (chips as any).M_Chips == undefined) return;\n          (<HTMLElement>e.target).closest('.chip').remove();\n        }\n      });\n    });\n  }\n\n  static {\n    Chips._keydown = false;\n  }\n}\n","import { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface CollapsibleOptions extends BaseOptions {\n  /**\n   * If accordion versus collapsible.\n   * @default true\n   */\n  accordion: boolean;\n  /**\n   * Transition in duration in milliseconds.\n   * @default 300\n   */\n  inDuration: number;\n  /**\n   * Transition out duration in milliseconds.\n   * @default 300\n   */\n  outDuration: number;\n  /**\n   * Callback function called before collapsible is opened.\n   * @default null\n   */\n  onOpenStart: (el: Element) => void;\n  /**\n   * Callback function called after collapsible is opened.\n   * @default null\n   */\n  onOpenEnd: (el: Element) => void;\n  /**\n   * Callback function called before collapsible is closed.\n   * @default null\n   */\n  onCloseStart: (el: Element) => void;\n  /**\n   * Callback function called after collapsible is closed.\n   * @default null\n   */\n  onCloseEnd: (el: Element) => void;\n}\n\nconst _defaults: CollapsibleOptions = {\n  accordion: true,\n  onOpenStart: null,\n  onOpenEnd: null,\n  onCloseStart: null,  \n  onCloseEnd: null,\n  inDuration: 300,\n  outDuration: 300\n};\n\nexport class Collapsible extends Component<CollapsibleOptions> {\n  private _headers: HTMLElement[];\n\n  constructor(el: HTMLElement, options: Partial<CollapsibleOptions>) {\n    super(el, options, Collapsible);\n    (this.el as any).M_Collapsible = this;\n\n    this.options = {\n      ...Collapsible.defaults,\n      ...options\n    };\n\n    // Setup tab indices\n    this._headers = Array.from(this.el.querySelectorAll('li > .collapsible-header'));\n    this._headers.forEach(el => el.tabIndex = 0);\n    this._setupEventHandlers();\n\n    // Open active\n    const activeBodies: HTMLElement[] = Array.from(this.el.querySelectorAll('li.active > .collapsible-body'));\n    if (this.options.accordion) {\n      if (activeBodies.length > 0) {\n        // Accordion => open first active only\n        this._setExpanded(activeBodies[0]);\n      }\n    } else {\n      // Expandables => all active\n      activeBodies.forEach(el => this._setExpanded(el));\n    }\n  }\n\n  static get defaults(): CollapsibleOptions {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of Collapsible.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLElement, options?: Partial<CollapsibleOptions>): Collapsible;\n  /**\n   * Initializes instances of Collapsible.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<MElement>, options?: Partial<CollapsibleOptions>): Collapsible[];\n  /**\n   * Initializes instances of Collapsible.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLElement | InitElements<MElement>, options: Partial<CollapsibleOptions> = {}): Collapsible | Collapsible[] {\n    return super.init(els, options, Collapsible);\n  }\n\n  static getInstance(el: HTMLElement): Collapsible {\n    return (el as any).M_Collapsible;\n  }\n\n  destroy() {\n    this._removeEventHandlers();\n    (this.el as any).M_Collapsible = undefined;\n  }\n\n  _setupEventHandlers() {\n    this.el.addEventListener('click', this._handleCollapsibleClick);\n    this._headers.forEach(header => header.addEventListener('keydown', this._handleCollapsibleKeydown));\n  }\n\n  _removeEventHandlers() {\n    this.el.removeEventListener('click', this._handleCollapsibleClick);\n    this._headers.forEach(header => header.removeEventListener('keydown', this._handleCollapsibleKeydown));\n  }\n\n  _handleCollapsibleClick = (e: MouseEvent | KeyboardEvent) => {\n    const header = (e.target as HTMLElement).closest('.collapsible-header');\n    if (e.target && header) {\n      const collapsible = header.closest('.collapsible');\n      if (collapsible !== this.el) return;\n\n      const li = header.closest('li');\n      const isActive = li.classList.contains('active');\n      const index = [...li.parentNode.children].indexOf(li);\n\n      if (isActive)\n        this.close(index);\n      else\n        this.open(index);\n    }\n  }\n\n  _handleCollapsibleKeydown = (e: KeyboardEvent) => {\n    if (Utils.keys.ENTER.includes(e.key)) {\n      this._handleCollapsibleClick(e);\n    }\n  }\n\n  private _setExpanded(li: HTMLElement): void {\n    li.style.maxHeight = li.scrollHeight + \"px\";\n  }\n\n  _animateIn(index: number) {\n    const li = <HTMLLIElement>this.el.children[index];\n    if (!li) return;\n    const body: HTMLElement = li.querySelector('.collapsible-body');\n    const duration = this.options.inDuration; // easeInOutCubic\n    body.style.transition = `max-height ${duration}ms ease-out`;\n    this._setExpanded(body);\n    setTimeout(() => {\n      if (typeof this.options.onOpenEnd === 'function') {\n        this.options.onOpenEnd.call(this, li);\n      }\n    }, duration);\n  }\n\n  _animateOut(index: number) {\n    const li = this.el.children[index];\n    if (!li) return;\n    const body: HTMLElement = li.querySelector('.collapsible-body');\n    const duration = this.options.outDuration; // easeInOutCubic\n    body.style.transition = `max-height ${duration}ms ease-out`;\n    body.style.maxHeight = \"0\";\n    setTimeout(() => {\n      if (typeof this.options.onCloseEnd === 'function') {\n        this.options.onCloseEnd.call(this, li);\n      }\n    }, duration);\n  }\n\n  /**\n   * Open collapsible section.\n   * @param n Nth section to open.\n   */\n  open = (index: number) => {\n    const listItems = Array.from(this.el.children).filter(c => c.tagName === 'LI');\n    const li = listItems[index];\n    if (li && !li.classList.contains('active')) {\n      // onOpenStart callback\n      if (typeof this.options.onOpenStart === 'function') {\n        this.options.onOpenStart.call(this, li);\n      }\n      // Handle accordion behavior\n      if (this.options.accordion) {\n        const activeLis = listItems.filter(li => li.classList.contains('active'));\n        activeLis.forEach(activeLi => {\n          const index = listItems.indexOf(activeLi);\n          this.close(index);\n        });\n      }\n      // Animate in\n      li.classList.add('active');\n      this._animateIn(index);\n    }\n  }\n\n  /**\n   * Close collapsible section.\n   * @param n Nth section to close.\n   */\n  close = (index: number) => {\n    const li = Array.from(this.el.children).filter(c => c.tagName === 'LI')[index];\n    if (li && li.classList.contains('active')) {\n      // onCloseStart callback\n      if (typeof this.options.onCloseStart === 'function') {\n        this.options.onCloseStart.call(this, li);\n      }\n      // Animate out\n      li.classList.remove('active');\n      this._animateOut(index);\n    }\n  }\n}\n","/**\n * Base options for component initialization.\n */\nexport interface BaseOptions {};\n\nexport type MElement = HTMLElement | Element;\nexport type InitElements<T extends MElement> = NodeListOf<T> | HTMLCollectionOf<T>;\ntype ComponentConstructor<T extends Component<O>, O extends BaseOptions> = {\n  new (el: HTMLElement, options: Partial<O>): T\n};\ntype ComponentType<C extends Component<O>, O extends BaseOptions> = ComponentConstructor<C, O> & typeof Component<O>;\n\nexport interface I18nOptions {\n  cancel: string;\n  clear: string;\n  done: string;\n}\n\nexport interface Openable {\n  isOpen: boolean;\n  open(): void;\n  close(): void;\n};\n\n/**\n * Base class implementation for Materialize components.\n */\nexport class Component<O extends BaseOptions>{\n  /**\n   * The DOM element the plugin was initialized with.\n   */\n  el: HTMLElement;\n  /**\n   * The options the instance was initialized with.\n   */\n  options: O;\n\n  /**\n   * Constructs component instance and set everything up.\n   */\n  constructor(el: HTMLElement, options: Partial<O>, classDef: ComponentType<Component<O>, O>){\n    // Display error if el is not a valid HTML Element\n    if (!(el instanceof HTMLElement)) {\n      console.error(Error(el + ' is not an HTML Element'));\n    }\n    // If exists, destroy and reinitialize in child\n    let ins = classDef.getInstance(el);\n    if (!!ins) {\n      ins.destroy();\n    }\n    this.el = el;\n  }\n\n  /**\n   * Initializes component instance.\n   * @param el HTML element.\n   * @param options Component options.\n   * @param classDef Class definition.\n   */\n  protected static init<\n    I extends HTMLElement, O extends BaseOptions, C extends Component<O>\n  >(el: I, options: O, classDef: ComponentType<C, O>): C;\n  /**\n   * Initializes component instances.\n   * @param els HTML elements.\n   * @param options Component options.\n   * @param classDef Class definition.\n   */\n  protected static init<\n    I extends MElement, O extends BaseOptions, C extends Component<O>\n  >(els: InitElements<I>, options: Partial<O>, classDef: ComponentType<C, O>): C[];\n  /**\n   * Initializes component instances.\n   * @param els HTML elements.\n   * @param options Component options.\n   * @param classDef Class definition.\n   */\n  protected static init<\n    I extends MElement, O extends BaseOptions, C extends Component<O>\n  >(els: I | InitElements<I>, options: Partial<O>, classDef: ComponentType<C, O>): C | C[];\n  /**\n   * Initializes component instances.\n   * @param els HTML elements.\n   * @param options Component options.\n   * @param classDef Class definition.\n   */\n  protected static init<\n    I extends MElement, O extends BaseOptions, C extends Component<O>\n  >(els: I | InitElements<I>, options: Partial<O>, classDef: ComponentType<C, O>): C | C[] {\n    let instances = null;\n    if (els instanceof Element) {\n      instances = new classDef(<HTMLElement>els, options);\n    }\n    else if (!!els && els.length) {\n      instances = [];\n      for (let i = 0; i < els.length; i++) {\n        instances.push(new classDef(<HTMLElement>els[i], options));\n      }\n    }\n    return instances;\n  }\n\n  /**\n   * @returns default options for component instance.\n   */\n  static get defaults(): BaseOptions{ return {}; }\n\n  /**\n   * Retrieves component instance for the given element.\n   * @param el Associated HTML Element.\n   */\n  static getInstance(el: HTMLElement): Component<BaseOptions> {\n    throw new Error(\"This method must be implemented.\");\n  }\n\n  /**\n   * Destroy plugin instance and teardown.\n   */\n  destroy(): void { throw new Error(\"This method must be implemented.\"); }\n}\n","import { Modal } from \"./modal\";\nimport { Utils } from \"./utils\";\nimport { FormSelect } from \"./select\";\nimport { BaseOptions, Component, InitElements, MElement, I18nOptions } from \"./component\";\n\nexport interface DateI18nOptions extends I18nOptions {\n  previousMonth: string;\n  nextMonth: string;\n  months: string[];\n  monthsShort: string[];\n  weekdays: string[];\n  weekdaysShort: string[];\n  weekdaysAbbrev: string[];\n};\n\nexport interface DatepickerOptions extends BaseOptions {\n  /**\n   * Automatically close picker when date is selected.\n   * @default false\n   */\n  autoClose: boolean;\n  /**\n   * The date output format for the input field value\n   * or a function taking the date and outputting the\n   * formatted date string.\n   * @default 'mmm dd, yyyy'\n   */\n  format: string | ((d: Date) => string);\n  /**\n   * Used to create date object from current input string.\n   * @default null\n   */\n  parse: ((value: string, format: string) => Date) | null;\n  /**\n   * The initial date to view when first opened.\n   * @default null\n   */\n  defaultDate: Date | null;\n  /**\n   * Make the `defaultDate` the initial selected value.\n   * @default false\n   */\n  setDefaultDate: boolean;\n  /**\n   * Prevent selection of any date on the weekend.\n   * @default false\n   */\n  disableWeekends: boolean;\n  /**\n   * Custom function to disable certain days.\n   * @default null\n   */\n  disableDayFn: ((day: Date) => boolean) | null;\n  /**\n   * First day of week (0: Sunday, 1: Monday etc).\n   * @default 0\n   */\n  firstDay: number;\n  /**\n   * The earliest date that can be selected.\n   * @default null\n   */\n  minDate: Date | null;\n  /**\n   * The latest date that can be selected.\n   * @default null\n   */\n  maxDate: Date | null;\n  /**\n   * Number of years either side, or array of upper/lower range.\n   * @default 10\n   */\n  yearRange: number | number[];\n  /**\n   * Sort year range in reverse order.\n   * @default false\n   */\n  yearRangeReverse: boolean;\n  /**\n   * Changes Datepicker to RTL.\n   * @default false\n   */\n  isRTL: boolean;\n  /**\n   * Show month after year in Datepicker title.\n   * @default false\n   */\n  showMonthAfterYear: boolean;\n  /**\n   * Render days of the calendar grid that fall in the next\n   * or previous month.\n   * @default false\n   */\n  showDaysInNextAndPreviousMonths: boolean;\n  /**\n   * Specify a DOM element OR selector for a DOM element to render\n   * the calendar in, by default it will be placed before the input.\n   * @default null\n   */\n  container: HTMLElement | string | null;\n  /**\n   * Show the clear button in the datepicker.\n   * @default false\n   */\n  showClearBtn: boolean;\n  /**\n   * Internationalization options.\n   */\n  i18n: Partial<DateI18nOptions>;\n  /**\n   * An array of string returned by `Date.toDateString()`,\n   * indicating there are events in the specified days.\n   * @default []\n   */\n  events: string[];\n  /**\n   * Callback function when date is selected,\n   * first parameter is the newly selected date.\n   * @default null\n   */\n  onSelect: ((selectedDate: Date) => void) | null;\n  /**\n   * Callback function when Datepicker is opened.\n   * @default null\n   */\n  onOpen: (() => void) | null;\n  /**\n   * Callback function when Datepicker is closed.\n   * @default null\n   */\n  onClose: (() => void) | null;\n  /**\n   * Callback function when Datepicker HTML is refreshed.\n   * @default null\n   */\n  onDraw: (() => void) | null;\n\n  /** Field used for internal calculations DO NOT CHANGE IT */\n  minYear?: any;\n  /** Field used for internal calculations DO NOT CHANGE IT */\n  maxYear?: any;\n  /** Field used for internal calculations DO NOT CHANGE IT */\n  minMonth?: any;\n  /** Field used for internal calculations DO NOT CHANGE IT */\n  maxMonth?: any;\n  /** Field used for internal calculations DO NOT CHANGE IT */\n  startRange?: any;\n  /** Field used for internal calculations DO NOT CHANGE IT */\n  endRange?: any;\n}\n\nlet _defaults: DatepickerOptions = {\n  // Close when date is selected\n  autoClose: false,\n  // the default output format for the input field value\n  format: 'mmm dd, yyyy',\n  // Used to create date object from current input string\n  parse: null,\n  // The initial date to view when first opened\n  defaultDate: null,\n  // Make the `defaultDate` the initial selected value\n  setDefaultDate: false,\n  disableWeekends: false,\n  disableDayFn: null,\n  // First day of week (0: Sunday, 1: Monday etc)\n  firstDay: 0,\n  // The earliest date that can be selected\n  minDate: null,\n  // Thelatest date that can be selected\n  maxDate: null,\n  // Number of years either side, or array of upper/lower range\n  yearRange: 10,\n  // used internally (don't config outside)\n  minYear: 0,\n  maxYear: 9999,\n  minMonth: undefined,\n  maxMonth: undefined,\n  startRange: null,\n  endRange: null,\n  isRTL: false,\n  yearRangeReverse: false,\n  // Render the month after year in the calendar title\n  showMonthAfterYear: false,\n  // Render days of the calendar grid that fall in the next or previous month\n  showDaysInNextAndPreviousMonths: false,\n  // Specify a DOM element to render the calendar in\n  container: null,\n  // Show clear button\n  showClearBtn: false,\n  // internationalization\n  i18n: {\n    cancel: 'Cancel',\n    clear: 'Clear',\n    done: 'Ok',\n    previousMonth: '‹',\n    nextMonth: '›',\n    months: [\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: [\n      'Jan',\n      'Feb',\n      'Mar',\n      'Apr',\n      'May',\n      'Jun',\n      'Jul',\n      'Aug',\n      'Sep',\n      'Oct',\n      'Nov',\n      'Dec'\n    ],\n    weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n    weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n    weekdaysAbbrev: ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n  },\n  // events array\n  events: [],\n  // callback function\n  onSelect: null,\n  onOpen: null,\n  onClose: null,\n  onDraw: null\n};\n\nexport class Datepicker extends Component<DatepickerOptions> {\n  declare el: HTMLInputElement\n  id: string;\n  /** If the picker is open. */\n  isOpen: boolean;\n  modal: Modal;\n  calendarEl: HTMLElement;\n  /** CLEAR button instance. */\n  clearBtn: HTMLElement;\n  /** DONE button instance */\n  doneBtn: HTMLElement;\n  cancelBtn: HTMLElement;\n  modalEl: HTMLElement;\n  yearTextEl: HTMLElement;\n  dateTextEl: HTMLElement;\n  /** The selected Date. */\n  date: Date;\n  formats: any;\n  calendars: any;\n  private _y: any;\n  private _m: any;\n  static _template: string;\n\n  constructor(el: HTMLInputElement, options: Partial<DatepickerOptions>) {\n    super(el, options, Datepicker);\n    (this.el as any).M_Datepicker = this;\n\n    this.options = {\n      ...Datepicker.defaults,\n      ...options\n    };\n\n    // make sure i18n defaults are not lost when only few i18n option properties are passed\n    if (!!options && options.hasOwnProperty('i18n') && typeof options.i18n === 'object') {\n      this.options.i18n = {...Datepicker.defaults.i18n, ...options.i18n};\n    }\n\n    // Remove time component from minDate and maxDate options\n    if (this.options.minDate) this.options.minDate.setHours(0, 0, 0, 0);\n    if (this.options.maxDate) this.options.maxDate.setHours(0, 0, 0, 0);\n\n    this.id = Utils.guid();\n\n    this._setupVariables();\n    this._insertHTMLIntoDOM();\n    this._setupModal();\n    this._setupEventHandlers();\n\n    if (!this.options.defaultDate) {\n      this.options.defaultDate = new Date(Date.parse(this.el.value));\n    }\n\n    let defDate = this.options.defaultDate;\n    if (Datepicker._isDate(defDate)) {\n      if (this.options.setDefaultDate) {\n        this.setDate(defDate, true);\n        this.setInputValue();\n      }\n      else {\n        this.gotoDate(defDate);\n      }\n    }\n    else {\n      this.gotoDate(new Date());\n    }\n    this.isOpen = false;\n  }\n\n  static get defaults() {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of Datepicker.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLInputElement, options?: Partial<DatepickerOptions>): Datepicker;\n  /**\n   * Initializes instances of Datepicker.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<HTMLInputElement | MElement>, options?: Partial<DatepickerOptions>): Datepicker[];\n  /**\n   * Initializes instances of Datepicker.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLInputElement | InitElements<HTMLInputElement | MElement>, options: Partial<DatepickerOptions> = {}): Datepicker | Datepicker[] {\n    return super.init(els, options, Datepicker);\n  }\n\n  static _isDate(obj) {\n    return /Date/.test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n  }\n\n  static _isWeekend(date) {\n    let day = date.getDay();\n    return day === 0 || day === 6;\n  }\n\n  static _setToStartOfDay(date) {\n    if (Datepicker._isDate(date)) date.setHours(0, 0, 0, 0);\n  }\n\n  static _getDaysInMonth(year, month) {\n    return [31, Datepicker._isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][\n      month\n    ];\n  }\n\n  static _isLeapYear(year) {\n    // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951\n    return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n  }\n\n  static _compareDates(a, b) {\n    // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n    return a.getTime() === b.getTime();\n  }\n\n  static getInstance(el: HTMLElement): Datepicker {\n    return (el as any).M_Datepicker;\n  }\n\n  destroy() {\n    this._removeEventHandlers();\n    this.modal.destroy();\n    this.modalEl.remove();\n    this.destroySelects();\n    (this.el as any).M_Datepicker = undefined;\n  }\n\n  destroySelects() {\n    let oldYearSelect = this.calendarEl.querySelector('.orig-select-year');\n    if (oldYearSelect) {\n      FormSelect.getInstance(oldYearSelect as HTMLElement).destroy();\n    }\n    let oldMonthSelect = this.calendarEl.querySelector('.orig-select-month');\n    if (oldMonthSelect) {\n      FormSelect.getInstance(oldMonthSelect as HTMLElement).destroy();\n    }\n  }\n\n  _insertHTMLIntoDOM() {\n    if (this.options.showClearBtn) {\n      this.clearBtn.style.visibility = '';\n      this.clearBtn.innerText = this.options.i18n.clear;\n    }\n    this.doneBtn.innerText = this.options.i18n.done;\n    this.cancelBtn.innerText = this.options.i18n.cancel;\n\n    if (this.options.container) {\n      const optEl = this.options.container;\n      this.options.container =\n        optEl instanceof HTMLElement ? optEl : document.querySelector(optEl) as HTMLElement;\n      this.options.container.append(this.modalEl);\n    }\n    else {\n      //this.modalEl.before(this.el);\n      this.el.parentElement.appendChild(this.modalEl);\n    }\n  }\n\n  _setupModal() {\n    this.modalEl.id = 'modal-' + this.id;\n    this.modal = Modal.init(this.modalEl, {\n      onCloseEnd: () => {\n        this.isOpen = false;\n      }\n    });\n  }\n\n  /**\n   * Gets a string representation of the selected date.\n   */\n  toString(format: string | ((d: Date) => string) = null): string {\n    format = format || this.options.format;\n    if (typeof format === 'function') return format(this.date);\n    if (!Datepicker._isDate(this.date)) return '';\n    // String Format\n    const formatArray = format.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g);\n    const formattedDate = formatArray\n      .map(label => this.formats[label] ? this.formats[label]() : label)\n      .join('');\n    return formattedDate;\n  }\n\n  /**\n   * Set a date on the datepicker.\n   * @param date Date to set on the datepicker.\n   * @param preventOnSelect Undocumented as of 5 March 2018.\n   */\n  setDate(date: Date | string = null, preventOnSelect: boolean = false) {\n    if (!date) {\n      this.date = null;\n      this._renderDateDisplay();\n      return this.draw();\n    }\n    if (typeof date === 'string') {\n      date = new Date(Date.parse(date));\n    }\n    if (!Datepicker._isDate(date)) {\n      return;\n    }\n    let min = this.options.minDate,\n      max = this.options.maxDate;\n    if (Datepicker._isDate(min) && date < min) {\n      date = min;\n    }\n    else if (Datepicker._isDate(max) && date > max) {\n      date = max;\n    }\n    this.date = new Date(date.getTime());\n    this._renderDateDisplay();\n    Datepicker._setToStartOfDay(this.date);\n    this.gotoDate(this.date);\n    if (!preventOnSelect && typeof this.options.onSelect === 'function') {\n      this.options.onSelect.call(this, this.date);\n    }\n  }\n\n  /**\n   * Sets current date as the input value.\n   */\n  setInputValue() {\n    this.el.value = this.toString();\n    this.el.dispatchEvent(new CustomEvent('change', {bubbles:true, cancelable:true, composed:true, detail: {firedBy: this}}));\n  }\n\n  _renderDateDisplay() {\n    let displayDate = Datepicker._isDate(this.date) ? this.date : new Date();\n    let i18n = this.options.i18n;\n    let day = i18n.weekdaysShort[displayDate.getDay()];\n    let month = i18n.monthsShort[displayDate.getMonth()];\n    let date = displayDate.getDate();\n    this.yearTextEl.innerHTML = displayDate.getFullYear().toString();\n    this.dateTextEl.innerHTML = `${day}, ${month} ${date}`;\n  }\n\n  /**\n   * Change date view to a specific date on the datepicker.\n   * @param date Date to show on the datepicker.\n   */\n  gotoDate(date: Date) {\n    let newCalendar = true;\n    if (!Datepicker._isDate(date)) {\n      return;\n    }\n    if (this.calendars) {\n      let firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n        lastVisibleDate = new Date(\n          this.calendars[this.calendars.length - 1].year,\n          this.calendars[this.calendars.length - 1].month,\n          1\n        ),\n        visibleDate = date.getTime();\n      // get the end of the month\n      lastVisibleDate.setMonth(lastVisibleDate.getMonth() + 1);\n      lastVisibleDate.setDate(lastVisibleDate.getDate() - 1);\n      newCalendar =\n        visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate;\n    }\n    if (newCalendar) {\n      this.calendars = [\n        {\n          month: date.getMonth(),\n          year: date.getFullYear()\n        }\n      ];\n    }\n    this.adjustCalendars();\n  }\n\n  adjustCalendars() {\n    this.calendars[0] = this.adjustCalendar(this.calendars[0]);\n    this.draw();\n  }\n\n  adjustCalendar(calendar) {\n    if (calendar.month < 0) {\n      calendar.year -= Math.ceil(Math.abs(calendar.month) / 12);\n      calendar.month += 12;\n    }\n    if (calendar.month > 11) {\n      calendar.year += Math.floor(Math.abs(calendar.month) / 12);\n      calendar.month -= 12;\n    }\n    return calendar;\n  }\n\n  nextMonth() {\n    this.calendars[0].month++;\n    this.adjustCalendars();\n  }\n\n  prevMonth() {\n    this.calendars[0].month--;\n    this.adjustCalendars();\n  }\n\n  render(year, month, randId) {\n    let opts = this.options,\n      now = new Date(),\n      days = Datepicker._getDaysInMonth(year, month),\n      before = new Date(year, month, 1).getDay(),\n      data = [],\n      row = [];\n    Datepicker._setToStartOfDay(now);\n    if (opts.firstDay > 0) {\n      before -= opts.firstDay;\n      if (before < 0) {\n        before += 7;\n      }\n    }\n    let previousMonth = month === 0 ? 11 : month - 1,\n      nextMonth = month === 11 ? 0 : month + 1,\n      yearOfPreviousMonth = month === 0 ? year - 1 : year,\n      yearOfNextMonth = month === 11 ? year + 1 : year,\n      daysInPreviousMonth = Datepicker._getDaysInMonth(yearOfPreviousMonth, previousMonth);\n    let cells = days + before,\n      after = cells;\n    while (after > 7) {\n      after -= 7;\n    }\n    cells += 7 - after;\n    let isWeekSelected = false;\n    for (let i = 0, r = 0; i < cells; i++) {\n      let day = new Date(year, month, 1 + (i - before)),\n        isSelected = Datepicker._isDate(this.date)\n          ? Datepicker._compareDates(day, this.date)\n          : false,\n        isToday = Datepicker._compareDates(day, now),\n        hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,\n        isEmpty = i < before || i >= days + before,\n        dayNumber = 1 + (i - before),\n        monthNumber = month,\n        yearNumber = year,\n        isStartRange = opts.startRange && Datepicker._compareDates(opts.startRange, day),\n        isEndRange = opts.endRange && Datepicker._compareDates(opts.endRange, day),\n        isInRange =\n          opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n        isDisabled =\n          (opts.minDate && day < opts.minDate) ||\n          (opts.maxDate && day > opts.maxDate) ||\n          (opts.disableWeekends && Datepicker._isWeekend(day)) ||\n          (opts.disableDayFn && opts.disableDayFn(day));\n\n      if (isEmpty) {\n        if (i < before) {\n          dayNumber = daysInPreviousMonth + dayNumber;\n          monthNumber = previousMonth;\n          yearNumber = yearOfPreviousMonth;\n        } else {\n          dayNumber = dayNumber - days;\n          monthNumber = nextMonth;\n          yearNumber = yearOfNextMonth;\n        }\n      }\n\n      let dayConfig = {\n        day: dayNumber,\n        month: monthNumber,\n        year: yearNumber,\n        hasEvent: hasEvent,\n        isSelected: isSelected,\n        isToday: isToday,\n        isDisabled: isDisabled,\n        isEmpty: isEmpty,\n        isStartRange: isStartRange,\n        isEndRange: isEndRange,\n        isInRange: isInRange,\n        showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths\n      };\n\n      row.push(this.renderDay(dayConfig));\n\n      if (++r === 7) {\n        data.push(this.renderRow(row, opts.isRTL, isWeekSelected));\n        row = [];\n        r = 0;\n        isWeekSelected = false;\n      }\n    }\n    return this.renderTable(opts, data, randId);\n  }\n\n  renderDay(opts) {\n    let arr = [];\n    let ariaSelected = 'false';\n    if (opts.isEmpty) {\n      if (opts.showDaysInNextAndPreviousMonths) {\n        arr.push('is-outside-current-month');\n        arr.push('is-selection-disabled');\n      } else {\n        return '<td class=\"is-empty\"></td>';\n      }\n    }\n    if (opts.isDisabled) {\n      arr.push('is-disabled');\n    }\n\n    if (opts.isToday) {\n      arr.push('is-today');\n    }\n    if (opts.isSelected) {\n      arr.push('is-selected');\n      ariaSelected = 'true';\n    }\n    if (opts.hasEvent) {\n      arr.push('has-event');\n    }\n    if (opts.isInRange) {\n      arr.push('is-inrange');\n    }\n    if (opts.isStartRange) {\n      arr.push('is-startrange');\n    }\n    if (opts.isEndRange) {\n      arr.push('is-endrange');\n    }\n    return (\n      `<td data-day=\"${opts.day}\" class=\"${arr.join(' ')}\" aria-selected=\"${ariaSelected}\">` +\n      `<button class=\"datepicker-day-button\" type=\"button\" data-year=\"${opts.year}\" data-month=\"${opts.month}\" data-day=\"${opts.day}\">${opts.day}</button>` +\n      '</td>'\n    );\n  }\n\n  renderRow(days, isRTL, isRowSelected) {\n    return (\n      '<tr class=\"datepicker-row' +\n      (isRowSelected ? ' is-selected' : '') +\n      '\">' +\n      (isRTL ? days.reverse() : days).join('') +\n      '</tr>'\n    );\n  }\n\n  renderTable(opts, data, randId) {\n    return (\n      '<div class=\"datepicker-table-wrapper\"><table cellpadding=\"0\" cellspacing=\"0\" class=\"datepicker-table\" role=\"grid\" aria-labelledby=\"' +\n      randId +\n      '\">' +\n      this.renderHead(opts) +\n      this.renderBody(data) +\n      '</table></div>'\n    );\n  }\n\n  renderHead(opts) {\n    let i,\n      arr = [];\n    for (i = 0; i < 7; i++) {\n      arr.push(\n        `<th scope=\"col\"><abbr title=\"${this.renderDayName(opts, i)}\">${this.renderDayName(\n          opts,\n          i,\n          true\n        )}</abbr></th>`\n      );\n    }\n    return '<thead><tr>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</tr></thead>';\n  }\n\n  renderBody(rows) {\n    return '<tbody>' + rows.join('') + '</tbody>';\n  }\n\n  renderTitle(instance, c, year, month, refYear, randId) {\n    let i,\n      j,\n      arr,\n      opts = this.options,\n      isMinYear = year === opts.minYear,\n      isMaxYear = year === opts.maxYear,\n      html =\n        '<div id=\"' +\n        randId +\n        '\" class=\"datepicker-controls\" role=\"heading\" aria-live=\"assertive\">',\n      monthHtml,\n      yearHtml,\n      prev = true,\n      next = true;\n\n    for (arr = [], i = 0; i < 12; i++) {\n      arr.push(\n        '<option value=\"' +\n          (year === refYear ? i - c : 12 + i - c) +\n          '\"' +\n          (i === month ? ' selected=\"selected\"' : '') +\n          ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth)\n            ? 'disabled=\"disabled\"'\n            : '') +\n          '>' +\n          opts.i18n.months[i] +\n          '</option>'\n      );\n    }\n\n    monthHtml = '<select class=\"datepicker-select orig-select-month\" tabindex=\"-1\">'+arr.join('')+'</select>';\n\n    if (Array.isArray(opts.yearRange)) {\n      i = opts.yearRange[0];\n      j = opts.yearRange[1] + 1;\n    }\n    else {\n      i = year - opts.yearRange;\n      j = 1 + year + opts.yearRange;\n    }\n\n    for (arr = []; i < j && i <= opts.maxYear; i++) {\n      if (i >= opts.minYear) {\n        arr.push(`<option value=\"${i}\" ${i === year ? 'selected=\"selected\"' : ''}>${i}</option>`);\n      }\n    }\n    if (opts.yearRangeReverse) arr.reverse();\n\n    yearHtml = `<select class=\"datepicker-select orig-select-year\" tabindex=\"-1\">${arr.join('')}</select>`;\n\n    let leftArrow =\n      '<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\"/><path d=\"M0-.5h24v24H0z\" fill=\"none\"/></svg>';\n    html += `<button class=\"month-prev${\n      prev ? '' : ' is-disabled'\n    } btn-flat\" type=\"button\">${leftArrow}</button>`;\n\n    html += '<div class=\"selects-container\">';\n    if (opts.showMonthAfterYear) {\n      html += yearHtml + monthHtml;\n    } else {\n      html += monthHtml + yearHtml;\n    }\n    html += '</div>';\n\n    if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n      prev = false;\n    }\n\n    if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n      next = false;\n    }\n\n    let rightArrow =\n      '<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\"/><path d=\"M0-.25h24v24H0z\" fill=\"none\"/></svg>';\n    html += `<button class=\"month-next${\n      next ? '' : ' is-disabled'\n    } btn-flat\" type=\"button\">${rightArrow}</button>`;\n\n    return (html += '</div>');\n  }\n\n  // refresh HTML\n  draw(force: boolean = false) {\n    if (!this.isOpen && !force) return;\n    let opts = this.options,\n      minYear = opts.minYear,\n      maxYear = opts.maxYear,\n      minMonth = opts.minMonth,\n      maxMonth = opts.maxMonth,\n      html = '',\n      randId;\n\n    if (this._y <= minYear) {\n      this._y = minYear;\n      if (!isNaN(minMonth) && this._m < minMonth) {\n        this._m = minMonth;\n      }\n    }\n    if (this._y >= maxYear) {\n      this._y = maxYear;\n      if (!isNaN(maxMonth) && this._m > maxMonth) {\n        this._m = maxMonth;\n      }\n    }\n\n    randId =\n      'datepicker-title-' +\n      Math.random()\n        .toString(36)\n        .replace(/[^a-z]+/g, '')\n        .substr(0, 2);\n\n    for (let c = 0; c < 1; c++) {\n      this._renderDateDisplay();\n      html +=\n        this.renderTitle(\n          this,\n          c,\n          this.calendars[c].year,\n          this.calendars[c].month,\n          this.calendars[0].year,\n          randId\n        ) + this.render(this.calendars[c].year, this.calendars[c].month, randId);\n    }\n\n    this.destroySelects();\n\n    this.calendarEl.innerHTML = html;\n\n    // Init Materialize Select\n    let yearSelect = this.calendarEl.querySelector('.orig-select-year') as HTMLSelectElement;\n    let monthSelect = this.calendarEl.querySelector('.orig-select-month') as HTMLSelectElement;\n    FormSelect.init(yearSelect, {\n      classes: 'select-year',\n      dropdownOptions: { container: document.body, constrainWidth: false }\n    });\n    FormSelect.init(monthSelect, {\n      classes: 'select-month',\n      dropdownOptions: { container: document.body, constrainWidth: false }\n    });\n\n    // Add change handlers for select\n    yearSelect.addEventListener('change', this._handleYearChange);\n    monthSelect.addEventListener('change', this._handleMonthChange);\n\n    if (typeof this.options.onDraw === 'function') {\n      this.options.onDraw.call(this);\n    }\n  }\n\n  _setupEventHandlers() {\n    this.el.addEventListener('click', this._handleInputClick);\n    this.el.addEventListener('keydown', this._handleInputKeydown);\n    this.el.addEventListener('change', this._handleInputChange);\n    this.calendarEl.addEventListener('click', this._handleCalendarClick);\n    this.doneBtn.addEventListener('click', this._finishSelection);\n    this.cancelBtn.addEventListener('click', this.close);\n\n    if (this.options.showClearBtn) {\n      this.clearBtn.addEventListener('click', this._handleClearClick);\n    }\n  }\n\n  _setupVariables() {\n    const template = document.createElement('template');\n    template.innerHTML = Datepicker._template.trim();\n    this.modalEl = <HTMLElement>template.content.firstChild;\n\n    this.calendarEl = this.modalEl.querySelector('.datepicker-calendar');\n    this.yearTextEl = this.modalEl.querySelector('.year-text');\n    this.dateTextEl = this.modalEl.querySelector('.date-text');\n    if (this.options.showClearBtn) {\n      this.clearBtn = this.modalEl.querySelector('.datepicker-clear');\n    }\n    this.doneBtn = this.modalEl.querySelector('.datepicker-done');\n    this.cancelBtn = this.modalEl.querySelector('.datepicker-cancel');\n\n    this.formats = {\n      d: () => {\n        return this.date.getDate();\n      },\n      dd: () => {\n        let d = this.date.getDate();\n        return (d < 10 ? '0' : '') + d;\n      },\n      ddd: () => {\n        return this.options.i18n.weekdaysShort[this.date.getDay()];\n      },\n      dddd: () => {\n        return this.options.i18n.weekdays[this.date.getDay()];\n      },\n      m: () => {\n        return this.date.getMonth() + 1;\n      },\n      mm: () => {\n        let m = this.date.getMonth() + 1;\n        return (m < 10 ? '0' : '') + m;\n      },\n      mmm: () => {\n        return this.options.i18n.monthsShort[this.date.getMonth()];\n      },\n      mmmm: () => {\n        return this.options.i18n.months[this.date.getMonth()];\n      },\n      yy: () => {\n        return ('' + this.date.getFullYear()).slice(2);\n      },\n      yyyy: () => {\n        return this.date.getFullYear();\n      }\n    };\n  }\n\n  _removeEventHandlers() {\n    this.el.removeEventListener('click', this._handleInputClick);\n    this.el.removeEventListener('keydown', this._handleInputKeydown);\n    this.el.removeEventListener('change', this._handleInputChange);\n    this.calendarEl.removeEventListener('click', this._handleCalendarClick);\n  }\n\n  _handleInputClick = () => {\n    this.open();\n  }\n\n  _handleInputKeydown = (e: KeyboardEvent) => {\n    if (Utils.keys.ENTER.includes(e.key)) {\n      e.preventDefault();\n      this.open();\n    }\n  }\n\n  _handleCalendarClick = (e) => {\n    if (!this.isOpen) return;\n    const target = <HTMLElement>(e.target);\n    if (!target.classList.contains('is-disabled')) {\n      if (\n        target.classList.contains('datepicker-day-button') &&\n        !target.classList.contains('is-empty') &&\n        !target.parentElement.classList.contains('is-disabled')\n      ) {\n        this.setDate(\n          new Date(\n            e.target.getAttribute('data-year'),\n            e.target.getAttribute('data-month'),\n            e.target.getAttribute('data-day')\n          )\n        );\n        if (this.options.autoClose) {\n          this._finishSelection();\n        }\n      }\n      else if (target.closest('.month-prev')) {\n        this.prevMonth();\n      }\n      else if (target.closest('.month-next')) {\n        this.nextMonth();\n      }\n    }\n  }\n\n  _handleClearClick = () => {\n    this.date = null;\n    this.setInputValue();\n    this.close();\n  }\n\n  _handleMonthChange = (e) => {\n    this.gotoMonth(e.target.value);\n  }\n\n  _handleYearChange = (e) => {\n    this.gotoYear(e.target.value);\n  }\n\n  // change view to a specific month (zero-index, e.g. 0: January)\n  gotoMonth(month) {\n    if (!isNaN(month)) {\n      this.calendars[0].month = parseInt(month, 10);\n      this.adjustCalendars();\n    }\n  }\n\n  // change view to a specific full year (e.g. \"2012\")\n  gotoYear(year) {\n    if (!isNaN(year)) {\n      this.calendars[0].year = parseInt(year, 10);\n      this.adjustCalendars();\n    }\n  }\n\n  _handleInputChange = (e: Event) => {\n    let date;\n    // Prevent change event from being fired when triggered by the plugin\n    if (e['detail']?.firedBy === this) return;\n    if (this.options.parse) {\n      date = this.options.parse(this.el.value,\n        typeof this.options.format === \"function\"\n          ? this.options.format(new Date(this.el.value))\n          : this.options.format);\n    }\n    else {\n      date = new Date(Date.parse(this.el.value));\n    }\n    if (Datepicker._isDate(date)) this.setDate(date);\n  }\n\n  renderDayName(opts, day, abbr: boolean = false) {\n    day += opts.firstDay;\n    while (day >= 7) {\n      day -= 7;\n    }\n    return abbr ? opts.i18n.weekdaysAbbrev[day] : opts.i18n.weekdays[day];\n  }\n\n  // Set input value to the selected date and close Datepicker\n  _finishSelection = () => {\n    this.setInputValue();\n    this.close();\n  }\n\n  /**\n   * Open datepicker.\n   */\n  open = () => {\n    if (this.isOpen) return;\n    this.isOpen = true;\n    if (typeof this.options.onOpen === 'function') {\n      this.options.onOpen.call(this);\n    }\n    this.draw();\n    this.modal.open(undefined);\n    return this;\n  }\n\n  /**\n   * Close datepicker.\n   */\n  close = () => {\n    if (!this.isOpen) return;\n    this.isOpen = false;\n    if (typeof this.options.onClose === 'function') {\n      this.options.onClose.call(this);\n    }\n    this.modal.close();\n    return this;\n  }\n\n  static {\n    Datepicker._template = `\n      <div class=\"modal datepicker-modal\">\n        <div class=\"modal-content datepicker-container\">\n          <div class=\"datepicker-date-display\">\n            <span class=\"year-text\"></span>\n            <span class=\"date-text\"></span>\n          </div>\n          <div class=\"datepicker-calendar-container\">\n            <div class=\"datepicker-calendar\"></div>\n            <div class=\"datepicker-footer\">\n              <button class=\"btn-flat datepicker-clear waves-effect\" style=\"visibility: hidden;\" type=\"button\"></button>\n              <div class=\"confirmation-btns\">\n                <button class=\"btn-flat datepicker-cancel waves-effect\" type=\"button\"></button>\n                <button class=\"btn-flat datepicker-done waves-effect\" type=\"button\"></button>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>`;\n  }\n}\n","import { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement, Openable } from \"./component\";\n\nexport interface DropdownOptions extends BaseOptions {\n  /**\n   * Defines the edge the menu is aligned to.\n   * @default 'left'\n   */\n  alignment: 'left' | 'right';\n  /**\n   * If true, automatically focus dropdown el for keyboard.\n   * @default true\n   */\n  autoFocus: boolean;\n  /**\n   * If true, constrainWidth to the size of the dropdown activator.\n   * @default true\n   */\n  constrainWidth: boolean;\n  /**\n   * Provide an element that will be the bounding container of the dropdown.\n   * @default null\n   */\n  container: Element;\n  /**\n   * If false, the dropdown will show below the trigger.\n   * @default true\n   */\n  coverTrigger: boolean;\n  /**\n   * If true, close dropdown on item click.\n   * @default true\n   */\n  closeOnClick: boolean;\n  /**\n   * If true, the dropdown will open on hover.\n   * @default false\n   */\n  hover: boolean;\n  /**\n   * The duration of the transition enter in milliseconds.\n   * @default 150\n   */\n  inDuration: number;\n  /**\n   * The duration of the transition out in milliseconds.\n   * @default 250\n   */\n  outDuration: number;\n  /**\n   * Function called when dropdown starts entering.\n   * @default null\n   */\n  onOpenStart: (el: HTMLElement) => void;\n  /**\n   * Function called when dropdown finishes entering.\n   * @default null\n   */\n  onOpenEnd: (el: HTMLElement) => void;\n  /**\n   * Function called when dropdown starts exiting.\n   * @default null\n   */\n  onCloseStart: (el: HTMLElement) => void;\n  /**\n   * Function called when dropdown finishes exiting.\n   * @default null\n   */\n  onCloseEnd: (el: HTMLElement) => void;\n  /**\n   * Function called when item is clicked.\n   * @default null\n   */\n  onItemClick: (el: HTMLLIElement) => void;\n};\n\nconst _defaults: DropdownOptions = {\n  alignment: 'left',\n  autoFocus: true,\n  constrainWidth: true,\n  container: null,\n  coverTrigger: true,\n  closeOnClick: true,\n  hover: false,\n  inDuration: 150,\n  outDuration: 250,\n  onOpenStart: null,\n  onOpenEnd: null,\n  onCloseStart: null,\n  onCloseEnd: null,\n  onItemClick: null\n};\n\nexport class Dropdown extends Component<DropdownOptions> implements Openable {\n  static _dropdowns: Dropdown[] = [];\n  /** ID of the dropdown element. */\n  id: string;\n  /** The DOM element of the dropdown. */\n  dropdownEl: HTMLElement;\n  /** If the dropdown is open. */\n  isOpen: boolean;\n  /** If the dropdown content is scrollable. */\n  isScrollable: boolean;\n  isTouchMoving: boolean;\n  /** The index of the item focused. */\n  focusedIndex: number;\n  filterQuery: any[];\n  filterTimeout: NodeJS.Timeout;\n\n  constructor(el: HTMLElement, options: Partial<DropdownOptions>) {\n    super(el, options, Dropdown);\n    (this.el as any).M_Dropdown = this;\n\n    Dropdown._dropdowns.push(this);\n    this.id = Utils.getIdFromTrigger(el);\n    this.dropdownEl = document.getElementById(this.id);\n\n    this.options = {\n      ...Dropdown.defaults,\n      ...options\n    };\n\n    this.isOpen = false;\n    this.isScrollable = false;\n    this.isTouchMoving = false;\n    this.focusedIndex = -1;\n    this.filterQuery = [];\n\n    // Move dropdown-content after dropdown-trigger\n    this._moveDropdown();\n    this._makeDropdownFocusable();\n    this._setupEventHandlers();\n  }\n\n  static get defaults(): DropdownOptions {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of Dropdown.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLElement, options?: Partial<DropdownOptions>): Dropdown;\n  /**\n   * Initializes instances of Dropdown.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<MElement>, options?: Partial<DropdownOptions>): Dropdown[];\n  /**\n   * Initializes instances of Dropdown.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLElement | InitElements<MElement>, options: Partial<DropdownOptions> = {}): Dropdown | Dropdown[] {\n    return super.init(els, options, Dropdown);\n  }\n\n  static getInstance(el: HTMLElement): Dropdown {\n    return (el as any).M_Dropdown;\n  }\n\n  destroy() {\n    this._resetDropdownStyles();\n    this._removeEventHandlers();\n    Dropdown._dropdowns.splice(Dropdown._dropdowns.indexOf(this), 1);\n    (this.el as any).M_Dropdown = undefined;\n  }\n\n  _setupEventHandlers() {\n    // Trigger keydown handler\n    this.el.addEventListener('keydown', this._handleTriggerKeydown);\n    // Item click handler\n    this.dropdownEl?.addEventListener('click', this._handleDropdownClick);\n    // Hover event handlers\n    if (this.options.hover) {\n      this.el.addEventListener('mouseenter', this._handleMouseEnter);\n      this.el.addEventListener('mouseleave', this._handleMouseLeave);\n      this.dropdownEl.addEventListener('mouseleave', this._handleMouseLeave);\n      // Click event handlers\n    } else {\n      this.el.addEventListener('click', this._handleClick);\n    }\n  }\n\n  _removeEventHandlers() {\n    this.el.removeEventListener('keydown', this._handleTriggerKeydown);\n    this.dropdownEl.removeEventListener('click', this._handleDropdownClick);\n    if (this.options.hover) {\n      this.el.removeEventListener('mouseenter', this._handleMouseEnter);\n      this.el.removeEventListener('mouseleave', this._handleMouseLeave);\n      this.dropdownEl.removeEventListener('mouseleave', this._handleMouseLeave);\n    } else {\n      this.el.removeEventListener('click', this._handleClick);\n    }\n  }\n\n  _setupTemporaryEventHandlers() {\n    document.body.addEventListener('click', this._handleDocumentClick);\n    document.body.addEventListener('touchmove', this._handleDocumentTouchmove);\n    this.dropdownEl.addEventListener('keydown', this._handleDropdownKeydown);\n    window.addEventListener('resize', this._handleWindowResize);\n  }\n\n  _removeTemporaryEventHandlers() {\n    document.body.removeEventListener('click', this._handleDocumentClick);\n    document.body.removeEventListener('touchmove', this._handleDocumentTouchmove);\n    this.dropdownEl.removeEventListener('keydown', this._handleDropdownKeydown);\n    window.removeEventListener('resize', this._handleWindowResize);\n  }\n\n  _handleClick = (e: MouseEvent) => {\n    e.preventDefault();\n    if (this.isOpen) {\n        this.close();\n    } else {\n        this.open();\n    }\n  }\n\n  _handleMouseEnter = () => {\n    this.open();\n  }\n\n  _handleMouseLeave = (e: MouseEvent) => {\n    const toEl = e.relatedTarget as HTMLElement;\n    const leaveToDropdownContent = !!toEl.closest('.dropdown-content');\n    let leaveToActiveDropdownTrigger = false;\n    const closestTrigger = toEl.closest('.dropdown-trigger');\n    if (\n      closestTrigger &&\n      !!(<any>closestTrigger).M_Dropdown &&\n      (<any>closestTrigger).M_Dropdown.isOpen\n    ) {\n      leaveToActiveDropdownTrigger = true;\n    }\n    // Close hover dropdown if mouse did not leave to either active dropdown-trigger or dropdown-content\n    if (!leaveToActiveDropdownTrigger && !leaveToDropdownContent) {\n      this.close();\n    }\n  }\n\n  _handleDocumentClick = (e: MouseEvent) => {\n    const target = <HTMLElement>e.target;\n    if (\n      this.options.closeOnClick &&\n      target.closest('.dropdown-content') &&\n      !this.isTouchMoving\n    ) {\n      // isTouchMoving to check if scrolling on mobile.\n      this.close();\n    }\n    else if (\n      !target.closest('.dropdown-content')\n    ) {\n      // Do this one frame later so that if the element clicked also triggers _handleClick\n      // For example, if a label for a select was clicked, that we don't close/open the dropdown\n      setTimeout(() => {\n        if (this.isOpen) {\n          this.close();\n        }\n      }, 0);\n    }\n    this.isTouchMoving = false;\n  }\n\n  _handleTriggerKeydown = (e: KeyboardEvent) => {\n    // ARROW DOWN OR ENTER WHEN SELECT IS CLOSED - open Dropdown\n    const arrowDownOrEnter = Utils.keys.ARROW_DOWN.includes(e.key) || Utils.keys.ENTER.includes(e.key);\n    if (arrowDownOrEnter && !this.isOpen) {\n      e.preventDefault();\n      this.open();\n    }\n  }\n\n  _handleDocumentTouchmove = (e: TouchEvent) => {\n    const target = <HTMLElement>e.target;\n    if (target.closest('.dropdown-content')) {\n      this.isTouchMoving = true;\n    }\n  }\n\n  _handleDropdownClick = (e: MouseEvent) => {\n    // onItemClick callback\n    if (typeof this.options.onItemClick === 'function') {\n      const itemEl = (<HTMLElement>e.target).closest('li');\n      this.options.onItemClick.call(this, itemEl);\n    }\n  }\n\n  _handleDropdownKeydown = (e: KeyboardEvent) => {\n    const arrowUpOrDown = Utils.keys.ARROW_DOWN.includes(e.key) || Utils.keys.ARROW_UP.includes(e.key);\n    if (Utils.keys.TAB.includes(e.key)) {\n      e.preventDefault();\n      this.close();\n    }\n    // Navigate down dropdown list\n    else if (arrowUpOrDown && this.isOpen) {\n      e.preventDefault();\n      const direction = Utils.keys.ARROW_DOWN.includes(e.key) ? 1 : -1;\n      let newFocusedIndex = this.focusedIndex;\n      let hasFoundNewIndex = false;\n      do {\n        newFocusedIndex = newFocusedIndex + direction;\n        if (\n          !!this.dropdownEl.children[newFocusedIndex] &&\n          (<any>this.dropdownEl.children[newFocusedIndex]).tabIndex !== -1\n        ) {\n          hasFoundNewIndex = true;\n          break;\n        }\n      } while (newFocusedIndex < this.dropdownEl.children.length && newFocusedIndex >= 0);\n\n      if (hasFoundNewIndex) {\n        // Remove active class from old element\n        if (this.focusedIndex >= 0)\n          this.dropdownEl.children[this.focusedIndex].classList.remove('active');\n        this.focusedIndex = newFocusedIndex;\n        this._focusFocusedItem();\n      }\n    }\n    // ENTER selects choice on focused item\n    else if (Utils.keys.ENTER.includes(e.key) && this.isOpen) {\n      // Search for <a> and <button>\n      const focusedElement = this.dropdownEl.children[this.focusedIndex];\n      const activatableElement = <HTMLElement>focusedElement.querySelector('a, button');\n      // Click a or button tag if exists, otherwise click li tag\n      if (!!activatableElement) {\n        activatableElement.click();\n      }\n      else if (!!focusedElement) {\n        if (focusedElement instanceof HTMLElement) {\n          focusedElement.click();\n        }\n      }\n    }\n    // Close dropdown on ESC\n    else if (Utils.keys.ESC.includes(e.key) && this.isOpen) {\n      e.preventDefault();\n      this.close();\n    }\n\n    // CASE WHEN USER TYPE LTTERS\n    const keyText = e.key.toLowerCase();\n    const isLetter = /[a-zA-Z0-9-_]/.test(keyText);\n    const specialKeys = [...Utils.keys.ARROW_DOWN, ...Utils.keys.ARROW_UP, ...Utils.keys.ENTER, ...Utils.keys.ESC, ...Utils.keys.TAB];\n    if (isLetter && !specialKeys.includes(e.key)) {\n      this.filterQuery.push(keyText);\n      const string = this.filterQuery.join('');\n      const newOptionEl = Array.from(this.dropdownEl.querySelectorAll('li'))\n        .find((el) => el.innerText.toLowerCase().indexOf(string) === 0);\n      if (newOptionEl) {\n        this.focusedIndex = [...newOptionEl.parentNode.children].indexOf(newOptionEl);\n        this._focusFocusedItem();\n      }\n    }\n    this.filterTimeout = setTimeout(this._resetFilterQuery, 1000);\n  }\n\n  _handleWindowResize = (e: Event) => {\n    // Only re-place the dropdown if it's still visible\n    // Accounts for elements hiding via media queries\n    if (this.el.offsetParent) {\n      this.recalculateDimensions();\n    }\n  }\n\n\n  _resetFilterQuery = () => {\n    this.filterQuery = [];\n  }\n\n  _resetDropdownStyles() {\n    this.dropdownEl.style.display = '';\n    this.dropdownEl.style.width = '';\n    this.dropdownEl.style.height = '';\n    this.dropdownEl.style.left = '';\n    this.dropdownEl.style.top = '';\n    this.dropdownEl.style.transformOrigin = '';\n    this.dropdownEl.style.transform = '';\n    this.dropdownEl.style.opacity = '';\n  }\n\n  // Move dropdown after container or trigger\n  _moveDropdown(containerEl: HTMLElement = null) {\n    if (!!this.options.container) {\n      this.options.container.append(this.dropdownEl);\n    }\n    else if (containerEl) {\n      if (!containerEl.contains(this.dropdownEl)) {\n        containerEl.append(this.dropdownEl);\n      }\n    }\n    else {\n      this.el.after(this.dropdownEl);\n    }\n  }\n\n  _makeDropdownFocusable() {\n    if (!this.dropdownEl) return;\n    // Needed for arrow key navigation\n    this.dropdownEl.tabIndex = 0;\n    // Only set tabindex if it hasn't been set by user\n    Array.from(this.dropdownEl.children).forEach((el)=> {\n      if (!el.getAttribute('tabindex'))\n        el.setAttribute('tabindex', '0');\n    });\n  }\n\n  _focusFocusedItem() {\n    if (\n      this.focusedIndex >= 0 &&\n      this.focusedIndex < this.dropdownEl.children.length &&\n      this.options.autoFocus\n    ) {\n      (this.dropdownEl.children[this.focusedIndex] as HTMLElement).focus({\n        preventScroll: true\n      });\n      this.dropdownEl.children[this.focusedIndex].scrollIntoView({\n        behavior: 'smooth',\n        block: 'nearest',\n        inline: 'nearest'\n      });\n    }\n  }\n\n  _getDropdownPosition(closestOverflowParent: HTMLElement) {\n    const offsetParentBRect = this.el.offsetParent.getBoundingClientRect();\n    const triggerBRect = this.el.getBoundingClientRect();\n    const dropdownBRect = this.dropdownEl.getBoundingClientRect();\n\n    let idealHeight = dropdownBRect.height;\n    let idealWidth = dropdownBRect.width;\n    let idealXPos = triggerBRect.left - dropdownBRect.left;\n    let idealYPos = triggerBRect.top - dropdownBRect.top;\n\n    const dropdownBounds = {\n      left: idealXPos,\n      top: idealYPos,\n      height: idealHeight,\n      width: idealWidth\n    };\n\n    const alignments = Utils.checkPossibleAlignments(\n      this.el,\n      closestOverflowParent,\n      dropdownBounds,\n      this.options.coverTrigger ? 0 : triggerBRect.height\n    );\n\n    let verticalAlignment = 'top';\n    let horizontalAlignment = this.options.alignment;\n    idealYPos += this.options.coverTrigger ? 0 : triggerBRect.height;\n\n    // Reset isScrollable\n    this.isScrollable = false;\n\n    if (!alignments.top) {\n      if (alignments.bottom) {\n        verticalAlignment = 'bottom';\n\n        if (!this.options.coverTrigger) {\n          idealYPos -= triggerBRect.height;\n        }\n      } else {\n        this.isScrollable = true;\n\n        // Determine which side has most space and cutoff at correct height\n        idealHeight -= 20; // Add padding when cutoff\n        if (alignments.spaceOnTop > alignments.spaceOnBottom) {\n          verticalAlignment = 'bottom';\n          idealHeight += alignments.spaceOnTop;\n          idealYPos -= this.options.coverTrigger\n            ? alignments.spaceOnTop - 20\n            : alignments.spaceOnTop - 20 + triggerBRect.height;\n        } else {\n          idealHeight += alignments.spaceOnBottom;\n        }\n      }\n    }\n\n    // If preferred horizontal alignment is possible\n    if (!alignments[horizontalAlignment]) {\n      const oppositeAlignment = horizontalAlignment === 'left' ? 'right' : 'left';\n      if (alignments[oppositeAlignment]) {\n        horizontalAlignment = oppositeAlignment;\n      } else {\n        // Determine which side has most space and cutoff at correct height\n        if (alignments.spaceOnLeft > alignments.spaceOnRight) {\n          horizontalAlignment = 'right';\n          idealWidth += alignments.spaceOnLeft;\n          idealXPos -= alignments.spaceOnLeft;\n        } else {\n          horizontalAlignment = 'left';\n          idealWidth += alignments.spaceOnRight;\n        }\n      }\n    }\n\n    if (verticalAlignment === 'bottom') {\n      idealYPos =\n        idealYPos - dropdownBRect.height + (this.options.coverTrigger ? triggerBRect.height : 0);\n    }\n    if (horizontalAlignment === 'right') {\n      idealXPos = idealXPos - dropdownBRect.width + triggerBRect.width;\n    }\n    return {\n      x: idealXPos,\n      y: idealYPos,\n      verticalAlignment: verticalAlignment,\n      horizontalAlignment: horizontalAlignment,\n      height: idealHeight,\n      width: idealWidth\n    };\n  }\n\n  _animateIn() {\n    const duration = this.options.inDuration;\n    this.dropdownEl.style.transition = 'none';\n    // from\n    this.dropdownEl.style.opacity = '0';\n    this.dropdownEl.style.transform = 'scale(0.3, 0.3)';\n    setTimeout(() => {\n      // easeOutQuad (opacity) & easeOutQuint    \n      this.dropdownEl.style.transition = `opacity ${duration}ms ease, transform ${duration}ms ease`;\n      // to\n      this.dropdownEl.style.opacity = '1';\n      this.dropdownEl.style.transform = 'scale(1, 1)';\n    }, 1);      \n    setTimeout(() => {\n      if (this.options.autoFocus) this.dropdownEl.focus();\n      if (typeof this.options.onOpenEnd === 'function') this.options.onOpenEnd.call(this, this.el);      \n    }, duration);\n  }\n\n  _animateOut() {\n    const duration = this.options.outDuration;\n    // easeOutQuad (opacity) & easeOutQuint    \n    this.dropdownEl.style.transition = `opacity ${duration}ms ease, transform ${duration}ms ease`;\n    // to\n    this.dropdownEl.style.opacity = '0';\n    this.dropdownEl.style.transform = 'scale(0.3, 0.3)';    \n    setTimeout(() => {\n      this._resetDropdownStyles();\n      if (typeof this.options.onCloseEnd === 'function') this.options.onCloseEnd.call(this, this.el);      \n    }, duration);\n  }\n\n  private _getClosestAncestor(el: HTMLElement, condition: Function): HTMLElement {\n    let ancestor = el.parentNode;\n    while (ancestor !== null && ancestor !== document) {\n      if (condition(ancestor)) {\n        return <HTMLElement>ancestor;\n      }\n      ancestor = ancestor.parentElement;\n    }\n    return null;\n  };\n\n  _placeDropdown() {\n    // Container here will be closest ancestor with overflow: hidden\n    let closestOverflowParent: HTMLElement = this._getClosestAncestor(this.dropdownEl, (ancestor: HTMLElement) => {\n      return !['HTML','BODY'].includes(ancestor.tagName) && getComputedStyle(ancestor).overflow !== 'visible';\n    });\n    // Fallback\n    if (!closestOverflowParent) {\n      closestOverflowParent = <HTMLElement>(!!this.dropdownEl.offsetParent\n        ? this.dropdownEl.offsetParent\n        : this.dropdownEl.parentNode);\n    }\n\n    if (getComputedStyle(closestOverflowParent).position === 'static')\n      closestOverflowParent.style.position = 'relative';\n\n    this._moveDropdown(closestOverflowParent);\n\n    // Set width before calculating positionInfo\n    const idealWidth = this.options.constrainWidth\n      ? this.el.getBoundingClientRect().width\n      : this.dropdownEl.getBoundingClientRect().width;\n    this.dropdownEl.style.width = idealWidth + 'px';\n\n    const positionInfo = this._getDropdownPosition(closestOverflowParent);\n    this.dropdownEl.style.left = positionInfo.x + 'px';\n    this.dropdownEl.style.top = positionInfo.y + 'px';\n    this.dropdownEl.style.height = positionInfo.height + 'px';\n    this.dropdownEl.style.width = positionInfo.width + 'px';\n    this.dropdownEl.style.transformOrigin = `${\n      positionInfo.horizontalAlignment === 'left' ? '0' : '100%'\n    } ${positionInfo.verticalAlignment === 'top' ? '0' : '100%'}`;\n  }\n\n  /**\n   * Open dropdown.\n   */\n  open = () => {\n    if (this.isOpen) return;\n    this.isOpen = true;\n    // onOpenStart callback\n    if (typeof this.options.onOpenStart === 'function') {\n      this.options.onOpenStart.call(this, this.el);\n    }\n    // Reset styles\n    this._resetDropdownStyles();\n    this.dropdownEl.style.display = 'block';\n    this._placeDropdown();\n    this._animateIn();\n    // Do this one frame later so that we don't bind an event handler that's immediately\n    // called when the event bubbles up to the document and closes the dropdown\n    setTimeout(() => this._setupTemporaryEventHandlers(), 0);\n  }\n\n  /**\n   * Close dropdown.\n   */\n  close = () => {\n    if (!this.isOpen) return;\n    this.isOpen = false;\n    this.focusedIndex = -1;\n    // onCloseStart callback\n    if (typeof this.options.onCloseStart === 'function') {\n      this.options.onCloseStart.call(this, this.el);\n    }\n    this._animateOut();\n    this._removeTemporaryEventHandlers();\n    if (this.options.autoFocus) {\n      this.el.focus();\n    }\n  }\n\n  /**\n   * While dropdown is open, you can recalculate its dimensions if its contents have changed.\n   */\n  recalculateDimensions = () => {\n    if (this.isOpen) {\n      this.dropdownEl.style.width = '';\n      this.dropdownEl.style.height = '';\n      this.dropdownEl.style.left = '';\n      this.dropdownEl.style.top = '';\n      this.dropdownEl.style.transformOrigin = '';\n      this._placeDropdown();\n    }\n  }\n\n}\n","import { Utils } from \"./utils\";\n\nexport class Forms {\n\n  /**\n   * Resizes the given TextArea after updating the\n   *  value content dynamically.\n   * @param textarea TextArea to be resized\n   */\n  static textareaAutoResize(textarea: HTMLTextAreaElement){\n    if (!textarea) {\n      console.error('No textarea element found');\n      return;\n    }\n    // Textarea Auto Resize\n    let hiddenDiv: HTMLDivElement = document.querySelector('.hiddendiv');\n    if (!hiddenDiv) {\n      hiddenDiv = document.createElement('div');\n      hiddenDiv.classList.add('hiddendiv', 'common');\n      document.body.append(hiddenDiv);\n    }\n    const style = getComputedStyle(textarea);\n    // Set font properties of hiddenDiv\n    const fontFamily = style.fontFamily; //textarea.css('font-family');\n    const fontSize = style.fontSize; //textarea.css('font-size');\n    const lineHeight = style.lineHeight; //textarea.css('line-height');\n    // Firefox can't handle padding shorthand.\n    const paddingTop = style.paddingTop; //getComputedStyle(textarea).css('padding-top');\n    const paddingRight = style.paddingRight; //textarea.css('padding-right');\n    const paddingBottom = style.paddingBottom; //textarea.css('padding-bottom');\n    const paddingLeft = style.paddingLeft; //textarea.css('padding-left');\n\n    if (fontSize) hiddenDiv.style.fontSize = fontSize; //('font-size', fontSize);\n    if (fontFamily) hiddenDiv.style.fontFamily = fontFamily; //css('font-family', fontFamily);\n    if (lineHeight) hiddenDiv.style.lineHeight = lineHeight; //css('line-height', lineHeight);\n    if (paddingTop) hiddenDiv.style.paddingTop = paddingTop; //ss('padding-top', paddingTop);\n    if (paddingRight) hiddenDiv.style.paddingRight = paddingRight; //css('padding-right', paddingRight);\n    if (paddingBottom) hiddenDiv.style.paddingBottom = paddingBottom; //css('padding-bottom', paddingBottom);\n    if (paddingLeft) hiddenDiv.style.paddingLeft = paddingLeft; //css('padding-left', paddingLeft);\n\n    // Set original-height, if none\n    if (!textarea.hasAttribute('original-height'))\n      textarea.setAttribute('original-height', textarea.getBoundingClientRect().height.toString());\n\n    if (textarea.getAttribute('wrap') === 'off') {\n      hiddenDiv.style.overflowWrap = 'normal'; // ('overflow-wrap', 'normal')\n      hiddenDiv.style.whiteSpace = 'pre';  //.css('white-space', 'pre');\n    }\n\n    hiddenDiv.innerText = textarea.value + '\\n';\n\n    const content = hiddenDiv.innerHTML.replace(/\\n/g, '<br>');\n    hiddenDiv.innerHTML = content;\n\n    // When textarea is hidden, width goes crazy.\n    // Approximate with half of window size\n    if (textarea.offsetWidth > 0 && textarea.offsetHeight > 0) {\n      hiddenDiv.style.width = textarea.getBoundingClientRect().width +'px'; // ('width', textarea.width() + 'px');\n    }\n    else {\n      hiddenDiv.style.width = (window.innerWidth / 2)+'px' //css('width', window.innerWidth / 2 + 'px');\n    }\n\n    // Resize if the new height is greater than the\n    // original height of the textarea\n    const originalHeight = parseInt(textarea.getAttribute('original-height'));\n    const prevLength = parseInt(textarea.getAttribute('previous-length'));\n    if (isNaN(originalHeight)) return;\n    if (originalHeight <= hiddenDiv.clientHeight) {\n      textarea.style.height = hiddenDiv.clientHeight+'px';  //css('height', hiddenDiv.innerHeight() + 'px');\n    }\n    else if (textarea.value.length < prevLength) {\n    // In case the new height is less than original height, it\n    // means the textarea has less text than before\n    // So we set the height to the original one\n      textarea.style.height = originalHeight+'px';\n    }\n    textarea.setAttribute('previous-length', textarea.value.length.toString());\n  };\n\n  static Init(){\n    document.addEventListener(\"DOMContentLoaded\", () => {\n\n      document.addEventListener('keyup', (e: KeyboardEvent) => {\n        const target = <HTMLInputElement>e.target;\n        // Radio and Checkbox focus class\n        if (target instanceof HTMLInputElement && ['radio','checkbox'].includes(target.type)) {\n          // TAB, check if tabbing to radio or checkbox.\n          if (Utils.keys.TAB.includes(e.key)) {\n            target.classList.add('tabbed');\n            target.addEventListener('blur', e => target.classList.remove('tabbed'), {once: true});\n          }\n        }\n      });\n\n      document.querySelectorAll('.materialize-textarea').forEach((textArea: HTMLTextAreaElement) => {\n          Forms.textareaAutoResize(textArea);\n      });\n\n      // File Input Path\n      document.querySelectorAll('.file-field input[type=\"file\"]').forEach((fileInput: HTMLInputElement) => {\n          Forms.InitFileInputPath(fileInput);\n      });\n\n    });\n  }\n\n  static InitTextarea(textarea: HTMLTextAreaElement){\n        // Save Data in Element\n        textarea.setAttribute('original-height', textarea.getBoundingClientRect().height.toString());\n        textarea.setAttribute('previous-length', textarea.value.length.toString());\n        Forms.textareaAutoResize(textarea);\n\n        textarea.addEventListener('keyup', e => Forms.textareaAutoResize(textarea));\n        textarea.addEventListener('keydown', e => Forms.textareaAutoResize(textarea));\n  }\n\n  static InitFileInputPath(fileInput: HTMLInputElement){\n        fileInput.addEventListener('change', e => {\n          const fileField = fileInput.closest('.file-field');\n          const pathInput = <HTMLInputElement>fileField.querySelector('input.file-path');\n          const files = fileInput.files;\n          const filenames = [];\n          for (let i = 0; i < files.length; i++) {\n            filenames.push(files[i].name);\n          }\n          pathInput.value = filenames.join(', ');\n          pathInput.dispatchEvent(new Event('change',{bubbles:true, cancelable:true, composed:true}));\n        });\n  }\n  \n}\n","import { Utils } from \"./utils\";\nimport { BaseOptions, Component, InitElements, MElement } from \"./component\";\n\nexport interface MaterialboxOptions extends BaseOptions {\n  /**\n   * Transition in duration in milliseconds.\n   * @default 275\n   */\n  inDuration: number;\n  /**\n   * Transition out duration in milliseconds.\n   * @default 200\n   */\n  outDuration: number;\n  /**\n   * Callback function called before materialbox is opened.\n   * @default null\n   */\n  onOpenStart: (el: Element) => void;\n  /**\n   * Callback function called after materialbox is opened.\n   * @default null\n   */\n  onOpenEnd: (el: Element) => void;\n  /**\n   * Callback function called before materialbox is closed.\n   * @default null\n   */\n  onCloseStart: (el: Element) => void;\n  /**\n   * Callback function called after materialbox is closed.\n   * @default null\n   */\n  onCloseEnd: (el: Element) => void;\n}\n\nconst _defaults: MaterialboxOptions = {\n  inDuration: 275,\n  outDuration: 200,\n  onOpenStart: null,\n  onOpenEnd: null,\n  onCloseStart: null,\n  onCloseEnd: null\n};\n\nexport class Materialbox extends Component<MaterialboxOptions> {\n  /** If the materialbox overlay is showing. */\n  overlayActive: boolean;\n  /** If the materialbox is no longer being animated. */\n  doneAnimating: boolean;\n  /** Caption, if specified. */\n  caption: string;\n  /** Original width of image. */\n  originalWidth: number;\n  /** Original height of image. */\n  originalHeight: number;\n  private originInlineStyles: string;\n  private placeholder: HTMLElement;\n  private _changedAncestorList: HTMLElement[];\n  private newHeight: number;\n  private newWidth: number;\n  private windowWidth: number;\n  private windowHeight: number;\n  private attrWidth: string;\n  private attrHeight: string;\n  private _overlay: HTMLElement;\n  private _photoCaption: HTMLElement;\n\n  constructor(el: HTMLElement, options: Partial<MaterialboxOptions>) {\n    super(el, options, Materialbox);\n    (this.el as any).M_Materialbox = this;\n\n    this.options = {\n      ...Materialbox.defaults,\n      ...options\n    };\n    \n    this.overlayActive = false;\n    this.doneAnimating = true;\n    this.placeholder = document.createElement('div');\n    this.placeholder.classList.add('material-placeholder');\n    this.originalWidth = 0;\n    this.originalHeight = 0;\n    this.originInlineStyles = this.el.getAttribute('style');\n    this.caption = this.el.getAttribute('data-caption') || '';\n    // Wrap\n    this.el.before(this.placeholder);\n    this.placeholder.append(this.el);\n    this._setupEventHandlers();\n  }\n\n  static get defaults(): MaterialboxOptions {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of MaterialBox.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLElement, options?: Partial<MaterialboxOptions>): Materialbox;\n  /**\n   * Initializes instances of MaterialBox.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<MElement>, options?: Partial<MaterialboxOptions>): Materialbox[];\n  /**\n   * Initializes instances of MaterialBox.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLElement | InitElements<MElement>, options: Partial<MaterialboxOptions> = {}): Materialbox | Materialbox[]{\n    return super.init(els, options, Materialbox);\n  }\n\n  static getInstance(el: HTMLElement): Materialbox {\n    return (el as any).M_Materialbox;\n  }\n\n  destroy() {\n    this._removeEventHandlers();\n    (this.el as any).M_Materialbox = undefined;\n    // Unwrap image\n    //this.placeholder.after(this.el).remove();\n    this.placeholder.remove();\n    this.el.removeAttribute('style');\n  }\n\n  private _setupEventHandlers() {\n    this.el.addEventListener('click', this._handleMaterialboxClick);\n  }\n\n  private _removeEventHandlers() {\n    this.el.removeEventListener('click', this._handleMaterialboxClick);\n  }\n\n  private _handleMaterialboxClick = () => {\n    // If already modal, return to original\n    if (this.doneAnimating === false || (this.overlayActive && this.doneAnimating))\n      this.close();\n    else\n      this.open();\n  }\n\n  private _handleWindowScroll = () => {\n    if (this.overlayActive) this.close();\n  }\n\n  private _handleWindowResize = () => {\n    if (this.overlayActive) this.close();\n  }\n\n  private _handleWindowEscape = (e: KeyboardEvent) => {\n    if (Utils.keys.ESC.includes(e.key) && this.doneAnimating && this.overlayActive) this.close();\n  }\n\n  private _makeAncestorsOverflowVisible() {\n    this._changedAncestorList = [];\n    let ancestor = this.placeholder.parentNode;\n    while (ancestor !== null && ancestor !== document) {\n      const curr = <HTMLElement>ancestor;\n      if (curr.style.overflow !== 'visible') {\n        curr.style.overflow = 'visible';\n        this._changedAncestorList.push(curr);\n      }\n      ancestor = ancestor.parentNode;\n    }\n  }\n\n  private _offset(el: HTMLElement) {\n    const box = el.getBoundingClientRect();\n    const docElem = document.documentElement;\n    return {\n      top: box.top + window.pageYOffset - docElem.clientTop,\n      left: box.left + window.pageXOffset - docElem.clientLeft\n    };\n  }\n  private _updateVars(): void {\n    this.windowWidth = window.innerWidth;\n    this.windowHeight = window.innerHeight;\n    this.caption = this.el.getAttribute('data-caption') || '';\n  }\n\n  // Image\n  private _animateImageIn(): void {\n    this.el.style.maxHeight = this.newHeight.toString() + 'px';\n    this.el.style.maxWidth = this.newWidth.toString() + 'px';\n    const duration = this.options.inDuration;\n    // from\n    this.el.style.transition = 'none';\n    this.el.style.height = this.originalHeight + 'px';\n    this.el.style.width = this.originalWidth + 'px';\n    setTimeout(() => {\n      // easeOutQuad\n      this.el.style.transition = `height ${duration}ms ease,\n        width ${duration}ms ease,\n        left ${duration}ms ease,\n        top ${duration}ms ease\n      `;\n      // to\n      this.el.style.height = this.newHeight + 'px';\n      this.el.style.width = this.newWidth + 'px';\n      this.el.style.left = (Utils.getDocumentScrollLeft() +\n        this.windowWidth / 2 -\n        this._offset(this.placeholder).left -\n        this.newWidth / 2) + 'px';\n\n      this.el.style.top = (Utils.getDocumentScrollTop() +\n        this.windowHeight / 2 -\n        this._offset(this.placeholder).top -\n        this.newHeight / 2) + 'px';\n    }, 1);\n\n    setTimeout(() => {\n      this.doneAnimating = true;\n      if (typeof this.options.onOpenEnd === 'function') this.options.onOpenEnd.call(this, this.el);\n    }, duration);\n\n    /*\n    anim({\n      targets: this.el, // image\n      height: [this.originalHeight, this.newHeight],\n      width: [this.originalWidth, this.newWidth],\n      left:\n        Utils.getDocumentScrollLeft() +\n        this.windowWidth / 2 -\n        this._offset(this.placeholder).left -\n        this.newWidth / 2,\n      top:\n        Utils.getDocumentScrollTop() +\n        this.windowHeight / 2 -\n        this._offset(this.placeholder).top -\n        this.newHeight / 2,\n\n      duration: this.options.inDuration,\n      easing: 'easeOutQuad',\n      complete: () => {\n        this.doneAnimating = true;\n        if (typeof this.options.onOpenEnd === 'function') this.options.onOpenEnd.call(this, this.el);        \n      }\n    });\n    */\n  }\n  private _animateImageOut(): void {\n    const duration = this.options.outDuration;\n    // easeOutQuad\n    this.el.style.transition = `height ${duration}ms ease,\n      width ${duration}ms ease,\n      left ${duration}ms ease,\n      top ${duration}ms ease\n    `;\n    // to\n    this.el.style.height = this.originalWidth + 'px';\n    this.el.style.width = this.originalWidth + 'px';\n    this.el.style.left = '0';\n    this.el.style.top = '0';\n    setTimeout(() => {\n      this.placeholder.style.height = '';\n      this.placeholder.style.width = '';\n      this.placeholder.style.position = '';\n      this.placeholder.style.top = '';\n      this.placeholder.style.left = '';\n      // Revert to width or height attribute\n      if (this.attrWidth) this.el.setAttribute('width', this.attrWidth.toString());\n      if (this.attrHeight) this.el.setAttribute('height', this.attrHeight.toString());\n      this.el.removeAttribute('style');\n      this.originInlineStyles && this.el.setAttribute('style', this.originInlineStyles);\n      // Remove class\n      this.el.classList.remove('active');\n      this.doneAnimating = true;\n      // Remove overflow overrides on ancestors\n      this._changedAncestorList.forEach(anchestor => anchestor.style.overflow = '');\n      // onCloseEnd callback\n      if (typeof this.options.onCloseEnd === 'function') this.options.onCloseEnd.call(this, this.el);  \n    }, duration);\n  }\n\n  // Caption\n  private _addCaption(): void {\n    this._photoCaption = document.createElement('div');\n    this._photoCaption.classList.add('materialbox-caption');\n    this._photoCaption.innerText = this.caption;\n    document.body.append(this._photoCaption);\n    this._photoCaption.style.display = 'inline';\n    // Animate\n    this._photoCaption.style.transition = 'none';\n    this._photoCaption.style.opacity = '0'\n    const duration = this.options.inDuration;\n    setTimeout(() => {\n      this._photoCaption.style.transition = `opacity ${duration}ms ease`;\n      this._photoCaption.style.opacity = '1';\n    }, 1);\n  }\n  private _removeCaption(): void {\n    const duration = this.options.outDuration;\n    this._photoCaption.style.transition = `opacity ${duration}ms ease`;\n    this._photoCaption.style.opacity = '0';\n    setTimeout(() => {\n      this._photoCaption.remove();\n    }, duration);\n  }\n\n  // Overlay\n  private _addOverlay(): void {\n    this._overlay = document.createElement('div');\n    this._overlay.id = 'materialbox-overlay';\n    this._overlay.addEventListener('click', e => {\n      if (this.doneAnimating) this.close();\n    }, {once: true});\n\n    // Put before in origin image to preserve z-index layering.\n    this.el.before(this._overlay);\n\n    // Set dimensions if needed\n    const overlayOffset = this._overlay.getBoundingClientRect();\n    this._overlay.style.width = this.windowWidth + 'px';\n    this._overlay.style.height = this.windowHeight + 'px';\n    this._overlay.style.left = -1 * overlayOffset.left + 'px';\n    this._overlay.style.top = -1 * overlayOffset.top + 'px';\n\n    // Animate\n    this._overlay.style.transition = 'none';\n    this._overlay.style.opacity = '0'\n    const duration = this.options.inDuration;\n    setTimeout(() => {\n      this._overlay.style.transition = `opacity ${duration}ms ease`;\n      this._overlay.style.opacity = '1';\n    }, 1);\n  }\n  private _removeOverlay(): void {\n    const duration = this.options.outDuration;\n    this._overlay.style.transition = `opacity ${duration}ms ease`;\n    this._overlay.style.opacity = '0';\n    setTimeout(() => {\n      this.overlayActive = false;\n      this._overlay.remove();\n    }, duration);\n  }\n\n  /**\n   * Open materialbox.\n   */\n  open = () => {\n    this._updateVars();\n    this.originalWidth = this.el.getBoundingClientRect().width;\n    this.originalHeight = this.el.getBoundingClientRect().height;\n    // Set states\n    this.doneAnimating = false;\n    this.el.classList.add('active');\n    this.overlayActive = true;\n    // onOpenStart callback\n    if (typeof this.options.onOpenStart === 'function') this.options.onOpenStart.call(this, this.el);\n    // Set positioning for placeholder\n    this.placeholder.style.width = this.placeholder.getBoundingClientRect().width + 'px';\n    this.placeholder.style.height = this.placeholder.getBoundingClientRect().height + 'px';\n    this.placeholder.style.position = 'relative';\n    this.placeholder.style.top = '0';\n    this.placeholder.style.left = '0';\n    this._makeAncestorsOverflowVisible();\n    // Set css on origin\n    this.el.style.position = 'absolute';\n    this.el.style.zIndex = '1000';\n    this.el.style.willChange = 'left, top, width, height';\n    // Change from width or height attribute to css\n    this.attrWidth = this.el.getAttribute('width');\n    this.attrHeight = this.el.getAttribute('height');\n    if (this.attrWidth) {\n      this.el.style.width = this.attrWidth+'px';\n      this.el.removeAttribute('width');\n    }\n    if (this.attrHeight) {\n      this.el.style.width = this.attrHeight+'px';\n      this.el.removeAttribute('height');\n    }\n    this._addOverlay();\n    // Add and animate caption if it exists\n    if (this.caption !== '') this._addCaption();\n    // Resize Image\n    const widthPercent = this.originalWidth / this.windowWidth;\n    const heightPercent = this.originalHeight / this.windowHeight;\n    this.newWidth = 0;\n    this.newHeight = 0;\n    if (widthPercent > heightPercent) {\n      // Width first\n      const ratio = this.originalHeight / this.originalWidth;\n      this.newWidth = this.windowWidth * 0.9;\n      this.newHeight = this.windowWidth * 0.9 * ratio;\n    }\n    else {\n      // Height first\n      const ratio = this.originalWidth / this.originalHeight;\n      this.newWidth = this.windowHeight * 0.9 * ratio;\n      this.newHeight = this.windowHeight * 0.9;\n    }\n    this._animateImageIn();\n    // Handle Exit triggers\n    window.addEventListener('scroll', this._handleWindowScroll);\n    window.addEventListener('resize', this._handleWindowResize);\n    window.addEventListener('keyup', this._handleWindowEscape);\n  }\n\n  /**\n   * Close materialbox.\n   */\n  close = () => {\n    this._updateVars();\n    this.doneAnimating = false;\n    // onCloseStart callback\n    if (typeof this.options.onCloseStart === 'function') this.options.onCloseStart.call(this, this.el);\n    //anim.remove(this.el);\n    //anim.remove(this._overlay);\n    //if (this.caption !== '') anim.remove(this._photoCaption);\n    // disable exit handlers\n    window.removeEventListener('scroll', this._handleWindowScroll);\n    window.removeEventListener('resize', this._handleWindowResize);\n    window.removeEventListener('keyup', this._handleWindowEscape);\n    this._removeOverlay();\n    this._animateImageOut();\n    if (this.caption !== '') this._removeCaption();\n  }\n}\n","import { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface ModalOptions extends BaseOptions {\n  /**\n   * Opacity of the modal overlay.\n   * @default 0.5\n   */\n  opacity: number;\n  /**\n   * Transition in duration in milliseconds.\n   * @default 250\n   */\n  inDuration: number;\n  /**\n   * Transition out duration in milliseconds.\n   * @default 250\n   */\n  outDuration: number;\n  /**\n   * Prevent page from scrolling while modal is open.\n   * @default true\n   */\n  preventScrolling: boolean;\n  /**\n   * Callback function called before modal is opened.\n   * @default null\n   */\n  onOpenStart: (this: Modal, el: HTMLElement) => void;\n  /**\n   * Callback function called after modal is opened.\n   * @default null\n   */\n  onOpenEnd: (this: Modal, el: HTMLElement) => void;\n  /**\n   * Callback function called before modal is closed.\n   * @default null\n   */\n  onCloseStart: (el: HTMLElement) => void;\n  /**\n   * Callback function called after modal is closed.\n   * @default null\n   */\n  onCloseEnd: (el: HTMLElement) => void;\n  /**\n   * Allow modal to be dismissed by keyboard or overlay click.\n   * @default true\n   */\n  dismissible: boolean;\n  /**\n   * Starting top offset.\n   * @default '4%'\n   */\n  startingTop: string;\n  /**\n   * Ending top offset.\n   * @default '10%'\n   */\n  endingTop: string;\n}\n\nconst _defaults = {\n  opacity: 0.5,\n  inDuration: 250,\n  outDuration: 250,\n  onOpenStart: null,\n  onOpenEnd: null,\n  onCloseStart: null,\n  onCloseEnd: null,\n  preventScrolling: true,\n  dismissible: true,\n  startingTop: '4%',\n  endingTop: '10%'\n};\n\nexport class Modal extends Component<ModalOptions> {\n\n  static _modalsOpen: number;\n  static _count: number;\n  \n  /**\n   * ID of the modal element.\n   */\n  id: string;\n  /**\n   * If the modal is open.\n   */\n  isOpen: boolean;\n  \n  private _openingTrigger: any;\n  private _overlay: HTMLDivElement;\n  private _nthModalOpened: number;\n\n  constructor(el: HTMLElement, options: Partial<ModalOptions>) {\n    super(el, options, Modal);\n    (this.el as any).M_Modal = this;\n\n    this.options = {\n      ...Modal.defaults,\n      ...options\n    };\n    \n    this.isOpen = false;\n    this.id = this.el.id;\n    this._openingTrigger = undefined;\n    this._overlay = document.createElement('div');\n    this._overlay.classList.add('modal-overlay');\n    this.el.tabIndex = 0;\n    this._nthModalOpened = 0;\n    Modal._count++;\n    this._setupEventHandlers();\n  }\n\n  static get defaults() {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of Modal.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLElement, options?: Partial<ModalOptions>): Modal;\n  /**\n   * Initializes instances of Modal.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<MElement>, options?: Partial<ModalOptions>): Modal[];\n  /**\n   * Initializes instances of Modal.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLElement | InitElements<MElement>, options: Partial<ModalOptions> = {}): Modal | Modal[] {\n    return super.init(els, options, Modal);\n  }\n\n  static getInstance(el: HTMLElement): Modal {\n    return (el as any).M_Modal;\n  }\n\n  destroy() {\n    Modal._count--;\n    this._removeEventHandlers();\n    this.el.removeAttribute('style');\n    this._overlay.remove();\n    (this.el as any).M_Modal = undefined;\n  }\n\n  _setupEventHandlers() {\n    if (Modal._count === 1) {\n      document.body.addEventListener('click', this._handleTriggerClick);\n    }\n    this._overlay.addEventListener('click', this._handleOverlayClick);\n    this.el.addEventListener('click', this._handleModalCloseClick);\n  }\n\n  _removeEventHandlers() {\n    if (Modal._count === 0) {\n      document.body.removeEventListener('click', this._handleTriggerClick);\n    }\n    this._overlay.removeEventListener('click', this._handleOverlayClick);\n    this.el.removeEventListener('click', this._handleModalCloseClick);\n  }\n\n  _handleTriggerClick = (e: MouseEvent) => {\n    const trigger = (e.target as HTMLElement).closest('.modal-trigger');\n    if (!trigger) return;\n    const modalId = Utils.getIdFromTrigger(trigger as HTMLElement);\n    const modalInstance = (document.getElementById(modalId) as any).M_Modal;\n    if (modalInstance) modalInstance.open(trigger);\n    e.preventDefault();\n  }\n\n  _handleOverlayClick = () => {\n    if (this.options.dismissible) this.close();\n  }\n\n  _handleModalCloseClick = (e: MouseEvent) => {\n    const closeTrigger = (e.target as HTMLElement).closest('.modal-close');\n    if (closeTrigger) this.close();\n  }\n\n  _handleKeydown = (e: KeyboardEvent) => {\n    if (Utils.keys.ESC.includes(e.key) && this.options.dismissible) this.close();\n  }\n\n  _handleFocus = (e: FocusEvent) => {\n    // Only trap focus if this modal is the last model opened (prevents loops in nested modals).\n    if (!this.el.contains(e.target as HTMLElement) && this._nthModalOpened === Modal._modalsOpen) {\n      this.el.focus();\n    }\n  }\n\n  _animateIn() {\n    // Set initial styles\n    this._overlay.style.display = 'block';\n    this._overlay.style.opacity = '0';\n    this.el.style.display = 'block';    \n    this.el.style.opacity = '0';\n\n    const duration = this.options.inDuration;\n    const isBottomSheet = this.el.classList.contains('bottom-sheet');\n\n    if (!isBottomSheet) {\n      this.el.style.top = this.options.startingTop;\n      this.el.style.transform = 'scaleX(0.9) scaleY(0.9)';\n    }\n    // Overlay\n    this._overlay.style.transition = `opacity ${duration}ms ease-out`; // v1: easeOutQuad\n    // Modal\n    this.el.style.transition = `\n      top ${duration}ms ease-out,\n      bottom ${duration}ms ease-out,\n      opacity ${duration}ms ease-out,\n      transform ${duration}ms ease-out\n    `;\n\n    setTimeout(() => {\n      this._overlay.style.opacity = this.options.opacity.toString();\n      this.el.style.opacity = '1';\n      if (isBottomSheet) {\n        this.el.style.bottom = '0';\n      }\n      else {\n        this.el.style.top = this.options.endingTop;    \n        this.el.style.transform = 'scaleX(1) scaleY(1)';\n      }\n      setTimeout(() => {\n        if (typeof this.options.onOpenEnd === 'function') {\n          this.options.onOpenEnd.call(this, this.el, this._openingTrigger);\n        }\n      }, duration);\n    }, 1);\n  }\n\n  _animateOut() {\n    const duration = this.options.outDuration;\n    const isBottomSheet = this.el.classList.contains('bottom-sheet');\n    if (!isBottomSheet) {\n      this.el.style.top = this.options.endingTop;\n    }\n\n    // Overlay\n    this._overlay.style.transition = `opacity ${duration}ms ease-out`; // v1: easeOutQuart\n\n    // Modal // easeOutCubic\n    this.el.style.transition = `\n      top ${duration}ms ease-out,\n      bottom ${duration}ms ease-out,\n      opacity ${duration}ms ease-out,\n      transform ${duration}ms ease-out\n    `;\n\n    setTimeout(() => {\n      this._overlay.style.opacity = '0';\n      this.el.style.opacity = '0';\n      if (isBottomSheet) {\n        this.el.style.bottom = '-100%';\n      }\n      else {\n        this.el.style.top = this.options.startingTop;    \n        this.el.style.transform = 'scaleX(0.9) scaleY(0.9)';\n      }\n      setTimeout(() => {\n        this.el.style.display = 'none';\n        this._overlay.remove();\n        if (typeof this.options.onCloseEnd === 'function') {\n          this.options.onCloseEnd.call(this, this.el);\n        }\n      }, duration);\n    }, 1);\n  }\n\n  /**\n   * Open modal.\n   */\n  open = (trigger?: HTMLElement): Modal => {\n    if (this.isOpen) return;\n    this.isOpen = true;\n    Modal._modalsOpen++;\n    this._nthModalOpened = Modal._modalsOpen;\n    // Set Z-Index based on number of currently open modals\n    this._overlay.style.zIndex = (1000 + Modal._modalsOpen * 2).toString();\n    this.el.style.zIndex = (1000 + Modal._modalsOpen * 2 + 1).toString();\n    // Set opening trigger, undefined indicates modal was opened by javascript\n    this._openingTrigger = !!trigger ? trigger : undefined;\n    // onOpenStart callback\n    if (typeof this.options.onOpenStart === 'function') {\n      this.options.onOpenStart.call(this, this.el, this._openingTrigger);\n    }\n    if (this.options.preventScrolling) {\n      const hasVerticalScrollBar = document.documentElement.scrollHeight > document.documentElement.clientHeight\n      if (hasVerticalScrollBar) {\n        const scrollTop = document.documentElement.scrollTop;\n        document.documentElement.style.top = '-' + scrollTop + \"px\";\n        document.documentElement.classList.add('noscroll');\n      }\n    }\n    this.el.classList.add('open');\n    this.el.insertAdjacentElement('afterend', this._overlay);\n    if (this.options.dismissible) {\n      document.addEventListener('keydown', this._handleKeydown);\n      document.addEventListener('focus', this._handleFocus, true);\n    }\n    this._animateIn();\n    // Focus modal\n    this.el.focus();\n    return this;\n  }\n\n  /**\n   * Close modal.\n   */\n  close = () => {\n    if (!this.isOpen) return;\n    this.isOpen = false;\n    Modal._modalsOpen--;\n    this._nthModalOpened = 0;\n    // Call onCloseStart callback\n    if (typeof this.options.onCloseStart === 'function') {\n      this.options.onCloseStart.call(this, this.el);\n    }\n    this.el.classList.remove('open');\n    // Enable body scrolling only if there are no more modals open.\n    if (Modal._modalsOpen === 0) {\n      const scrollTop = -parseInt(document.documentElement.style.top);\n      document.documentElement.style.removeProperty(\"top\");\n      document.documentElement.classList.remove('noscroll');\n      document.documentElement.scrollTop = scrollTop;\n    }\n    if (this.options.dismissible) {\n      document.removeEventListener('keydown', this._handleKeydown);\n      document.removeEventListener('focus', this._handleFocus, true);\n    }\n    this._animateOut();\n    return this;\n  }\n\n  static{\n    Modal._modalsOpen = 0;\n    Modal._count = 0;\n  }\n}\n","import { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface ParallaxOptions extends BaseOptions {\n  /**\n   * The minimum width of the screen, in pixels, where the parallax functionality starts working.\n   * @default 0\n   */\n  responsiveThreshold: number;\n}\n\nlet _defaults: ParallaxOptions = {\n  responsiveThreshold: 0 // breakpoint for swipeable\n};\n\nexport class Parallax extends Component<ParallaxOptions> {\n  private _enabled: boolean;\n  private _img: HTMLImageElement;\n  static _parallaxes: Parallax[] = [];\n  static _handleScrollThrottled: () => any;\n  static _handleWindowResizeThrottled: () => any;\n\n  constructor(el: HTMLElement, options: Partial<ParallaxOptions>) {\n    super(el, options, Parallax);\n    (this.el as any).M_Parallax = this;\n\n    this.options = {\n      ...Parallax.defaults,\n      ...options\n    };\n    \n    this._enabled = window.innerWidth > this.options.responsiveThreshold;\n    this._img = this.el.querySelector('img');\n    this._updateParallax();\n    this._setupEventHandlers();\n    this._setupStyles();\n    Parallax._parallaxes.push(this);\n  }\n\n  static get defaults(): ParallaxOptions {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of Parallax.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLElement, options?: Partial<ParallaxOptions>): Parallax;\n  /**\n   * Initializes instances of Parallax.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<MElement>, options?: Partial<ParallaxOptions>): Parallax[];\n  /**\n   * Initializes instances of Parallax.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLElement | InitElements<MElement>, options: Partial<ParallaxOptions> = {}): Parallax | Parallax[] {\n    return super.init(els, options, Parallax);\n  }\n\n  static getInstance(el: HTMLElement): Parallax {\n    return (el as any).M_Parallax;\n  }\n\n  destroy() {\n    Parallax._parallaxes.splice(Parallax._parallaxes.indexOf(this), 1);\n    this._img.style.transform = '';\n    this._removeEventHandlers();\n    (this.el as any).M_Parallax = undefined;\n  }\n\n  static _handleScroll() {\n    for (let i = 0; i < Parallax._parallaxes.length; i++) {\n      let parallaxInstance = Parallax._parallaxes[i];\n      parallaxInstance._updateParallax.call(parallaxInstance);\n    }\n  }\n\n  static _handleWindowResize() {\n    for (let i = 0; i < Parallax._parallaxes.length; i++) {\n      let parallaxInstance = Parallax._parallaxes[i];\n      parallaxInstance._enabled =\n        window.innerWidth > parallaxInstance.options.responsiveThreshold;\n    }\n  }\n\n  _setupEventHandlers() {\n    this._img.addEventListener('load', this._handleImageLoad);\n    if (Parallax._parallaxes.length === 0) {\n      if (!Parallax._handleScrollThrottled){\n        Parallax._handleScrollThrottled = Utils.throttle(Parallax._handleScroll, 5);\n      }\n      if (!Parallax._handleWindowResizeThrottled){\n        Parallax._handleWindowResizeThrottled = Utils.throttle(Parallax._handleWindowResize, 5);\n      }\n      window.addEventListener('scroll', Parallax._handleScrollThrottled);\n      window.addEventListener('resize', Parallax._handleWindowResizeThrottled);\n    }\n  }\n\n  _removeEventHandlers() {\n    this._img.removeEventListener('load', this._handleImageLoad);\n    if (Parallax._parallaxes.length === 0) {\n      window.removeEventListener('scroll', Parallax._handleScrollThrottled);\n      window.removeEventListener('resize', Parallax._handleWindowResizeThrottled);\n    }\n  }\n\n  _setupStyles() {\n    this._img.style.opacity = '1';\n  }\n\n  _handleImageLoad = () => {\n    this._updateParallax();\n  }\n\n  private _offset(el: Element) {\n    const box = el.getBoundingClientRect();\n    const docElem = document.documentElement;\n    return {\n      top: box.top + window.pageYOffset - docElem.clientTop,\n      left: box.left + window.pageXOffset - docElem.clientLeft\n    };\n  }\n\n  _updateParallax() {\n    const containerHeight = this.el.getBoundingClientRect().height > 0 ? (this.el.parentNode as any).offsetHeight : 500;\n    const imgHeight = this._img.offsetHeight;\n    const parallaxDist = imgHeight - containerHeight;\n    const bottom = this._offset(this.el).top + containerHeight;\n    const top = this._offset(this.el).top;\n    const scrollTop = Utils.getDocumentScrollTop();\n    const windowHeight = window.innerHeight;\n    const windowBottom = scrollTop + windowHeight;\n    const percentScrolled = (windowBottom - top) / (containerHeight + windowHeight);\n    const parallax = parallaxDist * percentScrolled;\n\n    if (!this._enabled) {\n      this._img.style.transform = '';\n    }\n    else if (bottom > scrollTop && top < scrollTop + windowHeight) {\n      this._img.style.transform = `translate3D(-50%, ${parallax}px, 0)`;\n    }\n  }\n}\n","import { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface PushpinOptions extends BaseOptions {\n  /**\n   * The distance in pixels from the top of the page where\n   * the element becomes fixed.\n   * @default 0\n   */\n  top: number;\n  /**\n   * The distance in pixels from the top of the page where\n   * the elements stops being fixed.\n   * @default Infinity\n   */\n  bottom: number;\n  /**\n   * The offset from the top the element will be fixed at.\n   * @default 0\n   */\n  offset: number;\n  /**\n   * Callback function called when pushpin position changes.\n   * You are provided with a position string.\n   * @default null\n   */\n  onPositionChange: (position: \"pinned\" | \"pin-top\" | \"pin-bottom\") => void;\n}\n\nlet _defaults = {\n  top: 0,\n  bottom: Infinity,\n  offset: 0,\n  onPositionChange: null\n};\n\nexport class Pushpin extends Component<PushpinOptions> {\n  static _pushpins: any[];\n  originalOffset: any;\n\n  constructor(el: HTMLElement, options: Partial<PushpinOptions>) {\n    super(el, options, Pushpin);\n    (this.el as any).M_Pushpin = this;\n\n    this.options = {\n      ...Pushpin.defaults,\n      ...options\n    };\n\n    this.originalOffset = (this.el as HTMLElement).offsetTop;\n    Pushpin._pushpins.push(this);\n    this._setupEventHandlers();\n    this._updatePosition();\n  }\n\n  static get defaults(): PushpinOptions {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of Pushpin.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLElement, options?: Partial<PushpinOptions>): Pushpin;\n  /**\n   * Initializes instances of Pushpin.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<MElement>, options?: Partial<PushpinOptions>): Pushpin[];\n  /**\n   * Initializes instances of Pushpin.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLElement | InitElements<MElement>, options: Partial<PushpinOptions> = {}): Pushpin | Pushpin[] {\n    return super.init(els, options, Pushpin);\n  }\n\n  static getInstance(el: HTMLElement): Pushpin {\n    return (el as any).M_Pushpin;\n  }\n\n  destroy() {\n    (this.el as HTMLElement).style.top = null;\n    this._removePinClasses();\n    // Remove pushpin Inst\n    let index = Pushpin._pushpins.indexOf(this);\n    Pushpin._pushpins.splice(index, 1);\n    if (Pushpin._pushpins.length === 0) {\n      this._removeEventHandlers();\n    }\n    (this.el as any).M_Pushpin = undefined;\n  }\n\n  static _updateElements() {\n    for (let elIndex in Pushpin._pushpins) {\n      let pInstance = Pushpin._pushpins[elIndex];\n      pInstance._updatePosition();\n    }\n  }\n\n  _setupEventHandlers() {\n    document.addEventListener('scroll', Pushpin._updateElements);\n  }\n\n  _removeEventHandlers() {\n    document.removeEventListener('scroll', Pushpin._updateElements);\n  }\n\n  _updatePosition() {\n    let scrolled = Utils.getDocumentScrollTop() + this.options.offset;\n\n    if (\n      this.options.top <= scrolled &&\n      this.options.bottom >= scrolled &&\n      !this.el.classList.contains('pinned')\n    ) {\n      this._removePinClasses();\n      (this.el as HTMLElement).style.top = `${this.options.offset}px`;\n      this.el.classList.add('pinned');\n\n      // onPositionChange callback\n      if (typeof this.options.onPositionChange === 'function') {\n        this.options.onPositionChange.call(this, 'pinned');\n      }\n    }\n\n    // Add pin-top (when scrolled position is above top)\n    if (scrolled < this.options.top && !this.el.classList.contains('pin-top')) {\n      this._removePinClasses();\n      (this.el as HTMLElement).style.top = '0';\n      this.el.classList.add('pin-top');\n\n      // onPositionChange callback\n      if (typeof this.options.onPositionChange === 'function') {\n        this.options.onPositionChange.call(this, 'pin-top');\n      }\n    }\n\n    // Add pin-bottom (when scrolled position is below bottom)\n    if (scrolled > this.options.bottom && !this.el.classList.contains('pin-bottom')) {\n      this._removePinClasses();\n      this.el.classList.add('pin-bottom');\n      (this.el as HTMLElement).style.top = `${this.options.bottom - this.originalOffset}px`;\n\n      // onPositionChange callback\n      if (typeof this.options.onPositionChange === 'function') {\n        this.options.onPositionChange.call(this, 'pin-bottom');\n      }\n    }\n  }\n\n  _removePinClasses() {\n    // IE 11 bug (can't remove multiple classes in one line)\n    this.el.classList.remove('pin-top');\n    this.el.classList.remove('pinned');\n    this.el.classList.remove('pin-bottom');\n  }\n\n  static {\n    Pushpin._pushpins = [];\n  }\n}\n","import { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface RangeOptions extends BaseOptions {};\n\nconst _defaults: RangeOptions = {};\n\n// TODO: !!!!!\n\nexport class Range extends Component<RangeOptions> {\n  declare el: HTMLInputElement;\n  private _mousedown: boolean;\n  value: HTMLElement;\n  thumb: HTMLElement;\n\n  constructor(el: HTMLInputElement, options: Partial<RangeOptions>) {\n    super(el, options, Range);\n    (this.el as any).M_Range = this;\n\n    this.options = {\n      ...Range.defaults,\n      ...options\n    };\n\n    this._mousedown = false;\n    this._setupThumb();\n    this._setupEventHandlers();\n  }\n\n  static get defaults(): RangeOptions {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of Range.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLInputElement, options?: Partial<RangeOptions>): Range;\n  /**\n   * Initializes instances of Range.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<HTMLInputElement | MElement>, options?: Partial<RangeOptions>): Range[];\n  /**\n   * Initializes instances of Range.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLInputElement | InitElements<HTMLInputElement | MElement>, options: Partial<RangeOptions> = {}): Range | Range[] {\n    return super.init(els, options, Range);\n  }\n\n  static getInstance(el: HTMLInputElement): Range {\n    return (el as any).M_Range;\n  }\n\n  destroy() {\n    this._removeEventHandlers();\n    this._removeThumb();\n    (this.el as any).M_Range = undefined;\n  }\n\n  _setupEventHandlers() {\n    this.el.addEventListener('change', this._handleRangeChange);\n    this.el.addEventListener('mousedown', this._handleRangeMousedownTouchstart);\n    this.el.addEventListener('touchstart', this._handleRangeMousedownTouchstart);\n    this.el.addEventListener('input', this._handleRangeInputMousemoveTouchmove);\n    this.el.addEventListener('mousemove', this._handleRangeInputMousemoveTouchmove);\n    this.el.addEventListener('touchmove', this._handleRangeInputMousemoveTouchmove);\n    this.el.addEventListener('mouseup', this._handleRangeMouseupTouchend);\n    this.el.addEventListener('touchend', this._handleRangeMouseupTouchend);\n    this.el.addEventListener('blur', this._handleRangeBlurMouseoutTouchleave);\n    this.el.addEventListener('mouseout', this._handleRangeBlurMouseoutTouchleave);\n    this.el.addEventListener('touchleave', this._handleRangeBlurMouseoutTouchleave);\n  }\n\n  _removeEventHandlers() {\n    this.el.removeEventListener('change', this._handleRangeChange);\n    this.el.removeEventListener('mousedown', this._handleRangeMousedownTouchstart);\n    this.el.removeEventListener('touchstart', this._handleRangeMousedownTouchstart);\n    this.el.removeEventListener('input', this._handleRangeInputMousemoveTouchmove);\n    this.el.removeEventListener('mousemove', this._handleRangeInputMousemoveTouchmove);\n    this.el.removeEventListener('touchmove', this._handleRangeInputMousemoveTouchmove);\n    this.el.removeEventListener('mouseup', this._handleRangeMouseupTouchend);\n    this.el.removeEventListener('touchend', this._handleRangeMouseupTouchend);\n    this.el.removeEventListener('blur', this._handleRangeBlurMouseoutTouchleave);\n    this.el.removeEventListener('mouseout', this._handleRangeBlurMouseoutTouchleave);\n    this.el.removeEventListener('touchleave', this._handleRangeBlurMouseoutTouchleave);\n  }\n\n  _handleRangeChange = () => {\n    this.value.innerHTML = this.el.value;\n    if (!this.thumb.classList.contains('active')) {\n      this._showRangeBubble();\n    }\n    const offsetLeft = this._calcRangeOffset();\n    this.thumb.classList.add('active');\n    this.thumb.style.left = offsetLeft+'px';\n  }\n\n  _handleRangeMousedownTouchstart = (e: MouseEvent | TouchEvent) => {\n    // Set indicator value\n    this.value.innerHTML = this.el.value;\n    this._mousedown = true;\n    this.el.classList.add('active');\n    if (!this.thumb.classList.contains('active')) {\n      this._showRangeBubble();\n    }\n    if (e.type !== 'input') {\n      const offsetLeft = this._calcRangeOffset();\n      this.thumb.classList.add('active');\n      this.thumb.style.left = offsetLeft+'px';\n    }\n  }\n\n  _handleRangeInputMousemoveTouchmove = () => {\n    if (this._mousedown) {\n      if (!this.thumb.classList.contains('active')) {\n        this._showRangeBubble();\n      }\n      const offsetLeft = this._calcRangeOffset();\n      this.thumb.classList.add('active');\n      this.thumb.style.left = offsetLeft+'px';\n      this.value.innerHTML = this.el.value;\n    }\n  }\n\n  _handleRangeMouseupTouchend = () => {\n    this._mousedown = false;\n    this.el.classList.remove('active');\n  }\n\n  _handleRangeBlurMouseoutTouchleave = () => {\n    if (!this._mousedown) {\n      const paddingLeft = parseInt(getComputedStyle(this.el).paddingLeft);\n      const marginLeftText = 7 + paddingLeft + 'px';\n      if (this.thumb.classList.contains('active')) {\n        const duration = 100;\n        // from\n        this.thumb.style.transition = 'none';\n        setTimeout(() => {\n          this.thumb.style.transition = `\n            height ${duration}ms ease,\n            width ${duration}ms ease,\n            top ${duration}ms ease,\n            margin ${duration}ms ease\n          `;\n          // to          \n          this.thumb.style.height = '0';\n          this.thumb.style.width = '0';\n          this.thumb.style.top = '0';\n          this.thumb.style.marginLeft = marginLeftText;\n        }, 1);\n      }\n      this.thumb.classList.remove('active');\n    }\n  }\n\n  _setupThumb() {\n    this.thumb = document.createElement('span');\n    this.value = document.createElement('span');\n    this.thumb.classList.add('thumb');\n    this.value.classList.add('value');\n    this.thumb.append(this.value);\n    this.el.after(this.thumb);\n  }\n\n  _removeThumb() {\n    this.thumb.remove();\n  }\n\n  _showRangeBubble() {\n    const paddingLeft = parseInt(getComputedStyle(this.thumb.parentElement).paddingLeft);\n    const marginLeftText = -7 + paddingLeft + 'px'; // TODO: fix magic number?\n    const duration = 300;\n    // easeOutQuint\n    this.thumb.style.transition = `\n      height ${duration}ms ease,\n      width ${duration}ms ease,\n      top ${duration}ms ease,\n      margin ${duration}ms ease\n    `;\n    // to\n    this.thumb.style.height = '30px';\n    this.thumb.style.width = '30px';\n    this.thumb.style.top = '-30px';\n    this.thumb.style.marginLeft = marginLeftText;\n  }\n\n  _calcRangeOffset(): number {\n    const width = this.el.getBoundingClientRect().width - 15;\n    const max = parseFloat(this.el.getAttribute('max')) || 100; // Range default max\n    const min = parseFloat(this.el.getAttribute('min')) || 0; // Range default min\n    const percent = (parseFloat(this.el.value) - min) / (max - min);\n    return percent * width;\n  }\n\n  /**\n   * Initializes every range input in the current document.\n   */\n  static Init(){\n    Range.init((document.querySelectorAll('input[type=range]')) as NodeListOf<HTMLInputElement>, {});\n  }\n}\n","import { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface ScrollSpyOptions extends BaseOptions {\n  /**\n   * Throttle of scroll handler.\n   * @default 100\n   */\n  throttle: number;\n  /**\n   * Offset for centering element when scrolled to.\n   * @default 200\n   */\n  scrollOffset: number;\n  /**\n   * Class applied to active elements.\n   * @default 'active'\n   */\n  activeClass: string;\n  /**\n   * Used to find active element.\n   * @default id => 'a[href=\"#' + id + '\"]'\n   */\n  getActiveElement: (id: string) => string;\n};\n\nlet _defaults: ScrollSpyOptions = {\n  throttle: 100,\n  scrollOffset: 200, // offset - 200 allows elements near bottom of page to scroll\n  activeClass: 'active',\n  getActiveElement: (id: string): string => { return 'a[href=\"#'+id+'\"]'; }\n};\n\nexport class ScrollSpy extends Component<ScrollSpyOptions> {\n  static _elements: ScrollSpy[];\n  static _count: number;\n  static _increment: number;\n  tickId: number;\n  id: any;\n  static _elementsInView: ScrollSpy[];\n  static _visibleElements: any[];\n  static _ticks: number;\n\n  constructor(el: HTMLElement, options: Partial<ScrollSpyOptions>) {\n    super(el, options, ScrollSpy);\n    (this.el as any).M_ScrollSpy = this;\n\n    this.options = {\n      ...ScrollSpy.defaults,\n      ...options\n    };\n\n    ScrollSpy._elements.push(this);\n    ScrollSpy._count++;\n    ScrollSpy._increment++;\n    this.tickId = -1;\n    this.id = ScrollSpy._increment;\n    this._setupEventHandlers();\n    this._handleWindowScroll();\n  }\n\n  static get defaults(): ScrollSpyOptions {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of ScrollSpy.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLElement, options?: Partial<ScrollSpyOptions>): ScrollSpy;\n  /**\n   * Initializes instances of ScrollSpy.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<MElement>, options?: Partial<ScrollSpyOptions>): ScrollSpy[];\n  /**\n   * Initializes instances of ScrollSpy.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLElement | InitElements<MElement>, options: Partial<ScrollSpyOptions> = {}): ScrollSpy | ScrollSpy[] {\n    return super.init(els, options, ScrollSpy);\n  }\n\n  static getInstance(el: HTMLElement): ScrollSpy {\n    return (el as any).M_ScrollSpy;\n  }\n\n  destroy() {\n    ScrollSpy._elements.splice(ScrollSpy._elements.indexOf(this), 1);\n    ScrollSpy._elementsInView.splice(ScrollSpy._elementsInView.indexOf(this), 1);\n    ScrollSpy._visibleElements.splice(ScrollSpy._visibleElements.indexOf(this.el), 1);\n    ScrollSpy._count--;\n    this._removeEventHandlers();\n    const actElem = document.querySelector(this.options.getActiveElement(this.el.id));\n    actElem.classList.remove(this.options.activeClass);\n    (this.el as any).M_ScrollSpy = undefined;\n  }\n\n  _setupEventHandlers() {\n    if (ScrollSpy._count === 1) {\n      window.addEventListener('scroll', this._handleWindowScroll);\n      window.addEventListener('resize', this._handleThrottledResize);\n      document.body.addEventListener('click', this._handleTriggerClick);\n    }\n  }\n\n  _removeEventHandlers() {\n    if (ScrollSpy._count === 0) {\n      window.removeEventListener('scroll', this._handleWindowScroll);\n      window.removeEventListener('resize', this._handleThrottledResize);\n      document.body.removeEventListener('click', this._handleTriggerClick);\n    }\n  }\n\n  _handleThrottledResize: () => void = Utils.throttle(function(){ this._handleWindowScroll(); }, 200).bind(this); \n\n  _handleTriggerClick = (e: MouseEvent) => {\n    const trigger = e.target;\n    for (let i = ScrollSpy._elements.length - 1; i >= 0; i--) {\n      const scrollspy = ScrollSpy._elements[i];\n      const x = document.querySelector('a[href=\"#'+scrollspy.el.id+'\"]');\n      if (trigger === x) {\n        e.preventDefault();\n        scrollspy.el.scrollIntoView({behavior: 'smooth'});\n        break;\n      }\n    }\n  }\n\n  _handleWindowScroll = () => {\n    // unique tick id\n    ScrollSpy._ticks++;\n\n    // viewport rectangle\n    let top = Utils.getDocumentScrollTop(),\n      left = Utils.getDocumentScrollLeft(),\n      right = left + window.innerWidth,\n      bottom = top + window.innerHeight;\n\n    // determine which elements are in view\n    let intersections = ScrollSpy._findElements(top, right, bottom, left);\n    for (let i = 0; i < intersections.length; i++) {\n      let scrollspy = intersections[i];\n      let lastTick = scrollspy.tickId;\n      if (lastTick < 0) {\n        // entered into view\n        scrollspy._enter();\n      }\n\n      // update tick id\n      scrollspy.tickId = ScrollSpy._ticks;\n    }\n\n    for (let i = 0; i < ScrollSpy._elementsInView.length; i++) {\n      let scrollspy = ScrollSpy._elementsInView[i];\n      let lastTick = scrollspy.tickId;\n      if (lastTick >= 0 && lastTick !== ScrollSpy._ticks) {\n        // exited from view\n        scrollspy._exit();\n        scrollspy.tickId = -1;\n      }\n    }\n    // remember elements in view for next tick\n    ScrollSpy._elementsInView = intersections;\n  }\n\n  static _offset(el) {\n    const box = el.getBoundingClientRect();\n    const docElem = document.documentElement;\n    return {\n      top: box.top + window.pageYOffset - docElem.clientTop,\n      left: box.left + window.pageXOffset - docElem.clientLeft\n    };\n  }\n\n  static _findElements(top: number, right: number, bottom: number, left: number): ScrollSpy[] {\n    let hits = [];\n    for (let i = 0; i < ScrollSpy._elements.length; i++) {\n      let scrollspy = ScrollSpy._elements[i];\n      let currTop = top + scrollspy.options.scrollOffset || 200;\n\n      if (scrollspy.el.getBoundingClientRect().height > 0) {\n        let elTop = ScrollSpy._offset(scrollspy.el).top,\n          elLeft = ScrollSpy._offset(scrollspy.el).left,\n          elRight = elLeft + scrollspy.el.getBoundingClientRect().width,\n          elBottom = elTop + scrollspy.el.getBoundingClientRect().height;\n\n        let isIntersect = !(\n          elLeft > right ||\n          elRight < left ||\n          elTop > bottom ||\n          elBottom < currTop\n        );\n\n        if (isIntersect) {\n          hits.push(scrollspy);\n        }\n      }\n    }\n    return hits;\n  }\n\n  _enter() {\n    ScrollSpy._visibleElements = ScrollSpy._visibleElements.filter(value => value.getBoundingClientRect().height !== 0);\n\n    if (ScrollSpy._visibleElements[0]) {\n      const actElem = document.querySelector(this.options.getActiveElement(ScrollSpy._visibleElements[0].id));\n      actElem?.classList.remove(this.options.activeClass);\n\n      if (ScrollSpy._visibleElements[0].M_ScrollSpy && this.id < ScrollSpy._visibleElements[0].M_ScrollSpy.id) {\n        ScrollSpy._visibleElements.unshift(this.el);\n      }\n      else {\n        ScrollSpy._visibleElements.push(this.el);\n      }\n    }\n    else {\n      ScrollSpy._visibleElements.push(this.el);\n    }\n    const selector = this.options.getActiveElement(ScrollSpy._visibleElements[0].id);\n    document.querySelector(selector)?.classList.add(this.options.activeClass);\n  }\n\n  _exit() {\n    ScrollSpy._visibleElements = ScrollSpy._visibleElements.filter(value => value.getBoundingClientRect().height !== 0);\n\n    if (ScrollSpy._visibleElements[0]) {\n      const actElem = document.querySelector(this.options.getActiveElement(ScrollSpy._visibleElements[0].id));\n      actElem?.classList.remove(this.options.activeClass);\n\n      ScrollSpy._visibleElements = ScrollSpy._visibleElements.filter((x) => x.id != this.el.id);\n\n      if (ScrollSpy._visibleElements[0]) {\n        // Check if empty\n        const selector = this.options.getActiveElement(ScrollSpy._visibleElements[0].id);\n        document.querySelector(selector)?.classList.add(this.options.activeClass);\n      }\n    }\n  }\n\n  static {\n    ScrollSpy._elements = [];\n    ScrollSpy._elementsInView = [];\n    ScrollSpy._visibleElements = []; // Array.<cash>\n    ScrollSpy._count = 0;\n    ScrollSpy._increment = 0;\n    ScrollSpy._ticks = 0;\n  }\n}\n","import { Utils } from \"./utils\";\nimport { Dropdown, DropdownOptions } from \"./dropdown\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface FormSelectOptions extends BaseOptions {\n  /**\n   * Classes to be added to the select wrapper element.\n   * @default \"\"\n   */\n  classes: string;\n  /**\n   * Pass options object to select dropdown initialization.\n   * @default {}\n   */\n  dropdownOptions: Partial<DropdownOptions>;\n}\n\nlet _defaults: FormSelectOptions = {\n  classes: '',\n  dropdownOptions: {}\n};\n\ntype ValueStruct = {\n  el: HTMLOptionElement,\n  optionEl: HTMLElement,\n}\n\nexport class FormSelect extends Component<FormSelectOptions> {\n  declare el: HTMLSelectElement;\n  /** If this is a multiple select. */\n  isMultiple: boolean;\n  /**\n   * Label associated with the current select element.\n   * Is \"null\", if not detected.\n   */\n  labelEl: HTMLLabelElement;\n  /** Dropdown UL element. */\n  dropdownOptions: HTMLUListElement;\n  /** Text input that shows current selected option. */\n  input: HTMLInputElement;\n  /** Instance of the dropdown plugin for this select. */\n  dropdown: Dropdown;\n  /** The select wrapper element. */\n  wrapper: HTMLDivElement;\n  selectOptions: (HTMLOptionElement|HTMLOptGroupElement)[];\n  private _values: ValueStruct[];\n\n  constructor(el: HTMLSelectElement, options: FormSelectOptions) {\n    super(el, options, FormSelect);\n    if (this.el.classList.contains('browser-default')) return;\n    (this.el as any).M_FormSelect = this;\n\n    this.options = {\n      ...FormSelect.defaults,\n      ...options\n    };\n    \n    this.isMultiple = this.el.multiple;\n    this.el.tabIndex = -1;\n    this._values = [];\n    //this.labelEl = null;\n    //this._labelFor = false;\n    this._setupDropdown();\n    this._setupEventHandlers();\n  }\n\n  static get defaults(): FormSelectOptions {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of FormSelect.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLSelectElement, options?: Partial<FormSelectOptions>): FormSelect;\n  /**\n   * Initializes instances of FormSelect.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<HTMLSelectElement | MElement>, options?: Partial<FormSelectOptions>): FormSelect[];\n  /**\n   * Initializes instances of FormSelect.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLSelectElement | InitElements<HTMLSelectElement | MElement>, options: Partial<FormSelectOptions> = {}): FormSelect | FormSelect[] {\n    return super.init(els, options, FormSelect);\n  }\n\n  static getInstance(el: HTMLElement): FormSelect {\n    return (el as any).M_FormSelect;\n  }\n\n  destroy() {\n    // Returns label to its original owner\n    //if (this._labelFor) this.labelEl.setAttribute(\"for\", this.el.id);\n    this._removeEventHandlers();\n    this._removeDropdown();\n    (this.el as any).M_FormSelect = undefined;\n  }\n\n  _setupEventHandlers() {\n    this.dropdownOptions.querySelectorAll('li:not(.optgroup)').forEach((el) => {\n      el.addEventListener('click', this._handleOptionClick);\n      el.addEventListener('keydown', (e: KeyboardEvent) => {\n        if (e.key === \" \" || e.key === \"Enter\") this._handleOptionClick(e);\n      });\n    });\n    this.el.addEventListener('change', this._handleSelectChange);\n    this.input.addEventListener('click', this._handleInputClick);\n  }\n\n  _removeEventHandlers() {\n    this.dropdownOptions.querySelectorAll('li:not(.optgroup)').forEach((el) => {\n      el.removeEventListener('click', this._handleOptionClick);\n    });\n    this.el.removeEventListener('change', this._handleSelectChange);\n    this.input.removeEventListener('click', this._handleInputClick);\n  }\n\n  _handleSelectChange = () => {\n    this._setValueToInput();\n  }\n\n  _handleOptionClick = (e: MouseEvent | KeyboardEvent) => {\n    e.preventDefault();\n    const virtualOption = (e.target as HTMLLIElement).closest('li');\n    this._selectOptionElement(virtualOption);\n    e.stopPropagation();\n  }\n\n  _arraysEqual<T, E>(a: T[], b: (E|T)[]) {\n    if (a === b) return true;\n    if (a == null || b == null) return false;\n    if (a.length !== b.length) return false;\n    for (let i = 0; i < a.length; ++i) if (a[i] !== b[i]) return false;\n    return true;\n  }\n\n  _selectOptionElement(virtualOption: HTMLElement) {\n    if (!virtualOption.classList.contains('disabled') && !virtualOption.classList.contains('optgroup')) {\n      const value = this._values.find((value) => value.optionEl === virtualOption);\n      const previousSelectedValues = this.getSelectedValues();\n      if (this.isMultiple) {\n        // Multi-Select\n        this._toggleEntryFromArray(value);\n      }\n      else {\n        // Single-Select\n        this._deselectAll();\n        this._selectValue(value);\n      }\n      // Refresh Input-Text\n      this._setValueToInput();\n      // Trigger Change-Event only when data is different\n      const actualSelectedValues = this.getSelectedValues();\n      const selectionHasChanged = !this._arraysEqual(\n        previousSelectedValues,\n        actualSelectedValues\n      );\n      if (selectionHasChanged) this.el.dispatchEvent(new Event('change',{bubbles:true, cancelable:true, composed:true})); // trigger('change');\n    }\n    if (!this.isMultiple) this.dropdown.close();\n  }\n\n  _handleInputClick = () => {\n    if (this.dropdown && this.dropdown.isOpen) {\n      this._setValueToInput();\n      this._setSelectedStates();\n    }\n  }\n\n  _setupDropdown() {\n    // Get Label\n    this.labelEl = this.el.parentElement.querySelector('label');\n\n    // Create Wrapper\n    this.wrapper = document.createElement('div');\n    this.wrapper.classList.add('select-wrapper', 'input-field');\n    if (this.options.classes.length > 0) {\n      this.wrapper.classList.add(...this.options.classes.split(' '));\n    }\n    this.el.before(this.wrapper);\n\n    // Move actual select element into overflow hidden wrapper\n    const hideSelect = document.createElement('div');\n    hideSelect.classList.add('hide-select');\n    this.wrapper.append(hideSelect);\n    hideSelect.appendChild(this.el);\n\n    if (this.el.disabled) this.wrapper.classList.add('disabled');\n\n    this.selectOptions = <(HTMLOptGroupElement|HTMLOptionElement)[]>Array.from(this.el.children).filter(el => ['OPTION','OPTGROUP'].includes(el.tagName));\n\n    // Create dropdown\n    this.dropdownOptions = document.createElement('ul');\n    this.dropdownOptions.id = `select-options-${Utils.guid()}`;\n    this.dropdownOptions.classList.add('dropdown-content', 'select-dropdown');\n    this.dropdownOptions.setAttribute('role', 'listbox');\n    this.dropdownOptions.ariaMultiSelectable = this.isMultiple.toString();\n    if (this.isMultiple) this.dropdownOptions.classList.add('multiple-select-dropdown');\n\n    // Create dropdown structure\n    if (this.selectOptions.length > 0) {\n      this.selectOptions.forEach((realOption) => {\n        if (realOption.tagName === 'OPTION') {\n          // Option\n          const virtualOption = this._createAndAppendOptionWithIcon(realOption, this.isMultiple ? 'multiple' : undefined);\n          this._addOptionToValues(realOption as HTMLOptionElement, virtualOption);\n        }\n        else if (realOption.tagName === 'OPTGROUP') {\n          // Optgroup\n          const groupId = \"opt-group-\"+Utils.guid();\n          const groupParent = document.createElement('li');\n          groupParent.classList.add('optgroup');\n          groupParent.tabIndex = -1;\n          groupParent.setAttribute('role', 'group');\n          groupParent.setAttribute('aria-labelledby', groupId);\n          groupParent.innerHTML = `<span id=\"${groupId}\" role=\"presentation\">${realOption.getAttribute('label')}</span>`;\n          this.dropdownOptions.append(groupParent);\n\n          const groupChildren = [];\n          const selectOptions = <HTMLOptionElement[]>Array.from(realOption.children).filter(el => el.tagName === 'OPTION');\n          selectOptions.forEach(realOption => {\n            const virtualOption = this._createAndAppendOptionWithIcon(realOption, 'optgroup-option');\n            const childId = \"opt-child-\"+Utils.guid();\n            virtualOption.id = childId;\n            groupChildren.push(childId);\n            this._addOptionToValues(realOption, virtualOption);\n          });\n          groupParent.setAttribute(\"aria-owns\", groupChildren.join(\" \"));\n        }\n      });\n    }\n    this.wrapper.append(this.dropdownOptions);\n\n    // Add input dropdown\n    this.input = document.createElement('input');\n    this.input.id = \"m_select-input-\" + Utils.guid();\n    this.input.classList.add('select-dropdown', 'dropdown-trigger');\n    this.input.type = 'text';\n    this.input.readOnly = true;\n    this.input.setAttribute('data-target', this.dropdownOptions.id);\n    this.input.ariaReadOnly = 'true';\n    this.input.ariaRequired = this.el.hasAttribute(\"required\").toString(); //setAttribute(\"aria-required\", this.el.hasAttribute(\"required\"));\n    if (this.el.disabled) this.input.disabled = true; // 'true');\n\n    // Place Label after input\n    if (this.labelEl) {\n      this.input.after(this.labelEl);\n      this.labelEl.setAttribute('for', this.input.id);\n      this.labelEl.id = \"m_select-label-\" + Utils.guid();\n      this.dropdownOptions.setAttribute(\"aria-labelledby\", this.labelEl.id);\n    }\n\n    // Makes new element to assume HTML's select label and aria-attributes, if exists\n    /*\n    if (this.el.hasAttribute(\"aria-labelledby\")){\n      this.labelEl = <HTMLLabelElement>document.getElementById(this.el.getAttribute(\"aria-labelledby\"));\n    }\n    else if (this.el.id != \"\"){\n      const label = document.createElement('label');\n      label.setAttribute('for', this.el.id);\n      if (label){\n        this.labelEl = label;\n        this.labelEl.removeAttribute(\"for\");\n        this._labelFor = true;\n      }\n    }\n    */\n    // Tries to find a valid label in parent element\n    // if (!this.labelEl) {\n    //   this.labelEl = this.el.parentElement.querySelector('label');\n    // }\n    // if (this.labelEl && this.labelEl.id == \"\") {\n    //   this.labelEl.id = \"m_select-label-\" + Utils.guid();\n    // }\n    // if (this.labelEl) {\n    //   this.labelEl.setAttribute(\"for\", this.input.id);\n    //   this.dropdownOptions.setAttribute(\"aria-labelledby\", this.labelEl.id);\n    // }\n    // else\n    //   this.dropdownOptions.ariaLabel = '';\n\n    const attrs = this.el.attributes;\n    for (let i = 0; i < attrs.length; ++i){\n      const attr = attrs[i];\n      if (attr.name.startsWith(\"aria-\"))\n        this.input.setAttribute(attr.name, attr.value);\n    }\n\n    // Adds aria-attributes to input element\n    this.input.setAttribute('role', 'combobox');\n    this.input.ariaExpanded = 'false';\n    this.input.setAttribute(\"aria-owns\", this.dropdownOptions.id);\n    this.input.setAttribute(\"aria-controls\", this.dropdownOptions.id);\n    this.input.placeholder = \" \";\n\n    this.wrapper.prepend(this.input);\n    this._setValueToInput();\n\n    // Add caret\n    const dropdownIcon = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); //document.createElement('svg')\n    dropdownIcon.classList.add('caret');\n    dropdownIcon.setAttribute('height', '24');\n    dropdownIcon.setAttribute('width', '24');\n    dropdownIcon.setAttribute('viewBox', '0 0 24 24');\n    dropdownIcon.ariaHidden = 'true';\n    dropdownIcon.innerHTML = `<path d=\"M7 10l5 5 5-5z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/>`;\n    this.wrapper.prepend(dropdownIcon);\n\n    // Initialize dropdown\n    if (!this.el.disabled) {\n      const dropdownOptions = {...this.options.dropdownOptions}; // TODO:\n      dropdownOptions.coverTrigger = false;\n      const userOnOpenEnd = dropdownOptions.onOpenEnd;\n      const userOnCloseEnd = dropdownOptions.onCloseEnd;\n      // Add callback for centering selected option when dropdown content is scrollable\n      dropdownOptions.onOpenEnd = (el) => {\n        const selectedOption = this.dropdownOptions.querySelector('.selected');\n        if (selectedOption) {\n          // Focus selected option in dropdown\n          Utils.keyDown = true;\n          this.dropdown.focusedIndex = [...selectedOption.parentNode.children].indexOf(selectedOption);\n          this.dropdown._focusFocusedItem();\n          Utils.keyDown = false;\n          // Handle scrolling to selected option\n          if (this.dropdown.isScrollable) {\n            let scrollOffset =\n              selectedOption.getBoundingClientRect().top -\n              (this.dropdownOptions as HTMLElement).getBoundingClientRect().top; // scroll to selected option\n            scrollOffset -= this.dropdownOptions.clientHeight / 2; // center in dropdown\n            this.dropdownOptions.scrollTop = scrollOffset;\n          }\n        }\n        this.input.ariaExpanded = 'true';\n        // Handle user declared onOpenEnd if needed\n        if (userOnOpenEnd && typeof userOnOpenEnd === 'function')\n          userOnOpenEnd.call(this.dropdown, this.el);\n      };\n      // Add callback for reseting \"expanded\" state\n      dropdownOptions.onCloseEnd = (el) => {\n        this.input.ariaExpanded = 'false';\n        // Handle user declared onOpenEnd if needed\n        if (userOnCloseEnd && typeof userOnCloseEnd === 'function')\n          userOnCloseEnd.call(this.dropdown, this.el);\n      };\n      // Prevent dropdown from closing too early\n      dropdownOptions.closeOnClick = false;\n      this.dropdown = Dropdown.init(this.input, dropdownOptions);\n    }\n    // Add initial selections\n    this._setSelectedStates();\n\n    // ! Workaround for Label: move label up again\n    if (this.labelEl) this.input.after(this.labelEl);\n  }\n\n  _addOptionToValues(realOption: HTMLOptionElement, virtualOption: HTMLElement) {\n    this._values.push({ el: realOption, optionEl: virtualOption });\n  }\n\n  _removeDropdown() {\n    this.wrapper.querySelector('.caret').remove();\n    this.input.remove();\n    this.dropdownOptions.remove();\n    this.wrapper.before(this.el);\n    this.wrapper.remove();\n  }\n\n  _createAndAppendOptionWithIcon(realOption, type: string) {\n    const li = document.createElement('li');\n    li.setAttribute('role', 'option');\n    if (realOption.disabled){\n      li.classList.add('disabled');\n      li.ariaDisabled = 'true';\n    }\n    if (type === 'optgroup-option') li.classList.add(type);\n    // Text / Checkbox\n    const span = document.createElement('span');\n    if (this.isMultiple)\n      span.innerHTML = `<label><input type=\"checkbox\"${\n        realOption.disabled ? ' disabled=\"disabled\"' : ''\n      }><span>${realOption.innerHTML}</span></label>`;\n    else\n      span.innerHTML = realOption.innerHTML;\n    li.appendChild(span);\n    // add Icon\n    const iconUrl = realOption.getAttribute('data-icon');\n    const classes = realOption.getAttribute('class')?.split();\n    if (iconUrl) {\n      const img = document.createElement('img');\n      if (classes) img.classList.add(classes);\n      img.src = iconUrl;\n      img.ariaHidden = 'true';\n      li.prepend(img);\n    }\n    // Check for multiple type\n    this.dropdownOptions.append(li);\n    return li;\n  }\n\n  _selectValue(value: ValueStruct) {\n    value.el.selected = true;\n    value.optionEl.classList.add('selected');\n    value.optionEl.ariaSelected = 'true'; // setAttribute(\"aria-selected\", true);\n    const checkbox = <HTMLInputElement>value.optionEl.querySelector('input[type=\"checkbox\"]');\n    if (checkbox) checkbox.checked = true;\n  }\n\n  _deselectValue(value: ValueStruct) {\n    value.el.selected = false;\n    value.optionEl.classList.remove('selected');\n    value.optionEl.ariaSelected = 'false'; //setAttribute(\"aria-selected\", false);\n    const checkbox = <HTMLInputElement>value.optionEl.querySelector('input[type=\"checkbox\"]');\n    if (checkbox) checkbox.checked = false;\n  }\n\n  _deselectAll() {\n    this._values.forEach(value => this._deselectValue(value));\n  }\n\n  _isValueSelected(value: ValueStruct) {\n    const realValues = this.getSelectedValues();\n    return realValues.some((realValue) => realValue === value.el.value);\n  }\n\n  _toggleEntryFromArray(value: ValueStruct) {\n    if (this._isValueSelected(value))\n      this._deselectValue(value);\n    else\n      this._selectValue(value);\n  }\n\n  _getSelectedOptions(): HTMLOptionElement[] {\n    // remove null, false, ... values\n    return Array.prototype.filter.call(this.el.selectedOptions, (realOption: HTMLOptionElement) => realOption);\n  }\n\n  _setValueToInput() {\n    const realOptions = this._getSelectedOptions();\n    const values = this._values.filter((value) => realOptions.indexOf(value.el) >= 0);\n    const texts = values.map((value) => value.optionEl.querySelector('span').innerText.trim());\n    // Set input-text to first Option with empty value which indicates a description like \"choose your option\"\n    if (texts.length === 0) {\n      const firstDisabledOption = <HTMLOptionElement>this.el.querySelector('option:disabled');\n      if (firstDisabledOption && firstDisabledOption.value === '') {\n        this.input.value = firstDisabledOption.innerText;\n        return;\n      }\n    }\n    this.input.value = texts.join(', ');\n  }\n\n  _setSelectedStates() {\n    this._values.forEach((value) => {\n      const optionIsSelected = value.el.selected;\n      const cb = <HTMLInputElement>value.optionEl.querySelector('input[type=\"checkbox\"]');\n      if (cb) cb.checked = optionIsSelected;\n      if (optionIsSelected) {\n        this._activateOption(this.dropdownOptions, value.optionEl);\n      }\n      else {\n        value.optionEl.classList.remove('selected');\n        value.optionEl.ariaSelected = 'false'; // attr(\"aria-selected\", 'false');\n      }\n    });\n  }\n\n  _activateOption(ul: HTMLElement, li: HTMLElement) {\n    if (!li) return;\n    if (!this.isMultiple) ul.querySelectorAll('li.selected').forEach(li => li.classList.remove('selected'));\n    li.classList.add('selected');\n    li.ariaSelected = 'true';\n  }\n\n  getSelectedValues() {\n    return this._getSelectedOptions().map((realOption) => realOption.value);\n  }\n}\n","import { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement, Openable } from \"./component\";\n\nexport interface SidenavOptions extends BaseOptions {\n  /**\n   * Side of screen on which Sidenav appears.\n   * @default 'left'\n   */\n  edge: 'left' | 'right';\n  /**\n   * Allow swipe gestures to open/close Sidenav.\n   * @default true\n   */\n  draggable: boolean;\n  /**\n   * Width of the area where you can start dragging.\n   * @default '10px'\n   */\n  dragTargetWidth: string;\n  /**\n   * Length in ms of enter transition.\n   * @default 250\n   */\n  inDuration: number;\n  /**\n   * Length in ms of exit transition.\n   * @default 200\n   */\n  outDuration: number;\n  /**\n   * Prevent page from scrolling while sidenav is open.\n   * @default true\n   */\n  preventScrolling: boolean;\n  /**\n   * Function called when sidenav starts entering.\n   */\n  onOpenStart: (elem: HTMLElement) => void;\n  /**\n   * Function called when sidenav finishes entering.\n   */\n  onOpenEnd: (elem: HTMLElement) => void;\n  /**\n   * Function called when sidenav starts exiting.\n   */\n  onCloseStart: (elem: HTMLElement) => void;\n  /**\n   * Function called when sidenav finishes exiting.\n   */\n  onCloseEnd: (elem: HTMLElement) => void;\n}\n\nconst _defaults: SidenavOptions = {\n  edge: 'left',\n  draggable: true,\n  dragTargetWidth: '10px',\n  inDuration: 250,\n  outDuration: 200,\n  onOpenStart: null,\n  onOpenEnd: null,\n  onCloseStart: null,\n  onCloseEnd: null,\n  preventScrolling: true\n};\n\nexport class Sidenav extends Component<SidenavOptions> implements Openable {\n  id: string;\n  /** Describes open/close state of Sidenav. */\n  isOpen: boolean;\n  /** Describes if sidenav is fixed. */\n  isFixed: boolean;\n  /** Describes if Sidenav is being dragged. */\n  isDragged: boolean;\n  lastWindowWidth: number;\n  lastWindowHeight: number;\n  static _sidenavs: Sidenav[];\n  private _overlay: HTMLElement;\n  dragTarget: Element;\n  private _startingXpos: number;\n  private _xPos: number;\n  private _time: number;\n  private _width: number;\n  private _initialScrollTop: number;\n  private _verticallyScrolling: boolean;\n  private deltaX: number;\n  private velocityX: number;\n  private percentOpen: number;\n\n  constructor(el: HTMLElement, options: Partial<SidenavOptions>) {\n    super(el, options, Sidenav);\n    (this.el as any).M_Sidenav = this;\n\n    this.options = {\n      ...Sidenav.defaults,\n      ...options\n    };\n\n    this.id = this.el.id;\n    this.isOpen = false;\n    this.isFixed = this.el.classList.contains('sidenav-fixed');\n    this.isDragged = false;\n    // Window size variables for window resize checks\n    this.lastWindowWidth = window.innerWidth;\n    this.lastWindowHeight = window.innerHeight;\n    this._createOverlay();\n    this._createDragTarget();\n    this._setupEventHandlers();\n    this._setupClasses();\n    this._setupFixed();\n    Sidenav._sidenavs.push(this);\n  }\n\n  static get defaults(): SidenavOptions {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of Sidenav.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLElement, options?: Partial<SidenavOptions>): Sidenav;\n  /**\n   * Initializes instances of Sidenav.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<MElement>, options?: Partial<SidenavOptions>): Sidenav[];\n  /**\n   * Initializes instances of Sidenav.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLElement | InitElements<MElement>, options: Partial<SidenavOptions> = {}): Sidenav | Sidenav[] {\n    return super.init(els, options, Sidenav);\n  }\n\n  static getInstance(el: HTMLElement): Sidenav {\n    return (el as any).M_Sidenav;\n  }\n\n  destroy() {\n    this._removeEventHandlers();\n    this._enableBodyScrolling();\n    this._overlay.parentNode.removeChild(this._overlay);\n    this.dragTarget.parentNode.removeChild(this.dragTarget);\n    (this.el as any).M_Sidenav = undefined;\n    this.el.style.transform = '';\n    const index = Sidenav._sidenavs.indexOf(this);\n    if (index >= 0) {\n      Sidenav._sidenavs.splice(index, 1);\n    }\n  }\n\n  private _createOverlay() {\n    this._overlay = document.createElement('div');\n    this._overlay.classList.add('sidenav-overlay');\n    this._overlay.addEventListener('click', this.close);\n    document.body.appendChild(this._overlay);\n  }\n\n  private _setupEventHandlers() {\n    if (Sidenav._sidenavs.length === 0) {\n      document.body.addEventListener('click', this._handleTriggerClick);\n    }\n    var passiveIfSupported: boolean = null;\n    this.dragTarget.addEventListener('touchmove', this._handleDragTargetDrag, passiveIfSupported);\n    this.dragTarget.addEventListener('touchend', this._handleDragTargetRelease);\n    this._overlay.addEventListener('touchmove', this._handleCloseDrag, passiveIfSupported);\n    this._overlay.addEventListener('touchend', this._handleCloseRelease);\n    this.el.addEventListener('touchmove', this._handleCloseDrag, passiveIfSupported);\n    this.el.addEventListener('touchend', this._handleCloseRelease);\n    this.el.addEventListener('click', this._handleCloseTriggerClick);\n    // Add resize for side nav fixed\n    if (this.isFixed) {\n      window.addEventListener('resize', this._handleWindowResize);\n    }\n  }\n\n  private _removeEventHandlers() {\n    if (Sidenav._sidenavs.length === 1) {\n      document.body.removeEventListener('click', this._handleTriggerClick);\n    }\n    this.dragTarget.removeEventListener('touchmove', this._handleDragTargetDrag);\n    this.dragTarget.removeEventListener('touchend', this._handleDragTargetRelease);\n    this._overlay.removeEventListener('touchmove', this._handleCloseDrag);\n    this._overlay.removeEventListener('touchend', this._handleCloseRelease);\n    this.el.removeEventListener('touchmove', this._handleCloseDrag);\n    this.el.removeEventListener('touchend', this._handleCloseRelease);\n    this.el.removeEventListener('click', this._handleCloseTriggerClick);\n\n    // Remove resize for side nav fixed\n    if (this.isFixed) {\n      window.removeEventListener('resize', this._handleWindowResize);\n    }\n  }\n\n  private _handleTriggerClick(e) {\n    const trigger = e.target.closest('.sidenav-trigger');\n    if (e.target && trigger) {\n      const sidenavId = Utils.getIdFromTrigger(trigger);\n      const sidenavInstance = (document.getElementById(sidenavId) as any).M_Sidenav;\n      if (sidenavInstance) {\n        sidenavInstance.open(trigger);\n      }\n      e.preventDefault();\n    }\n  }\n\n  // Set variables needed at the beginning of drag and stop any current transition.\n  private _startDrag(e) {\n    const clientX = e.targetTouches[0].clientX;\n    this.isDragged = true;\n    this._startingXpos = clientX;\n    this._xPos = this._startingXpos;\n    this._time = Date.now();\n    this._width = this.el.getBoundingClientRect().width;\n    this._overlay.style.display = 'block';\n    this._initialScrollTop = this.isOpen ? this.el.scrollTop : Utils.getDocumentScrollTop();\n    this._verticallyScrolling = false;\n  }\n\n  //Set variables needed at each drag move update tick\n  private _dragMoveUpdate(e) {\n    const clientX = e.targetTouches[0].clientX;\n    const currentScrollTop = this.isOpen ? this.el.scrollTop : Utils.getDocumentScrollTop();\n    this.deltaX = Math.abs(this._xPos - clientX);\n    this._xPos = clientX;\n    this.velocityX = this.deltaX / (Date.now() - this._time);\n    this._time = Date.now();\n    if (this._initialScrollTop !== currentScrollTop) {\n      this._verticallyScrolling = true;\n    }\n  }\n\n  private _handleDragTargetDrag = (e) => {\n    // Check if draggable\n    if (!this.options.draggable || this._isCurrentlyFixed() || this._verticallyScrolling) {\n      return;\n    }\n    // If not being dragged, set initial drag start variables\n    if (!this.isDragged) {\n      this._startDrag(e);\n    }\n    // Run touchmove updates\n    this._dragMoveUpdate(e);\n    // Calculate raw deltaX\n    let totalDeltaX = this._xPos - this._startingXpos;\n    // dragDirection is the attempted user drag direction\n    const dragDirection = totalDeltaX > 0 ? 'right' : 'left';\n    // Don't allow totalDeltaX to exceed Sidenav width or be dragged in the opposite direction\n    totalDeltaX = Math.min(this._width, Math.abs(totalDeltaX));\n    if (this.options.edge === dragDirection) {\n      totalDeltaX = 0;\n    }\n    /**\n     * transformX is the drag displacement\n     * transformPrefix is the initial transform placement\n     * Invert values if Sidenav is right edge\n     */\n    let transformX = totalDeltaX;\n    let transformPrefix = 'translateX(-100%)';\n    if (this.options.edge === 'right') {\n      transformPrefix = 'translateX(100%)';\n      transformX = -transformX;\n    }\n    // Calculate open/close percentage of sidenav, with open = 1 and close = 0\n    this.percentOpen = Math.min(1, totalDeltaX / this._width);\n    // Set transform and opacity styles\n    this.el.style.transform = `${transformPrefix} translateX(${transformX}px)`;\n    this._overlay.style.opacity = this.percentOpen.toString();\n  }\n\n  private _handleDragTargetRelease = () => {\n    if (this.isDragged) {\n      if (this.percentOpen > 0.2) {\n        this.open();\n      } else {\n        this._animateOut();\n      }\n      this.isDragged = false;\n      this._verticallyScrolling = false;\n    }\n  }\n\n  private _handleCloseDrag = (e) => {\n    if (this.isOpen) {\n      // Check if draggable\n      if (!this.options.draggable || this._isCurrentlyFixed() || this._verticallyScrolling) {\n        return;\n      }\n      // If not being dragged, set initial drag start variables\n      if (!this.isDragged) {\n        this._startDrag(e);\n      }\n      // Run touchmove updates\n      this._dragMoveUpdate(e);\n      // Calculate raw deltaX\n      let totalDeltaX = this._xPos - this._startingXpos;\n      // dragDirection is the attempted user drag direction\n      let dragDirection = totalDeltaX > 0 ? 'right' : 'left';\n      // Don't allow totalDeltaX to exceed Sidenav width or be dragged in the opposite direction\n      totalDeltaX = Math.min(this._width, Math.abs(totalDeltaX));\n      if (this.options.edge !== dragDirection) {\n        totalDeltaX = 0;\n      }\n      let transformX = -totalDeltaX;\n      if (this.options.edge === 'right') {\n        transformX = -transformX;\n      }\n      // Calculate open/close percentage of sidenav, with open = 1 and close = 0\n      this.percentOpen = Math.min(1, 1 - totalDeltaX / this._width);\n      // Set transform and opacity styles\n      this.el.style.transform = `translateX(${transformX}px)`;\n      this._overlay.style.opacity = this.percentOpen.toString();\n    }\n  }\n\n  private _handleCloseRelease = () => {\n    if (this.isOpen && this.isDragged) {\n      if (this.percentOpen > 0.8) {\n        this._animateIn();\n      } else {\n        this.close();\n      }\n      this.isDragged = false;\n      this._verticallyScrolling = false;\n    }\n  }\n\n  // Handles closing of Sidenav when element with class .sidenav-close\n  private _handleCloseTriggerClick = (e) => {\n    const closeTrigger = e.target.closest('.sidenav-close');\n    if (closeTrigger && !this._isCurrentlyFixed()) {\n      this.close();\n    }\n  }\n\n  private _handleWindowResize = () => {\n    // Only handle horizontal resizes\n    if (this.lastWindowWidth !== window.innerWidth) {\n      if (window.innerWidth > 992) {\n        this.open();\n      } else {\n        this.close();\n      }\n    }\n    this.lastWindowWidth = window.innerWidth;\n    this.lastWindowHeight = window.innerHeight;\n  }\n\n  private _setupClasses() {\n    if (this.options.edge === 'right') {\n      this.el.classList.add('right-aligned');\n      this.dragTarget.classList.add('right-aligned');\n    }\n  }\n\n  private _removeClasses() {\n    this.el.classList.remove('right-aligned');\n    this.dragTarget.classList.remove('right-aligned');\n  }\n\n  private _setupFixed() {\n    if (this._isCurrentlyFixed()) this.open();\n  }\n\n  private _isCurrentlyFixed() {\n    return this.isFixed && window.innerWidth > 992;\n  }\n\n  private _createDragTarget() {\n    const dragTarget = document.createElement('div');\n    dragTarget.classList.add('drag-target');\n    dragTarget.style.width = this.options.dragTargetWidth;\n    document.body.appendChild(dragTarget);\n    this.dragTarget = dragTarget;\n  }\n\n  private _preventBodyScrolling() {\n    document.body.style.overflow = 'hidden';\n  }\n\n  private _enableBodyScrolling() {\n    document.body.style.overflow = '';\n  }\n\n  /**\n   * Opens Sidenav.\n   */\n  open = () => {\n    if (this.isOpen === true) return;\n    this.isOpen = true;\n    // Run onOpenStart callback\n    if (typeof this.options.onOpenStart === 'function') {\n      this.options.onOpenStart.call(this, this.el);\n    }\n    // Handle fixed Sidenav\n    if (this._isCurrentlyFixed()) {\n      // Show if fixed\n      this.el.style.transform = 'translateX(0)';\n      this._enableBodyScrolling();\n      this._overlay.style.display = 'none';\n    }\n    // Handle non-fixed Sidenav\n    else {\n      if (this.options.preventScrolling) this._preventBodyScrolling();\n      if (!this.isDragged || this.percentOpen != 1) this._animateIn();\n    }\n  }\n\n  /**\n   * Closes Sidenav.\n   */\n  close = () => {\n    if (this.isOpen === false) return;\n    this.isOpen = false;\n    // Run onCloseStart callback\n    if (typeof this.options.onCloseStart === 'function') {\n      this.options.onCloseStart.call(this, this.el);\n    }\n    // Handle fixed Sidenav\n    if (this._isCurrentlyFixed()) {\n      const transformX = this.options.edge === 'left' ? '-105%' : '105%';\n      this.el.style.transform = `translateX(${transformX})`;\n    }\n    // Handle non-fixed Sidenav\n    else {\n      this._enableBodyScrolling();\n      if (!this.isDragged || this.percentOpen != 0) {\n        this._animateOut();\n      } else {\n        this._overlay.style.display = 'none';\n      }\n    }\n  }\n\n  private _animateIn() {\n    this._animateSidenavIn();\n    this._animateOverlayIn();\n  }\n\n  private _animateOut() {\n    this._animateSidenavOut();\n    this._animateOverlayOut();\n  }\n\n  private _animateSidenavIn() {\n    let slideOutPercent = this.options.edge === 'left' ? -1 : 1;\n    if (this.isDragged) {\n      slideOutPercent =\n        this.options.edge === 'left'\n          ? slideOutPercent + this.percentOpen\n          : slideOutPercent - this.percentOpen;\n    }\n    const duration = this.options.inDuration;\n    // from\n    this.el.style.transition = 'none';\n    this.el.style.transform = 'translateX(' + (slideOutPercent * 100) + '%)';\n    setTimeout(() => {\n      this.el.style.transition = `transform ${duration}ms ease`; // easeOutQuad\n      // to\n      this.el.style.transform = 'translateX(0)';\n    }, 1);\n    setTimeout(() => {\n      if (typeof this.options.onOpenEnd === 'function') this.options.onOpenEnd.call(this, this.el);\n    }, duration);\n  }\n\n  private _animateSidenavOut() {\n    const endPercent = this.options.edge === 'left' ? -1 : 1;\n    let slideOutPercent = 0;\n    if (this.isDragged) {\n      slideOutPercent =\n        this.options.edge === 'left'\n          ? endPercent + this.percentOpen\n          : endPercent - this.percentOpen;\n    }\n\n    const duration = this.options.outDuration;\n    this.el.style.transition = `transform ${duration}ms ease`; // easeOutQuad\n    // to\n    this.el.style.transform = 'translateX(' + (endPercent * 100) + '%)';\n    setTimeout(() => {\n      if (typeof this.options.onCloseEnd === 'function') this.options.onCloseEnd.call(this, this.el);\n    }, duration);\n  }\n\n  private _animateOverlayIn() {\n    let start = 0;\n    if (this.isDragged) \n      start = this.percentOpen;\n    else\n      this._overlay.style.display = 'block';\n    // Animation\n    const duration = this.options.inDuration;\n    // from\n    this._overlay.style.transition = 'none';\n    this._overlay.style.opacity = start.toString();\n    // easeOutQuad\n    setTimeout(() => {\n      this._overlay.style.transition = `opacity ${duration}ms ease`;\n      // to\n      this._overlay.style.opacity = '1';      \n    }, 1);\n  }\n\n  private _animateOverlayOut() {\n    const duration = this.options.outDuration;\n    // easeOutQuad\n    this._overlay.style.transition = `opacity ${duration}ms ease`;\n    // to\n    this._overlay.style.opacity = '0';  \n    setTimeout(() => {\n      this._overlay.style.display = 'none';\n    }, duration);\n  }\n\n  static  {\n    Sidenav._sidenavs = [];\n  }\n}\n","import { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface SliderOptions extends BaseOptions {\n  /**\n   * Set to false to hide slide indicators.\n   * @default true\n   */\n  indicators: boolean;\n  /**\n   * Set height of slider.\n   * @default 400\n   */\n  height: number;\n  /**\n   * Set the duration of the transition animation in ms.\n   * @default 500\n   */\n  duration: number;\n  /**\n   * Set the duration between transitions in ms.\n   * @default 6000\n   */\n  interval: number;\n  /**\n   * If slider should pause when keyboard focus is received.\n   * @default true\n   */\n  pauseOnFocus: boolean;\n  /**\n   * If slider should pause when is hovered by a pointer.\n   * @default true\n   */\n  pauseOnHover: boolean;\n  /**\n   * Optional function used to generate ARIA label to indicators (for accessibility purposes).\n   * @param index Current index, starting from \"1\".\n   * @param current A which indicates whether it is the current element or not\n   * @returns a string to be used as label indicator.\n   * @default null\n   */\n  indicatorLabelFunc: (index: number, current: boolean) => string\n}\n\nlet _defaults: SliderOptions = {\n  indicators: true,\n  height: 400,\n  duration: 500,\n  interval: 6000,\n  pauseOnFocus: true,\n  pauseOnHover: true,\n  indicatorLabelFunc: null // Function which will generate a label for the indicators (ARIA)\n};\n\nexport class Slider extends Component<SliderOptions> {\n  /** Index of current slide. */\n  activeIndex: number;\n  interval: string | number | NodeJS.Timeout;\n  eventPause: any;\n  _slider: HTMLUListElement;\n  _slides: HTMLLIElement[];\n  _activeSlide: HTMLLIElement;\n  _indicators: HTMLLIElement[];\n  _hovered: boolean;\n  _focused: boolean;\n  _focusCurrent: boolean;\n  _sliderId: string;\n\n  constructor(el: HTMLElement, options: Partial<SliderOptions>) {\n    super(el, options, Slider);\n    (this.el as any).M_Slider = this;\n\n    this.options = {\n      ...Slider.defaults,\n      ...options\n    };\n\n    // init props\n    this.interval = null;\n    this.eventPause = false;\n    this._hovered = false;\n    this._focused = false;\n    this._focusCurrent = false;\n\n    // setup\n    this._slider = this.el.querySelector('.slides');\n    this._slides = Array.from(this._slider.querySelectorAll('li'));\n    this.activeIndex = this._slides.findIndex(li => li.classList.contains('active'));\n\n    if (this.activeIndex !== -1) {\n      this._activeSlide = this._slides[this.activeIndex];\n    }\n\n    this._setSliderHeight();\n\n    // Sets element id if it does not have one\n    if (this._slider.hasAttribute('id'))\n      this._sliderId = this._slider.getAttribute('id');\n    else {\n      this._sliderId = 'slider-' + Utils.guid();\n      this._slider.setAttribute('id', this._sliderId);\n    }\n\n    const placeholderBase64 = 'data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n    // Set initial positions of captions\n    this._slides.forEach(slide => {\n      // Caption\n      //const caption = <HTMLElement|null>slide.querySelector('.caption');\n      //if (caption) this._animateCaptionIn(caption, 0);\n      // Set Images as Background Images\n      const img = slide.querySelector('img');\n      if (img) {\n        if (img.src !== placeholderBase64) {\n          img.style.backgroundImage = 'url('+ img.src +')';\n          img.src = placeholderBase64;\n        }\n      }\n      // Sets slide as focusable by code\n      if (!slide.hasAttribute('tabindex'))\n        slide.setAttribute('tabindex', '-1');\n      // Removes initial visibility from \"inactive\" slides\n      slide.style.visibility = 'hidden';\n    });\n\n    this._setupIndicators();\n\n    // Show active slide\n    if (this._activeSlide) {\n      this._activeSlide.style.display = 'block';\n      this._activeSlide.style.visibility = 'visible';\n    }\n    else {\n      this.activeIndex = 0;\n      this._slides[0].classList.add('active');\n      this._slides[0].style.visibility = 'visible';\n      this._activeSlide = this._slides[0];\n      this._animateSlide(this._slides[0], true);\n      // Update indicators\n      if (this.options.indicators) {\n        this._indicators[this.activeIndex].children[0].classList.add('active');\n      }\n    }\n    this._setupEventHandlers();\n    // auto scroll\n    this.start();\n  }\n\n  static get defaults() {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of Slider.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLElement, options?: Partial<SliderOptions>): Slider;\n  /**\n   * Initializes instances of Slider.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<MElement>, options?: Partial<SliderOptions>): Slider[];\n  /**\n   * Initializes instances of Slider.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLElement | InitElements<MElement>, options: Partial<SliderOptions> = {}): Slider | Slider[] {\n    return super.init(els, options, Slider);\n  }\n\n  static getInstance(el: HTMLElement): Slider {\n    return (el as any).M_Slider;\n  }\n\n  destroy() {\n    this.pause();\n    this._removeIndicators();\n    this._removeEventHandlers();\n    (this.el as any).M_Slider = undefined;\n  }\n\n  private _setupEventHandlers() {\n    if (this.options.pauseOnFocus) {\n      this.el.addEventListener('focusin', this._handleAutoPauseFocus);\n      this.el.addEventListener('focusout', this._handleAutoStartFocus);\n    }\n    if (this.options.pauseOnHover) {\n      this.el.addEventListener('mouseenter', this._handleAutoPauseHover);\n      this.el.addEventListener('mouseleave', this._handleAutoStartHover);\n    }\n    if (this.options.indicators) {\n      this._indicators.forEach((el) => {\n        el.addEventListener('click', this._handleIndicatorClick);\n      });\n    }\n  }\n\n  private _removeEventHandlers() {\n    if (this.options.pauseOnFocus) {\n      this.el.removeEventListener('focusin', this._handleAutoPauseFocus);\n      this.el.removeEventListener('focusout', this._handleAutoStartFocus);\n    }\n    if (this.options.pauseOnHover) {\n      this.el.removeEventListener('mouseenter', this._handleAutoPauseHover);\n      this.el.removeEventListener('mouseleave', this._handleAutoStartHover);\n    }\n    if (this.options.indicators) {\n      this._indicators.forEach((el) => {\n        el.removeEventListener('click', this._handleIndicatorClick);\n      });\n    }\n  }\n\n  private _handleIndicatorClick = (e: MouseEvent) => {\n    const el = (<HTMLElement>e.target).parentElement;\n    const currIndex = [...el.parentNode.children].indexOf(el);\n    this._focusCurrent = true;\n    this.set(currIndex);\n  }\n\n  private _handleAutoPauseHover = () => {\n    this._hovered = true;\n    if (this.interval != null) {\n      this._pause(true);\n    }\n  }\n\n  private _handleAutoPauseFocus = () => {\n    this._focused = true;\n    if (this.interval != null) {\n      this._pause(true);\n    }\n  }\n\n  private _handleAutoStartHover = () => {\n    this._hovered = false;\n    if (!(this.options.pauseOnFocus && this._focused) && this.eventPause) {\n      this.start();\n    }\n  }\n\n  private _handleAutoStartFocus = () => {\n    this._focused = false;\n    if (!(this.options.pauseOnHover && this._hovered) && this.eventPause) {\n      this.start();\n    }\n  }\n\n  private _handleInterval = () => {\n    const activeElem = this._slider.querySelector('.active');\n    let newActiveIndex = [...activeElem.parentNode.children].indexOf(activeElem);\n    if (this._slides.length === newActiveIndex + 1)\n      newActiveIndex = 0; // loop to start\n    else\n      newActiveIndex += 1;\n    this.set(newActiveIndex);\n  }\n\n  private _animateSlide(slide: HTMLElement, isDirectionIn: boolean): void {\n    let dx = 0, dy = 0;\n    // from\n    slide.style.opacity = isDirectionIn ? '0' : '1';\n    setTimeout(() => {\n      slide.style.transition = `opacity ${this.options.duration}ms ease`;\n      // to\n      slide.style.opacity = isDirectionIn ? '1' : '0';\n    }, 1);\n    // Caption\n    const caption: HTMLElement = slide.querySelector('.caption');\n    if (!caption) return;\n    if (caption.classList.contains('center-align')) dy = -100;\n    else if (caption.classList.contains('right-align')) dx = 100;\n    else if (caption.classList.contains('left-align')) dx = -100;\n    // from\n    caption.style.opacity = isDirectionIn ? '0' : '1';\n    caption.style.transform = isDirectionIn ? `translate(${dx}px, ${dy}px)` : `translate(0, 0)`;\n    setTimeout(() => {\n      caption.style.transition = `opacity ${this.options.duration}ms ease, transform ${this.options.duration}ms ease`;\n      // to\n      caption.style.opacity = isDirectionIn ? '1' : '0';\n      caption.style.transform = isDirectionIn ? `translate(0, 0)` : `translate(${dx}px, ${dy}px)`;\n    }, this.options.duration); // delay\n  }\n\n  private _setSliderHeight() {\n    // If fullscreen, do nothing\n    if (!this.el.classList.contains('fullscreen')) {\n      if (this.options.indicators) {\n        // Add height if indicators are present\n        this.el.style.height = (this.options.height + 40)+'px'; //.css('height', this.options.height + 40 + 'px');\n      }\n      else {\n        this.el.style.height = this.options.height + 'px';\n      }\n      this._slider.style.height = this.options.height + 'px';\n    }\n  }\n\n  private _setupIndicators() {\n    if (this.options.indicators) {\n      const ul = document.createElement('ul');\n      ul.classList.add('indicators');\n\n      const arrLi = [];\n      this._slides.forEach((el, i) => {\n        const label = this.options.indicatorLabelFunc\n          ? this.options.indicatorLabelFunc.call(this, i + 1, i === 0)\n          : `${i + 1}`;\n        const li = document.createElement('li');\n        li.classList.add('indicator-item');\n        li.innerHTML = `<button type=\"button\" class=\"indicator-item-btn\" aria-label=\"${label}\" aria-controls=\"${this._sliderId}\"></button>`;\n        arrLi.push(li);\n        ul.append(li);\n      });\n\n      this.el.append(ul);\n      this._indicators = arrLi;\n    }\n  }\n\n  private _removeIndicators() {\n    this.el.querySelector('ul.indicators').remove(); //find('ul.indicators').remove();\n  }\n\n  set(index: number) {\n    // Wrap around indices.\n    if (index >= this._slides.length) index = 0;\n    else if (index < 0) index = this._slides.length - 1;\n\n    // Only do if index changes\n    if (this.activeIndex === index) return;\n\n    this._activeSlide = this._slides[this.activeIndex];\n    const _caption = <HTMLElement|null>this._activeSlide.querySelector('.caption');\n\n    this._activeSlide.classList.remove('active');\n    // Enables every slide\n    this._slides.forEach(slide => slide.style.visibility = 'visible');\n\n    //--- Hide active Slide + Caption\n    this._activeSlide.style.opacity = '0';\n    setTimeout(() => {\n      this._slides.forEach(slide => {\n        if (slide.classList.contains('active')) return;\n        slide.style.opacity = '0';\n        slide.style.transform = 'translate(0, 0)';\n        // Disables invisible slides (for assistive technologies)\n        slide.style.visibility = 'hidden';\n      });\n\n    }, this.options.duration);\n\n    // Hide active Caption\n    //this._animateCaptionIn(_caption, this.options.duration);\n    _caption.style.opacity = '0';\n\n    // Update indicators\n    if (this.options.indicators) {\n      const activeIndicator = this._indicators[this.activeIndex].children[0];\n      const nextIndicator = this._indicators[index].children[0];\n      activeIndicator.classList.remove('active');\n      nextIndicator.classList.add('active');\n      if (typeof this.options.indicatorLabelFunc === \"function\"){\n        activeIndicator.ariaLabel = this.options.indicatorLabelFunc.call(this, this.activeIndex, false);\n        nextIndicator.ariaLabel = this.options.indicatorLabelFunc.call(this, index, true);\n      }\n    }\n\n    //--- Show new Slide + Caption\n    this._animateSlide(this._slides[index], true);\n    this._slides[index].classList.add('active');\n    this.activeIndex = index;\n\n    // Reset interval, if allowed. This check prevents autostart\n    // when slider is paused, since it can be changed though indicators.\n    if (this.interval != null) {\n      this.start();\n    }\n  }\n\n  _pause(fromEvent: boolean) {\n    clearInterval(this.interval);\n    this.eventPause = fromEvent;\n    this.interval = null;\n  }\n\n  /**\n   * Pause slider autoslide.\n   */\n  pause = () => {\n    this._pause(false);\n  }\n\n  /**\n   * Start slider autoslide.\n   */\n  start = () => {\n    clearInterval(this.interval);\n    this.interval = setInterval(\n      this._handleInterval,\n      this.options.duration + this.options.interval\n    );\n    this.eventPause = false;\n  }\n\n  /**\n   * Move to next slider.\n   */\n  next = () => {\n    let newIndex = this.activeIndex + 1;\n    // Wrap around indices.\n    if (newIndex >= this._slides.length) newIndex = 0;\n    else if (newIndex < 0) newIndex = this._slides.length - 1;\n    this.set(newIndex);\n  }\n\n  /**\n   * Move to prev slider.\n   */\n  prev = () => {\n    let newIndex = this.activeIndex - 1;\n    // Wrap around indices.\n    if (newIndex >= this._slides.length) newIndex = 0;\n    else if (newIndex < 0) newIndex = this._slides.length - 1;\n    this.set(newIndex);\n  }\n}\n","import { Carousel } from \"./carousel\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport interface TabsOptions extends BaseOptions {\n  /**\n   * Transition duration in milliseconds.\n   * @default 300\n   */\n  duration: number;\n  /**\n   * Callback for when a new tab content is shown.\n   * @default null\n   */\n  onShow: (newContent: Element) => void;\n  /**\n   * Set to true to enable swipeable tabs.\n   * This also uses the responsiveThreshold option.\n   * @default false\n   */\n  swipeable: boolean;\n  /**\n   * The maximum width of the screen, in pixels,\n   * where the swipeable functionality initializes.\n   * @default infinity\n   */\n  responsiveThreshold: number;\n};\n\nlet _defaults: TabsOptions = {\n  duration: 300,\n  onShow: null,\n  swipeable: false,\n  responsiveThreshold: Infinity // breakpoint for swipeable\n};\n\nexport class Tabs extends Component<TabsOptions> {\n  _tabLinks: NodeListOf<HTMLAnchorElement>;\n  _index: number;\n  _indicator: HTMLLIElement;\n  _tabWidth: number;\n  _tabsWidth: number;\n  _tabsCarousel: any;\n  _activeTabLink: any;\n  _content: any;\n\n  constructor(el: HTMLElement, options: Partial<TabsOptions>) {\n    super(el, options, Tabs);\n    (this.el as any).M_Tabs = this;\n\n    this.options = {\n      ...Tabs.defaults,\n      ...options\n    };\n\n    this._tabLinks = this.el.querySelectorAll('li.tab > a');\n    this._index = 0;\n    this._setupActiveTabLink();\n    if (this.options.swipeable) {\n      this._setupSwipeableTabs();\n    } else {\n      this._setupNormalTabs();\n    }\n    // Setup tabs indicator after content to ensure accurate widths\n    this._setTabsAndTabWidth();\n    this._createIndicator();\n    this._setupEventHandlers();\n  }\n\n  static get defaults(): TabsOptions {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of Tabs.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLElement, options?: Partial<TabsOptions>): Tabs;\n  /**\n   * Initializes instances of Tabs.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<MElement>, options?: Partial<TabsOptions>): Tabs[];\n  /**\n   * Initializes instances of Tabs.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLElement | InitElements<MElement>, options: Partial<TabsOptions> = {}): Tabs | Tabs[] {\n    return super.init(els, options, Tabs);\n  }\n\n  static getInstance(el: HTMLElement): Tabs {\n    return (el as any).M_Tabs;\n  }\n\n  destroy() {\n    this._removeEventHandlers();\n    this._indicator.parentNode.removeChild(this._indicator);\n    if (this.options.swipeable) {\n      this._teardownSwipeableTabs();\n    }\n    else {\n      this._teardownNormalTabs();\n    }\n    (this.el as any).M_Tabs = undefined;\n  }\n\n  /**\n   * The index of tab that is currently shown.\n   */\n  get index(){ return this._index; }\n\n  _setupEventHandlers() {\n    window.addEventListener('resize', this._handleWindowResize);\n    this.el.addEventListener('click', this._handleTabClick);\n  }\n\n  _removeEventHandlers() {\n    window.removeEventListener('resize', this._handleWindowResize);\n    this.el.removeEventListener('click', this._handleTabClick);\n  }\n\n  _handleWindowResize = () => {\n    this._setTabsAndTabWidth();\n    if (this._tabWidth !== 0 && this._tabsWidth !== 0) {\n      this._indicator.style.left = this._calcLeftPos(this._activeTabLink)+'px';\n      this._indicator.style.right = this._calcRightPos(this._activeTabLink)+'px';\n    }\n  }\n\n  _handleTabClick = (e: MouseEvent) => {\n    const tabLink = e.target as HTMLAnchorElement;\n    const tab = tabLink.parentElement;\n    // Handle click on tab link only\n    if (!tabLink || !tab.classList.contains('tab')) return;\n    // is disabled?\n    if (tab.classList.contains('disabled')) {\n      e.preventDefault();\n      return;\n    }\n    // Act as regular link if target attribute is specified.\n    if (tabLink.hasAttribute('target')) return;\n    // Make the old tab inactive.\n    this._activeTabLink.classList.remove('active');\n    const _oldContent = this._content;\n    // Update the variables with the new link and content\n\n      this._activeTabLink = tabLink;\n      if (tabLink.hash)\n        this._content = document.querySelector(tabLink.hash);\n      this._tabLinks = this.el.querySelectorAll('li.tab > a');\n      // Make the tab active\n      this._activeTabLink.classList.add('active');\n      const prevIndex = this._index;\n      this._index = Math.max(Array.from(this._tabLinks).indexOf(tabLink), 0);\n\n    // Swap content\n    if (this.options.swipeable) {\n      if (this._tabsCarousel) {\n        this._tabsCarousel.set(this._index, () => {\n          if (typeof this.options.onShow === 'function')\n            this.options.onShow.call(this, this._content);\n        });\n      }\n    } else {\n      if (this._content) {\n        this._content.style.display = 'block';\n        this._content.classList.add('active');\n        if (typeof this.options.onShow === 'function')\n          this.options.onShow.call(this, this._content);\n        if (_oldContent && _oldContent !== this._content) {\n          _oldContent.style.display = 'none';\n          _oldContent.classList.remove('active');\n        }\n      }\n    }\n    // Update widths after content is swapped (scrollbar bugfix)\n    this._setTabsAndTabWidth();\n    this._animateIndicator(prevIndex);\n    e.preventDefault();\n  }\n\n  _createIndicator() {\n    const indicator = document.createElement('li');\n    indicator.classList.add('indicator');\n    this.el.appendChild(indicator);\n    this._indicator = indicator;\n    this._indicator.style.left = this._calcLeftPos(this._activeTabLink)+'px';\n    this._indicator.style.right = this._calcRightPos(this._activeTabLink)+'px';\n  }\n\n  _setupActiveTabLink() {\n    // If the location.hash matches one of the links, use that as the active tab.\n    this._activeTabLink = Array.from(this._tabLinks).find((a: HTMLAnchorElement) => a.getAttribute('href') === location.hash);\n    // If no match is found, use the first link or any with class 'active' as the initial active tab.\n    if (!this._activeTabLink) {\n      this._activeTabLink = this.el.querySelector('li.tab a.active');\n    }\n    if (this._activeTabLink.length === 0) {\n      this._activeTabLink = this.el.querySelector('li.tab a');\n    }\n    Array.from(this._tabLinks).forEach((a: HTMLAnchorElement) => a.classList.remove('active'));\n    this._activeTabLink.classList.add('active');\n\n      this._index = Math.max(Array.from(this._tabLinks).indexOf(this._activeTabLink), 0);\n      if (this._activeTabLink && this._activeTabLink.hash) {\n        this._content = document.querySelector(this._activeTabLink.hash);\n        if (this._content) \n          this._content.classList.add('active');\n      }\n    }\n\n  _setupSwipeableTabs() {\n    // Change swipeable according to responsive threshold\n    if (window.innerWidth > this.options.responsiveThreshold)\n      this.options.swipeable = false;\n\n      const tabsContent = [];\n      this._tabLinks.forEach(a => {\n        if (a.hash) {\n          const currContent = document.querySelector(a.hash);\n          currContent.classList.add('carousel-item');\n          tabsContent.push(currContent);  \n        }\n      });\n\n    // Create Carousel-Wrapper around Tab-Contents\n    const tabsWrapper = document.createElement('div');\n    tabsWrapper.classList.add('tabs-content', 'carousel', 'carousel-slider');\n\n    // Wrap around\n    tabsContent[0].parentElement.insertBefore(tabsWrapper, tabsContent[0]);\n    tabsContent.forEach(tabContent => {\n      tabsWrapper.appendChild(tabContent);\n      tabContent.style.display = '';\n    });\n\n    // Keep active tab index to set initial carousel slide\n    const tab = this._activeTabLink.parentElement;\n    const activeTabIndex = Array.from(tab.parentNode.children).indexOf(tab);\n\n    this._tabsCarousel = Carousel.init(tabsWrapper, {\n      fullWidth: true,\n      noWrap: true,\n      onCycleTo: (item) => {\n        const prevIndex = this._index;\n        this._index = Array.from(item.parentNode.children).indexOf(item);\n        this._activeTabLink.classList.remove('active');\n        this._activeTabLink = Array.from(this._tabLinks)[this._index];\n        this._activeTabLink.classList.add('active');\n        this._animateIndicator(prevIndex);\n        if (typeof this.options.onShow === 'function')\n          this.options.onShow.call(this, this._content);\n      }\n    });\n    // Set initial carousel slide to active tab\n    this._tabsCarousel.set(activeTabIndex);\n  }\n\n  _teardownSwipeableTabs() {\n    const tabsWrapper = this._tabsCarousel.el;\n    this._tabsCarousel.destroy();\n    // Unwrap\n    tabsWrapper.after(tabsWrapper.children);\n    tabsWrapper.remove();\n  }\n\n  _setupNormalTabs() {\n    // Hide Tabs Content\n    Array.from(this._tabLinks).forEach((a) => {\n      if (a === this._activeTabLink) return;\n      if ((<HTMLAnchorElement>a).hash) {\n        const currContent = document.querySelector((<HTMLAnchorElement>a).hash);\n        if (currContent) (<HTMLElement>currContent).style.display = 'none';\n      }\n    });\n  }\n\n  _teardownNormalTabs() {\n    // show Tabs Content\n    this._tabLinks.forEach((a) => {\n      if (a.hash) {\n        const currContent = document.querySelector(a.hash) as HTMLElement;\n        if (currContent) currContent.style.display = '';\n      }\n    });\n  }\n\n  _setTabsAndTabWidth() {\n    this._tabsWidth = this.el.getBoundingClientRect().width;\n    this._tabWidth = Math.max(this._tabsWidth, this.el.scrollWidth) / this._tabLinks.length;\n  }\n\n  _calcRightPos(el) {\n    return Math.ceil(this._tabsWidth - el.offsetLeft - el.getBoundingClientRect().width);\n  }\n\n  _calcLeftPos(el) {\n    return Math.floor(el.offsetLeft);\n  }\n\n  /**\n   * Recalculate tab indicator position. This is useful when\n   * the indicator position is not correct.\n   */\n  updateTabIndicator() {\n    this._setTabsAndTabWidth();\n    this._animateIndicator(this._index);\n  }\n\n  _animateIndicator(prevIndex) {\n    let leftDelay = 0, rightDelay = 0;\n\n    const isMovingLeftOrStaying = (this._index - prevIndex >= 0);\n    if (isMovingLeftOrStaying)\n      leftDelay = 90;\n    else\n      rightDelay = 90;\n\n    // in v1: easeOutQuad\n    this._indicator.style.transition = `\n      left ${this.options.duration}ms ease-out ${leftDelay}ms,\n      right ${this.options.duration}ms ease-out ${rightDelay}ms`;\n\n    this._indicator.style.left = this._calcLeftPos(this._activeTabLink) + 'px';\n    this._indicator.style.right = this._calcRightPos(this._activeTabLink) + 'px';\n  }\n\n  /**\n   * Show tab content that corresponds to the tab with the id.\n   * @param tabId The id of the tab that you want to switch to.\n   */\n  select(tabId: string) {\n    const tab = Array.from(this._tabLinks).find((a: HTMLAnchorElement) => a.getAttribute('href') === '#'+tabId);\n    if (tab) (<HTMLAnchorElement>tab).click();\n  }\n}\n","import { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement, Openable } from \"./component\";\n\nexport interface TapTargetOptions extends BaseOptions {\n  /**\n   * Callback function called when Tap Target is opened.\n   * @default null\n   */\n  onOpen: (origin: HTMLElement) => void;\n  /**\n   * Callback function called when Tap Target is closed.\n   * @default null\n   */\n  onClose: (origin: HTMLElement) => void;\n};\n\nlet _defaults: TapTargetOptions = {\n  onOpen: null,\n  onClose: null\n};\n\nexport class TapTarget extends Component<TapTargetOptions> implements Openable {\n  /**\n   * If the tap target is open.\n   */\n  isOpen: boolean;\n\n  private wrapper: HTMLElement;\n  private _origin: HTMLElement;\n  private originEl: HTMLElement;\n  private waveEl: HTMLElement & Element & Node;\n  private contentEl: HTMLElement;\n\n  constructor(el: HTMLElement, options: Partial<TapTargetOptions>) {\n    super(el, options, TapTarget);\n    (this.el as any).M_TapTarget = this;\n\n    this.options = {\n      ...TapTarget.defaults,\n      ...options\n    };\n\n    this.isOpen = false;\n    // setup\n    this._origin = document.querySelector(`#${el.dataset.target}`);\n    this._setup();\n    this._calculatePositioning();\n    this._setupEventHandlers();\n  }\n\n  static get defaults(): TapTargetOptions {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of TapTarget.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLElement, options?: Partial<TapTargetOptions>): TapTarget;\n  /**\n   * Initializes instances of TapTarget.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<MElement>, options?: Partial<TapTargetOptions>): TapTarget[];\n  /**\n   * Initializes instances of TapTarget.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLElement | InitElements<MElement>, options: Partial<TapTargetOptions> = {}): TapTarget | TapTarget[] {\n    return super.init(els, options, TapTarget);\n  }\n\n  static getInstance(el: HTMLElement): TapTarget {\n    return (el as any).M_TapTarget;\n  }\n\n  destroy() {\n    this._removeEventHandlers();\n    (this.el as any).TapTarget = undefined;\n  }\n\n  _setupEventHandlers() {\n    this.el.addEventListener('click', this._handleTargetClick);\n    this.originEl.addEventListener('click', this._handleOriginClick);\n    // Resize\n    window.addEventListener('resize', this._handleThrottledResize);\n  }\n\n  _removeEventHandlers() {\n    this.el.removeEventListener('click', this._handleTargetClick);\n    this.originEl.removeEventListener('click', this._handleOriginClick);\n    window.removeEventListener('resize', this._handleThrottledResize);\n  }\n\n  _handleThrottledResize: () => void = Utils.throttle(function(){ this._handleResize(); }, 200).bind(this);\n\n  _handleTargetClick = () => {\n    this.open();\n  }\n\n  _handleOriginClick = () => {\n    this.close();\n  }\n\n  _handleResize = () => {\n    this._calculatePositioning();\n  }\n\n  _handleDocumentClick = (e: MouseEvent | TouchEvent) => {\n    if (!(e.target as HTMLElement).closest('.tap-target-wrapper')) {\n      this.close();\n      e.preventDefault();\n      e.stopPropagation();\n    }\n  }\n\n  _setup() {\n    // Creating tap target\n    this.wrapper = this.el.parentElement;\n    this.waveEl = this.wrapper.querySelector('.tap-target-wave');\n    this.originEl = this.wrapper.querySelector('.tap-target-origin');\n    this.contentEl = this.el.querySelector('.tap-target-content');\n    // Creating wrapper\n    if (!this.wrapper.classList.contains('.tap-target-wrapper')) {\n      this.wrapper = document.createElement('div');\n      this.wrapper.classList.add('tap-target-wrapper');\n      this.el.before(this.wrapper);\n      this.wrapper.append(this.el);\n    }\n    // Creating content\n    if (!this.contentEl) {\n      this.contentEl = document.createElement('div');\n      this.contentEl.classList.add('tap-target-content');\n      this.el.append(this.contentEl);\n    }\n    // Creating foreground wave\n    if (!this.waveEl) {\n      this.waveEl = document.createElement('div');\n      this.waveEl.classList.add('tap-target-wave');\n      // Creating origin\n      if (!this.originEl) {\n        this.originEl = <HTMLElement>this._origin.cloneNode(true); // .clone(true, true);\n        this.originEl.classList.add('tap-target-origin');\n        this.originEl.removeAttribute('id');\n        this.originEl.removeAttribute('style');\n        this.waveEl.append(this.originEl);\n      }\n      this.wrapper.append(this.waveEl);\n    }\n  }\n\n  private _offset(el: HTMLElement) {\n    const box = el.getBoundingClientRect();\n    const docElem = document.documentElement;\n    return {\n      top: box.top + window.pageYOffset - docElem.clientTop,\n      left: box.left + window.pageXOffset - docElem.clientLeft\n    };\n  }\n\n  _calculatePositioning() {\n    // Element or parent is fixed position?\n    let isFixed = getComputedStyle(this._origin).position === 'fixed';\n    if (!isFixed) {\n\n      let currentElem: any = this._origin;\n      const parents = [];\n      while ((currentElem = currentElem.parentNode) && currentElem !== document)\n        parents.push(currentElem);\n\n      for (let i = 0; i < parents.length; i++) {\n        isFixed = getComputedStyle(parents[i]).position === 'fixed';\n        if (isFixed) break;\n      }\n    }\n    // Calculating origin\n    const originWidth = this._origin.offsetWidth;\n    const originHeight = this._origin.offsetHeight;\n    const originTop = isFixed ? this._offset(this._origin).top - Utils.getDocumentScrollTop() : this._offset(this._origin).top;\n    const originLeft = isFixed ? this._offset(this._origin).left - Utils.getDocumentScrollLeft() : this._offset(this._origin).left;\n\n    // Calculating screen\n    const windowWidth = window.innerWidth;\n    const windowHeight = window.innerHeight;\n    const scrollBarWidth = windowWidth - document.documentElement.clientWidth;\n    const centerX = windowWidth / 2;\n    const centerY = windowHeight / 2;\n    const isLeft = originLeft <= centerX;\n    const isRight = originLeft > centerX;\n    const isTop = originTop <= centerY;\n    const isBottom = originTop > centerY;\n    const isCenterX = originLeft >= windowWidth * 0.25 && originLeft <= windowWidth * 0.75;\n\n    // Calculating tap target\n    const tapTargetWidth = this.el.offsetWidth;\n    const tapTargetHeight = this.el.offsetHeight;\n    const tapTargetTop = originTop + originHeight / 2 - tapTargetHeight / 2;\n    const tapTargetLeft = originLeft + originWidth / 2 - tapTargetWidth / 2;\n    const tapTargetPosition = isFixed ? 'fixed' : 'absolute';\n\n    // Calculating content\n    const tapTargetTextWidth = isCenterX ? tapTargetWidth : tapTargetWidth / 2 + originWidth;\n    const tapTargetTextHeight = tapTargetHeight / 2;\n    const tapTargetTextTop = isTop ? tapTargetHeight / 2 : 0;\n    const tapTargetTextBottom = 0;\n    const tapTargetTextLeft = isLeft && !isCenterX ? tapTargetWidth / 2 - originWidth : 0;\n    const tapTargetTextRight = 0;\n    const tapTargetTextPadding = originWidth;\n    const tapTargetTextAlign = isBottom ? 'bottom' : 'top';\n\n    // Calculating wave\n    const tapTargetWaveWidth = originWidth > originHeight ? originWidth * 2 : originWidth * 2;\n    const tapTargetWaveHeight = tapTargetWaveWidth;\n    const tapTargetWaveTop = tapTargetHeight / 2 - tapTargetWaveHeight / 2;\n    const tapTargetWaveLeft = tapTargetWidth / 2 - tapTargetWaveWidth / 2;\n\n    // Setting tap target\n    this.wrapper.style.top = isTop ? tapTargetTop + 'px' : '';\n    this.wrapper.style.right = isRight ? windowWidth - tapTargetLeft - tapTargetWidth - scrollBarWidth + 'px' : '';\n    this.wrapper.style.bottom = isBottom ? windowHeight - tapTargetTop - tapTargetHeight + 'px' : '';\n    this.wrapper.style.left = isLeft ? tapTargetLeft + 'px' : '';\n    this.wrapper.style.position = tapTargetPosition;\n\n    // Setting content\n    this.contentEl.style.width = tapTargetTextWidth + 'px';\n    this.contentEl.style.height = tapTargetTextHeight + 'px';\n    this.contentEl.style.top = tapTargetTextTop + 'px';\n    this.contentEl.style.right = tapTargetTextRight + 'px';\n    this.contentEl.style.bottom = tapTargetTextBottom + 'px';\n    this.contentEl.style.left = tapTargetTextLeft + 'px';\n    this.contentEl.style.padding = tapTargetTextPadding + 'px';\n    this.contentEl.style.verticalAlign = tapTargetTextAlign;\n\n    // Setting wave\n    this.waveEl.style.top = tapTargetWaveTop+'px';\n    this.waveEl.style.left = tapTargetWaveLeft+'px';\n    this.waveEl.style.width = tapTargetWaveWidth+'px';\n    this.waveEl.style.height = tapTargetWaveHeight+'px';\n  }\n\n  /**\n   * Open Tap Target.\n   */\n  open = () => {\n    if (this.isOpen) return;\n    // onOpen callback\n    if (typeof this.options.onOpen === 'function') {\n      this.options.onOpen.call(this, this._origin);\n    }\n    this.isOpen = true;\n    this.wrapper.classList.add('open');\n    document.body.addEventListener('click', this._handleDocumentClick, true);\n    document.body.addEventListener('touchend', this._handleDocumentClick);\n  };\n\n  /**\n   * Close Tap Target.\n   */\n  close = () => {\n    if (!this.isOpen) return;\n    // onClose callback\n    if (typeof this.options.onClose === 'function') {\n      this.options.onClose.call(this, this._origin);\n    }\n    this.isOpen = false;\n    this.wrapper.classList.remove('open');\n    document.body.removeEventListener('click', this._handleDocumentClick, true);\n    document.body.removeEventListener('touchend', this._handleDocumentClick);\n  };\n}\n","import { Modal } from \"./modal\";\nimport { Utils } from \"./utils\";\nimport { Component, BaseOptions, InitElements, MElement, I18nOptions } from \"./component\";\n\nexport type Views = \"hours\" | \"minutes\";\n\nexport interface TimepickerOptions extends BaseOptions {\n  /**\n   * Dial radius.\n   * @default 135\n   */\n  dialRadius: number;\n  /**\n   * Outer radius.\n   * @default 105\n   */\n  outerRadius: number;\n  /**\n   * Inner radius.\n   * @default 70\n   */\n  innerRadius: number;\n  /**\n   * Tick radius.\n   * @default 20\n   */\n  tickRadius: number;\n  /**\n   * Duration of the transition from/to the hours/minutes view.\n   * @default 350\n   */\n  duration: number;\n  /**\n   * Specify a DOM element OR selector for a DOM element to render\n   * the time picker in, by default it will be placed before the input.\n   * @default null\n   */\n  container: HTMLElement | string | null;\n  /**\n   * Show the clear button in the Timepicker.\n   * @default false\n   */\n  showClearBtn: boolean;\n  /**\n   * Default time to set on the timepicker 'now' or '13:14'.\n   * @default 'now';\n   */\n  defaultTime: string;\n  /**\n   * Millisecond offset from the defaultTime.\n   * @default 0\n   */\n  fromNow: number;\n  /**\n   * Internationalization options.\n   */\n  i18n: Partial<I18nOptions>;\n  /**\n   * Automatically close picker when minute is selected.\n   * @default false;\n   */\n  autoClose: boolean;\n  /**\n   * Use 12 hour AM/PM clock instead of 24 hour clock.\n   * @default true\n   */\n  twelveHour: boolean;\n  /**\n   * Vibrate device when dragging clock hand.\n   * @default true\n   */\n  vibrate: boolean;\n  /**\n   * Callback function called before modal is opened.\n   * @default null\n   */\n  onOpenStart: (el: HTMLElement) => void;\n  /**\n   * Callback function called after modal is opened.\n   * @default null\n   */\n  onOpenEnd: (el: HTMLElement) => void;\n  /**\n   * Callback function called before modal is closed.\n   * @default null\n   */\n  onCloseStart: (el: HTMLElement) => void;\n  /**\n   * Callback function called after modal is closed.\n   * @default null\n   */\n  onCloseEnd: (el: HTMLElement) => void;\n  /**\n   * Callback function when a time is selected.\n   * @default null\n   */\n  onSelect: (hour: number, minute: number) => void;\n}\n\nlet _defaults: TimepickerOptions = {\n  dialRadius: 135,\n  outerRadius: 105,\n  innerRadius: 70,\n  tickRadius: 20,\n  duration: 350,\n  container: null,\n  defaultTime: 'now', // default time, 'now' or '13:14' e.g.\n  fromNow: 0, // Millisecond offset from the defaultTime\n  showClearBtn: false,\n  // internationalization\n  i18n: {\n    cancel: 'Cancel',\n    clear: 'Clear',\n    done: 'Ok'\n  },\n  autoClose: false, // auto close when minute is selected\n  twelveHour: true, // change to 12 hour AM/PM clock from 24 hour\n  vibrate: true, // vibrate the device when dragging clock hand\n  // Callbacks\n  onOpenStart: null,\n  onOpenEnd: null,\n  onCloseStart: null,\n  onCloseEnd: null,\n  onSelect: null\n};\n\ntype Point = {\n  x: number,\n  y: number\n};\n\nexport class Timepicker extends Component<TimepickerOptions> {\n  declare el: HTMLInputElement;\n  id: string;\n  modal: Modal;\n  modalEl: HTMLElement;\n  plate: any;\n  digitalClock: any;\n  inputHours: HTMLInputElement;\n  inputMinutes: HTMLInputElement;\n  x0: number;\n  y0: number;\n  moved: boolean;\n  dx: number;\n  dy: number;\n  /**\n   * Current view on the timepicker.\n   * @default 'hours'\n   */\n  currentView: Views;\n  hand: any;\n  minutesView: HTMLElement;\n  hours: any;\n  minutes: any;\n  /** The selected time. */\n  time: string;\n  /**\n   * If the time is AM or PM on twelve-hour clock.\n   * @default 'PM'\n   */\n  amOrPm: \"AM\" | \"PM\";\n  static _template: any;\n  /** If the picker is open. */\n  isOpen: boolean;\n  /** Vibrate device when dragging clock hand. */\n  vibrate: \"vibrate\" | \"webkitVibrate\" | null;\n  _canvas: HTMLElement;\n  hoursView: any;\n  spanAmPm: HTMLSpanElement;\n  footer: HTMLElement;\n  private _amBtn: HTMLElement;\n  private _pmBtn: HTMLElement;\n  bg: Element;\n  bearing: Element;\n  g: Element;\n  toggleViewTimer: string | number | NodeJS.Timeout;\n  canvas: any;\n  vibrateTimer: any;\n\n  constructor(el: HTMLInputElement, options: Partial<TimepickerOptions>) {\n    super(el, options, Timepicker);\n    (this.el as any).M_Timepicker = this;\n\n    this.options = {\n      ...Timepicker.defaults,\n      ...options\n    };\n\n    this.id = Utils.guid();\n    this._insertHTMLIntoDOM();\n    this._setupModal();\n    this._setupVariables();\n    this._setupEventHandlers();\n    this._clockSetup();\n    this._pickerSetup();\n  }\n\n  static get defaults(): TimepickerOptions {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of Timepicker.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLInputElement, options?: Partial<TimepickerOptions>): Timepicker;\n  /**\n   * Initializes instances of Timepicker.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<HTMLInputElement | MElement>, options?: Partial<TimepickerOptions>): Timepicker[];\n  /**\n   * Initializes instances of Timepicker.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLInputElement | InitElements<HTMLInputElement | MElement>, options: Partial<TimepickerOptions> = {}): Timepicker | Timepicker[] {\n    return super.init(els, options, Timepicker);\n  }\n\n  static _addLeadingZero(num: number) {\n    return (num < 10 ? '0' : '') + num;\n  }\n\n  static _createSVGEl(name: string) {\n    let svgNS = 'http://www.w3.org/2000/svg';\n    return document.createElementNS(svgNS, name);\n  }\n\n  static _Pos(e: TouchEvent | MouseEvent): Point {\n    if (e.type.startsWith(\"touch\") && (e as TouchEvent).targetTouches.length >= 1) {\n      return { x: (e as TouchEvent).targetTouches[0].clientX, y: (e as TouchEvent).targetTouches[0].clientY };\n    }\n    // mouse event\n    return { x: (e as MouseEvent).clientX, y: (e as MouseEvent).clientY };\n  }\n\n  static getInstance(el: HTMLElement): Timepicker {\n    return (el as any).M_Timepicker;\n  }\n\n  destroy() {\n    this._removeEventHandlers();\n    this.modal.destroy();\n    this.modalEl.remove();\n    (this.el as any).M_Timepicker = undefined;\n  }\n\n  _setupEventHandlers() {\n    this.el.addEventListener('click', this._handleInputClick);\n    this.el.addEventListener('keydown', this._handleInputKeydown);\n    this.plate.addEventListener('mousedown', this._handleClockClickStart);\n    this.plate.addEventListener('touchstart', this._handleClockClickStart);\n    this.digitalClock.addEventListener('keyup', this._inputFromTextField);\n    this.inputHours.addEventListener('click', () => this.showView('hours'));\n    this.inputMinutes.addEventListener('click', () => this.showView('minutes'));\n  }\n\n  _removeEventHandlers() {\n    this.el.removeEventListener('click', this._handleInputClick);\n    this.el.removeEventListener('keydown', this._handleInputKeydown);\n  }\n\n  _handleInputClick = () => {\n    this.open();\n  }\n\n  _handleInputKeydown = (e: KeyboardEvent) => {\n    if (Utils.keys.ENTER.includes(e.key)) {\n      e.preventDefault();\n      this.open();\n    }\n  }\n\n  _handleTimeInputEnterKey = (e: KeyboardEvent) => {\n    if (Utils.keys.ENTER.includes(e.key)) {\n      e.preventDefault();\n      this._inputFromTextField();\n    }\n  }\n\n  _handleClockClickStart = (e) => {\n    e.preventDefault();\n    let clockPlateBR = this.plate.getBoundingClientRect();\n    let offset = { x: clockPlateBR.left, y: clockPlateBR.top };\n\n    this.x0 = offset.x + this.options.dialRadius;\n    this.y0 = offset.y + this.options.dialRadius;\n    this.moved = false;\n    let clickPos = Timepicker._Pos(e);\n    this.dx = clickPos.x - this.x0;\n    this.dy = clickPos.y - this.y0;\n\n    // Set clock hands\n    this.setHand(this.dx, this.dy, false);\n    // Mousemove on document\n    document.addEventListener('mousemove', this._handleDocumentClickMove);\n    document.addEventListener('touchmove', this._handleDocumentClickMove);\n    // Mouseup on document\n    document.addEventListener('mouseup', this._handleDocumentClickEnd);\n    document.addEventListener('touchend', this._handleDocumentClickEnd);\n  }\n\n  _handleDocumentClickMove = (e) => {\n    e.preventDefault();\n    let clickPos = Timepicker._Pos(e);\n    let x = clickPos.x - this.x0;\n    let y = clickPos.y - this.y0;\n    this.moved = true;\n    this.setHand(x, y, false);\n  }\n\n  _handleDocumentClickEnd = (e) => {\n    e.preventDefault();\n    document.removeEventListener('mouseup', this._handleDocumentClickEnd);\n    document.removeEventListener('touchend', this._handleDocumentClickEnd);\n    let clickPos = Timepicker._Pos(e);\n    let x = clickPos.x - this.x0;\n    let y = clickPos.y - this.y0;\n    if (this.moved && x === this.dx && y === this.dy) {\n      this.setHand(x, y);\n    }\n    if (this.currentView === 'hours') {\n      this.showView('minutes', this.options.duration / 2);\n    }\n    else if (this.options.autoClose) {\n      this.minutesView.classList.add('timepicker-dial-out');\n      setTimeout(() => {\n        this.done();\n      }, this.options.duration / 2);\n    }\n    if (typeof this.options.onSelect === 'function') {\n      this.options.onSelect.call(this, this.hours, this.minutes);\n    }\n    // Unbind mousemove event\n    document.removeEventListener('mousemove', this._handleDocumentClickMove);\n    document.removeEventListener('touchmove', this._handleDocumentClickMove);\n  }\n\n  _insertHTMLIntoDOM() {\n    const template = document.createElement('template');\n    template.innerHTML = Timepicker._template.trim();\n    this.modalEl = <HTMLElement>template.content.firstChild;\n    this.modalEl.id = 'modal-' + this.id;\n\n    // Append popover to input by default\n    const optEl = this.options.container;\n    const containerEl = optEl instanceof HTMLElement ? optEl : document.querySelector(optEl);\n\n    if (this.options.container && !!containerEl) {\n      containerEl.append(this.modalEl);\n    }\n    else {\n      this.el.parentElement.appendChild(this.modalEl);\n    }\n  }\n\n  _setupModal() {\n    this.modal = Modal.init(this.modalEl, {\n      onOpenStart: this.options.onOpenStart,\n      onOpenEnd: this.options.onOpenEnd,\n      onCloseStart: this.options.onCloseStart,\n      onCloseEnd: () => {\n        if (typeof this.options.onCloseEnd === 'function') {\n          this.options.onCloseEnd.call(this);\n        }\n        this.isOpen = false;\n      }\n    });\n  }\n\n  _setupVariables() {\n    this.currentView = 'hours';\n    this.vibrate = navigator.vibrate\n      ? 'vibrate'\n      : (navigator as any).webkitVibrate\n      ? 'webkitVibrate'\n      : null;\n    this._canvas = this.modalEl.querySelector('.timepicker-canvas');\n    this.plate = this.modalEl.querySelector('.timepicker-plate');\n    this.digitalClock = this.modalEl.querySelector('.timepicker-display-column');\n    this.hoursView = this.modalEl.querySelector('.timepicker-hours');\n    this.minutesView = this.modalEl.querySelector('.timepicker-minutes');\n    this.inputHours = this.modalEl.querySelector('.timepicker-input-hours');\n    this.inputMinutes = this.modalEl.querySelector('.timepicker-input-minutes');\n    this.spanAmPm = this.modalEl.querySelector('.timepicker-span-am-pm');\n    this.footer = this.modalEl.querySelector('.timepicker-footer');\n    this.amOrPm = 'PM';\n  }\n\n  private _createButton(text: string, visibility: string): HTMLButtonElement {\n    const button = document.createElement('button');\n    button.classList.add('btn-flat', 'waves-effect');\n    button.style.visibility = visibility;\n    button.type = 'button';\n    button.tabIndex = this.options.twelveHour ? 3 : 1;\n    button.innerText = text;\n    return button;\n  }\n\n  _pickerSetup() {\n    const clearButton = this._createButton(this.options.i18n.clear, this.options.showClearBtn ? '' : 'hidden');\n    clearButton.classList.add('timepicker-clear');\n    clearButton.addEventListener('click', this.clear);\n    this.footer.appendChild(clearButton);\n\n    const confirmationBtnsContainer = document.createElement('div');\n    confirmationBtnsContainer.classList.add('confirmation-btns');\n    this.footer.append(confirmationBtnsContainer);\n\n    const cancelButton = this._createButton(this.options.i18n.cancel, '');\n    cancelButton.classList.add('timepicker-close');\n    cancelButton.addEventListener('click', this.close);\n    confirmationBtnsContainer.appendChild(cancelButton);\n\n    const doneButton = this._createButton(this.options.i18n.done, '');\n    doneButton.classList.add('timepicker-close');\n    doneButton.addEventListener('click', this.done);\n    confirmationBtnsContainer.appendChild(doneButton);\n  }\n\n  _clockSetup() {\n    if (this.options.twelveHour) {\n      // AM Button\n      this._amBtn = document.createElement('div');\n      this._amBtn.classList.add('am-btn');\n      this._amBtn.innerText = 'AM';\n      this._amBtn.addEventListener('click', this._handleAmPmClick);\n      this.spanAmPm.appendChild(this._amBtn);\n      // PM Button\n      this._pmBtn = document.createElement('div');\n      this._pmBtn.classList.add('pm-btn');\n      this._pmBtn.innerText = 'PM';\n      this._pmBtn.addEventListener('click', this._handleAmPmClick);\n      this.spanAmPm.appendChild(this._pmBtn);\n    }\n    this._buildHoursView();\n    this._buildMinutesView();\n    this._buildSVGClock();\n  }\n\n  _buildSVGClock() {\n    // Draw clock hands and others\n    let dialRadius = this.options.dialRadius;\n    let tickRadius = this.options.tickRadius;\n    let diameter = dialRadius * 2;\n    let svg = Timepicker._createSVGEl('svg');\n    svg.setAttribute('class', 'timepicker-svg');\n    svg.setAttribute('width', diameter.toString());\n    svg.setAttribute('height', diameter.toString());\n    let g = Timepicker._createSVGEl('g');\n    g.setAttribute('transform', 'translate(' + dialRadius + ',' + dialRadius + ')');\n    let bearing = Timepicker._createSVGEl('circle');\n    bearing.setAttribute('class', 'timepicker-canvas-bearing');\n    bearing.setAttribute('cx', '0');\n    bearing.setAttribute('cy', '0');\n    bearing.setAttribute('r', '4');\n    let hand = Timepicker._createSVGEl('line');\n    hand.setAttribute('x1', '0');\n    hand.setAttribute('y1', '0');\n    let bg = Timepicker._createSVGEl('circle');\n    bg.setAttribute('class', 'timepicker-canvas-bg');\n    bg.setAttribute('r', tickRadius.toString());\n    g.appendChild(hand);\n    g.appendChild(bg);\n    g.appendChild(bearing);\n    svg.appendChild(g);\n    this._canvas.appendChild(svg);\n    this.hand = hand;\n    this.bg = bg;\n    this.bearing = bearing;\n    this.g = g;\n  }\n\n  _buildHoursView() {\n    const $tick = document.createElement('div');\n    $tick.classList.add('timepicker-tick');\n    // Hours view\n    if (this.options.twelveHour) {\n      for (let i = 1; i < 13; i += 1) {\n        const tick = <HTMLElement>$tick.cloneNode(true);\n        const radian = (i / 6) * Math.PI;\n        const radius = this.options.outerRadius;\n        tick.style.left = this.options.dialRadius + Math.sin(radian) * radius - this.options.tickRadius + 'px';\n        tick.style.top = this.options.dialRadius - Math.cos(radian) * radius - this.options.tickRadius + 'px';\n        tick.innerHTML = i === 0 ? '00' : i.toString();\n        this.hoursView.appendChild(tick);\n        // tick.on(mousedownEvent, mousedown);\n      }\n    }\n    else {\n      for (let i = 0; i < 24; i += 1) {\n        const tick = <HTMLElement>$tick.cloneNode(true);\n        const radian = (i / 6) * Math.PI;\n        const inner = i > 0 && i < 13;\n        const radius = inner ? this.options.innerRadius : this.options.outerRadius;\n        tick.style.left = this.options.dialRadius + Math.sin(radian) * radius - this.options.tickRadius + 'px';\n        tick.style.top = this.options.dialRadius - Math.cos(radian) * radius - this.options.tickRadius + 'px';\n        tick.innerHTML = i === 0 ? '00' : i.toString();\n        this.hoursView.appendChild(tick);\n        // tick.on(mousedownEvent, mousedown);\n      }\n    }\n  }\n\n  _buildMinutesView() {\n    const _tick = document.createElement('div');\n    _tick.classList.add('timepicker-tick');\n    // Minutes view\n    for (let i = 0; i < 60; i += 5) {\n      const tick = <HTMLElement>_tick.cloneNode(true);\n      const radian = (i / 30) * Math.PI;\n      tick.style.left =\n        this.options.dialRadius +\n        Math.sin(radian) * this.options.outerRadius -\n        this.options.tickRadius +\n        'px';\n      tick.style.top =\n          this.options.dialRadius -\n          Math.cos(radian) * this.options.outerRadius -\n          this.options.tickRadius +\n          'px';\n      tick.innerHTML = Timepicker._addLeadingZero(i);\n      this.minutesView.appendChild(tick);\n    }\n  }\n\n  _handleAmPmClick = (e) => {\n    const btnClicked = <HTMLElement>e.target;\n    this.amOrPm = btnClicked.classList.contains('am-btn') ? 'AM' : 'PM';\n    this._updateAmPmView();\n  }\n\n  _updateAmPmView() {\n    if (this.options.twelveHour) {\n      if (this.amOrPm === 'PM') {\n        this._amBtn.classList.remove('text-primary');\n        this._pmBtn.classList.add('text-primary');\n      }\n      else if (this.amOrPm === 'AM') {\n        this._amBtn.classList.add('text-primary');\n        this._pmBtn.classList.remove('text-primary');\n      }\n    }\n  }\n\n  _updateTimeFromInput() {\n    // Get the time\n    let value = ((this.el.value || this.options.defaultTime || '') + '').split(':');\n    if (this.options.twelveHour && !(typeof value[1] === 'undefined')) {\n      if (value[1].toUpperCase().indexOf('AM') > 0) {\n        this.amOrPm = 'AM';\n      } else {\n        this.amOrPm = 'PM';\n      }\n      value[1] = value[1].replace('AM', '').replace('PM', '');\n    }\n    if (value[0] === 'now') {\n      let now = new Date(+new Date() + this.options.fromNow);\n      value = [now.getHours().toString(), now.getMinutes().toString()];\n      if (this.options.twelveHour) {\n        this.amOrPm = parseInt(value[0]) >= 12 && parseInt(value[0]) < 24 ? 'PM' : 'AM';\n      }\n    }\n    this.hours = +value[0] || 0;\n    this.minutes = +value[1] || 0;\n    this.inputHours.value = this.hours;\n    this.inputMinutes.value = Timepicker._addLeadingZero(this.minutes);\n\n    this._updateAmPmView();\n  }\n\n  /**\n   * Show hours or minutes view on timepicker.\n   * @param view The name of the view you want to switch to, 'hours' or 'minutes'.\n   */\n  showView = (view: Views, delay: number = null) => {\n    if (view === 'minutes' && getComputedStyle(this.hoursView).visibility === 'visible') {\n      // raiseCallback(this.options.beforeHourSelect);\n    }\n    let isHours = view === 'hours',\n      nextView = isHours ? this.hoursView : this.minutesView,\n      hideView = isHours ? this.minutesView : this.hoursView;\n    this.currentView = view;\n\n    if (isHours) {\n      this.inputHours.classList.add('text-primary');\n      this.inputMinutes.classList.remove('text-primary');\n    }\n    else {\n      this.inputHours.classList.remove('text-primary');\n      this.inputMinutes.classList.add('text-primary');\n    }\n\n    // Transition view\n    hideView.classList.add('timepicker-dial-out');\n\n    nextView.style.visibility = 'visible';\n    nextView.classList.remove('timepicker-dial-out');\n\n    // Reset clock hand\n    this.resetClock(delay);\n    // After transitions ended\n    clearTimeout(this.toggleViewTimer);\n    this.toggleViewTimer = setTimeout(() => {\n      hideView.style.visibility = 'hidden';\n    }, this.options.duration);\n  }\n\n  resetClock(delay) {\n    let view = this.currentView,\n      value = this[view],\n      isHours = view === 'hours',\n      unit = Math.PI / (isHours ? 6 : 30),\n      radian = value * unit,\n      radius =\n        isHours && value > 0 && value < 13 ? this.options.innerRadius : this.options.outerRadius,\n      x = Math.sin(radian) * radius,\n      y = -Math.cos(radian) * radius,\n      self = this;\n\n    if (delay) {\n      this.canvas?.classList.add('timepicker-canvas-out');\n      setTimeout(() => {\n        self.canvas?.classList.remove('timepicker-canvas-out');\n        self.setHand(x, y);\n      }, delay);\n    }\n    else {\n      this.setHand(x, y);\n    }\n  }\n\n  _inputFromTextField = () => {\n    const isHours = this.currentView === 'hours';\n    if (isHours) {\n      const value = parseInt(this.inputHours.value);\n      if (value > 0 && value < 13) {\n        this.drawClockFromTimeInput(value, isHours);\n        this.showView('minutes', this.options.duration / 2);\n        this.hours = value;\n        this.inputMinutes.focus();\n      }\n      else {\n        const hour = new Date().getHours();\n        this.inputHours.value = (hour % 12).toString();\n      }\n    }\n    else {\n      const value = parseInt(this.inputMinutes.value);\n      if (value >= 0 && value < 60) {\n        this.inputMinutes.value = Timepicker._addLeadingZero(value);\n        this.drawClockFromTimeInput(value, isHours);\n        this.minutes = value;\n        (<HTMLElement>this.modalEl.querySelector('.confirmation-btns :nth-child(2)')).focus();\n      }\n      else {\n        const minutes = new Date().getMinutes();\n        this.inputMinutes.value = Timepicker._addLeadingZero(minutes);\n      }\n    }\n  }\n\n  drawClockFromTimeInput(value, isHours) {\n    const unit = Math.PI / (isHours ? 6 : 30);\n    const radian = value * unit;\n    let radius;\n    if (this.options.twelveHour) {\n      radius = this.options.outerRadius;\n    }\n    let cx1 = Math.sin(radian) * (radius - this.options.tickRadius),\n      cy1 = -Math.cos(radian) * (radius - this.options.tickRadius),\n      cx2 = Math.sin(radian) * radius,\n      cy2 = -Math.cos(radian) * radius;\n    this.hand.setAttribute('x2', cx1.toString());\n    this.hand.setAttribute('y2', cy1.toString());\n    this.bg.setAttribute('cx', cx2.toString());\n    this.bg.setAttribute('cy', cy2.toString());\n  }\n\n  setHand(x, y, roundBy5: boolean = false) {\n    let radian = Math.atan2(x, -y),\n      isHours = this.currentView === 'hours',\n      unit = Math.PI / (isHours || roundBy5 ? 6 : 30),\n      z = Math.sqrt(x * x + y * y),\n      inner = isHours && z < (this.options.outerRadius + this.options.innerRadius) / 2,\n      radius = inner ? this.options.innerRadius : this.options.outerRadius;\n\n    if (this.options.twelveHour) {\n      radius = this.options.outerRadius;\n    }\n\n    // Radian should in range [0, 2PI]\n    if (radian < 0) {\n      radian = Math.PI * 2 + radian;\n    }\n\n    // Get the round value\n    let value = Math.round(radian / unit);\n\n    // Get the round radian\n    radian = value * unit;\n\n    // Correct the hours or minutes\n    if (this.options.twelveHour) {\n      if (isHours) {\n        if (value === 0) value = 12;\n      } else {\n        if (roundBy5) value *= 5;\n        if (value === 60) value = 0;\n      }\n    } else {\n      if (isHours) {\n        if (value === 12) {\n          value = 0;\n        }\n        value = inner ? (value === 0 ? 12 : value) : value === 0 ? 0 : value + 12;\n      } else {\n        if (roundBy5) {\n          value *= 5;\n        }\n        if (value === 60) {\n          value = 0;\n        }\n      }\n    }\n\n    // Once hours or minutes changed, vibrate the device\n    if (this[this.currentView] !== value) {\n      if (this.vibrate && this.options.vibrate) {\n        // Do not vibrate too frequently\n        if (!this.vibrateTimer) {\n          navigator[this.vibrate](10);\n          this.vibrateTimer = setTimeout(() => {\n            this.vibrateTimer = null;\n          }, 100);\n        }\n      }\n    }\n\n    this[this.currentView] = value;\n    if (isHours) {\n      this.inputHours.value = value.toString();\n    }\n    else {\n      this.inputMinutes.value = Timepicker._addLeadingZero(value);\n    }\n\n    // Set clock hand and others' position\n    let cx1 = Math.sin(radian) * (radius - this.options.tickRadius),\n      cy1 = -Math.cos(radian) * (radius - this.options.tickRadius),\n      cx2 = Math.sin(radian) * radius,\n      cy2 = -Math.cos(radian) * radius;\n    this.hand.setAttribute('x2', cx1.toString());\n    this.hand.setAttribute('y2', cy1.toString());\n    this.bg.setAttribute('cx', cx2.toString());\n    this.bg.setAttribute('cy', cy2.toString());\n  }\n\n  /**\n   * Open timepicker.\n   */\n  open = () => {\n    if (this.isOpen) return;\n    this.isOpen = true;\n    this._updateTimeFromInput();\n    this.showView('hours');\n    this.modal.open(undefined);\n  }\n\n  /**\n   * Close timepicker.\n   */\n  close = () => {\n    if (!this.isOpen) return;\n    this.isOpen = false;\n    this.modal.close();\n  }\n\n  done = (e = null, clearValue = null) => {\n    // Set input value\n    let last = this.el.value;\n    let value = clearValue\n      ? ''\n      : Timepicker._addLeadingZero(this.hours) + ':' + Timepicker._addLeadingZero(this.minutes);\n    this.time = value;\n    if (!clearValue && this.options.twelveHour) {\n      value = `${value} ${this.amOrPm}`;\n    }\n    this.el.value = value;\n    // Trigger change event\n    if (value !== last) {\n      this.el.dispatchEvent(new Event('change',{bubbles:true, cancelable:true, composed:true}));\n    }\n    this.close();\n    this.el.focus();\n  }\n\n  clear = () => {\n    this.done(null, true);\n  }\n\n  static {\n    Timepicker._template = `\n      <div class=\"modal timepicker-modal\">\n        <div class=\"modal-content timepicker-container\">\n          <div class=\"timepicker-digital-display\">\n            <div class=\"timepicker-text-container\">\n              <div class=\"timepicker-display-column\">\n                <input type=\"text\" maxlength=\"2\" autofocus class=\"timepicker-input-hours text-primary\" />\n                :\n                <input type=\"text\" maxlength=\"2\" class=\"timepicker-input-minutes\" />\n              </div>\n              <div class=\"timepicker-display-column timepicker-display-am-pm\">\n                <div class=\"timepicker-span-am-pm\"></div>\n              </div>\n            </div>\n          </div>\n          <div class=\"timepicker-analog-display\">\n            <div class=\"timepicker-plate\">\n              <div class=\"timepicker-canvas\"></div>\n              <div class=\"timepicker-dial timepicker-hours\"></div>\n              <div class=\"timepicker-dial timepicker-minutes timepicker-dial-out\"></div>\n            </div>\n            <div class=\"timepicker-footer\"></div>\n          </div>\n        </div>\n      </div`;\n  }\n}\n","import { BaseOptions } from \"./component\";\n\nexport interface ToastOptions extends BaseOptions {\n  /**\n   * The content of the Toast.\n   * @default \"\"\n   */\n  text: string;\n  /**\n   * Element Id for the tooltip.\n   * @default \"\"\n   */\n  toastId?: string;\n  /**\n   * Length in ms the Toast stays before dismissal.\n   * @default 4000\n   */\n  displayLength: number;\n  /**\n   * Transition in duration in milliseconds.\n   * @default 300\n   */\n  inDuration: number;\n  /**\n   * Transition out duration in milliseconds.\n   * @default 375\n   */\n  outDuration: number;\n  /**\n   * Classes to be added to the toast element.\n   * @default \"\"\n   */\n  classes: string;\n  /**\n   * Callback function called when toast is dismissed.\n   * @default null\n   */\n  completeCallback: () => void;\n  /**\n   * The percentage of the toast's width it takes fora drag\n   * to dismiss a Toast.\n   * @default 0.8\n   */\n  activationPercent: number;\n}\n\nlet _defaults: ToastOptions = {\n  text: '',\n  displayLength: 4000,\n  inDuration: 300,\n  outDuration: 375,\n  classes: '',\n  completeCallback: null,\n  activationPercent: 0.8\n};\n\nexport class Toast {\n  /** The toast element. */\n  el: HTMLElement;\n  /**\n   * The remaining amount of time in ms that the toast\n   * will stay before dismissal.\n   */\n  timeRemaining: number;\n  /**\n   * Describes the current pan state of the Toast.\n   */\n  panning: boolean;\n  options: ToastOptions;\n  message: string;\n  counterInterval: NodeJS.Timeout;\n  wasSwiped: boolean;\n  startingXPos: number;\n  xPos: number;\n  time: number;\n  deltaX: number;\n  velocityX: number;\n\n  static _toasts: Toast[];\n  static _container: any;\n  static _draggedToast: Toast;\n\n  constructor(options: Partial<ToastOptions>) {\n    this.options = {\n      ...Toast.defaults,\n      ...options\n    };\n    this.message = this.options.text;\n    this.panning = false;\n    this.timeRemaining = this.options.displayLength;\n    if (Toast._toasts.length === 0) {\n      Toast._createContainer();\n    }\n    // Create new toast\n    Toast._toasts.push(this);\n    let toastElement = this._createToast();\n    (toastElement as any).M_Toast = this;\n    this.el = toastElement;\n    this._animateIn();\n    this._setTimer();\n  }\n\n  static get defaults(): ToastOptions {\n    return _defaults;\n  }\n\n  static getInstance(el: HTMLElement): Toast {\n    return (el as any).M_Toast;\n  }\n\n  static _createContainer() {\n    const container = document.createElement('div');\n    container.setAttribute('id', 'toast-container');\n    // Add event handler\n    container.addEventListener('touchstart', Toast._onDragStart);\n    container.addEventListener('touchmove', Toast._onDragMove);\n    container.addEventListener('touchend', Toast._onDragEnd);\n    container.addEventListener('mousedown', Toast._onDragStart);\n    document.addEventListener('mousemove', Toast._onDragMove);\n    document.addEventListener('mouseup', Toast._onDragEnd);\n    document.body.appendChild(container);\n    Toast._container = container;\n  }\n\n  static _removeContainer() {\n    document.removeEventListener('mousemove', Toast._onDragMove);\n    document.removeEventListener('mouseup', Toast._onDragEnd);\n    Toast._container.remove();\n    Toast._container = null;\n  }\n\n  static _onDragStart(e: TouchEvent | MouseEvent) {\n    if (e.target && (<HTMLElement>e.target).closest('.toast')) {\n      const toastElem = (<HTMLElement>e.target).closest('.toast');\n      const toast: Toast = (toastElem as any).M_Toast;\n      toast.panning = true;\n      Toast._draggedToast = toast;\n      toast.el.classList.add('panning');\n      toast.el.style.transition = '';\n      toast.startingXPos = Toast._xPos(e);\n      toast.time = Date.now();\n      toast.xPos = Toast._xPos(e);\n    }\n  }\n\n  static _onDragMove(e: TouchEvent | MouseEvent) {\n    if (!!Toast._draggedToast) {\n      e.preventDefault();\n      const toast = Toast._draggedToast;\n      toast.deltaX = Math.abs(toast.xPos - Toast._xPos(e));\n      toast.xPos = Toast._xPos(e);\n      toast.velocityX = toast.deltaX / (Date.now() - toast.time);\n      toast.time = Date.now();\n\n      const totalDeltaX = toast.xPos - toast.startingXPos;\n      const activationDistance = toast.el.offsetWidth * toast.options.activationPercent;\n      toast.el.style.transform = `translateX(${totalDeltaX}px)`;\n      toast.el.style.opacity = (1 - Math.abs(totalDeltaX / activationDistance)).toString();\n    }\n  }\n\n  static _onDragEnd() {\n    if (!!Toast._draggedToast) {\n      let toast = Toast._draggedToast;\n      toast.panning = false;\n      toast.el.classList.remove('panning');\n\n      let totalDeltaX = toast.xPos - toast.startingXPos;\n      let activationDistance = toast.el.offsetWidth * toast.options.activationPercent;\n      let shouldBeDismissed = Math.abs(totalDeltaX) > activationDistance || toast.velocityX > 1;\n\n      // Remove toast\n      if (shouldBeDismissed) {\n        toast.wasSwiped = true;\n        toast.dismiss();\n        // Animate toast back to original position\n      }\n      else {\n        toast.el.style.transition = 'transform .2s, opacity .2s';\n        toast.el.style.transform = '';\n        toast.el.style.opacity = '';\n      }\n      Toast._draggedToast = null;\n    }\n  }\n\n  static _xPos(e: TouchEvent | MouseEvent) {\n    if (e.type.startsWith(\"touch\") && (e as TouchEvent).targetTouches.length >= 1) {\n      return (e as TouchEvent).targetTouches[0].clientX;\n    }\n    // mouse event\n    return (e as MouseEvent).clientX;\n  }\n\n  /**\n   * dismiss all toasts.\n   */\n  static dismissAll() {\n    for (let toastIndex in Toast._toasts) {\n      Toast._toasts[toastIndex].dismiss();\n    }\n  }\n\n  _createToast() {\n    let toast: HTMLElement = this.options.toastId \n      ? document.getElementById(this.options.toastId)\n      : document.createElement('div');\n    if (toast instanceof  HTMLTemplateElement) {\n      const node = (toast as HTMLTemplateElement).content.cloneNode(true);\n      toast = ((node as HTMLElement).firstElementChild as HTMLElement);             \n    }     \n    toast.classList.add('toast');\n    toast.setAttribute('role', 'alert');\n    toast.setAttribute('aria-live', 'assertive');\n    toast.setAttribute('aria-atomic', 'true');\n    // Add custom classes onto toast\n    if (this.options.classes.length > 0) {\n      toast.classList.add(...this.options.classes.split(' '));\n    }\n    if (this.message) toast.innerText = this.message;\n    Toast._container.appendChild(toast);\n    return toast;\n  }\n\n  _animateIn() {\n    // Animate toast in\n    this.el.style.display = \"\";\n    this.el.style.opacity = '0';\n    // easeOutCubic\n    this.el.style.transition = `\n      top ${this.options.inDuration}ms ease,\n      opacity ${this.options.inDuration}ms ease\n    `;\n    setTimeout(() => {\n      this.el.style.top = '0';\n      this.el.style.opacity = '1';      \n    }, 1); \n  }\n\n  /**\n   * Create setInterval which automatically removes toast when timeRemaining >= 0\n   * has been reached.\n   */\n  _setTimer() {\n    if (this.timeRemaining !== Infinity) {\n      this.counterInterval = setInterval(() => {\n        // If toast is not being dragged, decrease its time remaining\n        if (!this.panning) {\n          this.timeRemaining -= 20;\n        }\n        // Animate toast out\n        if (this.timeRemaining <= 0) {\n          this.dismiss();\n        }\n      }, 20);\n    }\n  }\n\n  /**\n   * Dismiss toast with animation.\n   */\n  dismiss() {\n    window.clearInterval(this.counterInterval);\n    let activationDistance = this.el.offsetWidth * this.options.activationPercent;\n\n    if (this.wasSwiped) {\n      this.el.style.transition = 'transform .05s, opacity .05s';\n      this.el.style.transform = `translateX(${activationDistance}px)`;\n      this.el.style.opacity = '0';\n    }\n\n    // easeOutExpo\n    this.el.style.transition = `\n      margin ${this.options.outDuration}ms ease,\n      opacity ${this.options.outDuration}ms ease`;\n\n    setTimeout(() => {\n      this.el.style.opacity = '0';\n      this.el.style.marginTop = '-40px';      \n    }, 1);\n\n    setTimeout(() => {\n      // Call the optional callback\n      if (typeof this.options.completeCallback === 'function') {\n        this.options.completeCallback();\n      }\n      // Remove toast from DOM\n      if (this.el.id != this.options.toastId) {\n        this.el.remove();\n        Toast._toasts.splice(Toast._toasts.indexOf(this), 1);\n        if (Toast._toasts.length === 0) {\n          Toast._removeContainer();\n        }\n      }\n    }, this.options.outDuration);\n  }\n\n  static {\n    Toast._toasts = [];\n    Toast._container = null;\n    Toast._draggedToast = null;\n  }\n}","import { Utils } from \"./utils\";\nimport { Bounding } from \"./bounding\";\nimport { Component, BaseOptions, InitElements, MElement } from \"./component\";\n\nexport type TooltipPosition = 'top' | 'right' | 'bottom' | 'left';\n\nexport interface TooltipOptions extends BaseOptions {\n  /**\n   * Delay time before tooltip disappears.\n   * @default 200\n   */\n  exitDelay: number;\n  /**\n   * Delay time before tooltip appears.\n   * @default 0\n   */\n  enterDelay: number;\n  /**\n   * Element Id for the tooltip.\n   * @default \"\"\n   */\n  tooltipId?: string;\n  /**\n   * Text string for the tooltip.\n   * @default \"\"\n   */\n  text: string;\n  /**\n   * Set distance tooltip appears away from its activator\n   * excluding transitionMovement.\n   * @default 5\n   */\n  margin: number;\n  /**\n   * Enter transition duration.\n   * @default 300\n   */\n  inDuration: number;\n  /**\n   * Opacity of the tooltip.\n   * @default 1\n   */\n  opacity: number;\n  /**\n   * Exit transition duration.\n   * @default 250\n   */\n  outDuration: number;\n  /**\n   * Set the direction of the tooltip.\n   * @default 'bottom'\n   */\n  position: TooltipPosition;\n  /**\n   * Amount in px that the tooltip moves during its transition.\n   * @default 10\n   */\n  transitionMovement: number;\n}\n\nconst _defaults: TooltipOptions = {\n  exitDelay: 200,\n  enterDelay: 0,\n  text: '',\n  margin: 5,\n  inDuration: 250,\n  outDuration: 200,\n  position: 'bottom' as TooltipPosition,\n  transitionMovement: 10,\n  opacity: 1\n};\n\nexport class Tooltip extends Component<TooltipOptions> {\n  /**\n   * If tooltip is open.\n   */\n  isOpen: boolean;\n  /**\n   * If tooltip is hovered.\n   */\n  isHovered: boolean;\n  /**\n   * If tooltip is focused.\n   */\n  isFocused: boolean;\n  tooltipEl: HTMLElement;\n  private _exitDelayTimeout: string | number | NodeJS.Timeout;\n  private _enterDelayTimeout: string | number | NodeJS.Timeout;\n  xMovement: number;\n  yMovement: number;\n\n  constructor(el: HTMLElement, options: Partial<TooltipOptions>) {\n    super(el, options, Tooltip);\n    (this.el as any).M_Tooltip = this;\n\n    this.options = {\n      ...Tooltip.defaults,\n      ...this._getAttributeOptions(),\n      ...options\n    };\n    \n    this.isOpen = false;\n    this.isHovered = false;\n    this.isFocused = false;\n    this._appendTooltipEl();\n    this._setupEventHandlers();\n  }\n\n  static get defaults(): TooltipOptions {\n    return _defaults;\n  }\n\n  /**\n   * Initializes instance of Tooltip.\n   * @param el HTML element.\n   * @param options Component options.\n   */\n  static init(el: HTMLElement, options?: Partial<TooltipOptions>): Tooltip;\n  /**\n   * Initializes instances of Tooltip.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: InitElements<MElement>, options?: Partial<TooltipOptions>): Tooltip[];\n  /**\n   * Initializes instances of Tooltip.\n   * @param els HTML elements.\n   * @param options Component options.\n   */\n  static init(els: HTMLElement | InitElements<MElement>, options: Partial<TooltipOptions> = {}): Tooltip | Tooltip[] {\n    return super.init(els, options, Tooltip);\n  }\n\n  static getInstance(el: HTMLElement): Tooltip {\n    return (el as any).M_Tooltip;\n  }\n\n  destroy() {\n    this.tooltipEl.remove();\n    this._removeEventHandlers();\n    (this.el as any).M_Tooltip = undefined;\n  }\n\n  _appendTooltipEl() {\n    this.tooltipEl = document.createElement('div');\n    this.tooltipEl.classList.add('material-tooltip');\n\n    const tooltipContentEl = this.options.tooltipId \n      ? document.getElementById(this.options.tooltipId)\n      : document.createElement('div');\n    this.tooltipEl.append( tooltipContentEl);\n    tooltipContentEl.style.display = \"\"; \n    \n    tooltipContentEl.classList.add('tooltip-content');\n    this._setTooltipContent(tooltipContentEl);\n    this.tooltipEl.appendChild(tooltipContentEl);\n    document.body.appendChild(this.tooltipEl);\n  }\n\n  _setTooltipContent(tooltipContentEl: HTMLElement) {\n    if (this.options.tooltipId) \n      return;\n    tooltipContentEl.innerText = this.options.text;        \n  }\n\n  _updateTooltipContent() {\n    this._setTooltipContent(this.tooltipEl.querySelector('.tooltip-content'));\n  }\n\n  _setupEventHandlers() {\n    this.el.addEventListener('mouseenter', this._handleMouseEnter);\n    this.el.addEventListener('mouseleave', this._handleMouseLeave);\n    this.el.addEventListener('focus', this._handleFocus, true);\n    this.el.addEventListener('blur', this._handleBlur, true);\n  }\n\n  _removeEventHandlers() {\n    this.el.removeEventListener('mouseenter', this._handleMouseEnter);\n    this.el.removeEventListener('mouseleave', this._handleMouseLeave);\n    this.el.removeEventListener('focus', this._handleFocus, true);\n    this.el.removeEventListener('blur', this._handleBlur, true);\n  }\n\n  /**\n   * Show tooltip.\n   */\n  open = (isManual: boolean) => {\n    if (this.isOpen) return;\n    isManual = isManual === undefined ? true : undefined; // Default value true\n    this.isOpen = true;\n    // Update tooltip content with HTML attribute options\n    this.options = {...this.options, ...this._getAttributeOptions()};\n    this._updateTooltipContent();\n    this._setEnterDelayTimeout(isManual);\n  }\n  \n  /**\n   * Hide tooltip.\n   */\n  close = () => {\n    if (!this.isOpen) return;\n    this.isHovered = false;\n    this.isFocused = false;\n    this.isOpen = false;\n    this._setExitDelayTimeout();\n  }\n\n  _setExitDelayTimeout() {\n    clearTimeout(this._exitDelayTimeout);\n    this._exitDelayTimeout = setTimeout(() => {\n      if (this.isHovered || this.isFocused) return;\n      this._animateOut();\n    }, this.options.exitDelay);\n  }\n\n  _setEnterDelayTimeout(isManual) {\n    clearTimeout(this._enterDelayTimeout);\n    this._enterDelayTimeout = setTimeout(() => {\n      if (!this.isHovered && !this.isFocused && !isManual) return;\n      this._animateIn();\n    }, this.options.enterDelay);\n  }\n\n  _positionTooltip() {\n    const tooltip: HTMLElement = this.tooltipEl;\n    const origin = (this.el as HTMLElement),\n      originHeight = origin.offsetHeight,\n      originWidth = origin.offsetWidth,\n      tooltipHeight = tooltip.offsetHeight,\n      tooltipWidth = tooltip.offsetWidth,\n      margin = this.options.margin;\n\n    (this.xMovement = 0), (this.yMovement = 0);\n\n    let targetTop = origin.getBoundingClientRect().top + Utils.getDocumentScrollTop();\n    let targetLeft = origin.getBoundingClientRect().left + Utils.getDocumentScrollLeft();\n    if (this.options.position === 'top') {\n      targetTop += -tooltipHeight - margin;\n      targetLeft += originWidth / 2 - tooltipWidth / 2;\n      this.yMovement = -this.options.transitionMovement;\n    } else if (this.options.position === 'right') {\n      targetTop += originHeight / 2 - tooltipHeight / 2;\n      targetLeft += originWidth + margin;\n      this.xMovement = this.options.transitionMovement;\n    } else if (this.options.position === 'left') {\n      targetTop += originHeight / 2 - tooltipHeight / 2;\n      targetLeft += -tooltipWidth - margin;\n      this.xMovement = -this.options.transitionMovement;\n    } else {\n      targetTop += originHeight + margin;\n      targetLeft += originWidth / 2 - tooltipWidth / 2;\n      this.yMovement = this.options.transitionMovement;\n    }\n\n    const newCoordinates = this._repositionWithinScreen(\n      targetLeft,\n      targetTop,\n      tooltipWidth,\n      tooltipHeight\n    );\n\n    tooltip.style.top = newCoordinates.y+'px';\n    tooltip.style.left = newCoordinates.x+'px';\n  }\n\n  _repositionWithinScreen(x: number, y: number, width: number, height: number) {\n    const scrollLeft = Utils.getDocumentScrollLeft();\n    const scrollTop = Utils.getDocumentScrollTop();\n    let newX = x - scrollLeft;\n    let newY = y - scrollTop;\n\n    const bounding: Bounding = {\n      left: newX,\n      top: newY,\n      width: width,\n      height: height\n    };\n    const offset = this.options.margin + this.options.transitionMovement;\n    const edges = Utils.checkWithinContainer(document.body, bounding, offset);\n\n    if (edges.left) {\n      newX = offset;\n    } else if (edges.right) {\n      newX -= newX + width - window.innerWidth;\n    }\n    if (edges.top) {\n      newY = offset;\n    } else if (edges.bottom) {\n      newY -= newY + height - window.innerHeight;\n    }\n    return {\n      x: newX + scrollLeft,\n      y: newY + scrollTop\n    };\n  }\n\n  _animateIn() {\n    this._positionTooltip();\n    this.tooltipEl.style.visibility = 'visible';\n    const duration = this.options.inDuration;\n    // easeOutCubic\n    this.tooltipEl.style.transition = `\n      transform ${duration}ms ease-out,\n      opacity ${duration}ms ease-out`;\n    setTimeout(() => {\n      this.tooltipEl.style.transform = `translateX(${this.xMovement}px) translateY(${this.yMovement}px)`;\n      this.tooltipEl.style.opacity = (this.options.opacity || 1).toString();\n    }, 1);\n  }\n\n  _animateOut() {\n    const duration = this.options.outDuration;\n    // easeOutCubic\n    this.tooltipEl.style.transition = `\n      transform ${duration}ms ease-out,\n      opacity ${duration}ms ease-out`;\n    setTimeout(() => {\n      this.tooltipEl.style.transform = `translateX(0px) translateY(0px)`;\n      this.tooltipEl.style.opacity = '0';\n    }, 1);\n    /*\n    anim.remove(this.tooltipEl);\n    anim({\n      targets: this.tooltipEl,\n      opacity: 0,\n      translateX: 0,\n      translateY: 0,\n      duration: this.options.outDuration,\n      easing: 'easeOutCubic'\n    });\n    */\n  }\n\n  _handleMouseEnter = () => {\n    this.isHovered = true;\n    this.isFocused = false; // Allows close of tooltip when opened by focus.\n    this.open(false);\n  }\n\n  _handleMouseLeave = () => {\n    this.isHovered = false;\n    this.isFocused = false; // Allows close of tooltip when opened by focus.\n    this.close();\n  }\n\n  _handleFocus = () => {\n    if (Utils.tabPressed) {\n      this.isFocused = true;\n      this.open(false);\n    }\n  }\n\n  _handleBlur = () => {\n    this.isFocused = false;\n    this.close();\n  }\n\n  _getAttributeOptions(): Partial<TooltipOptions> {    \n    let attributeOptions: Partial<TooltipOptions> = { };\n    const tooltipTextOption = this.el.getAttribute('data-tooltip');\n    const tooltipId = this.el.getAttribute('data-tooltip-id');\n    const positionOption = this.el.getAttribute('data-position');\n    if (tooltipTextOption) {\n      attributeOptions.text = tooltipTextOption;\n    }\n    if (positionOption) {\n      attributeOptions.position = positionOption as TooltipPosition;\n    }\n    if (tooltipId) {\n      attributeOptions.tooltipId = tooltipId;\n    }\n\n    return attributeOptions;\n  }\n}\n","import { Edges } from './edges';\nimport { Bounding } from './bounding';\n\n/**\n * Class with utilitary functions for global usage.\n */\nexport class Utils {\n  /** Specifies wether tab is pressed or not. */\n  static tabPressed: boolean = false;\n  /** Specifies wether there is a key pressed. */\n  static keyDown: boolean = false;\n\n  /**\n   * Key maps.\n   */\n  static keys = {\n    TAB: ['Tab'],\n    ENTER: ['Enter'],\n    ESC: ['Escape', 'Esc'],\n    BACKSPACE: ['Backspace'],\n    ARROW_UP: ['ArrowUp', 'Up'],\n    ARROW_DOWN: ['ArrowDown', 'Down'],\n    ARROW_LEFT: ['ArrowLeft', 'Left'],\n    ARROW_RIGHT: ['ArrowRight', 'Right'],\n    DELETE: ['Delete', 'Del'],\n  };\n\n  /**\n   * Detects when a key is pressed.\n   * @param e Event instance.\n   */\n  static docHandleKeydown(e: KeyboardEvent) {\n    Utils.keyDown = true;\n    if ([...Utils.keys.TAB, ...Utils.keys.ARROW_DOWN, ...Utils.keys.ARROW_UP].includes(e.key)) {\n      Utils.tabPressed = true;\n    }\n  }\n\n  /**\n   * Detects when a key is released.\n   * @param e Event instance.\n   */\n  static docHandleKeyup(e: KeyboardEvent) {\n    Utils.keyDown = false;\n    if ([...Utils.keys.TAB, ...Utils.keys.ARROW_DOWN, ...Utils.keys.ARROW_UP].includes(e.key)) {\n      Utils.tabPressed = false;\n    }\n  }\n\n  /**\n   * Detects when document is focused.\n   * @param e Event instance.\n   */\n  static docHandleFocus(e: FocusEvent) {\n    if (Utils.keyDown) {\n      document.body.classList.add('keyboard-focused');\n    }\n  }\n\n  /**\n   * Detects when document is not focused.\n   * @param e Event instance.\n   */\n  static docHandleBlur(e: FocusEvent) {\n    document.body.classList.remove('keyboard-focused');\n  }\n\n  /**\n   * Generates a unique string identifier.\n   */\n  static guid(): string {\n    const s4 = (): string => {\n      return Math.floor((1 + Math.random()) * 0x10000)\n        .toString(16)\n        .substring(1);\n    }\n    return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n  }\n\n  /**\n   * Checks for exceeded edges\n   * @param container Container element.\n   * @param bounding Bounding rect.\n   * @param offset Element offset.\n   */\n  static checkWithinContainer(container: HTMLElement, bounding: Bounding, offset: number): Edges {\n    let edges = {\n      top: false,\n      right: false,\n      bottom: false,\n      left: false\n    };\n\n    let containerRect = container.getBoundingClientRect();\n    // If body element is smaller than viewport, use viewport height instead.\n    let containerBottom =\n      container === document.body\n        ? Math.max(containerRect.bottom, window.innerHeight)\n        : containerRect.bottom;\n\n    let scrollLeft = container.scrollLeft;\n    let scrollTop = container.scrollTop;\n\n    let scrolledX = bounding.left - scrollLeft;\n    let scrolledY = bounding.top - scrollTop;\n\n    // Check for container and viewport for each edge\n    if (scrolledX < containerRect.left + offset || scrolledX < offset) {\n      edges.left = true;\n    }\n\n    if (\n      scrolledX + bounding.width > containerRect.right - offset ||\n      scrolledX + bounding.width > window.innerWidth - offset\n    ) {\n      edges.right = true;\n    }\n\n    if (scrolledY < containerRect.top + offset || scrolledY < offset) {\n      edges.top = true;\n    }\n\n    if (\n      scrolledY + bounding.height > containerBottom - offset ||\n      scrolledY + bounding.height > window.innerHeight - offset\n    ) {\n      edges.bottom = true;\n    }\n\n    return edges;\n  }\n\n  /**\n   * Checks if element can be aligned in multiple directions.\n   * @param el Element to be inspected.\n   * @param container Container element.\n   * @param bounding Bounding rect.\n   * @param offset Element offset.\n   */\n  static checkPossibleAlignments(el: HTMLElement, container: HTMLElement, bounding: Bounding, offset: number) {\n    let canAlign: {\n      top: boolean,\n      right: boolean,\n      bottom: boolean,\n      left: boolean,\n      spaceOnTop: number,\n      spaceOnRight: number,\n      spaceOnBottom: number\n      spaceOnLeft: number\n    } = {\n      top: true,\n      right: true,\n      bottom: true,\n      left: true,\n      spaceOnTop: null,\n      spaceOnRight: null,\n      spaceOnBottom: null,\n      spaceOnLeft: null\n    };\n\n    let containerAllowsOverflow = getComputedStyle(container).overflow === 'visible';\n    let containerRect = container.getBoundingClientRect();\n    let containerHeight = Math.min(containerRect.height, window.innerHeight);\n    let containerWidth = Math.min(containerRect.width, window.innerWidth);\n    let elOffsetRect = el.getBoundingClientRect();\n\n    let scrollLeft = container.scrollLeft;\n    let scrollTop = container.scrollTop;\n\n    let scrolledX = bounding.left - scrollLeft;\n    let scrolledYTopEdge = bounding.top - scrollTop;\n    let scrolledYBottomEdge = bounding.top + elOffsetRect.height - scrollTop;\n\n    // Check for container and viewport for left\n    canAlign.spaceOnRight = !containerAllowsOverflow\n      ? containerWidth - (scrolledX + bounding.width)\n      : window.innerWidth - (elOffsetRect.left + bounding.width);\n    if (canAlign.spaceOnRight < 0) {\n      canAlign.left = false;\n    }\n\n    // Check for container and viewport for Right\n    canAlign.spaceOnLeft = !containerAllowsOverflow\n      ? scrolledX - bounding.width + elOffsetRect.width\n      : elOffsetRect.right - bounding.width;\n    if (canAlign.spaceOnLeft < 0) {\n      canAlign.right = false;\n    }\n\n    // Check for container and viewport for Top\n    canAlign.spaceOnBottom = !containerAllowsOverflow\n      ? containerHeight - (scrolledYTopEdge + bounding.height + offset)\n      : window.innerHeight - (elOffsetRect.top + bounding.height + offset);\n    if (canAlign.spaceOnBottom < 0) {\n      canAlign.top = false;\n    }\n\n    // Check for container and viewport for Bottom\n    canAlign.spaceOnTop = !containerAllowsOverflow\n      ? scrolledYBottomEdge - (bounding.height - offset)\n      : elOffsetRect.bottom - (bounding.height + offset);\n    if (canAlign.spaceOnTop < 0) {\n      canAlign.bottom = false;\n    }\n\n    return canAlign;\n  }\n\n  /**\n   * Retrieves target element id from trigger.\n   * @param trigger Trigger element.\n   */\n  static getIdFromTrigger(trigger: HTMLElement): string {\n    let id = trigger.dataset.target;\n    if (!id) {\n      id = trigger.getAttribute('href');\n      return id ? id.slice(1) : '';\n    }\n    return id;\n  }\n\n  /**\n   * Retrieves document scroll postion from top.\n   */\n  static getDocumentScrollTop(): number {\n    return window.scrollY || document.documentElement.scrollTop || document.body.scrollTop || 0;\n  };\n\n  /**\n   * Retrieves document scroll postion from left.\n   */\n  static getDocumentScrollLeft(): number {\n    return window.scrollX || document.documentElement.scrollLeft || document.body.scrollLeft || 0;\n  }\n\n  /**\n   * Fires the given function after a certain ammount of time.\n   * @param func Function to be fired.\n   * @param wait Wait time.\n   * @param options Additional options.\n   */\n  static throttle(func: Function, wait: number, options: Partial<{leading:boolean,trailing:boolean}> = null) {\n    let context: object, args: IArguments, result: any;\n    let timeout = null;\n    let previous = 0;\n    options || (options = {});\n    let later = function() {\n      previous = options.leading === false ? 0 : new Date().getTime();\n      timeout = null;\n      result = func.apply(context, args);\n      context = args = null;\n    };\n    return function() {\n      let now = new Date().getTime();\n      if (!previous && options.leading === false) previous = now;\n      let remaining = wait - (now - previous);\n      context = this;\n      args = arguments;\n      if (remaining <= 0) {\n        clearTimeout(timeout);\n        timeout = null;\n        previous = now;\n        result = func.apply(context, args);\n        context = args = null;\n      } else if (!timeout && options.trailing !== false) {\n        timeout = setTimeout(later, remaining);\n      }\n      return result;\n    };\n  }\n}","type RGBColor = {\n  r: number,\n  g: number,\n  b: number,\n}\n\ntype Position = {\n  x: number,\n  y: number,\n}\n\nexport class Waves {\n\n  private static _offset(el: HTMLElement) {\n    const box = el.getBoundingClientRect();\n    const docElem = document.documentElement;\n    return {\n      top: box.top + window.pageYOffset - docElem.clientTop,\n      left: box.left + window.pageXOffset - docElem.clientLeft\n    };\n  }\n\n  // https://phoenix-dx.com/css-techniques-for-material-ripple-effect/\n\n  static renderWaveEffect(targetElement: HTMLElement, position: Position|null = null, color: RGBColor|null = null): void {\n    const isCentered = position === null;\n    const duration = 500;\n    let animationFrame: number, animationStart: number;\n    const animationStep = function(timestamp: number) {\n      if (!animationStart) {\n        animationStart = timestamp;\n      }\n      const frame = timestamp - animationStart;\n      if (frame < duration) {\n        const easing = (frame/duration) * (2 - (frame/duration));\n        const circle = isCentered ? 'circle at 50% 50%' : `circle at ${position.x}px ${position.y}px`;\n        const waveColor = `rgba(${color?.r || 0}, ${color?.g || 0}, ${color?.b || 0}, ${ 0.3 * (1-easing) })`;\n        const stop = 90 * easing + \"%\";\n        targetElement.style.backgroundImage = \"radial-gradient(\"+circle+\", \"+waveColor+\" \"+stop+\", transparent \"+stop+\")\";\n        animationFrame = window.requestAnimationFrame(animationStep);\n      }\n      else {\n        targetElement.style.backgroundImage = 'none';\n        window.cancelAnimationFrame(animationFrame);\n      }\n    };\n    animationFrame = window.requestAnimationFrame(animationStep);\n  }\n\n  static Init() {\n    document.addEventListener(\"DOMContentLoaded\", () => {\n      document.body.addEventListener('click', e => {\n        const trigger = <HTMLElement>e.target;\n        const el = <HTMLElement>trigger.closest('.waves-effect');\n        if (el && el.contains(trigger)) {\n          const isCircular = el.classList.contains('waves-circle');\n          const x = e.pageX - Waves._offset(el).left;\n          const y = e.pageY - Waves._offset(el).top;\n\n          let color = null;\n          if (el.classList.contains('waves-light'))\n            color = {r:255, g:255, b:255};\n\n          Waves.renderWaveEffect(el, isCircular ? null : {x, y}, color);\n        }\n      });\n    });\n\n  }\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","import { Autocomplete } from './autocomplete';\nimport { FloatingActionButton } from './buttons';\nimport { Cards } from './cards';\nimport { Carousel } from './carousel';\nimport { CharacterCounter } from './characterCounter';\nimport { Chips } from './chips';\nimport { Collapsible } from './collapsible';\nimport { Datepicker } from './datepicker';\nimport { Dropdown } from './dropdown';\nimport { Forms } from './forms';\nimport { Materialbox } from './materialbox';\nimport { Modal } from './modal';\nimport { Parallax } from './parallax';\nimport { Pushpin } from './pushpin';\nimport { ScrollSpy } from './scrollspy';\nimport { FormSelect } from './select';\nimport { Sidenav } from './sidenav';\nimport { Slider } from './slider';\nimport { Tabs } from './tabs';\nimport { TapTarget } from './tapTarget';\nimport { Timepicker } from './timepicker';\nimport { Toast, ToastOptions } from './toasts';\nimport { Tooltip } from './tooltip';\nimport { Waves } from './waves';\nimport { Range } from './range';\nimport { Utils } from './utils';\n\nexport class M {\n  static version = '2.1.0';\n\n  static Autocomplete: typeof Autocomplete = Autocomplete;\n  static Tabs: typeof Tabs = Tabs;\n  static Carousel: typeof Carousel = Carousel;\n  static Dropdown: typeof Dropdown = Dropdown;\n  static FloatingActionButton: typeof FloatingActionButton = FloatingActionButton;\n  static Chips: typeof Chips = Chips;\n  static Collapsible: typeof Collapsible = Collapsible;\n  static Datepicker: typeof Datepicker = Datepicker;\n  static CharacterCounter: typeof CharacterCounter = CharacterCounter;\n  static Forms: typeof Forms = Forms;\n  static FormSelect: typeof FormSelect = FormSelect;\n  static Modal: typeof Modal = Modal;\n  static Pushpin: typeof Pushpin = Pushpin;\n  static Materialbox: typeof Materialbox = Materialbox;\n  static Parallax: typeof Parallax = Parallax;\n  static Slider: typeof Slider = Slider;\n  static Timepicker: typeof Timepicker = Timepicker;\n  /** Creates a toast. */\n  static toast: (opt: Partial<ToastOptions>) => Toast = (opt) => new Toast(opt) ;\n  static Tooltip: typeof Tooltip = Tooltip;\n  static Sidenav: typeof Sidenav = Sidenav;\n  static TapTarget: typeof TapTarget = TapTarget;\n  static ScrollSpy: typeof ScrollSpy = ScrollSpy;\n  static Range: typeof Range = Range;\n  static Waves: typeof Waves = Waves;\n  static Utils: typeof Utils = Utils;\n\n  static {\n    document.addEventListener('keydown', Utils.docHandleKeydown, true);\n    document.addEventListener('keyup', Utils.docHandleKeyup, true);\n    document.addEventListener('focus', Utils.docHandleFocus, true);\n    document.addEventListener('blur', Utils.docHandleBlur, true);\n    Cards.Init();\n    Forms.Init();\n    Chips.Init();\n    Waves.Init();\n    Range.Init();\n  }\n\n  /**\n   * Automatically initialize components.\n   * @param context Root element to initialize. Defaults to `document.body`.\n   */\n  static AutoInit(context: HTMLElement = document.body) {\n    let registry = {\n      Autocomplete: context.querySelectorAll('.autocomplete:not(.no-autoinit)'),\n      Carousel: context.querySelectorAll('.carousel:not(.no-autoinit)'),\n      Chips: context.querySelectorAll('.chips:not(.no-autoinit)'),\n      Collapsible: context.querySelectorAll('.collapsible:not(.no-autoinit)'),\n      Datepicker: context.querySelectorAll('.datepicker:not(.no-autoinit)'),\n      Dropdown: context.querySelectorAll('.dropdown-trigger:not(.no-autoinit)'),\n      Materialbox: context.querySelectorAll('.materialboxed:not(.no-autoinit)'),\n      Modal: context.querySelectorAll('.modal:not(.no-autoinit)'),\n      Parallax: context.querySelectorAll('.parallax:not(.no-autoinit)'),\n      Pushpin: context.querySelectorAll('.pushpin:not(.no-autoinit)'),\n      ScrollSpy: context.querySelectorAll('.scrollspy:not(.no-autoinit)'),\n      FormSelect: context.querySelectorAll('select:not(.no-autoinit)'),\n      Sidenav: context.querySelectorAll('.sidenav:not(.no-autoinit)'),\n      Tabs: context.querySelectorAll('.tabs:not(.no-autoinit)'),\n      TapTarget: context.querySelectorAll('.tap-target:not(.no-autoinit)'),\n      Timepicker: context.querySelectorAll('.timepicker:not(.no-autoinit)'),\n      Tooltip: context.querySelectorAll('.tooltipped:not(.no-autoinit)'),\n      FloatingActionButton: context.querySelectorAll('.fixed-action-btn:not(.no-autoinit)'),\n    };\n    M.Autocomplete.init(registry.Autocomplete, {});\n    M.Carousel.init(registry.Carousel, {});\n    M.Chips.init(registry.Chips, {});\n    M.Collapsible.init(registry.Collapsible, {});\n    M.Datepicker.init(registry.Datepicker, {});\n    M.Dropdown.init(registry.Dropdown, {});\n    M.Materialbox.init(registry.Materialbox, {});\n    M.Modal.init(registry.Modal, {});\n    M.Parallax.init(registry.Parallax, {});\n    M.Pushpin.init(registry.Pushpin, {});\n    M.ScrollSpy.init(registry.ScrollSpy, {});\n    M.FormSelect.init(registry.FormSelect, {});\n    M.Sidenav.init(registry.Sidenav, {});\n    M.Tabs.init(registry.Tabs, {});\n    M.TapTarget.init(registry.TapTarget, {});\n    M.Timepicker.init(registry.Timepicker, {});\n    M.Tooltip.init(registry.Tooltip, {});\n    M.FloatingActionButton.init(registry.FloatingActionButton, {});\n  }\n}"],"names":["root","factory","exports","module","define","amd","a","i","this","_defaults","data","onAutocomplete","dropdownOptions","autoFocus","closeOnClick","coverTrigger","minLength","isMultiSelect","onSearch","text","autocomplete","normSearch","toLocaleLowerCase","setMenuItems","options","filter","option","id","toString","includes","maxDropDownHeight","allowUnsafeHTML","Autocomplete","Component","constructor","el","super","_handleInputBlur","_mousedown","close","_resetAutocomplete","_handleInputKeyupAndFocus","e","type","_keydown","count","actualValue","value","Utils","keys","ENTER","key","ARROW_UP","ARROW_DOWN","oldVal","tabPressed","open","_setStatusLoading","length","selectedValues","_triggerChanged","_handleInputKeydown","numItems","container","querySelectorAll","activeIndex","liElement","selectOption","getAttribute","preventDefault","$active","classList","remove","add","children","scrollIntoView","behavior","block","inline","_handleInputClick","_handleContainerMousedownAndTouchstart","_handleContainerMouseupAndTouchend","inputText","isOpen","_renderDropdown","dropdown","recalculateDimensions","setTimeout","M_Autocomplete","defaults","menuItems","_setupDropdown","_setupEventHandlers","init","els","getInstance","destroy","_removeEventHandlers","_removeDropdown","undefined","addEventListener","window","ontouchstart","removeEventListener","document","createElement","style","maxHeight","guid","setAttribute","parentElement","appendChild","userOnItemClick","onItemClick","li","entryID","call","Dropdown","label","querySelector","after","_handleClick","div","_updateSelectedInfo","parentNode","removeChild","_resetCurrentElementPosition","replaceChildren","_highlightPartialText","input","start","indexOf","end","slice","_createDropdownItem","entry","item","innerHTML","some","sel","image","img","src","parts","createTextNode","highlight","textContent","itemText","description","isNaN","innerText","gridTemplateColumns","getGridConfig","append","statusElement","_refreshInputText","dispatchEvent","Event","setValues","entries","find","checkbox","checked","push","selectedEntry","focus","direction","hoverEnabled","toolbarEnabled","FloatingActionButton","_handleFABClick","_handleDocumentClick","target","_menu","_animateInToolbar","_animateInFAB","body","_animateOutFAB","M_FloatingActionButton","_anchor","_floatingBtns","Array","from","_floatingBtnsReverse","reverse","offsetY","offsetX","forEach","index","delay","transition","opacity","transform","scaleFactor","windowWidth","innerWidth","windowHeight","innerHeight","btnRect","getBoundingClientRect","backdrop","fabColor","getComputedStyle","backgroundColor","left","width","bottom","clientWidth","btnBottom","btnLeft","btnWidth","textAlign","overflow","Init","trigger","card","closest","cardReveal","elem","contains","initialOverflow","closeArea","duration","display","activator","dist","shift","padding","numVisible","fullWidth","indicators","noWrap","onCycleTo","Carousel","center","_handleThrottledResize","throttle","_handleResize","bind","_handleCarouselTap","tagName","pressed","dragged","verticalDragged","reference","_xpos","referenceY","_ypos","velocity","amplitude","frame","offset","timestamp","Date","now","clearInterval","ticker","setInterval","_track","_handleCarouselDrag","x","y","delta","deltaY","Math","abs","_scroll","stopPropagation","_handleCarouselRelease","round","dim","requestAnimationFrame","_autoScroll","_handleCarouselClick","clickedElem","clickedIndex","_wrap","clientX","next","prev","_cycleTo","_handleIndicatorClick","indicator","itemWidth","imageHeight","clientHeight","_setCarouselHeight","elapsed","v","exp","M_Carousel","hasMultipleSlides","showIndicators","images","itemHeight","_indicators","min","xform","every","prefix","imageOnly","firstSlide","firstImage","complete","height","naturalWidth","naturalHeight","adjustedHeight","offsetHeight","slideHeight","startsWith","targetTouches","clientY","half","dir","tween","alignment","zTranslation","tweenedOpacity","centerTweenedOpacity","scrollingTimeout","clearTimeout","lastCenter","numVisibleOffset","floor","diff","activeIndicator","pos","transformString","_updateItemStyle","_currItem","oneTimeCallback","zIndex","visibility","n","callback","set","Object","freeze","CharacterCounter","updateCounter","maxLength","parseInt","actualLength","isValidLength","counterString","_validateInput","counterEl","M_CharacterCounter","isInvalid","_setupCounter","_removeCounter","float","fontSize","placeholder","secondaryPlaceholder","closeIconClass","autocompleteOptions","autocompleteOnly","limit","Infinity","onChipAdd","onChipSelect","onChipDelete","gGetIndex","Chips","_handleChipClick","_chip","clickedClose","deleteChip","_input","selectChip","_handleInputFocus","hasAutocomplete","addChip","BACKSPACE","ARROW_LEFT","chipsData","M_Chips","_chips","_setupInput","_renderChips","_setupAutocomplete","_setPlaceholder","_setupLabel","getData","c","_handleChipsKeydown","_handleChipsKeyup","_handleChipsBlur","chips","chipsKeydown","tag","currChips","DELETE","selectIndex","_selectedChip","max","ARROW_RIGHT","hidden","_renderChip","chip","renderedChip","closeIcon","insertBefore","firstChild","chipElem","items","_label","_isValidAndNotExist","isValid","doesNotExist","before","chipIndex","splice","accordion","onOpenStart","onOpenEnd","onCloseStart","onCloseEnd","inDuration","outDuration","Collapsible","_handleCollapsibleClick","header","isActive","_handleCollapsibleKeydown","listItems","activeLis","activeLi","_animateIn","_animateOut","M_Collapsible","_headers","tabIndex","activeBodies","_setExpanded","scrollHeight","classDef","HTMLElement","console","error","Error","ins","instances","Element","autoClose","format","parse","defaultDate","setDefaultDate","disableWeekends","disableDayFn","firstDay","minDate","maxDate","yearRange","minYear","maxYear","minMonth","maxMonth","startRange","endRange","isRTL","yearRangeReverse","showMonthAfterYear","showDaysInNextAndPreviousMonths","showClearBtn","i18n","cancel","clear","done","previousMonth","nextMonth","months","monthsShort","weekdays","weekdaysShort","weekdaysAbbrev","events","onSelect","onOpen","onClose","onDraw","Datepicker","_handleCalendarClick","prevMonth","setDate","_finishSelection","_handleClearClick","date","setInputValue","_handleMonthChange","gotoMonth","_handleYearChange","gotoYear","_handleInputChange","firedBy","_isDate","draw","modal","M_Datepicker","hasOwnProperty","setHours","_setupVariables","_insertHTMLIntoDOM","_setupModal","defDate","gotoDate","obj","test","prototype","getTime","_isWeekend","day","getDay","_setToStartOfDay","_getDaysInMonth","year","month","_isLeapYear","_compareDates","b","modalEl","destroySelects","oldYearSelect","calendarEl","FormSelect","oldMonthSelect","clearBtn","doneBtn","cancelBtn","optEl","Modal","split","map","formats","join","preventOnSelect","_renderDateDisplay","CustomEvent","bubbles","cancelable","composed","detail","displayDate","getMonth","getDate","yearTextEl","getFullYear","dateTextEl","newCalendar","calendars","firstVisibleDate","lastVisibleDate","visibleDate","setMonth","adjustCalendars","adjustCalendar","calendar","ceil","render","randId","opts","days","row","yearOfPreviousMonth","yearOfNextMonth","daysInPreviousMonth","cells","isWeekSelected","r","isSelected","isToday","hasEvent","toDateString","isEmpty","dayNumber","monthNumber","yearNumber","isStartRange","isEndRange","isInRange","dayConfig","isDisabled","renderDay","renderRow","renderTable","arr","ariaSelected","isRowSelected","renderHead","renderBody","renderDayName","rows","renderTitle","instance","refYear","j","monthHtml","yearHtml","isMinYear","isMaxYear","html","isArray","force","_y","_m","random","replace","substr","yearSelect","monthSelect","classes","constrainWidth","template","_template","trim","content","d","dd","ddd","dddd","m","mm","mmm","mmmm","yy","yyyy","abbr","hover","_handleMouseEnter","_handleMouseLeave","toEl","relatedTarget","leaveToDropdownContent","leaveToActiveDropdownTrigger","closestTrigger","M_Dropdown","isTouchMoving","_handleTriggerKeydown","_handleDocumentTouchmove","_handleDropdownClick","itemEl","_handleDropdownKeydown","arrowUpOrDown","TAB","newFocusedIndex","focusedIndex","hasFoundNewIndex","dropdownEl","_focusFocusedItem","focusedElement","activatableElement","click","ESC","keyText","toLowerCase","isLetter","specialKeys","filterQuery","string","newOptionEl","filterTimeout","_resetFilterQuery","_handleWindowResize","offsetParent","_resetDropdownStyles","_placeDropdown","_setupTemporaryEventHandlers","_removeTemporaryEventHandlers","top","transformOrigin","_dropdowns","getIdFromTrigger","getElementById","isScrollable","_moveDropdown","_makeDropdownFocusable","containerEl","preventScroll","_getDropdownPosition","closestOverflowParent","triggerBRect","dropdownBRect","idealHeight","idealWidth","idealXPos","idealYPos","dropdownBounds","alignments","checkPossibleAlignments","verticalAlignment","horizontalAlignment","spaceOnTop","spaceOnBottom","oppositeAlignment","spaceOnLeft","spaceOnRight","_getClosestAncestor","condition","ancestor","position","positionInfo","Forms","textareaAutoResize","textarea","hiddenDiv","fontFamily","lineHeight","paddingTop","paddingRight","paddingBottom","paddingLeft","hasAttribute","overflowWrap","whiteSpace","offsetWidth","originalHeight","prevLength","HTMLInputElement","once","textArea","fileInput","InitFileInputPath","InitTextarea","pathInput","files","filenames","name","Materialbox","_handleMaterialboxClick","doneAnimating","overlayActive","_handleWindowScroll","_handleWindowEscape","_updateVars","originalWidth","_makeAncestorsOverflowVisible","willChange","attrWidth","attrHeight","removeAttribute","_addOverlay","caption","_addCaption","widthPercent","heightPercent","newWidth","newHeight","ratio","_animateImageIn","_removeOverlay","_animateImageOut","_removeCaption","M_Materialbox","originInlineStyles","_changedAncestorList","curr","_offset","box","docElem","documentElement","pageYOffset","clientTop","pageXOffset","clientLeft","maxWidth","getDocumentScrollLeft","getDocumentScrollTop","anchestor","_photoCaption","_overlay","overlayOffset","preventScrolling","dismissible","startingTop","endingTop","_handleTriggerClick","modalId","modalInstance","M_Modal","_handleOverlayClick","_handleModalCloseClick","_handleKeydown","_handleFocus","_nthModalOpened","_modalsOpen","_openingTrigger","scrollTop","insertAdjacentElement","removeProperty","_count","isBottomSheet","responsiveThreshold","Parallax","_handleImageLoad","_updateParallax","M_Parallax","_enabled","_img","_setupStyles","_parallaxes","_handleScroll","parallaxInstance","_handleScrollThrottled","_handleWindowResizeThrottled","containerHeight","parallaxDist","parallax","onPositionChange","Pushpin","M_Pushpin","originalOffset","offsetTop","_pushpins","_updatePosition","_removePinClasses","_updateElements","elIndex","scrolled","Range","_handleRangeChange","thumb","_showRangeBubble","offsetLeft","_calcRangeOffset","_handleRangeMousedownTouchstart","_handleRangeInputMousemoveTouchmove","_handleRangeMouseupTouchend","_handleRangeBlurMouseoutTouchleave","marginLeftText","marginLeft","M_Range","_setupThumb","_removeThumb","parseFloat","scrollOffset","activeClass","getActiveElement","ScrollSpy","_elements","scrollspy","_ticks","right","intersections","_findElements","tickId","_enter","_elementsInView","lastTick","_exit","M_ScrollSpy","_increment","_visibleElements","hits","currTop","elTop","elLeft","elRight","elBottom","actElem","unshift","selector","_handleSelectChange","_setValueToInput","_handleOptionClick","virtualOption","_selectOptionElement","_setSelectedStates","M_FormSelect","isMultiple","multiple","_values","_arraysEqual","optionEl","previousSelectedValues","getSelectedValues","_toggleEntryFromArray","_deselectAll","_selectValue","actualSelectedValues","labelEl","wrapper","hideSelect","disabled","selectOptions","ariaMultiSelectable","realOption","_createAndAppendOptionWithIcon","_addOptionToValues","groupId","groupParent","groupChildren","childId","readOnly","ariaReadOnly","ariaRequired","attrs","attributes","attr","ariaExpanded","prepend","dropdownIcon","createElementNS","ariaHidden","userOnOpenEnd","userOnCloseEnd","selectedOption","keyDown","ariaDisabled","span","iconUrl","selected","_deselectValue","_isValueSelected","realValue","_getSelectedOptions","selectedOptions","realOptions","texts","firstDisabledOption","optionIsSelected","cb","_activateOption","ul","edge","draggable","dragTargetWidth","Sidenav","_handleDragTargetDrag","_isCurrentlyFixed","_verticallyScrolling","isDragged","_startDrag","_dragMoveUpdate","totalDeltaX","_xPos","_startingXpos","dragDirection","_width","transformX","transformPrefix","percentOpen","_handleDragTargetRelease","_handleCloseDrag","_handleCloseRelease","_handleCloseTriggerClick","lastWindowWidth","lastWindowHeight","_enableBodyScrolling","_preventBodyScrolling","M_Sidenav","isFixed","_createOverlay","_createDragTarget","_setupClasses","_setupFixed","_sidenavs","dragTarget","passiveIfSupported","sidenavId","sidenavInstance","_time","_initialScrollTop","currentScrollTop","deltaX","velocityX","_removeClasses","_animateSidenavIn","_animateOverlayIn","_animateSidenavOut","_animateOverlayOut","slideOutPercent","endPercent","interval","pauseOnFocus","pauseOnHover","indicatorLabelFunc","Slider","currIndex","_focusCurrent","_handleAutoPauseHover","_hovered","_pause","_handleAutoPauseFocus","_focused","_handleAutoStartHover","eventPause","_handleAutoStartFocus","_handleInterval","activeElem","_slider","newActiveIndex","_slides","pause","newIndex","M_Slider","findIndex","_activeSlide","_setSliderHeight","_sliderId","placeholderBase64","slide","backgroundImage","_setupIndicators","_animateSlide","_removeIndicators","isDirectionIn","dx","dy","arrLi","_caption","nextIndicator","ariaLabel","fromEvent","onShow","swipeable","Tabs","_setTabsAndTabWidth","_tabWidth","_tabsWidth","_indicator","_calcLeftPos","_activeTabLink","_calcRightPos","_handleTabClick","tabLink","tab","_oldContent","_content","hash","_tabLinks","prevIndex","_index","_tabsCarousel","_animateIndicator","M_Tabs","_setupActiveTabLink","_setupSwipeableTabs","_setupNormalTabs","_createIndicator","_teardownSwipeableTabs","_teardownNormalTabs","location","tabsContent","currContent","tabsWrapper","tabContent","activeTabIndex","scrollWidth","updateTabIndicator","leftDelay","rightDelay","select","tabId","TapTarget","_handleTargetClick","_handleOriginClick","_calculatePositioning","_origin","M_TapTarget","dataset","_setup","originEl","waveEl","contentEl","cloneNode","currentElem","parents","originWidth","originHeight","originTop","originLeft","scrollBarWidth","centerX","centerY","isLeft","isRight","isTop","isBottom","isCenterX","tapTargetWidth","tapTargetHeight","tapTargetTop","tapTargetLeft","tapTargetPosition","tapTargetTextWidth","tapTargetTextHeight","tapTargetTextTop","tapTargetTextLeft","tapTargetTextPadding","tapTargetTextAlign","tapTargetWaveWidth","tapTargetWaveHeight","tapTargetWaveTop","tapTargetWaveLeft","tapTargetTextRight","tapTargetTextBottom","verticalAlign","dialRadius","outerRadius","innerRadius","tickRadius","defaultTime","fromNow","twelveHour","vibrate","Timepicker","_handleTimeInputEnterKey","_inputFromTextField","_handleClockClickStart","clockPlateBR","plate","x0","y0","moved","clickPos","_Pos","setHand","_handleDocumentClickMove","_handleDocumentClickEnd","currentView","showView","minutesView","hours","minutes","_handleAmPmClick","btnClicked","amOrPm","_updateAmPmView","view","hoursView","isHours","nextView","hideView","inputHours","inputMinutes","resetClock","toggleViewTimer","drawClockFromTimeInput","hour","getHours","_addLeadingZero","getMinutes","_updateTimeFromInput","clearValue","last","time","M_Timepicker","_clockSetup","_pickerSetup","num","_createSVGEl","digitalClock","navigator","webkitVibrate","_canvas","spanAmPm","footer","_createButton","button","clearButton","confirmationBtnsContainer","cancelButton","doneButton","_amBtn","_pmBtn","_buildHoursView","_buildMinutesView","_buildSVGClock","diameter","svg","g","bearing","hand","bg","$tick","tick","radian","PI","radius","sin","cos","_tick","toUpperCase","self","canvas","cx1","cy1","cx2","cy2","roundBy5","atan2","unit","z","sqrt","inner","vibrateTimer","displayLength","completeCallback","activationPercent","Toast","message","panning","timeRemaining","_toasts","_createContainer","toastElement","_createToast","M_Toast","_setTimer","_onDragStart","_onDragMove","_onDragEnd","_container","_removeContainer","toast","_draggedToast","startingXPos","xPos","activationDistance","wasSwiped","dismiss","dismissAll","toastIndex","toastId","HTMLTemplateElement","node","firstElementChild","counterInterval","marginTop","exitDelay","enterDelay","margin","transitionMovement","Tooltip","isManual","_getAttributeOptions","_updateTooltipContent","_setEnterDelayTimeout","isHovered","isFocused","_setExitDelayTimeout","_handleBlur","M_Tooltip","_appendTooltipEl","tooltipEl","tooltipContentEl","tooltipId","_setTooltipContent","_exitDelayTimeout","_enterDelayTimeout","_positionTooltip","tooltip","origin","tooltipHeight","tooltipWidth","xMovement","yMovement","targetTop","targetLeft","newCoordinates","_repositionWithinScreen","scrollLeft","newX","newY","bounding","edges","checkWithinContainer","attributeOptions","tooltipTextOption","positionOption","docHandleKeydown","docHandleKeyup","docHandleFocus","docHandleBlur","s4","substring","containerRect","containerBottom","scrolledX","scrolledY","canAlign","containerAllowsOverflow","containerWidth","elOffsetRect","scrolledYTopEdge","scrolledYBottomEdge","scrollY","scrollX","func","wait","context","args","result","timeout","previous","later","leading","apply","remaining","arguments","trailing","Waves","renderWaveEffect","targetElement","color","isCentered","animationFrame","animationStart","animationStep","easing","circle","waveColor","stop","cancelAnimationFrame","isCircular","pageX","pageY","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","M","AutoInit","registry","version","opt","Cards"],"sourceRoot":""}