@materializecss/materialize 2.0.4 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/css/materialize.css +831 -1280
- package/dist/css/materialize.min.css +7 -5
- package/dist/css/materialize.min.css.map +1 -0
- package/dist/js/materialize.cjs.js +7593 -0
- package/dist/js/materialize.d.ts +2333 -0
- package/dist/js/materialize.js +6638 -6744
- package/dist/js/materialize.min.js +5 -6
- package/dist/js/materialize.mjs +7563 -0
- package/dist/materialize-src-v2.1.1.zip +0 -0
- package/dist/materialize-v2.1.1.zip +0 -0
- package/package.json +26 -26
- package/sass/components/_badges.scss +17 -12
- package/sass/components/_buttons.scss +137 -126
- package/sass/components/_cards.scss +12 -14
- package/sass/components/_carousel.scss +8 -6
- package/sass/components/_chips.scss +10 -11
- package/sass/components/_collapsible.scss +6 -8
- package/sass/components/_collection.scss +15 -15
- package/sass/components/_datepicker.scss +15 -15
- package/sass/components/_dropdown.scss +15 -24
- package/sass/components/_global.scss +65 -137
- package/sass/components/_grid.scss +14 -4
- package/sass/components/_materialbox.scss +1 -1
- package/sass/components/_modal.scss +14 -9
- package/sass/components/_navbar.scss +31 -25
- package/sass/components/_preloader.scss +5 -6
- package/sass/components/_sidenav.scss +42 -26
- package/sass/components/_slider.scss +5 -5
- package/sass/components/_table_of_contents.scss +7 -8
- package/sass/components/_tabs.scss +16 -17
- package/sass/components/_tapTarget.scss +3 -3
- package/sass/components/_timepicker.scss +12 -12
- package/sass/components/_toast.scss +17 -10
- package/sass/components/_tooltip.scss +13 -6
- package/sass/components/_variables.scss +13 -377
- package/sass/components/colors.module.scss +74 -180
- package/sass/components/forms/_checkboxes.scss +22 -22
- package/sass/components/forms/_file-input.scss +2 -5
- package/sass/components/forms/_forms.scss +5 -3
- package/sass/components/forms/_input-fields.scss +40 -41
- package/sass/components/forms/_radio-buttons.scss +11 -14
- package/sass/components/forms/_range.scss +16 -24
- package/sass/components/forms/_select.scss +35 -49
- package/sass/components/forms/_switches.scss +9 -12
- package/sass/components/theme.module.scss +140 -0
- package/sass/materialize.scss +6 -3
- package/dist/js/materialize.min.js.map +0 -1
- package/dist/src/autocomplete.d.ts +0 -143
- package/dist/src/autocomplete.d.ts.map +0 -1
- package/dist/src/bounding.d.ts +0 -7
- package/dist/src/bounding.d.ts.map +0 -1
- package/dist/src/buttons.d.ts +0 -65
- package/dist/src/buttons.d.ts.map +0 -1
- package/dist/src/cards.d.ts +0 -4
- package/dist/src/cards.d.ts.map +0 -1
- package/dist/src/carousel.d.ts +0 -131
- package/dist/src/carousel.d.ts.map +0 -1
- package/dist/src/characterCounter.d.ts +0 -37
- package/dist/src/characterCounter.d.ts.map +0 -1
- package/dist/src/chips.d.ts +0 -131
- package/dist/src/chips.d.ts.map +0 -1
- package/dist/src/collapsible.d.ts +0 -75
- package/dist/src/collapsible.d.ts.map +0 -1
- package/dist/src/component.d.ts +0 -74
- package/dist/src/component.d.ts.map +0 -1
- package/dist/src/datepicker.d.ts +0 -248
- package/dist/src/datepicker.d.ts.map +0 -1
- package/dist/src/dropdown.d.ts +0 -149
- package/dist/src/dropdown.d.ts.map +0 -1
- package/dist/src/edges.d.ts +0 -7
- package/dist/src/edges.d.ts.map +0 -1
- package/dist/src/forms.d.ts +0 -12
- package/dist/src/forms.d.ts.map +0 -1
- package/dist/src/global.d.ts +0 -60
- package/dist/src/global.d.ts.map +0 -1
- package/dist/src/index.d.ts +0 -27
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/materialbox.d.ts +0 -96
- package/dist/src/materialbox.d.ts.map +0 -1
- package/dist/src/modal.d.ts +0 -119
- package/dist/src/modal.d.ts.map +0 -1
- package/dist/src/parallax.d.ts +0 -40
- package/dist/src/parallax.d.ts.map +0 -1
- package/dist/src/pushpin.d.ts +0 -52
- package/dist/src/pushpin.d.ts.map +0 -1
- package/dist/src/range.d.ts +0 -41
- package/dist/src/range.d.ts.map +0 -1
- package/dist/src/scrollspy.d.ts +0 -62
- package/dist/src/scrollspy.d.ts.map +0 -1
- package/dist/src/select.d.ts +0 -77
- package/dist/src/select.d.ts.map +0 -1
- package/dist/src/sidenav.d.ts +0 -122
- package/dist/src/sidenav.d.ts.map +0 -1
- package/dist/src/slider.d.ts +0 -103
- package/dist/src/slider.d.ts.map +0 -1
- package/dist/src/tabs.d.ts +0 -80
- package/dist/src/tabs.d.ts.map +0 -1
- package/dist/src/tapTarget.d.ts +0 -59
- package/dist/src/tapTarget.d.ts.map +0 -1
- package/dist/src/timepicker.d.ts +0 -208
- package/dist/src/timepicker.d.ts.map +0 -1
- package/dist/src/toasts.d.ts +0 -95
- package/dist/src/toasts.d.ts.map +0 -1
- package/dist/src/tooltip.d.ts +0 -118
- package/dist/src/tooltip.d.ts.map +0 -1
- package/dist/src/utils.d.ts +0 -97
- package/dist/src/utils.d.ts.map +0 -1
- package/dist/src/waves.d.ts +0 -16
- package/dist/src/waves.d.ts.map +0 -1
- package/sass/components/_theme_variables.scss +0 -78
- package/sass/components/theme.dark.module.scss +0 -32
- package/sass/components/theme.light.module.scss +0 -32
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"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 document.body.style.overflow = 'hidden';\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 document.body.style.overflow = '';\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 console.log(1);\n this.labelEl = <HTMLLabelElement>document.getElementById(this.el.getAttribute(\"aria-labelledby\"));\n }\n else if (this.el.id != \"\"){\n console.log(2);\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 const toast = this.options.toastId \n ? document.getElementById(this.options.toastId)\n : document.createElement('div');\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.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 public 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 public 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.0.4';\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","insertAdjacentElement","_count","isBottomSheet","responsiveThreshold","Parallax","_handleImageLoad","_updateParallax","M_Parallax","_enabled","_img","_setupStyles","_parallaxes","_handleScroll","parallaxInstance","_handleScrollThrottled","_handleWindowResizeThrottled","containerHeight","parallaxDist","scrollTop","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","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":""}
|