{"version":3,"file":"./modules/SearchResult.xxxxxxxx.js","mappings":"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","sources":["webpack:///../../../node_modules/rxjs/_esm5/internal/operators/pluck.js","webpack:///./modules/SearchAutoSuggestion.ts","webpack:///./modules/SearchInput.ts","webpack:///../../../node_modules/rxjs/_esm5/internal/observable/iif.js","webpack:///../../../node_modules/rxjs/_esm5/internal/observable/defer.js","webpack:///./modules/SearchResult.ts"],"sourcesContent":["/** PURE_IMPORTS_START _map PURE_IMPORTS_END */\nimport { map } from './map';\nexport function pluck() {\n    var properties = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        properties[_i] = arguments[_i];\n    }\n    var length = properties.length;\n    if (length === 0) {\n        throw new Error('list of properties cannot be empty.');\n    }\n    return function (source) { return map(plucker(properties, length))(source); };\n}\nfunction plucker(props, length) {\n    var mapper = function (x) {\n        var currentProp = x;\n        for (var i = 0; i < length; i++) {\n            var p = currentProp[props[i]];\n            if (typeof p !== 'undefined') {\n                currentProp = p;\n            }\n            else {\n                return undefined;\n            }\n        }\n        return currentProp;\n    };\n    return mapper;\n}\n//# sourceMappingURL=pluck.js.map\n","import { fromEvent, from, merge, Observable } from 'rxjs';\r\nimport { debounceTime, pluck, filter, map, tap } from 'rxjs/operators';\r\nimport { getOptions, cleanString } from '../helpers/helperFunctions';\r\nimport { Optional } from '../typings/mapped-types';\r\nconst moduleSelector = '[data-module=\"SearchAutoSuggestion\"]';\r\n\r\ninterface SearchAutoSuggestionOptions {\r\n    inputWrapperSelector: string;\r\n    inputSelector: string;\r\n    suggestionListSelector: string;\r\n    formSelector: string;\r\n    deleteBtnSelector: string;\r\n}\r\n\r\ninterface SearchAutoSuggestionResponseCache {\r\n    [index: string]: string;\r\n}\r\n\r\nconst keyArrowUp = 38,\r\n    keyArrowDown = 40,\r\n    keyEnter = 13,\r\n    filterTarget = ($mouseEventStream: Observable<Event>, targetTag: string) => $mouseEventStream.pipe(\r\n        pluck('target'),\r\n        map((target: HTMLElement) => target.closest(targetTag)),\r\n        filter(suggestionItem => !!suggestionItem));\r\n\r\nexport default class SearchAutoSuggestion {\r\n    private inputField: HTMLElement;\r\n    private inputFieldText: HTMLInputElement;\r\n    private suggestionField: HTMLElement;\r\n    private form: HTMLFormElement;\r\n    private deleteButton: HTMLElement;\r\n    private ajaxResponseCache: SearchAutoSuggestionResponseCache = {};\r\n\r\n    static setup(selector: string = moduleSelector): void {\r\n        Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n            new SearchAutoSuggestion(element);\r\n            element.dataset.moduleInitialized = 'true';\r\n        });\r\n    }\r\n\r\n    constructor(public element: HTMLElement, private options: Optional<SearchAutoSuggestionOptions> = {}) {\r\n        this.options = getOptions(this.element, Object.assign(this.getDefaultOptions(), this.options));\r\n        this.inputField = <HTMLInputElement>this.element.querySelector(this.options.inputWrapperSelector);\r\n        this.inputFieldText = <HTMLInputElement>this.inputField.querySelector(this.options.inputSelector);\r\n        this.suggestionField = <HTMLElement>this.element.querySelector(this.options.suggestionListSelector);\r\n        this.form = <HTMLFormElement>this.element.querySelector(this.options.formSelector) || <HTMLFormElement>element;\r\n        this.deleteButton = <HTMLElement>this.element.querySelector(this.options.deleteBtnSelector);\r\n\r\n        this.setInputEventHandler();\r\n    }\r\n\r\n    private setInputEventHandler(): SearchAutoSuggestion {\r\n        const $input = fromEvent(this.inputFieldText, 'input').pipe(\r\n            pluck('target'),\r\n            debounceTime(500),\r\n            filter(inputNode => (<HTMLInputElement>inputNode).value.length >= 3 ? true : this.hideDialog()),\r\n            pluck('value'),\r\n            map(cleanString)),\r\n\r\n            $keyDown = fromEvent(this.inputFieldText, 'keydown').pipe(\r\n                filter(({ target }) => (<HTMLInputElement>target).value != null)),\r\n\r\n            $enterKey = $keyDown.pipe(\r\n                filter((event: KeyboardEvent) => event.which === keyEnter),\r\n                pluck('target', 'value')),\r\n\r\n            $verticalArrowsKey = $keyDown.pipe(\r\n                map(({ target, which }: KeyboardEvent) => ({ inputValue: cleanString((<HTMLInputElement>target).value), which })),\r\n                filter(({ inputValue }) => inputValue.length >= 3),\r\n                filter(({ which }) => [keyArrowUp, keyArrowDown].includes(which)),\r\n                tap(({ inputValue }) => !this.isDialogVisible() && this.initSuggestion(inputValue))),\r\n\r\n            $inputFieldClick = fromEvent(this.inputField, 'click').pipe(\r\n                map(() => this.inputFieldText.value),\r\n                filter(inputValue => inputValue.length >= 3),\r\n                map(cleanString)),\r\n\r\n            $deleteBtnClick = fromEvent(this.deleteButton, 'click'),\r\n\r\n            $onBodyClick = fromEvent(document.body, 'click').pipe(\r\n                pluck('target'),\r\n                filter((target: HTMLElement) => target.closest(this.options.inputWrapperSelector) === null)),\r\n\r\n            $onSuggestionFieldClick = fromEvent(this.suggestionField, 'click'),\r\n\r\n            $onSearchResultHover = fromEvent(this.suggestionField, 'mouseover');\r\n\r\n        // Subscriptions\r\n        $input.subscribe(inputValue => this.initSuggestion(inputValue));\r\n\r\n        $enterKey.subscribe((inputValue: string) => {\r\n            let selectedElement = this.getSelectedElement(this.suggestionField),\r\n                value = selectedElement ? selectedElement.textContent : inputValue;\r\n\r\n            this.setToInputText(cleanString(value));\r\n        });\r\n\r\n        $verticalArrowsKey.subscribe(({ which }) => {\r\n            switch (which) {\r\n                case keyArrowDown:\r\n                    this.moveSelection(true);\r\n                    break;\r\n                case keyArrowUp:\r\n                    this.moveSelection(false);\r\n                    break;\r\n            }\r\n        });\r\n\r\n        $inputFieldClick.subscribe(inputValue => this.initSuggestion(inputValue));\r\n\r\n        merge($deleteBtnClick, $onBodyClick).subscribe(() => this.hideDialog());\r\n\r\n        filterTarget($onSuggestionFieldClick, 'li').subscribe((suggestionItem: HTMLElement) => {\r\n            this.setToInputText(cleanString(suggestionItem.textContent))\r\n                .submitForm();\r\n        });\r\n\r\n        filterTarget($onSearchResultHover, 'li').subscribe(\r\n            suggestionItem =>\r\n                this.removeSelection(<HTMLElement[]>Array.from(this.suggestionField.children))\r\n                    .setSelection(<HTMLElement>suggestionItem));\r\n\r\n        return this;\r\n    }\r\n\r\n    private initSuggestion(searchTerm: string): SearchAutoSuggestion {\r\n        this.clearSuggestion()\r\n            .setLoader();\r\n\r\n        this.isInCache(searchTerm)\r\n            ? this.updateSuggestion(this.getResultsFromCache(searchTerm))\r\n            : this.fetchSuggestions(searchTerm);\r\n\r\n        return this;\r\n    }\r\n\r\n    // Cache Logic: START\r\n    private isInCache(searchTerm: string): boolean {\r\n        return searchTerm in this.ajaxResponseCache;\r\n    }\r\n\r\n    private setResultsToCache(searchTerm: string, resultsHTML: string): SearchAutoSuggestion {\r\n        this.ajaxResponseCache[searchTerm] = resultsHTML;\r\n        return this;\r\n    }\r\n\r\n    private getResultsFromCache(searchTerm: string) {\r\n        return this.ajaxResponseCache[searchTerm];\r\n    }\r\n    // Cache Logic: END\r\n\r\n    private updateSuggestion(resultsHTML: string): SearchAutoSuggestion {\r\n        this.insertNodes(resultsHTML)\r\n            .showDialog();\r\n\r\n        return this;\r\n    }\r\n\r\n    private clearSuggestion(): SearchAutoSuggestion {\r\n        this.suggestionField.innerHTML = \"\";\r\n        return this;\r\n    }\r\n\r\n    private fetchSuggestions(searchTerm: string): SearchAutoSuggestion {\r\n        //static AJAX usage\r\n        // let ajaxUrl = window.location.protocol + \"//\" + window.location.host + \"/NiveaX/StaticPages/SearchSuggestions?q=\" + searchTerm;\r\n        let ajaxUrl = window.location.protocol + \"//\" + window.location.host + \"/xajax/searchSuggestion?q=\" + searchTerm;\r\n        let response = fetch(ajaxUrl, { credentials: 'include' })\r\n            .then(response => {\r\n                if (response.status === 200) {\r\n                    return response.json();\r\n                } else {\r\n                    throw new Error(`AutoSuggestion for \"${searchTerm}\" was not loaded. Response status: ${response.status}`)\r\n                }\r\n            });\r\n\r\n        from(response)\r\n            .pipe(\r\n                map((data: string) => JSON.parse(data) || { Results: [] }),\r\n                pluck('Results'),\r\n                map(results => results.map(r => r.Name)),\r\n                tap(results => results.length === 0 && this.hideDialog()),\r\n                filter(results => results.length > 0))\r\n            .subscribe(\r\n                results => {\r\n                    let resultsHTML = this.createSuggestionHTML(results, searchTerm);\r\n\r\n                    this.setResultsToCache(searchTerm, resultsHTML)\r\n                        .updateSuggestion(resultsHTML);\r\n                },\r\n                err => {\r\n                    console.warn('Fetch Error', err);\r\n                    this.hideDialog();\r\n                }\r\n            );\r\n\r\n        return this;\r\n    }\r\n\r\n    private createSuggestionHTML(results: string[], searchTerm: string): string {\r\n        return results\r\n            .map(res => `<li class=\"nx-search-result\">${res.replace(new RegExp(searchTerm, \"i\"), \"<strong>$&</strong>\")}</li>`)\r\n            .join('');\r\n    }\r\n\r\n    private insertNodes(resultsHTML: string): SearchAutoSuggestion {\r\n        this.suggestionField.innerHTML = resultsHTML;\r\n        return this;\r\n    }\r\n\r\n    private showDialog(): SearchAutoSuggestion {\r\n        this.suggestionField.classList.add('active');\r\n        return this;\r\n    }\r\n\r\n    private hideDialog(): boolean {\r\n        this.suggestionField.classList.remove('active');\r\n        return false;\r\n    }\r\n\r\n    private isDialogVisible(): boolean {\r\n        return this.suggestionField.classList.contains('active');\r\n    }\r\n\r\n    private setToInputText(value: string): SearchAutoSuggestion {\r\n        this.inputFieldText.value = value;\r\n        return this;\r\n    }\r\n\r\n    private setLoader(): SearchAutoSuggestion {\r\n        this.suggestionField.innerHTML =\r\n            `<div class=\"nx-spinner nx-spinner__loading nx-spinner--medium\">\r\n            <div class=\"nx-spinner__container \">\r\n                <div class=\"nx-spinner__wheel\"></div>\r\n            </div>\r\n        </div>`;\r\n\r\n        return this;\r\n    }\r\n\r\n    private moveSelection(toBottom: boolean): SearchAutoSuggestion {\r\n        const suggestionList = this.suggestionField,\r\n            suggestions = <HTMLElement[]>Array.from((suggestionList.children)),\r\n            currentSelected = this.getSelectedElement(suggestionList),\r\n            firstElement = suggestionList.firstChild,\r\n            lastElement = suggestionList.lastElementChild;\r\n\r\n        let nextElementToSelect;\r\n\r\n        this.removeSelection(suggestions);\r\n\r\n        if (toBottom) {\r\n            nextElementToSelect = currentSelected ? currentSelected.nextElementSibling : firstElement;\r\n            this.setSelection(nextElementToSelect || firstElement);\r\n        } else {\r\n            nextElementToSelect = currentSelected ? currentSelected.previousElementSibling : lastElement;\r\n            this.setSelection(nextElementToSelect || lastElement);\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    private setSelection(element: HTMLElement): SearchAutoSuggestion {\r\n        element.classList.add('selected');\r\n        return this;\r\n    }\r\n\r\n    private removeSelection(elements: HTMLElement[]): SearchAutoSuggestion {\r\n        elements.forEach(elem => elem.classList.remove('selected'));\r\n        return this;\r\n    }\r\n\r\n    private getSelectedElement(list: HTMLElement): HTMLElement {\r\n        return <HTMLElement>list.querySelector('.selected');\r\n    }\r\n\r\n    private submitForm(): SearchAutoSuggestion {\r\n        this.form.submit();\r\n        return this;\r\n    }\r\n\r\n    private getDefaultOptions(): Optional<SearchAutoSuggestionOptions> {\r\n        return {\r\n            inputWrapperSelector: '.nx-search-input__inner',\r\n            inputSelector: '.nx-search-input__text',\r\n            suggestionListSelector: '.nx-search__autosuggest',\r\n            formSelector: '.nx-header-search-form',\r\n            deleteBtnSelector: '.nx-search-input-clear__icon'\r\n        };\r\n    }\r\n}\r\n\r\n// Hot Module Replacement 2\r\nif (module.hot) {\r\n    let nodesCache: HMRNodes[] = Array.from(document.querySelectorAll(moduleSelector)).map((element: Node) => ({ nodeToReplace: element, nodeOrigin: element.cloneNode(true) }));\r\n\r\n    SearchAutoSuggestion.setup(moduleSelector);\r\n\r\n    module.hot.accept(() => {\r\n        SearchAutoSuggestion.setup(moduleSelector);\r\n    });\r\n    module.hot.dispose(() => {\r\n        nodesCache.forEach(({ nodeToReplace, nodeOrigin }) => { nodeToReplace = nodeToReplace.parentElement.replaceChild(nodeOrigin.cloneNode(true), nodeToReplace) });\r\n    });\r\n} else {\r\n    SearchAutoSuggestion.setup(moduleSelector);\r\n}","import { focusInput } from '../helpers/helperFunctions';\r\n\r\nconst moduleSelector = '[data-module=\"SearchInput\"]';\r\n\r\nexport default class SearchInput {\r\n\r\n    private searchClearIcon: HTMLElement;\r\n    private searchInput: HTMLInputElement;\r\n    static setup(selector: string = moduleSelector): void {\r\n        Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n            new SearchInput(element);\r\n            element.dataset.moduleInitialized = 'true';\r\n        });\r\n    }\r\n\r\n    constructor(public element: HTMLElement) {\r\n        this.searchClearIcon = <HTMLElement>this.element.querySelector('.nx-search-input-clear__icon');\r\n        this.searchInput = <HTMLInputElement>this.element.querySelector('.nx-search-input__text');\r\n        this.init();\r\n    }\r\n\r\n    init() {\r\n        this.searchInput.addEventListener('input', (event) => {\r\n            this.checkEmpty();\r\n        });\r\n\r\n        this.searchClearIcon.addEventListener('click', (event: Event) => {\r\n            this.clearInput();\r\n        });\r\n\r\n        this.setValueToInput();\r\n\r\n        if (this.searchInput.value) {\r\n            this.searchClearIcon.classList.add('nx-search-input-clear__icon--show');\r\n        }\r\n\r\n        if (this.element.closest('.nx-layer')) setTimeout(() => focusInput(this.searchInput), 0);\r\n    }\r\n\r\n    checkEmpty() {\r\n        if (this.searchInput.value) {\r\n            this.searchClearIcon.classList.add('nx-search-input-clear__icon--show');\r\n        }\r\n        else {\r\n            this.searchClearIcon.classList.remove('nx-search-input-clear__icon--show');\r\n            focusInput(this.searchInput);\r\n        }\r\n    }\r\n\r\n    clearInput() {\r\n        this.searchInput.value = '';\r\n        this.checkEmpty();\r\n    }\r\n\r\n    setValueToInput() {\r\n        var url = window.location.href;\r\n        var name = this.searchInput.getAttribute(\"name\");\r\n        this.searchInput.value = this.getParameterByName(name, url);\r\n    }\r\n\r\n    getParameterByName(name, url) {\r\n        name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n        var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n            results = regex.exec(url);\r\n        if (!results) return null;\r\n        if (!results[2]) return '';\r\n\r\n        return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n    }\r\n\r\n}\r\n\r\n// Hot Module Replacement\r\nif (module.hot) {\r\n    let nodesCache: HMRNodes[] = Array.from(document.querySelectorAll(moduleSelector)).map((element: Node) => ({ nodeToReplace: element, nodeOrigin: element.cloneNode(true) }));\r\n\r\n    SearchInput.setup(moduleSelector);\r\n\r\n    module.hot.accept(() => {\r\n        SearchInput.setup(moduleSelector);\r\n    });\r\n    module.hot.dispose(() => {\r\n        nodesCache.forEach(({ nodeToReplace, nodeOrigin }) => { nodeToReplace = nodeToReplace.parentElement.replaceChild(nodeOrigin.cloneNode(true), nodeToReplace) });\r\n    });\r\n} else {\r\n    SearchInput.setup(moduleSelector);\r\n}","/** PURE_IMPORTS_START _defer,_empty PURE_IMPORTS_END */\nimport { defer } from './defer';\nimport { EMPTY } from './empty';\nexport function iif(condition, trueResult, falseResult) {\n    if (trueResult === void 0) {\n        trueResult = EMPTY;\n    }\n    if (falseResult === void 0) {\n        falseResult = EMPTY;\n    }\n    return defer(function () { return condition() ? trueResult : falseResult; });\n}\n//# sourceMappingURL=iif.js.map\n","/** PURE_IMPORTS_START _Observable,_from,_empty PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { from } from './from';\nimport { empty } from './empty';\nexport function defer(observableFactory) {\n    return new Observable(function (subscriber) {\n        var input;\n        try {\n            input = observableFactory();\n        }\n        catch (err) {\n            subscriber.error(err);\n            return undefined;\n        }\n        var source = input ? from(input) : empty();\n        return source.subscribe(subscriber);\n    });\n}\n//# sourceMappingURL=defer.js.map\n","import { fromEvent, of, Observable, merge, iif } from 'rxjs';\r\nimport { switchMap, tap, map, filter, delay } from 'rxjs/operators';\r\nimport SearchAutoSuggestion from './SearchAutoSuggestion';\r\nimport SearchInput from './SearchInput';\r\nimport { Optional } from '../typings/mapped-types';\r\nimport { getOptions, focusInput } from '../helpers/helperFunctions';\r\n// const ScrollTo = () => import(/* webpackChunkName: \"ScrollTo\" */'../ScrollTo').then(module => module.default);\r\n\r\nconst moduleSelector = '[data-module=\"SearchResult\"]';\r\n\r\ninterface SearchResultOptions {\r\n    searchInputSelector: string;\r\n    inputNodeSelector: string;\r\n    mobileSearchButtonSelector: string;\r\n    desktopSearchButtonSelector: string;\r\n    mobileNavButtonSelector: string;\r\n}\r\n\r\nexport default class SearchResult {\r\n    private searchInput: HTMLElement;\r\n    private inputNode: HTMLInputElement;\r\n    private scrollTo: ScrollTo;\r\n\r\n    static setup(selector: string = moduleSelector): void {\r\n        Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n            new SearchResult(element);\r\n            element.dataset.moduleInitialized = 'true';\r\n        });\r\n    }\r\n\r\n    constructor(public element: HTMLElement, private options: Optional<SearchResultOptions> = {}) {\r\n        this.options = getOptions(this.element, Object.assign(this.getDefaultOptions(), this.options));\r\n        this.searchInput = this.element.querySelector(this.options.searchInputSelector);\r\n        this.inputNode = this.element.querySelector(this.options.inputNodeSelector);\r\n\r\n        this.init();\r\n    }\r\n\r\n    private init(): SearchResult {\r\n        this.initSearchInput()\r\n            .initAutoSuggestion()\r\n            .initSearchButtonsClick();\r\n\r\n        return this;\r\n    }\r\n\r\n    private initSearchInput(): SearchResult {\r\n        new SearchInput(this.searchInput);\r\n        return this;\r\n    }\r\n\r\n    private initAutoSuggestion(): SearchResult {\r\n        new SearchAutoSuggestion(this.element);\r\n        return this;\r\n    }\r\n\r\n    private initSearchButtonsClick(): SearchResult {\r\n        merge(\r\n            this.getMobileNavInitStream(),\r\n            this.getDesktopNavInitStream()\r\n        )\r\n            .subscribe((e) => {\r\n                e.preventDefault();\r\n                if(this.scrollTo == undefined) {\r\n                    const getScrollTo = () => import(/* webpackChunkName: \"ScrollTo\" */'../ScrollTo');\r\n                        getScrollTo().then((module) => {\r\n                            this.scrollTo = new module.default();\r\n                            this.scrollToSearchResult()\r\n                                .setFocusOnInputNode()\r\n                        });\r\n                    return;\r\n                } \r\n                this.scrollToSearchResult()\r\n                    .setFocusOnInputNode()\r\n            });\r\n\r\n        return this;\r\n    }\r\n\r\n    private getMobileNavInitStream(): Observable<Event> {\r\n        const getMobileSearchButton = () => document.querySelector(this.options.mobileSearchButtonSelector),\r\n            closeMobileNav = () => document.querySelector(this.options.mobileNavButtonSelector).dispatchEvent(new MouseEvent('click')),\r\n\r\n            $smartCompanionInit =\r\n                iif(\r\n                    () => getMobileSearchButton() != null,\r\n                    of(getMobileSearchButton()),\r\n                    fromEvent(document, 'niveax:smartCompanionInitialized').pipe(map(getMobileSearchButton))\r\n                )\r\n                    .pipe(\r\n                        filter(mobSearchBtn => !!mobSearchBtn),\r\n                        switchMap(mobSearchBtn => fromEvent(<HTMLElement>mobSearchBtn, 'click')\r\n                            .pipe(tap(e => e.preventDefault()))),\r\n                        tap(closeMobileNav),\r\n                        delay(0)\r\n                    );\r\n\r\n        return $smartCompanionInit;\r\n    }\r\n\r\n    private getDesktopNavInitStream(): Observable<Event> {\r\n        const getDesktopSearchButton = () => document.querySelector(this.options.desktopSearchButtonSelector),\r\n            $desktopNavigationInit =\r\n                iif(\r\n                    () => getDesktopSearchButton() != null,\r\n                    of(getDesktopSearchButton()),\r\n                    fromEvent(document, 'niveax:desktopActionIconInit').pipe(map(getDesktopSearchButton))\r\n                )\r\n                    .pipe(\r\n                        filter(desktopSearchBtn => !!desktopSearchBtn),\r\n                        switchMap(desktopSearchBtn => fromEvent(desktopSearchBtn, 'click'))\r\n                    );\r\n\r\n        return $desktopNavigationInit;\r\n    }\r\n\r\n    private scrollToSearchResult(): SearchResult {\r\n        document.body.classList.add('nx-scrolling');\r\n        let friction = 0.6;\r\n        let duration = (document.documentElement.scrollTop || document.body.scrollTop) / 2 * friction;\r\n\r\n        this.scrollTo.animateScrollTop(this.element, duration, 10, () => {\r\n            document.body.classList.remove('nx-scrolling');\r\n        });\r\n\r\n        return this;\r\n    }\r\n\r\n    private setFocusOnInputNode(): SearchResult {\r\n        focusInput(this.inputNode);\r\n        return this;\r\n    }\r\n\r\n    private getDefaultOptions(): Optional<SearchResultOptions> {\r\n        return {\r\n            searchInputSelector: '.nx-search-results__input',\r\n            inputNodeSelector: '.nx-search-input__text',\r\n            mobileSearchButtonSelector: '.nx-nav-action-menu__item[data-id=\"search\"]',\r\n            desktopSearchButtonSelector: '[data-action-id=\"search\"]',\r\n            mobileNavButtonSelector: '.nx-mob-nav__button'\r\n        };\r\n    }\r\n}\r\n\r\n// Hot Module Replacement\r\nif (module.hot) {\r\n    let nodesCache: HMRNodes[] = Array.from(document.querySelectorAll(moduleSelector)).map((element: Node) => ({ nodeToReplace: element, nodeOrigin: element.cloneNode(true) }));\r\n\r\n    SearchResult.setup(moduleSelector);\r\n\r\n    module.hot.accept(() => {\r\n        SearchResult.setup(moduleSelector);\r\n    });\r\n    module.hot.dispose(() => {\r\n        nodesCache.forEach(({ nodeToReplace, nodeOrigin }) => { nodeToReplace = nodeToReplace.parentElement.replaceChild(nodeOrigin.cloneNode(true), nodeToReplace) });\r\n    });\r\n} else {\r\n    SearchResult.setup(moduleSelector);\r\n}"],"names":["pluck","properties","_i","arguments","length","Error","source","props","mapper","x","currentProp","i","p","plucker","moduleSelector","keyArrowUp","keyArrowDown","filterTarget","$mouseEventStream","targetTag","pipe","target","closest","suggestionItem","SearchAutoSuggestion","setup","selector","Array","from","document","querySelectorAll","filter","node","dataset","moduleInitialized","forEach","element","constructor","options","ajaxResponseCache","this","Object","assign","getDefaultOptions","inputField","querySelector","inputWrapperSelector","inputFieldText","inputSelector","suggestionField","suggestionListSelector","form","formSelector","deleteButton","deleteBtnSelector","setInputEventHandler","$input","inputNode","value","hideDialog","$keyDown","$enterKey","event","which","$verticalArrowsKey","inputValue","includes","isDialogVisible","initSuggestion","$inputFieldClick","$deleteBtnClick","$onBodyClick","body","$onSuggestionFieldClick","$onSearchResultHover","subscribe","selectedElement","getSelectedElement","textContent","setToInputText","moveSelection","submitForm","removeSelection","children","setSelection","searchTerm","clearSuggestion","setLoader","isInCache","updateSuggestion","getResultsFromCache","fetchSuggestions","setResultsToCache","resultsHTML","insertNodes","showDialog","innerHTML","ajaxUrl","window","location","protocol","host","response","fetch","credentials","then","status","json","data","JSON","parse","Results","results","map","r","Name","createSuggestionHTML","err","console","warn","res","replace","RegExp","join","classList","add","remove","contains","toBottom","suggestionList","suggestions","currentSelected","firstElement","firstChild","lastElement","lastElementChild","nextElementToSelect","nextElementSibling","previousElementSibling","elements","elem","list","submit","SearchInput","searchClearIcon","searchInput","init","addEventListener","checkEmpty","clearInput","setValueToInput","setTimeout","url","href","name","getAttribute","getParameterByName","exec","decodeURIComponent","iif","condition","trueResult","falseResult","E","observableFactory","Observable","subscriber","input","error","empty","SearchResult","searchInputSelector","inputNodeSelector","initSearchInput","initAutoSuggestion","initSearchButtonsClick","merge","getMobileNavInitStream","getDesktopNavInitStream","e","preventDefault","undefined","scrollTo","scrollToSearchResult","setFocusOnInputNode","getScrollTo","module","default","getMobileSearchButton","mobileSearchButtonSelector","of","fromEvent","mobSearchBtn","switchMap","tap","mobileNavButtonSelector","dispatchEvent","MouseEvent","delay","getDesktopSearchButton","desktopSearchButtonSelector","desktopSearchBtn","duration","documentElement","scrollTop","animateScrollTop"],"sourceRoot":""}