{"version":3,"file":"js/9214.ecc672ff2c72beeb.js","mappings":"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","sources":["webpack://@sazka/web/./js/app/help-center/composables/use-hc-search.ts","webpack://@sazka/web/./js/app/shared/utils/analytics/analytics-search.ts","webpack://@sazka/web/../../libs/design-system/src/loader/loader.ts","webpack://@sazka/web/../../libs/utils/debounce.ts","webpack://@sazka/web/../../libs/utils/document-ready.ts","webpack://@sazka/web/./js/app/help-center/components/_hc-search.vue?6055","webpack://@sazka/web/./js/app/help-center/components/_hc-search.vue","webpack://@sazka/web/./js/app/help-center/components/_hc-search.vue?f653"],"sourcesContent":["import { ref } from \"vue\";\r\nimport { ArticlePreviewDto } from \"../model/article\";\r\nimport { SearchAnalytics } from \"@/shared/utils/analytics/analytics-search\";\r\nimport { httpClient } from \"@sazka/utils/http-clients/http-client\";\r\n\r\nconst searchResultList = ref<ArticlePreviewDto[]>([]);\r\nconst searchText = ref(\"\");\r\nconst areSearchResultsVisible = ref(false);\r\n\r\nconst hideSearchResults = () => {\r\n searchResultList.value = [];\r\n};\r\n\r\nconst fetch = async (searchText: string, topn = 10) => {\r\n try {\r\n const response = await httpClient.get<ArticlePreviewDto[]>(\r\n `/api/help-center/search?searchText=${searchText}&topn=${topn}`\r\n );\r\n return response.data;\r\n } catch (e) {\r\n return [];\r\n }\r\n};\r\n\r\nconst fetchAutocomplete = async (text: string) => {\r\n return fetch(text);\r\n};\r\n\r\nconst fetchResults = async (text: string) => {\r\n searchText.value = text;\r\n if (!text) {\r\n searchResultList.value = [];\r\n areSearchResultsVisible.value = false;\r\n } else {\r\n searchResultList.value = await fetch(text, 20);\r\n areSearchResultsVisible.value = true;\r\n }\r\n SearchAnalytics.pushSearchResults(\"help center\", text, searchResultList.value.length);\r\n};\r\n\r\nexport const useHcSearch = () => ({\r\n searchText,\r\n searchResultList,\r\n areSearchResultsVisible,\r\n fetchResults,\r\n fetchAutocomplete,\r\n hideSearchResults,\r\n});\r\n","export namespace SearchAnalytics {\r\n export const pushSearchSuggester = (type: \"main\" | \"help center\", term: string, resultsCount: number) => {\r\n dataLayer.push({\r\n page: {\r\n type: \"list.searchresults\",\r\n kind: \"whisperer\",\r\n list: {\r\n searchresults: {\r\n type: `${type} search`,\r\n term: term,\r\n resultCount: resultsCount,\r\n },\r\n pageNumber: 1,\r\n },\r\n },\r\n event: \"page\",\r\n });\r\n };\r\n\r\n export const pushSearchResults = (type: \"main\" | \"help center\", term: string, resultsCount: number) => {\r\n dataLayer.push({\r\n page: {\r\n type: \"list.searchresults\",\r\n kind: \"searchresults\",\r\n list: {\r\n searchresults: {\r\n type: `${type} search`,\r\n term: term,\r\n resultCount: resultsCount,\r\n },\r\n pageNumber: 1,\r\n },\r\n },\r\n event: \"pageReady\",\r\n });\r\n };\r\n\r\n export const pushSuggesterClick = (category: string, name: string) => {\r\n dataLayer.push({\r\n event: \"action.click.search\",\r\n action: {\r\n click: {\r\n category: category,\r\n name: name,\r\n },\r\n },\r\n });\r\n };\r\n\r\n export const pushResultsClick = (category: string, name: string) => {\r\n dataLayer.push({\r\n event: \"action.click.search\",\r\n action: {\r\n click: {\r\n category: category,\r\n name: name,\r\n },\r\n },\r\n });\r\n };\r\n\r\n export const getVerticalByCategory = (category: string) => {\r\n switch (category) {\r\n case \"lottery\":\r\n return \"loterie\";\r\n case \"ticket\":\r\n return \"losy\";\r\n case \"kasino\":\r\n return \"elosy\";\r\n case \"game\":\r\n return \"hry\";\r\n }\r\n };\r\n\r\n export const getVerticalByUrl = (url: string) => {\r\n if (url.startsWith(\"/loterie\")) {\r\n return \"loterie\";\r\n } else if (url.startsWith(\"/losy/stiraci-losy\")) {\r\n return \"losy\";\r\n } else if (url.startsWith(\"/losy\")) {\r\n return \"elosy\";\r\n } else if (url.startsWith(\"/hry\")) {\r\n return \"hry\";\r\n }\r\n\r\n return \"\";\r\n };\r\n}\r\n","import { documentReady } from \"@sazka/utils/document-ready\";\r\n\r\ndeclare const environment: any;\r\ntype ColorVariant = \"yellow\" | \"blue\";\r\n\r\n/**\r\n * Loader tells user, he has to wait for some ajax operation\r\n */\r\nexport class Loader {\r\n private static showTimeout: number;\r\n private static hideTimeout: number;\r\n private static lockNumber = 0;\r\n public static get isShown() {\r\n return this.lockNumber > 0;\r\n }\r\n\r\n static {\r\n // loader from backend\r\n if (document.body) {\r\n this.showLoaderFromBackend();\r\n } else {\r\n documentReady(() => {\r\n this.showLoaderFromBackend();\r\n });\r\n }\r\n }\r\n\r\n static showLoaderFromBackend() {\r\n if (document.body.classList.contains(\"loader\")) {\r\n this.lockNumber++;\r\n }\r\n }\r\n\r\n /**\r\n * Shows loader after some time in miliseconds\r\n * This is to reduce flickering when ajax actions are super-fast\r\n *\r\n * @param showLoaderIn Time in miliseconds, after which, loaded will be shown\r\n * @param text Title (waiting message) displayed in loader\r\n */\r\n static show(showLoaderIn = 30, text?: string, aboveAll = false, color: ColorVariant = \"yellow\") {\r\n this.clearTimeout();\r\n this.lockNumber++;\r\n\r\n this.showTimeout = window.setTimeout(() => {\r\n this.showNow(text, aboveAll, true, color);\r\n }, showLoaderIn);\r\n }\r\n\r\n /**\r\n * Shows loader right away\r\n * @param text Title (waiting message) displayed in loader\r\n */\r\n static showNow(text?: string, aboveAll = false, counted = false, color: ColorVariant = \"yellow\") {\r\n if (!counted) {\r\n this.lockNumber++;\r\n }\r\n\r\n if (!environment.isEditMode) {\r\n const loader = document.getElementById(\"loader\");\r\n\r\n if (!loader) return;\r\n\r\n if (aboveAll) {\r\n loader.classList.add(\"loader--above-all\");\r\n } else {\r\n loader.classList.remove(\"loader--above-all\");\r\n }\r\n if (text) {\r\n loader.querySelector(\".loader__text\").textContent = text;\r\n loader.classList.add(\"loader--with-text\");\r\n } else {\r\n loader.querySelector(\".loader__text\").textContent = \"\";\r\n loader.classList.remove(\"loader--with-text\");\r\n }\r\n\r\n if (color === \"blue\") {\r\n loader.classList.add(\"loader--blue\");\r\n }\r\n\r\n document.body.classList.add(\"loader\", \"loader--fade-in\");\r\n this.clearTimeout();\r\n }\r\n }\r\n\r\n /**\r\n * Shows loader after delay with z-index of 9999\r\n * @param text Title (waiting message) displayed in loader\r\n */\r\n static showAboveAll(showLoaderIn = 30, text?: string) {\r\n this.show(showLoaderIn, text, true);\r\n }\r\n\r\n /**\r\n * Shows loader right away with z-index of 9999\r\n * @param text Title (waiting message) displayed in loader\r\n */\r\n static showNowAboveAll(text?: string) {\r\n this.showNow(text, true);\r\n }\r\n\r\n /**\r\n * Hides loader\r\n */\r\n static hide() {\r\n this.lockNumber--;\r\n if (this.lockNumber > 0) return;\r\n\r\n this.clearTimeout();\r\n document.body.classList.remove(\"loader--fade-in\");\r\n this.hideTimeout = window.setTimeout(() => {\r\n document.body.classList.remove(\"loader\");\r\n const loader = document.getElementById(\"loader\");\r\n loader.querySelector(\".loader__text\").textContent = \"\";\r\n loader.classList.remove(\"loader--with-text\");\r\n }, 150);\r\n }\r\n\r\n private static clearTimeout() {\r\n if (this.showTimeout) {\r\n clearTimeout(this.showTimeout);\r\n this.showTimeout = null;\r\n }\r\n if (this.hideTimeout) {\r\n clearTimeout(this.hideTimeout);\r\n this.hideTimeout = null;\r\n }\r\n }\r\n}\r\n","/**\r\n * Debounce function - use like this:\r\n * var handler = debounce(function(){ do the work}, 100);\r\n * $(window).scroll(handler);\r\n * @param func callback function\r\n * @param wait time in milliseconds to wait\r\n * @param immediate\r\n */\r\n\r\ntype CallbackFunction = (...args: any[]) => any;\r\n\r\nexport function debounce<T extends CallbackFunction>(func: T, wait: number, immediate = false) {\r\n let timeout: number | null;\r\n\r\n return function (this: ThisParameterType<T>, ...args: Parameters<T>) {\r\n /* eslint-disable @typescript-eslint/no-this-alias */\r\n const context = this;\r\n const later = function () {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n const callNow = immediate && !timeout;\r\n clearTimeout(timeout as number);\r\n timeout = window.setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n}\r\n","/**\r\n * Vanila JS variant to jQuery $(() => {}).\r\n * @param {callback} callback\r\n * @example - documentReady(() => {}).\r\n * This function is binding to document.ready\r\n * */\r\nexport function documentReady(callback: () => void) {\r\n if (document.readyState !== \"loading\") {\r\n return callback();\r\n } else {\r\n document.addEventListener(\"DOMContentLoaded\", callback);\r\n }\r\n}\r\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, vModelText as _vModelText, withModifiers as _withModifiers, withKeys as _withKeys, withDirectives as _withDirectives, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"hc-header__search\" }\nconst _hoisted_2 = [\"aria-activedescendant\", \"aria-expanded\", \"placeholder\", \"onKeydown\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"autocomplete__list\",\n id: \"autocomplete-default__listbox\",\n role: \"listbox\"\n}\nconst _hoisted_4 = [\"tabindex\", \"aria-selected\", \"aria-posinset\", \"aria-setsize\", \"id\", \"onClick\", \"onMouseenter\"]\nconst _hoisted_5 = [\"data-text\", \"innerHTML\"]\n\nimport { Loader } from \"@sazka/design-system/src/loader/loader\";\r\nimport { SearchAnalytics } from \"@/shared/utils/analytics/analytics-search\";\r\n// eslint-disable-next-line vue/no-dupe-keys\r\nimport { debounce } from \"@sazka/utils/debounce\";\r\nimport { UrlUtils } from \"@sazka/utils/url\";\r\nimport { computed, onMounted, onUnmounted, ref, watch } from \"vue\";\r\nimport { useHcSearch } from \"../composables/use-hc-search\";\r\nimport { ArticlePreviewDto } from \"../model/article\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: '_hc-search',\n props: {\n minInputLength: { default: 2 },\n debounce: { default: 500 },\n placeholder: {},\n enableResultPage: { type: Boolean, default: true }\n },\n setup(__props: any) {\n\r\nconst props = __props;\r\n\r\nconst { fetchResults, hideSearchResults, fetchAutocomplete } = useHcSearch();\r\n\r\nconst inputRef = ref<HTMLInputElement>(null);\r\nconst items = ref<ArticlePreviewDto[]>([]);\r\nconst isInputFocused = ref(false);\r\nconst searchText = ref(\"\");\r\nconst currentSelectionIndex = ref(null);\r\nconst isListVisible = computed(\r\n () => isInputFocused.value && searchText.value.length >= props.minInputLength && items.value.length\r\n);\r\nconst currentSelection = computed(() =>\r\n isListVisible.value && currentSelectionIndex.value < items.value.length\r\n ? items.value[currentSelectionIndex.value]\r\n : null\r\n);\r\n\r\nconst escapeRegExp = (string: string) => string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n\r\nconst highlightTextMatch = (text: string) => {\r\n const regexp = new RegExp(`(${escapeRegExp(searchText.value)})`, \"ig\");\r\n return text.replace(regexp, \"<strong>$1</strong>\");\r\n};\r\n\r\nconst transformationHtml = (item: ArticlePreviewDto) =>\r\n `<a href=\"${item.pageUrl.absolute}\">${highlightTextMatch(item.name)}</a>`;\r\nconst transformationText = (item: ArticlePreviewDto) => item.name;\r\n\r\nconst fetch = async () => {\r\n if (searchText.value && searchText.value.length >= props.minInputLength) {\r\n items.value = await fetchAutocomplete(searchText.value);\r\n } else {\r\n items.value = [];\r\n }\r\n SearchAnalytics.pushSearchSuggester(\"help center\", searchText.value, items.value.length);\r\n};\r\n\r\nconst selectItem = (item: ArticlePreviewDto) => {\r\n SearchAnalytics.pushSuggesterClick(\"centrum podpory\", currentSelection.value.name);\r\n searchText.value = transformationText(item);\r\n window.location.href = currentSelection.value.pageUrl.absolute;\r\n Loader.show();\r\n};\r\n\r\nconst onInput = () => {\r\n currentSelectionIndex.value = null;\r\n};\r\n\r\nconst onFocus = () => {\r\n isInputFocused.value = true;\r\n};\r\n\r\nconst onBlur = () => {\r\n isInputFocused.value = false;\r\n};\r\n\r\nconst onArrowDown = () => {\r\n if (!isListVisible.value) return;\r\n if (currentSelectionIndex.value === null) currentSelectionIndex.value = 0;\r\n else if (currentSelectionIndex.value < items.value.length - 1) currentSelectionIndex.value++;\r\n};\r\n\r\nconst onArrowUp = () => {\r\n if (!isListVisible.value) return;\r\n if (currentSelectionIndex.value === null) currentSelectionIndex.value = items.value.length - 1;\r\n else if (currentSelectionIndex.value > 0) currentSelectionIndex.value--;\r\n else currentSelectionIndex.value = null;\r\n};\r\n\r\nconst onEscapeDown = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") {\r\n isInputFocused.value = false;\r\n }\r\n};\r\n\r\nconst selectCurrentSelection = async () => {\r\n if (currentSelection.value) {\r\n selectItem(currentSelection.value);\r\n hideSearchResults();\r\n } else if (props.enableResultPage) {\r\n try {\r\n Loader.show();\r\n await fetchResults(searchText.value);\r\n inputRef.value.blur();\r\n } finally {\r\n Loader.hide();\r\n }\r\n } else {\r\n Loader.show();\r\n window.location.href = `/centrum-podpory?search-text=${searchText.value}`;\r\n }\r\n};\r\n\r\nconst loadLinksDebounced = debounce(() => fetch(), props.debounce);\r\nwatch(searchText, loadLinksDebounced);\r\n\r\nonMounted(() => {\r\n document.addEventListener(\"keydown\", (e) => onEscapeDown(e));\r\n if (props.enableResultPage) {\r\n const query = UrlUtils.getQueryString(\"search-text\");\r\n if (query) {\r\n searchText.value = query;\r\n selectCurrentSelection();\r\n }\r\n }\r\n});\r\n\r\nonUnmounted(() => {\r\n document.removeEventListener(\"keydown\", (e) => onEscapeDown(e));\r\n});\r\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"label\", _hoisted_1, [\n _createElementVNode(\"img\", {\n class: \"ico-a-centrum-glass hc-header__search-icon\",\n alt: \"\",\n src: \"/frontend/web/img/help-center/centrum-glass.svg\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (selectCurrentSelection()))\n }),\n _withDirectives(_createElementVNode(\"input\", {\n type: \"text\",\n role: \"combobox\",\n \"aria-activedescendant\": \r\n isListVisible.value && currentSelectionIndex.value ? `autocomplete-default__option--${currentSelectionIndex.value}` : null\r\n ,\n \"aria-expanded\": isListVisible.value ? true : false,\n \"aria-owns\": \"autocomplete-default__listbox\",\n \"aria-autocomplete\": \"list\",\n autocomplete: \"off\",\n class: \"hc-header__search-input form-control\",\n ref_key: \"inputRef\",\n ref: inputRef,\n placeholder: _ctx.placeholder,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((searchText).value = $event)),\n onInput: onInput,\n onFocus: onFocus,\n onBlur: onBlur,\n onKeydown: [\n _withKeys(_withModifiers(onArrowDown, [\"prevent\"]), [\"down\"]),\n _withKeys(_withModifiers(onArrowUp, [\"prevent\"]), [\"up\"]),\n _withKeys(_withModifiers(selectCurrentSelection, [\"prevent\"]), [\"enter\"])\n ]\n }, null, 40, _hoisted_2), [\n [_vModelText, searchText.value]\n ]),\n (isListVisible.value)\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(items.value, (item, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n role: \"option\",\n tabindex: currentSelectionIndex.value === index ? null : -1,\n \"aria-selected\": currentSelectionIndex.value === index ? true : false,\n \"aria-posinset\": index,\n \"aria-setsize\": items.value.length,\n id: `autocomplete-default__option--${index}`,\n class: _normalizeClass([\"autocomplete__list-item\", { 'autocomplete__list-item--active': currentSelectionIndex.value === index }]),\n key: index,\n onMousedown: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"prevent\"])),\n onClick: ($event: any) => (selectItem(item)),\n onMouseenter: ($event: any) => (currentSelectionIndex.value = index)\n }, [\n _createElementVNode(\"span\", {\n class: \"autocomplete__list-item-text\",\n \"data-text\": transformationText(item),\n innerHTML: transformationHtml(item)\n }, null, 8, _hoisted_5)\n ], 42, _hoisted_4))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","<template>\r\n <label class=\"hc-header__search\">\r\n <img\r\n class=\"ico-a-centrum-glass hc-header__search-icon\"\r\n alt=\"\"\r\n src=\"/frontend/web/img/help-center/centrum-glass.svg\"\r\n @click=\"selectCurrentSelection()\"\r\n />\r\n <!-- https://alphagov.github.io/accessible-autocomplete/examples/ -->\r\n <input\r\n type=\"text\"\r\n role=\"combobox\"\r\n :aria-activedescendant=\"\r\n isListVisible && currentSelectionIndex ? `autocomplete-default__option--${currentSelectionIndex}` : null\r\n \"\r\n :aria-expanded=\"isListVisible ? true : false\"\r\n aria-owns=\"autocomplete-default__listbox\"\r\n aria-autocomplete=\"list\"\r\n autocomplete=\"off\"\r\n class=\"hc-header__search-input form-control\"\r\n ref=\"inputRef\"\r\n :placeholder=\"placeholder\"\r\n v-model=\"searchText\"\r\n @input=\"onInput\"\r\n @focus=\"onFocus\"\r\n @blur=\"onBlur\"\r\n @keydown.down.prevent=\"onArrowDown\"\r\n @keydown.up.prevent=\"onArrowUp\"\r\n @keydown.enter.prevent=\"selectCurrentSelection\"\r\n />\r\n <ul v-if=\"isListVisible\" class=\"autocomplete__list\" id=\"autocomplete-default__listbox\" role=\"listbox\">\r\n <li\r\n v-for=\"(item, index) in items\"\r\n role=\"option\"\r\n :tabindex=\"currentSelectionIndex === index ? null : -1\"\r\n :aria-selected=\"currentSelectionIndex === index ? true : false\"\r\n :aria-posinset=\"index\"\r\n :aria-setsize=\"items.length\"\r\n :id=\"`autocomplete-default__option--${index}`\"\r\n class=\"autocomplete__list-item\"\r\n :class=\"{ 'autocomplete__list-item--active': currentSelectionIndex === index }\"\r\n :key=\"index\"\r\n @mousedown.prevent\r\n @click=\"selectItem(item)\"\r\n @mouseenter=\"currentSelectionIndex = index\"\r\n >\r\n <span\r\n class=\"autocomplete__list-item-text\"\r\n :data-text=\"transformationText(item)\"\r\n v-html=\"transformationHtml(item)\"\r\n ></span>\r\n </li>\r\n </ul>\r\n </label>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { Loader } from \"@sazka/design-system/src/loader/loader\";\r\nimport { SearchAnalytics } from \"@/shared/utils/analytics/analytics-search\";\r\n// eslint-disable-next-line vue/no-dupe-keys\r\nimport { debounce } from \"@sazka/utils/debounce\";\r\nimport { UrlUtils } from \"@sazka/utils/url\";\r\nimport { computed, onMounted, onUnmounted, ref, watch } from \"vue\";\r\nimport { useHcSearch } from \"../composables/use-hc-search\";\r\nimport { ArticlePreviewDto } from \"../model/article\";\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n minInputLength: number;\r\n debounce: number;\r\n placeholder: string;\r\n enableResultPage: boolean;\r\n }>(),\r\n {\r\n minInputLength: 2,\r\n debounce: 500,\r\n enableResultPage: true,\r\n }\r\n);\r\n\r\nconst { fetchResults, hideSearchResults, fetchAutocomplete } = useHcSearch();\r\n\r\nconst inputRef = ref<HTMLInputElement>(null);\r\nconst items = ref<ArticlePreviewDto[]>([]);\r\nconst isInputFocused = ref(false);\r\nconst searchText = ref(\"\");\r\nconst currentSelectionIndex = ref(null);\r\nconst isListVisible = computed(\r\n () => isInputFocused.value && searchText.value.length >= props.minInputLength && items.value.length\r\n);\r\nconst currentSelection = computed(() =>\r\n isListVisible.value && currentSelectionIndex.value < items.value.length\r\n ? items.value[currentSelectionIndex.value]\r\n : null\r\n);\r\n\r\nconst escapeRegExp = (string: string) => string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n\r\nconst highlightTextMatch = (text: string) => {\r\n const regexp = new RegExp(`(${escapeRegExp(searchText.value)})`, \"ig\");\r\n return text.replace(regexp, \"<strong>$1</strong>\");\r\n};\r\n\r\nconst transformationHtml = (item: ArticlePreviewDto) =>\r\n `<a href=\"${item.pageUrl.absolute}\">${highlightTextMatch(item.name)}</a>`;\r\nconst transformationText = (item: ArticlePreviewDto) => item.name;\r\n\r\nconst fetch = async () => {\r\n if (searchText.value && searchText.value.length >= props.minInputLength) {\r\n items.value = await fetchAutocomplete(searchText.value);\r\n } else {\r\n items.value = [];\r\n }\r\n SearchAnalytics.pushSearchSuggester(\"help center\", searchText.value, items.value.length);\r\n};\r\n\r\nconst selectItem = (item: ArticlePreviewDto) => {\r\n SearchAnalytics.pushSuggesterClick(\"centrum podpory\", currentSelection.value.name);\r\n searchText.value = transformationText(item);\r\n window.location.href = currentSelection.value.pageUrl.absolute;\r\n Loader.show();\r\n};\r\n\r\nconst onInput = () => {\r\n currentSelectionIndex.value = null;\r\n};\r\n\r\nconst onFocus = () => {\r\n isInputFocused.value = true;\r\n};\r\n\r\nconst onBlur = () => {\r\n isInputFocused.value = false;\r\n};\r\n\r\nconst onArrowDown = () => {\r\n if (!isListVisible.value) return;\r\n if (currentSelectionIndex.value === null) currentSelectionIndex.value = 0;\r\n else if (currentSelectionIndex.value < items.value.length - 1) currentSelectionIndex.value++;\r\n};\r\n\r\nconst onArrowUp = () => {\r\n if (!isListVisible.value) return;\r\n if (currentSelectionIndex.value === null) currentSelectionIndex.value = items.value.length - 1;\r\n else if (currentSelectionIndex.value > 0) currentSelectionIndex.value--;\r\n else currentSelectionIndex.value = null;\r\n};\r\n\r\nconst onEscapeDown = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") {\r\n isInputFocused.value = false;\r\n }\r\n};\r\n\r\nconst selectCurrentSelection = async () => {\r\n if (currentSelection.value) {\r\n selectItem(currentSelection.value);\r\n hideSearchResults();\r\n } else if (props.enableResultPage) {\r\n try {\r\n Loader.show();\r\n await fetchResults(searchText.value);\r\n inputRef.value.blur();\r\n } finally {\r\n Loader.hide();\r\n }\r\n } else {\r\n Loader.show();\r\n window.location.href = `/centrum-podpory?search-text=${searchText.value}`;\r\n }\r\n};\r\n\r\nconst loadLinksDebounced = debounce(() => fetch(), props.debounce);\r\nwatch(searchText, loadLinksDebounced);\r\n\r\nonMounted(() => {\r\n document.addEventListener(\"keydown\", (e) => onEscapeDown(e));\r\n if (props.enableResultPage) {\r\n const query = UrlUtils.getQueryString(\"search-text\");\r\n if (query) {\r\n searchText.value = query;\r\n selectCurrentSelection();\r\n }\r\n }\r\n});\r\n\r\nonUnmounted(() => {\r\n document.removeEventListener(\"keydown\", (e) => onEscapeDown(e));\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.hc-header__search {\r\n position: relative;\r\n}\r\n\r\n.autocomplete__list {\r\n position: absolute;\r\n top: calc(100% + 4px);\r\n box-shadow: 0px 10px 24px -6px rgba(0, 0, 0, 0.12);\r\n padding: $sp-container-inset-small;\r\n background-color: #fff;\r\n left: 0;\r\n right: 0;\r\n border-radius: $radius-xxs;\r\n list-style: none;\r\n}\r\n\r\n.autocomplete__list-item {\r\n a {\r\n text-decoration: none;\r\n color: $color-text;\r\n }\r\n\r\n &--active {\r\n text-decoration: underline;\r\n\r\n a {\r\n color: $blue;\r\n }\r\n }\r\n}\r\n</style>\r\n","import script from \"./_hc-search.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./_hc-search.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./_hc-search.vue?vue&type=style&index=0&id=555fa5d8&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__"],"names":["searchResultList","ref","searchText","areSearchResultsVisible","hideSearchResults","value","fetch","async","topn","response","httpClient","get","data","e","fetchAutocomplete","text","fetchResults","SearchAnalytics","pushSearchResults","length","useHcSearch","pushSearchSuggester","type","term","resultsCount","dataLayer","push","page","kind","list","searchresults","resultCount","pageNumber","event","pushSuggesterClick","category","name","action","click","pushResultsClick","getVerticalByCategory","getVerticalByUrl","url","startsWith","Loader","isShown","this","lockNumber","showLoaderFromBackend","document","body","classList","contains","show","showLoaderIn","aboveAll","color","clearTimeout","showTimeout","window","setTimeout","showNow","counted","environment","isEditMode","loader","getElementById","add","remove","querySelector","textContent","showAboveAll","showNowAboveAll","hide","hideTimeout","_defineProperty","_Loader","documentReady","debounce","func","wait","immediate","timeout","args","context","later","apply","callNow","callback","readyState","addEventListener","_hoisted_1","class","_hoisted_2","_hoisted_3","key","id","role","_hoisted_4","_hoisted_5","_defineComponent","__name","props","minInputLength","default","placeholder","enableResultPage","Boolean","setup","__props","inputRef","items","isInputFocused","currentSelectionIndex","isListVisible","computed","currentSelection","escapeRegExp","string","replace","highlightTextMatch","regexp","RegExp","transformationHtml","item","pageUrl","absolute","transformationText","selectItem","location","href","onInput","onFocus","onBlur","onArrowDown","onArrowUp","onEscapeDown","selectCurrentSelection","blur","loadLinksDebounced","watch","onMounted","query","UrlUtils","getQueryString","onUnmounted","removeEventListener","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","alt","src","onClick","$event","_withDirectives","autocomplete","ref_key","onKeydown","_withKeys","_withModifiers","_vModelText","_Fragment","_renderList","index","tabindex","_normalizeClass","onMousedown","onMouseenter","innerHTML","_createCommentVNode","__exports__"],"sourceRoot":""}