{"version":3,"names":["Object","defineProperty","exports","value","OebbAutocomplete","input","list","this","useFirstItemOnEnter","showPanelOnFocus","isPanelAlwaysOpen","scrollSpaceTop","isListOpen","hasFocus","activeElementIndex","randId","Math","random","toString","substr","data","initDom","initListeners","render","prototype","setAttribute","template","defaultTemplate","activeCallback","defaultActive","selectCallback","defaultSelect","element","document","createElement","classList","add","style","position","parentNode","insertBefore","appendChild","display","addAriaAttributesOnInput","addAriaAttributesOnList","id","trim","console","warn","inputLabel","label","querySelector","refreshAriaAttributesOnItems","items","length","i","refreshAriaAttributesOnInput","toggleAriaAttributeSelected","selected","getAttribute","_this","addEventListener","handleFocus","handleBlur","e","handleKeydown","handleKeyup","preventDefault","handleItemClick","withTemplate","withFirstItemOnEnter","withPanelOnFocus","withPanelAlwaysOpen","activate","withScrollSpaceTop","onKeyup","keyupCallback","onKeydown","keydownCallback","onItemActive","onItemSelect","setData","getData","setValue","addValue","valueParts","split","pop","push","join","getValue","getOriginalValue","originalValue","getItems","getActiveElementIndex","lastKeyCode","hideList","keyCode","tabIndex","stopPropagation","remove","scrollTop","isItemInListView","y","offsetTop","clientHeight","target","item","closest","Array","slice","call","querySelectorAll","index","indexOf","focus","rectList","getBoundingClientRect","rectItem","top","height","removeAttribute","listHtml","innerHTML","forEach","FilterMode","valueLast","toLowerCase","substring","textContent","createOebbAutocompleteFromStringArray","rawData","filterMode","StartsWith","Contains","filter","option","createOebbAutocompleteFromRemoteStringArray","url","options","paramKey","suggestionsKey","debounceTiming","origin","debounceTimer","clearTimeout","setTimeout","fetch","encodeURI","then","response","json","catch","error","createOebbAutocompleteFromRemoteStringArrayWithTopResults","suggestionsLabel","topResultsKey","topResultsLabel","typeMapping","group","indexGroup","groupHtml","indexItem","title","resultData","itemIndex","itemElement","dataset","window","location","href","addOebbautocompleteDefaultStyle","tint","head"],"sources":["node_modules/@oebb-web-team/oebb-web-components/node_modules/@oebb-web-team/oebb-web-library/dist/autocomplete/OebbAutocomplete.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar OebbAutocomplete = /** @class */ (function () {\n function OebbAutocomplete(input, list) {\n this.useFirstItemOnEnter = false;\n this.showPanelOnFocus = false;\n this.isPanelAlwaysOpen = false;\n this.scrollSpaceTop = 0;\n this.isListOpen = false;\n this.hasFocus = false;\n this.activeElementIndex = -1;\n this.randId = Math.random().toString(36).substr(2, 6);\n this.data = [];\n this.input = input;\n this.list = list;\n this.initDom();\n this.initListeners();\n if (this.isPanelAlwaysOpen) {\n this.render();\n }\n }\n OebbAutocomplete.prototype.initDom = function () {\n this.input.setAttribute('autocomplete', 'off');\n this.template = defaultTemplate;\n this.activeCallback = defaultActive;\n this.selectCallback = defaultSelect;\n this.element = document.createElement('div');\n this.element.classList.add('oebb-autocomplete-wrapper');\n this.element.style.position = 'relative';\n this.input.parentNode.insertBefore(this.element, this.input);\n this.element.appendChild(this.input);\n if (!this.list) {\n this.list = document.createElement('ul');\n this.element.appendChild(this.list);\n }\n this.list.classList.add('oebb-autocomplete-list');\n this.list.classList.add('js-oebb-autocomplete-list');\n this.list.style.display = 'none';\n this.addAriaAttributesOnInput();\n this.addAriaAttributesOnList();\n };\n OebbAutocomplete.prototype.addAriaAttributesOnInput = function () {\n if (!this.input.id || this.input.id.trim() == '')\n console.warn('No attribute \"id\" on autocomplete input found.');\n this.input.setAttribute('role', 'combobox');\n this.input.setAttribute('aria-autocomplete', 'list');\n this.input.setAttribute('aria-controls', 'oebb-autocomplete-list-' + this.randId);\n this.input.setAttribute('aria-expanded', 'false');\n this.input.setAttribute('aria-activedescendant', '');\n };\n OebbAutocomplete.prototype.addAriaAttributesOnList = function (inputLabel) {\n var label = (inputLabel !== null && inputLabel !== void 0 ? inputLabel : document.querySelector(\"[for=\\\"\" + this.input.id + \"\\\"]\"));\n if (!label)\n return;\n label.setAttribute('id', 'oebb-autocomplete-label-' + this.randId);\n this.list.setAttribute('id', 'oebb-autocomplete-list-' + this.randId);\n this.list.setAttribute('role', 'listbox');\n this.list.setAttribute('aria-labelledby', 'oebb-autocomplete-label-' + this.randId);\n };\n OebbAutocomplete.prototype.refreshAriaAttributesOnItems = function () {\n if (this.items.length == 0)\n return;\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].setAttribute('id', 'oebb-autocomplete-item-' + this.randId + '-' + i);\n this.items[i].setAttribute('role', 'option');\n this.items[i].setAttribute('aria-selected', 'false');\n }\n };\n OebbAutocomplete.prototype.refreshAriaAttributesOnInput = function () {\n if (this.isListOpen) {\n this.input.setAttribute('aria-expanded', 'true');\n }\n else {\n this.input.setAttribute('aria-expanded', 'false');\n }\n if (this.activeElementIndex > -1) {\n this.input.setAttribute('aria-activedescendant', 'oebb-autocomplete-item-' + this.randId + '-' + this.activeElementIndex);\n }\n else {\n this.input.setAttribute('aria-activedescendant', '');\n }\n };\n OebbAutocomplete.prototype.toggleAriaAttributeSelected = function (i) {\n if (i < 0)\n return;\n this.input.setAttribute('aria-activedescendant', 'oebb-autocomplete-item-' + this.randId + '-' + i);\n var selected = this.items[i].getAttribute('aria-selected');\n if (selected === null || selected === 'false') {\n this.items[i].setAttribute('aria-selected', 'true');\n }\n else {\n this.items[i].setAttribute('aria-selected', 'false');\n }\n };\n OebbAutocomplete.prototype.initListeners = function () {\n var _this = this;\n this.input.addEventListener('focus', function () { return _this.handleFocus(); }, false);\n this.input.addEventListener('blur', function () { return _this.handleBlur(); }, false);\n this.input.addEventListener('keydown', function (e) { return _this.handleKeydown(e); }, false);\n this.input.addEventListener('keyup', function (e) { return _this.handleKeyup(e); }, false);\n this.list.addEventListener('mousedown', function (e) { return e.preventDefault(); }, false); // Prevent list from closing on item click because of \"blur\" event\n this.list.addEventListener('click', function (e) { return _this.handleItemClick(e); }, false);\n };\n OebbAutocomplete.prototype.withTemplate = function (template) {\n this.template = template;\n return this;\n };\n OebbAutocomplete.prototype.withFirstItemOnEnter = function () {\n this.useFirstItemOnEnter = true;\n return this;\n };\n OebbAutocomplete.prototype.withPanelOnFocus = function () {\n this.showPanelOnFocus = true;\n return this;\n };\n OebbAutocomplete.prototype.withPanelAlwaysOpen = function (activate) {\n if (activate === void 0) { activate = true; }\n if (activate) {\n this.isPanelAlwaysOpen = true;\n }\n else {\n this.isPanelAlwaysOpen = false;\n }\n return this;\n };\n OebbAutocomplete.prototype.withScrollSpaceTop = function (scrollSpaceTop) {\n this.scrollSpaceTop = scrollSpaceTop;\n return this;\n };\n OebbAutocomplete.prototype.onKeyup = function (keyupCallback) {\n this.keyupCallback = keyupCallback;\n return this;\n };\n OebbAutocomplete.prototype.onKeydown = function (keydownCallback) {\n this.keydownCallback = keydownCallback;\n return this;\n };\n OebbAutocomplete.prototype.onItemActive = function (activeCallback) {\n this.activeCallback = activeCallback;\n return this;\n };\n OebbAutocomplete.prototype.onItemSelect = function (selectCallback) {\n this.selectCallback = selectCallback;\n return this;\n };\n OebbAutocomplete.prototype.setData = function (data) {\n this.data = data;\n };\n OebbAutocomplete.prototype.getData = function () {\n return this.data;\n };\n OebbAutocomplete.prototype.setValue = function (value) {\n this.value = value;\n this.input.value = value;\n };\n OebbAutocomplete.prototype.addValue = function (value) {\n var valueParts = this.input.value.split(/\\s+/);\n valueParts.pop();\n valueParts.push(value);\n this.value = valueParts.join(' ');\n ;\n this.input.value = this.value;\n };\n OebbAutocomplete.prototype.getValue = function () {\n return this.input.value;\n };\n OebbAutocomplete.prototype.getOriginalValue = function () {\n return this.originalValue;\n };\n OebbAutocomplete.prototype.getItems = function () {\n return this.items;\n };\n OebbAutocomplete.prototype.getActiveElementIndex = function () {\n return this.activeElementIndex;\n };\n OebbAutocomplete.prototype.handleFocus = function () {\n this.hasFocus = true;\n this.lastKeyCode = null;\n if (this.showPanelOnFocus)\n this.render();\n };\n OebbAutocomplete.prototype.handleBlur = function () {\n this.hasFocus = false;\n this.lastKeyCode = null;\n this.hideList();\n };\n OebbAutocomplete.prototype.handleKeydown = function (e) {\n this.toggleAriaAttributeSelected(this.activeElementIndex);\n if (this.activeElementIndex == -1)\n this.originalValue = this.getValue();\n switch (e.keyCode) {\n case 9:\n this.list.tabIndex = -1;\n return;\n case 13: // Enter\n if (this.isListOpen)\n e.preventDefault(); // Prevent form submit\n if (this.activeElementIndex > -1)\n this.selectCallback(this.activeElementIndex, e);\n if (this.useFirstItemOnEnter && this.isListOpen && this.data.length > 0 && this.activeElementIndex == -1)\n this.selectCallback(0, e);\n this.hideList();\n break;\n case 27: // ESC\n if (this.activeElementIndex > -1)\n e.stopPropagation();\n this.hideList();\n this.setValue(this.originalValue);\n break;\n case 38: // Up\n if (this.activeElementIndex > -1)\n e.preventDefault();\n // Any element\n if (this.activeElementIndex > -1) {\n this.items[this.activeElementIndex].classList.remove('oebb-autocomplete-item--active');\n this.activeElementIndex--;\n }\n // Any element, still not first element\n if (this.activeElementIndex > -1)\n this.items[this.activeElementIndex].classList.add('oebb-autocomplete-item--active');\n // Scroll to top after first element, usefull if groups are used\n if (this.activeElementIndex == -1)\n this.list.scrollTop = 0;\n // If on element, fire activeCallback\n if (this.activeElementIndex == -1)\n this.setValue(this.originalValue);\n if (this.activeElementIndex > -1)\n this.activeCallback(this.activeElementIndex);\n break;\n case 40: // Down\n // List not open, no data\n if (this.data.length == 0)\n return;\n // List not open\n if (!this.isListOpen && this.data.length > 0) {\n this.activeElementIndex = -1;\n this.render();\n break;\n }\n // Last element\n if ((this.activeElementIndex + 1) == this.items.length)\n break;\n // Any element\n if (this.activeElementIndex > -1)\n this.items[this.activeElementIndex].classList.remove('oebb-autocomplete-item--active');\n this.activeElementIndex++;\n this.items[this.activeElementIndex].classList.add('oebb-autocomplete-item--active');\n // If on element, fire activeCallback\n if (this.activeElementIndex == -1)\n this.setValue(this.originalValue);\n if (this.activeElementIndex > -1)\n this.activeCallback(this.activeElementIndex);\n break;\n }\n this.toggleAriaAttributeSelected(this.activeElementIndex);\n this.refreshAriaAttributesOnInput();\n if (this.keydownCallback)\n this.keydownCallback(e);\n // No element\n if (this.activeElementIndex == -1)\n return;\n if (e.keyCode == 38 && this.isListOpen && !this.isItemInListView()) {\n var y = this.items[this.activeElementIndex].offsetTop;\n this.list.scrollTop = y - this.scrollSpaceTop;\n }\n if (e.keyCode == 40 && this.isListOpen && !this.isItemInListView()) {\n var y = this.items[this.activeElementIndex].offsetTop - this.list.clientHeight + this.items[this.activeElementIndex].clientHeight;\n this.list.scrollTop = y;\n }\n };\n OebbAutocomplete.prototype.handleKeyup = function (e) {\n this.value = this.input.value;\n this.lastKeyCode = e.keyCode;\n if (e.keyCode === 13\n || e.keyCode === 27\n || e.keyCode === 38\n || e.keyCode === 40)\n return;\n this.keyupCallback(e);\n this.render();\n };\n OebbAutocomplete.prototype.handleItemClick = function (e) {\n e.stopPropagation();\n var target = e.target;\n var item = target.closest('li');\n var items = Array.prototype.slice.call(this.list.querySelectorAll('.js-oebb-autocomplete-item'));\n var index = items.indexOf(item);\n this.selectCallback(index, e);\n this.hideList();\n this.input.focus();\n };\n OebbAutocomplete.prototype.isItemInListView = function () {\n var rectList = this.list.getBoundingClientRect();\n var rectItem = this.items[this.activeElementIndex].getBoundingClientRect();\n return (rectItem.top >= rectList.top + this.scrollSpaceTop && rectItem.top <= rectList.top + rectList.height - rectItem.height); // top && bottom\n };\n OebbAutocomplete.prototype.hideList = function () {\n if (this.activeElementIndex > -1) {\n this.items[this.activeElementIndex].classList.remove('oebb-autocomplete-item--active');\n this.activeElementIndex = -1;\n }\n if (this.isPanelAlwaysOpen)\n return;\n if (!this.isListOpen)\n return;\n this.list.removeAttribute('tabindex');\n this.list.scrollTop = 0;\n this.list.style.display = 'none';\n this.isListOpen = false;\n this.refreshAriaAttributesOnInput();\n };\n OebbAutocomplete.prototype.render = function () {\n var _this = this;\n this.activeElementIndex = -1;\n this.list.removeAttribute('tabindex');\n this.list.scrollTop = 0;\n if (!this.isPanelAlwaysOpen) {\n if (!this.hasFocus)\n return this.hideList();\n if (this.data.length == 0)\n return this.hideList();\n if (!this.showPanelOnFocus && (!this.value || this.value == ''))\n return this.hideList();\n if (this.lastKeyCode === 13)\n return; // Prevents panel after submitting form because of suggestions via async request\n }\n var listHtml = \"\";\n this.list.innerHTML = \"\";\n this.data.forEach(function (item, i) {\n listHtml += _this.template(item, i);\n });\n this.list.innerHTML = listHtml;\n this.list.style.display = 'block';\n this.isListOpen = true;\n this.items = this.list.querySelectorAll('.js-oebb-autocomplete-item');\n // this.refreshItemListener();\n this.refreshAriaAttributesOnInput();\n this.refreshAriaAttributesOnItems();\n };\n return OebbAutocomplete;\n}());\nexports.OebbAutocomplete = OebbAutocomplete;\nvar FilterMode;\n(function (FilterMode) {\n FilterMode[\"StartsWith\"] = \"STARTS_WITH\";\n FilterMode[\"Contains\"] = \"CONTAINS\";\n})(FilterMode || (FilterMode = {}));\n;\nvar defaultTemplate = function (item) {\n var valueParts = this.input.value.split(/\\s+/);\n var valueLast = valueParts.pop().toString();\n if (item.toLowerCase().indexOf(valueLast.toLowerCase()) === 0) {\n return \"
  • \" + (item.substring(0, valueLast.length) + \"\" + item.substring(valueLast.length)) + \"
  • \";\n }\n return \"
  • \" + item + \"
  • \";\n};\nvar defaultActive = function () {\n this.addValue(this.items[this.activeElementIndex].textContent.trim());\n};\nvar defaultSelect = function (index) {\n this.addValue(this.getData()[index]);\n};\nfunction createOebbAutocompleteFromStringArray(input, rawData, filterMode) {\n if (filterMode === void 0) { filterMode = FilterMode.StartsWith; }\n return new OebbAutocomplete(input)\n .withTemplate(defaultTemplate)\n .onKeyup(function () {\n var value = this.getValue().split(/\\s+/).pop();\n if (!value.trim())\n return;\n var data = [];\n if (filterMode === FilterMode.Contains) {\n data = rawData.filter(function (option) {\n return (option.toLowerCase().indexOf(value.toLowerCase()) > -1);\n });\n }\n else {\n data = rawData.filter(function (option) {\n return (option.toLowerCase().indexOf(value.toLowerCase()) === 0);\n });\n }\n this.setData(data);\n })\n .onItemActive(defaultActive)\n .onItemSelect(defaultSelect);\n}\nexports.createOebbAutocompleteFromStringArray = createOebbAutocompleteFromStringArray;\nfunction createOebbAutocompleteFromRemoteStringArray(input, url, options) {\n if (options === void 0) { options = {}; }\n options.paramKey = options.paramKey || 'q';\n options.suggestionsKey = options.suggestionsKey || 'suggestions';\n options.debounceTiming = options.debounceTiming;\n if (options.debounceTiming !== 0)\n options.debounceTiming = 500;\n var origin = url;\n var debounceTimer;\n return new OebbAutocomplete(input)\n .withTemplate(defaultTemplate)\n .onKeyup(function () {\n var _this = this;\n var value = this.getValue().split(/\\s+/).pop();\n if (!value.trim())\n return;\n (function () {\n if (debounceTimer)\n clearTimeout(debounceTimer);\n debounceTimer = setTimeout(function () {\n var url;\n if (origin.indexOf('?') > -1) {\n url = origin + (\"&\" + options.paramKey + \"=\" + value);\n }\n else {\n url = origin + (\"?\" + options.paramKey + \"=\" + value);\n }\n fetch(encodeURI(url))\n .then(function (response) { return response.json(); })\n .then(function (data) {\n _this.setData(data[options.suggestionsKey]);\n _this.render();\n }).catch(function (e) { return console.error(e); });\n }, options.debounceTiming);\n })();\n })\n .onItemActive(defaultActive)\n .onItemSelect(defaultSelect);\n}\nexports.createOebbAutocompleteFromRemoteStringArray = createOebbAutocompleteFromRemoteStringArray;\nfunction createOebbAutocompleteFromRemoteStringArrayWithTopResults(input, url, options) {\n if (options === void 0) { options = {}; }\n options.paramKey = options.paramKey || 'q';\n options.suggestionsKey = options.suggestionsKey || 'suggestions';\n options.suggestionsLabel = options.suggestionsLabel || 'Vorschläge';\n options.topResultsKey = options.topResultsKey || 'top_results';\n options.topResultsLabel = options.topResultsLabel || 'Beste Ergebnisse';\n options.typeMapping = options.typeMapping || function (item) { return item.url.indexOf('.pdf') > -1 ? 'PDF' : 'Seite'; };\n options.debounceTiming = options.debounceTiming;\n if (options.debounceTiming !== 0)\n options.debounceTiming = 500;\n var origin = url;\n var debounceTimer;\n return new OebbAutocomplete(input)\n .withTemplate(function (group, indexGroup) {\n var _this = this;\n var groupHtml = \"\";\n if (typeof group[0] === 'string') {\n groupHtml = \"\\n
  • \\n \" + options.suggestionsLabel + \"\\n \\n
  • \\n \";\n }\n if (typeof group[0] === 'object') {\n groupHtml = \"\\n
  • \\n \" + options.topResultsLabel + \"\\n \\n
  • \\n \";\n }\n return groupHtml;\n })\n .onKeyup(function () {\n var _this = this;\n var value = this.getValue().split(/\\s+/).pop();\n if (!value.trim())\n return;\n (function () {\n if (debounceTimer)\n clearTimeout(debounceTimer);\n debounceTimer = setTimeout(function () {\n var url;\n if (origin.indexOf('?') > -1) {\n url = origin + (\"&\" + options.paramKey + \"=\" + value);\n }\n else {\n url = origin + (\"?\" + options.paramKey + \"=\" + value);\n }\n fetch(encodeURI(url))\n .then(function (response) { return response.json(); })\n .then(function (resultData) {\n var data = [];\n if (resultData[options.topResultsKey])\n data.push(resultData[options.topResultsKey]);\n if (resultData[options.suggestionsKey])\n data.push(resultData[options.suggestionsKey]);\n _this.setData(data);\n _this.render();\n }).catch(function (e) { return console.error(e); });\n }, options.debounceTiming);\n })();\n })\n .onItemActive(function (itemIndex) {\n var itemElement = this.getItems()[itemIndex];\n var group = itemElement.parentNode.dataset.group;\n var index = itemElement.dataset.item;\n var item = this.getData()[group][index];\n if (typeof item === 'string')\n this.addValue(item);\n if (typeof item === 'object')\n this.setValue(this.getOriginalValue());\n })\n .onItemSelect(function (itemIndex) {\n var itemElement = this.getItems()[itemIndex];\n var group = itemElement.parentNode.dataset.group;\n var index = itemElement.dataset.item;\n var item = this.getData()[group][index];\n if (typeof item === 'string')\n this.addValue(item);\n if (typeof item === 'object')\n window.location.href = item.url;\n });\n}\nexports.createOebbAutocompleteFromRemoteStringArrayWithTopResults = createOebbAutocompleteFromRemoteStringArrayWithTopResults;\n;\nfunction addOebbautocompleteDefaultStyle(tint) {\n if (tint === void 0) { tint = '#e2002a'; }\n if (document.querySelector('#js-oebb-autocomplete-styles'))\n return;\n var style = document.createElement('style');\n style.id = 'js-oebb-autocomplete-styles';\n style.innerHTML = \"\\n .oebb-autocomplete-wrapper {\\n position: relative;\\n }\\n\\n .oebb-autocomplete {}\\n\\n .oebb-autocomplete-list {\\n position: absolute;\\n z-index: 10;\\n\\n width: 100%;\\n max-height: 240px;\\n margin: 0;\\n padding: 0;\\n overflow-x: hidden;\\n overflow-y: auto;\\n\\n background: #ffffff;\\n box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19);\\n list-style: none;\\n\\n font-size: 18px;\\n }\\n\\n .oebb-autocomplete-list ul {\\n margin: 0;\\n padding: 0;\\n\\n list-style: none;\\n }\\n\\n .oebb-autocomplete-group-label,\\n .oebb-autocomplete-item {\\n display: inline-block;\\n\\n width: 100%;\\n height: 40px;\\n padding: 6px 15px;\\n box-sizing: border-box;\\n\\n line-height: 28px;\\n }\\n\\n .oebb-autocomplete-group .oebb-autocomplete-item {\\n display: flex;\\n align-items: flex-start;\\n\\n height: auto;\\n min-height: 40px;\\n margin-right: 10px\\n }\\n\\n .oebb-autocomplete-group-label {\\n background: #efefef;\\n\\n text-transform: uppercase;\\n font-weight: bold;\\n }\\n\\n .oebb-autocomplete-item {\\n border-bottom: 1px solid #efefef;\\n cursor: pointer;\\n }\\n\\n .oebb-autocomplete-item:hover,\\n .oebb-autocomplete-item--active {\\n color: \" + tint + \";\\n }\\n\\n .oebb-autocomplete-item__type {\\n float: right;\\n\\n display: block;\\n padding: 5px 12px;\\n margin-top: 1px;\\n margin-left: auto;\\n\\n border: 1px solid currentColor;\\n\\n font-size: 12px;\\n line-height: 1em;\\n letter-spacing: 1px;\\n text-transform: uppercase;\\n }\\n \";\n document.head.appendChild(style);\n}\nexports.addOebbautocompleteDefaultStyle = addOebbautocompleteDefaultStyle;\n"],"mappings":"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"}