{"version":3,"file":"Src_Scripts_components_nice-select_js.5e85ab43f549b7b5be37.js","sources":["webpack://AlmenNet.Setup/./Src/Scripts/components/nice-select.js"],"sourcesContent":["// https://bluzky.github.io/nice-select2/\r\n\r\n// utility functions\r\nfunction triggerClick(el) {\r\n const event = document.createEvent('MouseEvents');\r\n event.initEvent('click', true, false);\r\n el.dispatchEvent(event);\r\n}\r\n\r\nfunction triggerChange(el) {\r\n const event = document.createEvent('HTMLEvents');\r\n event.initEvent('change', true, false);\r\n el.dispatchEvent(event);\r\n}\r\n\r\nfunction triggerFocusIn(el) {\r\n const event = document.createEvent('FocusEvent');\r\n event.initEvent('focusin', true, false);\r\n el.dispatchEvent(event);\r\n}\r\n\r\nfunction triggerFocusOut(el) {\r\n const event = document.createEvent('FocusEvent');\r\n event.initEvent('focusout', true, false);\r\n el.dispatchEvent(event);\r\n}\r\n\r\nfunction triggerModalOpen(el) {\r\n const event = document.createEvent('UIEvent');\r\n event.initEvent('modalopen', true, false);\r\n el.dispatchEvent(event);\r\n}\r\n\r\nfunction triggerModalClose(el) {\r\n const event = document.createEvent('UIEvent');\r\n event.initEvent('modalclose', true, false);\r\n el.dispatchEvent(event);\r\n}\r\n\r\nfunction triggerValidationMessage(el, type) {\r\n if (type == 'invalid') {\r\n addClass(this.dropdown, 'invalid');\r\n removeClass(this.dropdown, 'valid');\r\n } else {\r\n addClass(this.dropdown, 'valid');\r\n removeClass(this.dropdown, 'invalid');\r\n }\r\n}\r\n\r\nfunction attr(el, key) {\r\n if (el[key] != undefined) {\r\n return el[key];\r\n }\r\n return el.getAttribute(key);\r\n}\r\n\r\nfunction data(el, key) {\r\n return el.getAttribute('data-' + key);\r\n}\r\n\r\nfunction hasClass(el, className) {\r\n if (el) {\r\n return el.classList.contains(className);\r\n }\r\n return false;\r\n\r\n}\r\n\r\nfunction addClass(el, className) {\r\n if (el) return el.classList.add(className);\r\n}\r\n\r\nfunction removeClass(el, className) {\r\n if (el) return el.classList.remove(className);\r\n}\r\n\r\nconst defaultOptions = {\r\n data: null,\r\n searchable: false,\r\n showSelectedItems: false,\r\n};\r\n\r\nexport default function NiceSelect(element, options) {\r\n this.el = element;\r\n this.config = Object.assign({}, defaultOptions, options || {});\r\n this.data = this.config.data;\r\n this.selectedOptions = [];\r\n\r\n this.placeholder = attr(this.el, 'placeholder') || this.config.placeholder || 'Select an option';\r\n this.searchtext = attr(this.el, 'searchtext') || this.config.searchtext || 'Search';\r\n this.selectedtext = attr(this.el, 'selectedtext') || this.config.selectedtext || 'selected';\r\n\r\n this.dropdown = null;\r\n this.multiple = attr(this.el, 'multiple');\r\n this.disabled = attr(this.el, 'disabled');\r\n\r\n this.create();\r\n}\r\n\r\nNiceSelect.prototype.create = function () {\r\n this.el.style.opacity = '0';\r\n this.el.style.width = '0';\r\n this.el.style.padding = '0';\r\n this.el.style.height = '0';\r\n if (this.data) {\r\n this.processData(this.data);\r\n } else {\r\n this.extractData();\r\n }\r\n\r\n this.renderDropdown();\r\n this.bindEvent();\r\n};\r\n\r\nNiceSelect.prototype.processData = function (data) {\r\n const options = [];\r\n data.forEach(item=> {\r\n options.push({\r\n data: item,\r\n attributes: {\r\n selected: !!item.selected,\r\n disabled: !!item.disabled,\r\n optgroup: item.value == 'optgroup',\r\n },\r\n });\r\n });\r\n this.options = options;\r\n};\r\n\r\nNiceSelect.prototype.extractData = function () {\r\n const options = this.el.querySelectorAll('option,optgroup');\r\n const data = [];\r\n const allOptions = [];\r\n const selectedOptions = [];\r\n\r\n options.forEach(item => {\r\n if (item.tagName == 'OPTGROUP') {\r\n var itemData = {\r\n text: item.label,\r\n value: 'optgroup',\r\n };\r\n } else {\r\n var itemData = {\r\n text: item.innerText,\r\n value: item.value,\r\n selected: item.getAttribute('selected') != null || this.el.value == item.value,\r\n disabled: item.getAttribute('disabled') != null,\r\n };\r\n }\r\n\r\n const attributes = {\r\n selected: item.selected,\r\n disabled: item.disabled,\r\n optgroup: item.tagName == 'OPTGROUP',\r\n };\r\n\r\n data.push(itemData);\r\n allOptions.push({ data: itemData, attributes: attributes });\r\n });\r\n\r\n this.data = data;\r\n this.options = allOptions;\r\n this.options.forEach(item => {\r\n if (item.attributes.selected) {\r\n selectedOptions.push(item);\r\n }\r\n });\r\n\r\n this.selectedOptions = selectedOptions;\r\n};\r\n\r\nNiceSelect.prototype.renderDropdown = function () {\r\n const classes = [\r\n 'nice-select',\r\n attr(this.el, 'class') || '',\r\n this.disabled ? 'disabled' : '',\r\n this.multiple ? 'has-multiple' : '',\r\n ];\r\n\r\n let searchHtml = '
';\r\n searchHtml += ``;\r\n searchHtml += '
';\r\n\r\n let html = `
`;\r\n html += ``;\r\n html += '
';\r\n html += `${this.config.searchable ? searchHtml : ''}`;\r\n html += '';\r\n html += '
';\r\n html += '
';\r\n\r\n this.el.insertAdjacentHTML('afterend', html);\r\n\r\n this.dropdown = this.el.nextElementSibling;\r\n this._renderSelectedItems();\r\n this._renderItems();\r\n};\r\n\r\nNiceSelect.prototype._renderSelectedItems = function () {\r\n if (this.multiple) {\r\n let selectedHtml = '';\r\n if (this.config.showSelectedItems || this.config.showSelectedItems || window.getComputedStyle(this.dropdown).width == 'auto' || this.selectedOptions.length < 2) {\r\n this.selectedOptions.forEach(function (item) {\r\n selectedHtml += `${item.data.text}`;\r\n });\r\n\r\n selectedHtml = selectedHtml == '' ? this.placeholder : selectedHtml;\r\n } else {\r\n selectedHtml = this.selectedOptions.length + ' ' + this.selectedtext;\r\n }\r\n\r\n this.dropdown.querySelector('.multiple-options').innerHTML = selectedHtml;\r\n } else {\r\n const html = this.selectedOptions.length > 0 ? this.selectedOptions[0].data.text : this.placeholder;\r\n\r\n this.dropdown.querySelector('.current').innerHTML = html;\r\n }\r\n};\r\n\r\nNiceSelect.prototype._renderItems = function () {\r\n const ul = this.dropdown.querySelector('ul');\r\n this.options.forEach(item => {\r\n ul.appendChild(this._renderItem(item));\r\n });\r\n};\r\n\r\nNiceSelect.prototype._renderItem = function (option) {\r\n const el = document.createElement('li');\r\n el.innerHTML = option.data.text;\r\n\r\n if (option.attributes.optgroup) {\r\n addClass(el, 'optgroup');\r\n } else {\r\n el.setAttribute('data-value', option.data.value);\r\n const classList = [\r\n 'option',\r\n option.attributes.selected ? 'selected' : null,\r\n option.attributes.disabled ? 'disabled' : null,\r\n ];\r\n\r\n el.addEventListener('click', this._onItemClicked.bind(this, option));\r\n el.classList.add(...classList);\r\n }\r\n\r\n option.element = el;\r\n return el;\r\n};\r\n\r\nNiceSelect.prototype.update = function () {\r\n this.extractData();\r\n if (this.dropdown) {\r\n const open = hasClass(this.dropdown, 'open');\r\n this.dropdown.parentNode.removeChild(this.dropdown);\r\n this.create();\r\n\r\n if (open) {\r\n triggerClick(this.dropdown);\r\n }\r\n }\r\n\r\n if (attr(this.el, 'disabled')) {\r\n this.disable();\r\n } else {\r\n this.enable();\r\n }\r\n};\r\n\r\nNiceSelect.prototype.disable = function () {\r\n if (!this.disabled) {\r\n this.disabled = true;\r\n addClass(this.dropdown, 'disabled');\r\n }\r\n};\r\n\r\nNiceSelect.prototype.enable = function () {\r\n if (this.disabled) {\r\n this.disabled = false;\r\n removeClass(this.dropdown, 'disabled');\r\n }\r\n};\r\n\r\nNiceSelect.prototype.clear = function () {\r\n this.resetSelectValue();\r\n this.selectedOptions = [];\r\n this._renderSelectedItems();\r\n this.update();\r\n\r\n triggerChange(this.el);\r\n};\r\n\r\nNiceSelect.prototype.destroy = function () {\r\n if (this.dropdown) {\r\n this.dropdown.parentNode.removeChild(this.dropdown);\r\n this.el.style.display = '';\r\n }\r\n};\r\n\r\nNiceSelect.prototype.bindEvent = function () {\r\n const $this = this;\r\n this.dropdown.addEventListener('click', this._onClicked.bind(this));\r\n this.dropdown.addEventListener('keydown', this._onKeyPressed.bind(this));\r\n this.dropdown.addEventListener('focusin', triggerFocusIn.bind(this, this.el));\r\n this.dropdown.addEventListener('focusout', triggerFocusOut.bind(this, this.el));\r\n this.el.addEventListener('invalid', triggerValidationMessage.bind(this, this.el, 'invalid'));\r\n window.addEventListener('click', this._onClickedOutside.bind(this));\r\n\r\n if (this.config.searchable) {\r\n this._bindSearchEvent();\r\n }\r\n};\r\n\r\nNiceSelect.prototype._bindSearchEvent = function () {\r\n const searchBox = this.dropdown.querySelector('.nice-select-search');\r\n if (searchBox) {\r\n searchBox.addEventListener('click', function (e) {\r\n e.stopPropagation();\r\n return false;\r\n });\r\n }\r\n\r\n searchBox.addEventListener('input', this._onSearchChanged.bind(this));\r\n};\r\n\r\nNiceSelect.prototype._onClicked = function (e) {\r\n e.preventDefault();\r\n if (!hasClass(this.dropdown, 'open')) {\r\n addClass(this.dropdown, 'open');\r\n triggerModalOpen(this.el);\r\n } else if (!this.multiple) {\r\n removeClass(this.dropdown, 'open');\r\n triggerModalClose(this.el);\r\n }\r\n\r\n if (hasClass(this.dropdown, 'open')) {\r\n const search = this.dropdown.querySelector('.nice-select-search');\r\n if (search) {\r\n search.value = '';\r\n search.focus();\r\n }\r\n\r\n let t = this.dropdown.querySelector('.focus');\r\n removeClass(t, 'focus');\r\n t = this.dropdown.querySelector('.selected');\r\n addClass(t, 'focus');\r\n this.dropdown.querySelectorAll('ul li').forEach(function (item) {\r\n item.style.display = '';\r\n });\r\n } else {\r\n this.dropdown.focus();\r\n }\r\n};\r\n\r\nNiceSelect.prototype._onItemClicked = function (option, e) {\r\n const optionEl = e.target;\r\n\r\n if (!hasClass(optionEl, 'disabled')) {\r\n if (this.multiple) {\r\n if (hasClass(optionEl, 'selected')) {\r\n removeClass(optionEl, 'selected');\r\n this.selectedOptions.splice(this.selectedOptions.indexOf(option), 1);\r\n this.el.querySelector(`option[value=\"${optionEl.dataset.value}\"]`).removeAttribute('selected');\r\n } else {\r\n addClass(optionEl, 'selected');\r\n this.selectedOptions.push(option);\r\n }\r\n } else {\r\n this.selectedOptions.forEach(function (item) {\r\n removeClass(item.element, 'selected');\r\n });\r\n\r\n addClass(optionEl, 'selected');\r\n this.selectedOptions = [option];\r\n }\r\n\r\n this._renderSelectedItems();\r\n this.updateSelectValue();\r\n }\r\n};\r\n\r\nNiceSelect.prototype.updateSelectValue = function () {\r\n if (this.multiple) {\r\n const select = this.el;\r\n this.selectedOptions.forEach(function (item) {\r\n const el = select.querySelector(`option[value=\"${item.data.value}\"]`);\r\n if (el) {\r\n el.setAttribute('selected', true);\r\n }\r\n });\r\n } else if (this.selectedOptions.length > 0) {\r\n this.el.value = this.selectedOptions[0].data.value;\r\n }\r\n triggerChange(this.el);\r\n};\r\n\r\nNiceSelect.prototype.resetSelectValue = function () {\r\n if (this.multiple) {\r\n const select = this.el;\r\n this.selectedOptions.forEach(function (item) {\r\n const el = select.querySelector(`option[value=\"${item.data.value}\"]`);\r\n if (el) {\r\n el.removeAttribute('selected');\r\n }\r\n });\r\n } else if (this.selectedOptions.length > 0) {\r\n this.el.selectedIndex = -1;\r\n }\r\n\r\n triggerChange(this.el);\r\n};\r\n\r\nNiceSelect.prototype._onClickedOutside = function (e) {\r\n if (!this.dropdown.contains(e.target)) {\r\n removeClass(this.dropdown, 'open');\r\n triggerModalClose(this.el);\r\n }\r\n};\r\n\r\nNiceSelect.prototype._onKeyPressed = function (e) {\r\n // Keyboard events\r\n\r\n const focusedOption = this.dropdown.querySelector('.focus');\r\n\r\n const open = hasClass(this.dropdown, 'open');\r\n\r\n // Enter\r\n if (e.keyCode == 13) {\r\n if (open) {\r\n triggerClick(focusedOption);\r\n } else {\r\n triggerClick(this.dropdown);\r\n }\r\n } else if (e.keyCode == 40) {\r\n // Down\r\n if (!open) {\r\n triggerClick(this.dropdown);\r\n } else {\r\n const next = this._findNext(focusedOption);\r\n if (next) {\r\n var t = this.dropdown.querySelector('.focus');\r\n removeClass(t, 'focus');\r\n addClass(next, 'focus');\r\n }\r\n }\r\n e.preventDefault();\r\n } else if (e.keyCode == 38) {\r\n // Up\r\n if (!open) {\r\n triggerClick(this.dropdown);\r\n } else {\r\n const prev = this._findPrev(focusedOption);\r\n if (prev) {\r\n var t = this.dropdown.querySelector('.focus');\r\n removeClass(t, 'focus');\r\n addClass(prev, 'focus');\r\n }\r\n }\r\n e.preventDefault();\r\n } else if (e.keyCode == 27 && open) {\r\n // Esc\r\n triggerClick(this.dropdown);\r\n } else if (e.keyCode === 32 && open) {\r\n // Space\r\n return false;\r\n }\r\n return false;\r\n};\r\n\r\nNiceSelect.prototype._findNext = function (el) {\r\n if (el) {\r\n el = el.nextElementSibling;\r\n } else {\r\n el = this.dropdown.querySelector('.list .option');\r\n }\r\n\r\n while (el) {\r\n if (!hasClass(el, 'disabled') && el.style.display != 'none') {\r\n return el;\r\n }\r\n el = el.nextElementSibling;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nNiceSelect.prototype._findPrev = function (el) {\r\n if (el) {\r\n el = el.previousElementSibling;\r\n } else {\r\n el = this.dropdown.querySelector('.list .option:last-child');\r\n }\r\n\r\n while (el) {\r\n if (!hasClass(el, 'disabled') && el.style.display != 'none') {\r\n return el;\r\n }\r\n el = el.previousElementSibling;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nNiceSelect.prototype._onSearchChanged = function (e) {\r\n const open = hasClass(this.dropdown, 'open');\r\n let text = e.target.value;\r\n text = text.toLowerCase();\r\n\r\n if (text == '') {\r\n this.options.forEach(function (item) {\r\n item.element.style.display = '';\r\n });\r\n } else if (open) {\r\n const matchReg = new RegExp(text);\r\n this.options.forEach(function (item) {\r\n const optionText = item.data.text.toLowerCase();\r\n const matched = matchReg.test(optionText);\r\n item.element.style.display = matched ? '' : 'none';\r\n });\r\n }\r\n\r\n this.dropdown.querySelectorAll('.focus').forEach(function (item) {\r\n removeClass(item, 'focus');\r\n });\r\n\r\n const firstEl = this._findNext(null);\r\n addClass(firstEl, 'focus');\r\n};\r\n\r\nexport function bind(el, options) {\r\n return new NiceSelect(el, options);\r\n}\r\n\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AACA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAFA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AACA;AACA;AACA;AAHA;AAMA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;;A;;A","sourceRoot":""}