{"version":3,"sources":["webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/checkbox-rxjs/client/js/store/actions.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/checkbox-rxjs/client/js/store/reducer.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/loading-information-rxjs/template.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/select-rxjs/client/js/store/actions.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js/suggestions/keyboard.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/submit/loader/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/loading-information-rxjs/client/js/store/reducer.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/calendar-rxjs/client/js/store/actions.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/store/reducer.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/options/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/helpers/array.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/select-rxjs/client/js/loader/index.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/calendar-origin/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/calendar-rxjs/client/js/helpers/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js/suggestions/index.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/submit/index.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/destination/index.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/utils/url/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/select-rxjs/client/js/prototype.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/tooltip/client/js/popper/index.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/origin/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js/prototype.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/select-rxjs/client/js/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/constants/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/calendar-rxjs/client/js/prototype.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js/store/actions.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/loading-information-rxjs/client/js/config.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/checkbox-rxjs/client/js/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/tooltip/client/js/config.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/loading-information-rxjs/client/js/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/calendar-rxjs/client/js/clear/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/templates/tooltipPanel.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/utils/validation/index.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/calendar-destination/index.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/prototype.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/checkbox-rxjs/client/js/config.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/tooltip/client/js/prototype.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/tooltip/client/js/store/reducer.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/calendar-rxjs/client/js/config.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js/helpers/data.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js/config.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/store/actions.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/select-rxjs/client/js/config.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js/services/index.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/config.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/loading-information-rxjs/client/js/image/index.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/index.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/constants/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/select-rxjs/client/js/utils/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js/loader/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/loading-information-rxjs/client/js/store/actions.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/calendar-rxjs/client/js/store/reducer.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/return-at-origin/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/calendar-rxjs/client/js/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/select-rxjs/client/js/store/reducer.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/tooltip/client/js/store/actions.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/loading-information-rxjs/client/js/prototype.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/utils/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js/input/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/tooltip/client/js/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/helpers/dom.js","webpack:///./node_modules/@logitravel/alex-comp-trans/components/searcher-car/client/js/age/index.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/helpers/ga4Event.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js/store/reducer.js","webpack:///./node_modules/@bluekiri/alexandria-contrib-components/components/checkbox-rxjs/client/js/prototype.js"],"names":["HIDE","module","exports","types","DESTROY","DISPLAY","RESET_STATUS","SET_ERROR","SET_VALID","TOGGLE","DISABLE","ENABLE","actions","destroy","type","display","hide","resetStatus","setError","setValid","toggle","disable","enable","initialState","error","hidden","checked","disabled","reducer","state","action","elementExist","randomId","prototype","config","selector","configuration","instance","Object","create","element","document","querySelector","hooks","input","label","loader","id","dataset","result","JSON","parse","init","html","addStyle","prepareDataConfig","Image","data","context","title","description","message","image","styles","dataType","join","trim","component","stringify","hasImage","resize","css","renderImage","renderTitle","renderContent","renderMessage","SET_OPTION","SET_OPTIONS","SELECT_OPTION","TOGGLE_LOADING","setOption","payload","setOptions","selectOption","toggleLoading","fromEvent","tap","filter","getNextSibling","getPreviousSibling","SUGGESTIONS_KEYS","KEY_ARROW_UP","KEY_ARROW_DOWN","KEY_ENTER","KEY_ESC","KEY_TAB","goToFirstEl","panel","list","keyedEl","classList","add","keyed","scrollIntoView","goToLastEl","querySelectorAll","pop","initKeyboard","subscriptions","keydowns","pipe","event","stopPropagation","includes","keyCode","store","select","openSuggestions","subscribe","preventDefault","blur","closeSuggestions","syncValue","remove","goToNextEl","goToPreviousEl","suggestions","changeValue","autocompleteSuggestion","handleEnter","handleTab","destroyKeyboard","unsubscribe","toNode","addData","Loader","LoaderTemplate","addLoader","node","literals","titleLoaderLabel","messageLoaderLabel","origin","age","destination","calendarOrigin","calendarDestination","text","textDesti","value","buildDescription","template","src","loading","car","createLoader","body","appendChild","SET_MODE","TOGGLE_ACTIVE","SET_VALUE","CHANGE_VALUE","setMode","toggleActive","setValue","returnAtOrigin","CHANGE_AGE","SET_AGE","CHANGE_CALENDAR_DESTINATION","SET_CALENDAR_DESTINATION","CHANGE_CALENDAR_ORIGIN","SET_CALENDAR_ORIGIN","CHANGE_DESTINATION","SET_DESTINATION","CHANGE_ORIGIN","SET_ORIGIN","CHANGE_RETURN_AT_ORIGIN","SET_RETURN_AT_ORIGIN","CHANGE_OPTIONS","options","reducerTwo","includeHotels","SET_SEARCHER","Checkbox","CheckboxActions","initOptions","checkboxes","length","map","item","changeOptions","dispatch","checkboxReferences","forEach","index","push","name","unchecks","reactions","previousOptions","x","indexOf","values","itm","setSearcher","destroyOptions","groupBy","fn","Map","key","collection","get","set","sortByKey","sort","a","b","slice","containsArray","superset","subset","every","initLoader","hasLoader","isLoading","removeChild","removeAttribute","removeLoader","choices","setAttribute","destroyLoader","Calendar","CalendarActions","initCalendarOrigin","changeCalendarOrigin","showMonths","fp","onClose","openCalendarDestination","open","validateDates","onOpen","hideError","_","date","hour","formatDate","split","changeMonth","getMonth","setCalendarOrigin","validateDestinationCalendar","destroyCalendarOrigin","modes","MODE_RANGE","MODE_SINGLE","MODE_TIME","isMobile","device","String","toLowerCase","isModeRange","mode","isModeSingle","isModeTime","decode","ViewHelpers","TooltipTemplate","TooltipClient","collectionByGroup","ICONS","suggestionsList","hookSuggestionsList","renderGroup","group","query","icon","header","markdown","regex","RegExp","replace","suggestionText","str","suggestion","renderSuggestion","renderGroups","createSuggestions","renderSuggestions","createPanel","content","placement","tooltipType","dataTooltip","addSuggestions","appendToParent","suggestionsTemplate","parentNode","tooltip","trigger","clicks","target","closest","initSuggestions","updateSuggestions","innerHTML","destroySuggestions","destroyTooltip","startSuggestions","hasPlaceHolder","inputEl","setSuggestions","clear","CLEAR","active","CLOSE_SUGGESTIONS","OPEN_SUGGESTIONS","SET_SUGGESTIONS","Button","addGa4Event","Utils","initSubmit","submit","events","click$","validation","validate","event_type","event_detail","hasNavigationBack","url","buildUrl","window","location","assign","destroySubmit","Autocomplete","AutocompleteActions","initDestination","changeDestination","clearDestination","setDestination","destroyDestination","TYPES","DIRECT","TOUR_OPERATOR","REFUNDABLE","ETHNIC","buildAge","buildCalendarDestination","buildCalendarOrigin","buildDestination","latlon","latitude","longitude","encodeURIComponent","toUpperCase","buildOrigin","buildReturnAtOrigin","DEFAULT_NAMES","buildOptions","optionsConfig","optionNames","i","option","Error","concat","Store","Choices","of","switchMap","this","multiple","noResultsText","searchPlaceholderValue","searchEnabled","renderChoiceLimit","searchResultLimit","removeItemButton","placeholderValue","loadingText","noChoicesText","itemSelectText","sortFn","keys","valid","setChoices","setChoiceByValue","contains","hasItems","changes","getValue","showDropdown","fixSelectedChoice","start","items","setDataMultiple","setDataSingle","setPairing","setupChoices","setupStore","setupActions","setupReactions","createPopper","initPopper","offset","popper","modifiers","destroyPopper","initOrigin","changeOrigin","clearOrigin","setOrigin","destroyOrigin","debounceTime","distinctUntilChanged","startInput","Services","NO_OPEN_SUGGESTIONS_KEYS","autocomplete","setUiState","setQuery","getSuggestions","keyups","some","threshold","limit","hasAllAirpots","hasAllStations","d","queryError","listFinal","APPENDTOPARENT","GEOLOCATION","AER","BUS","CIU","EST","FLIGHTS_COMPANY","HOT","ISL","PDI","PUE","ZON","LIMIT","MAX","PLACEMENT","THRESHOLD","LOADER_TEMPLATE","flatpickr","default","ConfirmDatePlugin","addClear","destroyClear","flatpickrRangeConfig","dates","defaultDate","resolveFlatpickrConfig","flatpickrSingleConfig","minTime","maxTime","dateFormat","enableTime","minuteIncrement","noCalendar","time_24hr","plugins","confirmIcon","confirmText","flatpickrTimeConfig","params","language","minDate","maxDate","Spanish","German","French","Russian","Portuguese","Finnish","Italian","languages","es","pt","it","de","fr","br","fi","mx","ru","localize","setLanguage","disableParsed","k","Date","reduce","locale","rangeSeparator","firstDayOfWeek","fp_incr","static","disableMobile","calendar","hasClear","selectedDates","setupFlatpickr","isAlternative","setDate","focusIn$","focusOut$","change$","startDate","endDate","SET_UI_STATE","SET_QUERY","SYNC_VALUE","height","width","quality","ButtonTemplate","cancel","createClear","setTimeout","panelContent","hookPanelContent","hookSuggestions","validateAge","validateCalendarDestination","validateCalendarOrigin","validateOrigin","validateDestination","validateTimePeriod","minimumTimePeriod","Math","floor","getTime","p","c","clearErrorMessage","calendarDestinationErrorTimeout","clearTimeout","showCalendarOrigin","showError","errorType","getDateErrors","requestAnimationFrame","returnDateError","minimumTimeError","errorMessage","addErrorMessage","initCalendarDestination","changeCalendarDestination","setCalendarDestination","destroyCalendarDestination","initAge","destroyAge","initReturnAtOrigin","destroyReturnAtOrigin","dataTwo","setAge","setReturnAtOrigin","withBorder","alternative","grouped","groupByType","selectionRange","changeAge","changeReturnAtOrigin","withLabel","selected","catchError","fromFetch","controller","geolocation","max","operator","codes","undefined","abort","AbortController","code","signal","credentials","cache","response","ok","json","statusText","err","withReturnAtOrigin","initImage","inst","destroyImage","int","CALENDAR_ORIGIN_DEFAULT_DATE","toISOString","CALENDAR_DESTINATION_DEFAULT_DATE","AGE","AGE_DEFAULT_MAX_VALUE","AGE_DEFAULT_MIN_VALUE","AGE_DEFAULT_VALUE","CALENDAR","DESTINATION","DESTINATION_DEFAULT_TYPES","ORIGIN","ORIGIN_DEFAULT_TYPES","TIME","MINIMUM_TIME","RETURN_AT_ORIGIN","RETURN_AT_ORIGIN_DEFAULT_VALUE","URL","URL_DEFAULT_VALUE","NAVIGATION","HAS_NAVIGATION_BACK","choiceList","el","checkbox","acc","cssValid","cssError","cssActive","focusIn","setSelectionRange","focusOut","sibling","nextElementSibling","matches","previousElementSibling","Select","SelectActions","dataLayer"],"mappings":"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","file":"vendors~searcher-car.06e2985d5ca24941af11.bundle.js","sourcesContent":["/* ==========================================================================\n CheckboxRxjs > Client > Store > Actions\n ========================================================================== */\n\n/* Types */\nconst DESTROY = 'CHECKBOX::DESTROY';\nconst DISPLAY = 'CHECKBOX::DISPLAY';\nconst HIDE = 'CHECKBOX::HIDE';\nconst RESET_STATUS = 'CHECKBOX::RESET_STATUS';\nconst SET_ERROR = 'CHECKBOX::SET_ERROR';\nconst SET_VALID = 'CHECKBOX::SET_VALID';\n\nconst TOGGLE = 'CHECKBOX::TOGGLE';\n\nconst DISABLE = 'TOGGLE::DISABLE';\nconst ENABLE = 'TOGGLE::ENABLE';\n\n/* Actions */\nconst destroy = () => ({ type: DESTROY });\nconst display = () => ({ type: DISPLAY });\nconst hide = () => ({ type: HIDE });\nconst resetStatus = () => ({ type: RESET_STATUS });\nconst setError = () => ({ type: SET_ERROR });\nconst setValid = () => ({ type: SET_VALID });\n\nconst toggle = () => ({ type: TOGGLE });\n\nconst disable = () => ({ type: DISABLE });\nconst enable = () => ({ type: ENABLE });\n\n/* Exports */\nmodule.exports = {\n types: {\n DESTROY,\n DISPLAY,\n HIDE,\n RESET_STATUS,\n SET_ERROR,\n SET_VALID,\n TOGGLE,\n DISABLE,\n ENABLE\n },\n actions: {\n destroy,\n display,\n hide,\n resetStatus,\n setError,\n setValid,\n toggle,\n disable,\n enable\n }\n};\n","/* ==========================================================================\n CheckboxRxjs > Client > Store > Reducer\n ========================================================================== */\n\n/* Modules */\nconst { types } = require('./actions');\n\n/* Initial state */\nconst initialState = {\n error: false,\n hidden: false,\n checked: false,\n disabled: false\n};\n\n/* Reducer */\nfunction reducer(state = initialState, action) {\n switch (action.type) {\n case types.DESTROY:\n return state;\n case types.DISPLAY:\n return {\n ...state,\n hidden: false\n };\n case types.HIDE:\n return {\n ...state,\n hidden: true\n };\n case types.RESET_STATUS:\n return {\n ...state,\n error: false\n };\n case types.SET_ERROR:\n return {\n ...state,\n error: true\n };\n case types.SET_VALID:\n return {\n ...state,\n error: false\n };\n case types.TOGGLE:\n return {\n ...state,\n checked: !state.checked\n };\n case types.ENABLE:\n return {\n ...state,\n disabled: false\n };\n case types.DISABLE:\n return {\n ...state,\n disabled: true\n };\n default:\n return state;\n }\n}\n\n/* Exports */\nmodule.exports = {\n reducer\n};\n","/* ==========================================================================\n AutocompleteRxjs > Client\n ========================================================================== */\n\n/* Import modules */\nconst { elementExist } = require('@bluekiri/alexandria/helpers/domHelpers');\nconst { randomId } = require('@bluekiri/alexandria/helpers/dataHelpers');\n\nconst prototype = require('./prototype');\nconst config = require('./config');\n\n/**\n * AutocompleteRxjs component\n * @param {selector} String selector for the component in the client side.\n */\nmodule.exports = function AutocompleteRxjs(selector = '[data-component=AutocompleteRxjs]', configuration = {}) {\n if (elementExist(selector)) {\n /* Instance */\n const instance = Object.create(prototype);\n\n /* Selector */\n instance.selector = selector;\n\n /* Element */\n instance.element = document.querySelector(selector);\n\n /* Hooks */\n instance.hooks = {\n input: instance.element.querySelector('input'),\n label: instance.element.querySelector('label'),\n loader: instance.element.querySelector('[data-loader]')\n };\n\n /* ID for pairing */\n instance.id = randomId(randomId('input'));\n\n /* Config */\n instance.config = {\n ...config(),\n ...configuration,\n ...(function getConfig() {\n if (!instance.element.dataset.config) return '';\n\n const result = JSON.parse(instance.element.dataset.config);\n instance.element.dataset.config = '';\n return result;\n })()\n };\n\n /* Init */\n instance.init();\n\n /* Return */\n return instance;\n }\n};\n","/* ==========================================================================\n LoadingInformationRxjs > template\n ========================================================================== */\n\n/* Import modules */\nconst { html } = require('common-tags');\nconst { addStyle, prepareDataConfig } = require('@bluekiri/alexandria/helpers/dataHelpers');\n\nconst Image = require('../image-rxjs/template');\n\nconst configuration = require('./client/js/config');\n\n/**\n * Renders\n */\nconst renderImage = (data, context) => {\n if (!data) return '';\n\n return Image(\n addStyle(\n {\n ...data.image,\n resize: configuration().image.resize\n },\n [configuration().css.image]\n ),\n context\n );\n};\n\n/* Render title */\nconst renderTitle = title => {\n if (!title) return '';\n\n return html(`

${title}

`);\n};\n\n/* Render content */\nconst renderContent = description => {\n if (!description) return '';\n\n return html(`

${description}

`);\n};\n\n/* Render Message */\nconst renderMessage = message => {\n if (!message) return '';\n\n return html(`

${message}

`);\n};\n\n/**\n * LoadingInformationRxjs component template\n * @param {object} data Object containing the data model for this component.\n * @param {object} context The general context object.\n * @returns {object} Additional data to have available in the template\n */\nmodule.exports = function LoadingInformationRxjs(data, context) {\n /* Data */\n const { config = {}, title = '', description = '', message = '', image = {} } = data;\n const { styles = [] } = config;\n\n const { dataType } = prepareDataConfig(config.data);\n\n return html(`\n
\n
\n
\n ${renderImage(data, context)}\n
\n
\n
\n ${renderTitle(title)}\n ${renderContent(description)}\n ${renderMessage(message)}\n
\n
\n
\n `);\n};\n","/* ==========================================================================\n SelectRxjs > Client > Store > Actions\n ========================================================================== */\n\n/* Types */\nconst DESTROY = 'SELECT::DESTROY';\nconst DISABLE = 'SELECT::DISABLE';\nconst ENABLE = 'SELECT::ENABLE';\n\nconst DISPLAY = 'SELECT::DISPLAY';\nconst HIDE = 'SELECT::HIDE';\nconst RESET_STATUS = 'SELECT::RESET_STATUS';\nconst SET_ERROR = 'SELECT::SET_ERROR';\nconst SET_VALID = 'SELECT::SET_VALID';\n\nconst SET_OPTION = 'SELECT::SET_OPTION';\nconst SET_OPTIONS = 'SELECT::SET_OPTIONS';\nconst SELECT_OPTION = 'SELECT::SELECT_OPTION';\n\nconst TOGGLE_LOADING = 'SELECT::TOGGLE_LOADING';\n\n/* Actions */\nconst destroy = () => ({ type: DESTROY });\nconst disable = () => ({ type: DISABLE });\nconst enable = () => ({ type: ENABLE });\n\nconst display = () => ({ type: DISPLAY });\nconst hide = () => ({ type: HIDE });\nconst resetStatus = () => ({ type: RESET_STATUS });\nconst setError = () => ({ type: SET_ERROR });\nconst setValid = () => ({ type: SET_VALID });\n\nconst setOption = payload => ({ type: SET_OPTION, payload });\nconst setOptions = payload => ({ type: SET_OPTIONS, payload });\nconst selectOption = payload => ({ type: SELECT_OPTION, payload });\n\nconst toggleLoading = () => ({ type: TOGGLE_LOADING });\n\n/* Exports */\nmodule.exports = {\n types: {\n DISPLAY,\n HIDE,\n DESTROY,\n RESET_STATUS,\n SET_ERROR,\n SET_VALID,\n SET_OPTION,\n SET_OPTIONS,\n SELECT_OPTION,\n ENABLE,\n DISABLE,\n TOGGLE_LOADING\n },\n actions: {\n display,\n hide,\n destroy,\n resetStatus,\n setError,\n setValid,\n setOption,\n setOptions,\n selectOption,\n enable,\n disable,\n toggleLoading\n }\n};\n","/* ==========================================================================\n AutocompleteRxjs > Client > Suggestions > Keyboard\n ========================================================================== */\n\n/* Modules */\nconst { fromEvent } = require('rxjs');\nconst { tap, filter } = require('rxjs/operators');\n\nconst { getNextSibling, getPreviousSibling } = require('../../../../../helpers/dom');\n\nconst configuration = require('../config');\n\nconst { SUGGESTIONS_KEYS, KEY_ARROW_UP, KEY_ARROW_DOWN, KEY_ENTER, KEY_ESC, KEY_TAB } = require('../../../constants');\n\n/* Helpers */\nconst goToFirstEl = instance => {\n const panel = instance;\n\n /* Hooks */\n const { list } = instance.hooks;\n\n /* Els */\n panel.hooks.keyedEl = list.querySelector('[data-autocomplete-suggestion]');\n instance.hooks.keyedEl.classList.add(configuration().css.keyed);\n instance.hooks.keyedEl.scrollIntoView();\n};\n\nconst goToLastEl = instance => {\n const panel = instance;\n\n /* Hooks */\n const { list } = instance.hooks;\n\n /* Els */\n panel.hooks.keyedEl = [...list.querySelectorAll('[data-autocomplete-suggestion]')].pop();\n instance.hooks.keyedEl.classList.add(configuration().css.keyed);\n instance.hooks.keyedEl.scrollIntoView();\n};\n\nconst goToNextEl = (element, instance) => {\n const panel = instance;\n\n if (!element) {\n goToFirstEl(instance);\n\n return;\n }\n\n element.classList.remove(configuration().css.keyed);\n panel.hooks.keyedEl = getNextSibling(element, '[data-autocomplete-suggestion]');\n\n if (!instance.hooks.keyedEl) {\n goToFirstEl(instance);\n\n return;\n }\n\n instance.hooks.keyedEl.classList.add(configuration().css.keyed);\n instance.hooks.keyedEl.scrollIntoView();\n};\n\nconst goToPreviousEl = (element, instance) => {\n const panel = instance;\n\n if (!element) {\n goToLastEl(instance);\n\n return;\n }\n\n element.classList.remove(configuration().css.keyed);\n panel.hooks.keyedEl = getPreviousSibling(element, '[data-autocomplete-suggestion]');\n\n if (!instance.hooks.keyedEl) {\n goToLastEl(instance);\n\n return;\n }\n\n instance.hooks.keyedEl.classList.add(configuration().css.keyed);\n instance.hooks.keyedEl.scrollIntoView();\n};\n\nconst handleTab = instance => {\n const { suggestions } = instance.store.select('autocomplete');\n const { keyedEl } = instance.hooks;\n\n if (!keyedEl) {\n /* Change value to the first one */\n instance.actions.changeValue(suggestions[0]);\n\n return;\n }\n\n /* Change value to the keyed one */\n instance.actions.changeValue(suggestions[+keyedEl.dataset.autocompleteSuggestion]);\n};\n\nconst handleEnter = instance => {\n const { suggestions } = instance.store.select('autocomplete');\n const { keyedEl } = instance.hooks;\n\n if (!keyedEl) {\n return;\n }\n\n /* Change value to the keyed one */\n instance.actions.changeValue(suggestions[+keyedEl.dataset.autocompleteSuggestion]);\n};\n\n/* Init */\nfunction initKeyboard(instance) {\n const panel = instance;\n\n /* Hooks */\n panel.hooks = {\n ...instance.hooks,\n keyedEl: null\n };\n\n /* Subscriptions */\n panel.subscriptions = {\n ...instance.subscriptions,\n keydowns: fromEvent(instance.hooks.input, 'keydown')\n .pipe(\n tap(event => event.stopPropagation()),\n filter(event => SUGGESTIONS_KEYS.includes(event.keyCode)),\n filter(() => instance.store.select('autocomplete').openSuggestions)\n )\n .subscribe(event => {\n event.preventDefault();\n const { keyCode } = event;\n const { keyedEl } = instance.hooks;\n\n switch (keyCode) {\n case KEY_ESC:\n instance.hooks.input.blur();\n /* Close suggestions and sync input value */\n instance.actions.closeSuggestions();\n instance.actions.syncValue();\n\n break;\n case KEY_ARROW_DOWN:\n goToNextEl(keyedEl, instance);\n break;\n case KEY_ARROW_UP:\n goToPreviousEl(keyedEl, instance);\n break;\n case KEY_ENTER:\n handleEnter(instance);\n break;\n case KEY_TAB:\n handleTab(instance);\n break;\n default:\n break;\n }\n })\n };\n}\n\n/* Destroy */\nfunction destroyKeyboard(instance) {\n const panel = instance;\n\n /* Hooks */\n panel.hooks.keyedEl = null;\n\n /* Subscriptions */\n instance.subscriptions.keydowns.unsubscribe();\n delete panel.subscriptions.keydowns;\n}\n\n/* Exports */\nmodule.exports = {\n initKeyboard,\n destroyKeyboard\n};\n","/* ==========================================================================\n SearcherCar > Client > Submit > Loader\n ========================================================================== */\n\n/* Modules */\nconst { toNode } = require('@bluekiri/alexandria/helpers/domHelpers');\nconst { addData, addStyle } = require('@bluekiri/alexandria/helpers/dataHelpers');\n\nconst Loader = require('@bluekiri/alexandria-contrib-components/components/loading-information-rxjs/client/js');\nconst LoaderTemplate = require('@bluekiri/alexandria-contrib-components/components/loading-information-rxjs/template');\n\nconst configuration = require('../../config');\n\nfunction buildDescription(instance) {\n const { origin, age, destination } = instance.store.select('data');\n const { calendarOrigin, calendarDestination } = instance;\n const { label } = age;\n const { text } = origin;\n const textDesti = destination && destination.text ? destination.text : false;\n\n return `\n ${text}, \n ${textDesti ? `${textDesti}, ` : ''}\n ${calendarOrigin ? `${calendarOrigin.hooks.input.value}` : ''} - \n ${calendarDestination ? `${calendarDestination.hooks.input.value}` : ''},\n ${label}\n `;\n}\n\n/* Create */\nfunction createLoader(instance) {\n /* Data */\n const { context, literals } = instance.config;\n const { titleLoaderLabel = 'Buscando coches', messageLoaderLabel = 'Espera, por favor...' } = literals;\n\n /* Build description */\n const description = buildDescription(instance);\n\n /* Template */\n const template = LoaderTemplate(\n addStyle(\n addData(\n {\n image: {\n src: '/comun/images/lineas/coches_800x600.jpg'\n },\n title: titleLoaderLabel,\n description,\n message: messageLoaderLabel\n },\n {\n type: configuration().type.loading\n }\n ),\n [configuration().css.car]\n ),\n context\n );\n\n /* Node */\n const node = toNode(template)[0];\n\n /* Return */\n return node;\n}\n\n/* Add */\nfunction addLoader(instance) {\n const panel = instance;\n\n /* Node */\n const node = createLoader(instance);\n\n /* Add to DOM */\n document.body.appendChild(node);\n\n /* Reference */\n panel.loader = Loader(`[data-component=LoadingInformationRxjs][data-type=${configuration().type.loading}]`);\n}\n\n/* Exports */\nmodule.exports = {\n addLoader\n};\n","/* ==========================================================================\n LoadingInformationRxjs > Client > Store > reducer\n ========================================================================== */\n\n/* Modules */\nconst { types } = require('./actions');\n\n/* Reducer */\nfunction reducer(state, action) {\n switch (action.type) {\n case types.DESTROY:\n return state;\n default:\n return state;\n }\n}\n\n/* Exports */\nmodule.exports = {\n reducer\n};\n","/* ==========================================================================\n CalendarRxjs > Client > Store > Actions\n ========================================================================== */\n\n/* Types */\nconst DESTROY = 'CALENDAR::DESTROY';\nconst DISABLE = 'CALENDAR::DISABLE';\nconst DISPLAY = 'CALENDAR::DISPLAY';\nconst ENABLE = 'CALENDAR::ENABLE';\nconst HIDE = 'CALENDAR::HIDE';\nconst RESET_STATUS = 'CALENDAR::RESET_STATUS';\nconst SET_ERROR = 'CALENDAR::SET_ERROR';\nconst SET_MODE = 'CALENDAR::SET_MODE';\nconst SET_VALID = 'CALENDAR::SET_VALID';\nconst TOGGLE_ACTIVE = 'CALENDAR::TOGGLE_ACTIVE';\n\nconst SET_VALUE = 'CALENDAR::SET_VALUE';\nconst CHANGE_VALUE = 'CALENDAR::CHANGE_VALUE';\n\n/* Actions */\nconst destroy = () => ({ type: DESTROY });\nconst disable = () => ({ type: DISABLE });\nconst display = () => ({ type: DISPLAY });\nconst enable = () => ({ type: ENABLE });\nconst hide = () => ({ type: HIDE });\nconst resetStatus = () => ({ type: RESET_STATUS });\nconst setError = () => ({ type: SET_ERROR });\nconst setMode = payload => ({ type: SET_MODE, payload });\nconst setValid = () => ({ type: SET_VALID });\nconst toggleActive = () => ({ type: TOGGLE_ACTIVE });\n\nconst setValue = payload => ({ type: SET_VALUE, payload });\nconst changeValue = payload => ({ type: CHANGE_VALUE, payload });\n\n/* Exports */\nmodule.exports = {\n types: {\n DESTROY,\n DISABLE,\n DISPLAY,\n ENABLE,\n HIDE,\n RESET_STATUS,\n SET_ERROR,\n SET_MODE,\n SET_VALID,\n TOGGLE_ACTIVE,\n SET_VALUE,\n CHANGE_VALUE\n },\n actions: {\n destroy,\n disable,\n display,\n enable,\n hide,\n resetStatus,\n setError,\n setMode,\n setValid,\n toggleActive,\n setValue,\n changeValue\n }\n};\n","/* ==========================================================================\n SearcherCar > Client > Store > Reducer\n ========================================================================== */\n\n/* Modules */\nconst { types } = require('./actions');\n\n/* Initial state */\nconst initialState = {\n age: null,\n calendarDestination: null,\n calendarOrigin: null,\n origin: null,\n destination: null,\n returnAtOrigin: false\n};\n\n/* Reducer */\nfunction reducer(state = initialState, action) {\n switch (action.type) {\n case types.CHANGE_AGE:\n case types.SET_AGE:\n return {\n ...state,\n age: action.payload\n };\n case types.CHANGE_CALENDAR_DESTINATION:\n case types.SET_CALENDAR_DESTINATION:\n return {\n ...state,\n calendarDestination: action.payload\n };\n case types.CHANGE_CALENDAR_ORIGIN:\n case types.SET_CALENDAR_ORIGIN:\n return {\n ...state,\n calendarOrigin: action.payload\n };\n case types.CHANGE_DESTINATION:\n case types.SET_DESTINATION:\n return {\n ...state,\n destination: action.payload\n };\n case types.CHANGE_ORIGIN:\n case types.SET_ORIGIN:\n return {\n ...state,\n origin: action.payload\n };\n case types.CHANGE_RETURN_AT_ORIGIN:\n case types.SET_RETURN_AT_ORIGIN:\n return {\n ...state,\n returnAtOrigin: action.payload\n };\n case types.CHANGE_OPTIONS:\n return {\n ...state,\n options: action.payload\n };\n case types.DESTROY:\n default:\n return state;\n }\n}\n\n/* Reducer cross selling */\nfunction reducerTwo(state = { includeHotels: false }, action) {\n switch (action.type) {\n case types.SET_SEARCHER:\n return {\n ...state,\n ...action.payload\n };\n default:\n return state;\n }\n}\n\n/* Exports */\nmodule.exports = {\n reducer,\n reducerTwo\n};\n","/* ==========================================================================\n SearcherCar > Client > Options\n ========================================================================== */\n\n/* Modules */\nconst Checkbox = require('@bluekiri/alexandria-contrib-components/components/checkbox-rxjs/client/js');\n\n/* eslint-disable */\nconst CheckboxActions = require('@bluekiri/alexandria-contrib-components/components/checkbox-rxjs/client/js/store/actions');\n/* eslint-enable */\n\nconst { actions } = require('../store/actions');\n\nconst configuration = require('../config');\n\n/* Init */\nfunction initOptions(instance) {\n const panel = instance;\n\n /* Selector */\n const { selector } = instance;\n\n const checkboxes = [\n ...instance.element.querySelectorAll(\n `${selector} [data-component='CheckboxRxjs'][data-type^='${configuration().type.options}']`\n )\n ];\n\n if (checkboxes.length === 0) return;\n\n /* Reference */\n panel.options = checkboxes.map(item =>\n Checkbox(`${selector} [data-component='CheckboxRxjs'][data-type='${item.dataset.type}']`)\n );\n\n /* Actions */\n panel.actions = {\n ...instance.actions,\n changeOptions: payload => {\n return instance.store.dispatch(actions.changeOptions(payload));\n }\n };\n\n /* Checkbox references */\n const { options } = instance.config;\n panel.checkboxReferences = [];\n\n /* Reactions */\n panel.options.forEach((item, index) => {\n panel.checkboxReferences.push({ name: options[index].name, id: index, unchecks: options[index].unchecks });\n\n panel.reactions = {\n ...instance.reactions,\n [`changeOptions${index}`]: item.store.subscribe((state, action) => {\n if (action.type !== CheckboxActions.types.TOGGLE) return;\n\n const previousOptions = instance.store.select('data').options;\n\n /* Uncheck options */\n if (panel.checkboxReferences[index].unchecks) {\n panel.checkboxReferences\n .filter(x => panel.checkboxReferences[index].unchecks.indexOf(x.name) >= 0)\n .forEach(x => {\n const checked = previousOptions[x.id];\n\n if (checked) {\n panel.options[x.id].hooks.input.checked = false;\n panel.options[x.id].actions.toggle();\n }\n });\n }\n\n /* Get new values form all options */\n const values = instance.options.map(itm => itm.store.select('checkbox').checked);\n\n /* Dispatch */\n instance.actions.changeOptions(values);\n })\n };\n });\n\n /* Start */\n const values = instance.options.map(item => item.store.select('checkbox').checked);\n\n if (!values) {\n return;\n }\n\n /* Sync */\n instance.actions.setSearcher({ options: values });\n}\n\n/* Destroy */\nfunction destroyOptions(instance) {\n if (!instance.options) return;\n\n const panel = instance;\n\n /* Actions */\n delete panel.actions.changeOptions;\n\n /* Reactions */\n instance.options.forEach((item, index) => delete panel.reactions[`changeOptions${index}`]);\n\n /* Checkbox references */\n delete panel.checkboxReferences;\n\n /* Reference */\n instance.options.forEach(item => item.actions.destroy());\n delete panel.options;\n}\n\n/* Exports */\nmodule.exports = {\n initOptions,\n destroyOptions\n};\n","/* ==========================================================================\n Helpers > Array\n ========================================================================== */\n\n/**\n * Group By\n * Groups a collection of objects based on key\n * @param {array} Collection\n * @param {function} Key getter\n * @returns {array} Collection grouped by key\n */\nfunction groupBy(list, fn) {\n const map = new Map();\n list.forEach(item => {\n const key = fn(item);\n const collection = map.get(key);\n if (!collection) {\n map.set(key, [item]);\n } else {\n collection.push(item);\n }\n });\n\n return map;\n}\n\n/**\n * Sort by key value\n * Sorts an array of objects by the given key name\n * @param {array} Collection\n * @param {string} Key value\n * @returns {array} Collection ordered by the key value\n */\nfunction sortByKey(collection = [], key = '') {\n if (!key) return collection.slice();\n\n return collection.sort((a, b) => (a[key] > b[key] ? -1 : 1));\n}\n\n/**\n * Returns TRUE if the first specified array contains all elements\n * from the second one. FALSE otherwise.\n *\n * @param {array} superset\n * @param {array} subset\n *\n * @returns {boolean}\n */\nfunction containsArray(superset = [], subset = []) {\n if (subset.length === 0) {\n return false;\n }\n return subset.every(value => superset.indexOf(value) >= 0);\n}\n\n/* Exports */\nmodule.exports = {\n groupBy,\n sortByKey,\n containsArray\n};\n","/* ==========================================================================\n InputRxjs > Client > Loader\n ========================================================================== */\n\n/* Modules */\nconst { html } = require('common-tags');\nconst { toNode } = require('@bluekiri/alexandria/helpers/domHelpers');\n\nconst configuration = require('../config');\nconst { actions, types } = require('../store/actions');\n\n/* Add */\nfunction addLoader(instance) {\n const { loader = false } = instance.hooks;\n\n if (loader) {\n return;\n }\n\n const template = html(`\n
\n
\n
\n `);\n\n const node = toNode(template)[0];\n\n const panel = instance;\n\n /* DOM */\n instance.element.classList.add(configuration().css.loading);\n instance.element.appendChild(node);\n\n /* Disable */\n instance.hooks.select.setAttribute('disabled', true);\n\n /* Hooks */\n panel.hooks = {\n ...instance.hooks,\n loader: instance.element.querySelector('[data-loader]')\n };\n}\n\n/* Remove */\nfunction removeLoader(instance) {\n const { loader = false } = instance.hooks;\n\n if (!loader) {\n return;\n }\n\n const panel = instance;\n\n /* DOM */\n instance.element.removeChild(instance.hooks.loader);\n instance.element.classList.remove(configuration().css.loading);\n\n /* Enable */\n instance.hooks.select.removeAttribute('disabled');\n\n /* Hooks */\n delete panel.hooks.loader;\n}\n\n/* Init */\nfunction initLoader(instance) {\n /* Data */\n const { hasLoader } = instance.config;\n\n if (!hasLoader) {\n return;\n }\n\n const panel = instance;\n\n /* Actions */\n panel.actions = {\n ...instance.actions,\n toggleLoading: () => instance.store.dispatch(actions.toggleLoading())\n };\n\n /* Reactions */\n panel.reactions = {\n ...instance.reactions,\n toggleLoading: instance.store.subscribe((state, action) => {\n if (action.type !== types.TOGGLE_LOADING) return;\n\n const { isLoading } = state.select;\n\n if (!isLoading) {\n /* Remove */\n removeLoader(instance);\n\n /* Enable choices */\n instance.choices.enable();\n\n return;\n }\n\n /* Add */\n addLoader(instance);\n\n /* Disable choices */\n instance.choices.disable();\n })\n };\n}\n\n/* Destroy */\nfunction destroyLoader(instance) {\n /* Data */\n const { hasLoader } = instance.config;\n\n if (!hasLoader) {\n return;\n }\n\n const panel = instance;\n\n /* Reactions */\n instance.reactions.toggleLoading.unsubscribe();\n delete panel.reactions.toggleLoading;\n\n /* Actions */\n delete panel.actions.toggleLoading;\n}\n\n/* Exports */\nmodule.exports = {\n initLoader,\n destroyLoader\n};\n","/* ==========================================================================\n SearcherCar > Client > CalendarOrigin\n ========================================================================== */\n\n/* Modules */\nconst Calendar = require('@bluekiri/alexandria-contrib-components/components/calendar-rxjs/client/js');\n\n/* eslint-disable */\nconst CalendarActions = require('@bluekiri/alexandria-contrib-components/components/calendar-rxjs/client/js/store/actions');\n/* eslint-enable */\n\nconst { actions } = require('../store/actions');\n\nconst configuration = require('../config');\n\n/* Validate dates */\nfunction validateDates(instance) {\n const { calendarOrigin = {}, calendarDestination = {} } = instance.store.select('data');\n\n let openCalendarDestination = false;\n\n if (calendarOrigin.value) {\n if (!calendarDestination.value || calendarOrigin.value >= calendarDestination.value) {\n openCalendarDestination = true;\n }\n }\n\n if (openCalendarDestination) {\n instance.calendarDestination.fp.open();\n }\n}\n\n/* Validate initial calendar destination */\nfunction validateDestinationCalendar(instance) {\n const { calendarDestination = {}, calendarOrigin = {} } = instance.store.select('data');\n if (calendarDestination.value < calendarOrigin.value) {\n instance.calendarDestination.fp.set('minDate', calendarOrigin.value);\n instance.calendarDestination.fp.changeMonth(calendarOrigin.value.getMonth(), false);\n }\n}\n\n/* Init */\nfunction initCalendarOrigin(instance) {\n const panel = instance;\n\n /* Actions */\n panel.actions = {\n ...instance.actions,\n changeCalendarOrigin: payload => {\n return instance.store.dispatch(actions.changeCalendarOrigin(payload));\n }\n };\n\n /* Selector */\n const { selector } = instance;\n\n /* Reference */\n panel.calendarOrigin = Calendar(\n `${selector} [data-component='CalendarRxjs'][data-type='${configuration().type.calendarOrigin}']`,\n {\n showMonths: 1\n }\n );\n\n panel.calendarOrigin.fp.config.onClose.push(() => validateDates(instance));\n panel.calendarOrigin.fp.config.onOpen.push(() => panel.calendarDestination.hideError());\n\n /* Reactions */\n panel.reactions = {\n ...instance.reactions,\n changeCalendarOrigin: instance.calendarOrigin.store.subscribe((_, action) => {\n if (action.type !== CalendarActions.types.CHANGE_VALUE) return;\n\n /* Format */\n const [date, hour] = instance.calendarOrigin.fp.formatDate(action.payload[0], 'Y-m-d H:i').split(' ');\n\n /* Dispatch */\n instance.actions.changeCalendarOrigin({ value: action.payload[0], date, hour });\n instance.calendarOrigin.actions.resetStatus();\n\n /* Update return minDate */\n instance.calendarDestination.fp.set('minDate', action.payload[0]);\n instance.calendarDestination.fp.changeMonth(action.payload[0].getMonth(), false);\n })\n };\n\n /* Start */\n const { value } = instance.calendarOrigin.store.select('calendar');\n\n if (!value) {\n return;\n }\n\n /* Format */\n const [date, hour] = instance.calendarOrigin.fp.formatDate(value, 'Y-m-d H:i').split(' ');\n\n /* Sync */\n instance.actions.setCalendarOrigin({ value, date, hour });\n instance.calendarOrigin.actions.resetStatus();\n\n validateDestinationCalendar(instance);\n}\n\n/* Destroy */\nfunction destroyCalendarOrigin(instance) {\n const panel = instance;\n\n instance.calendarOrigin.actions.destroy();\n delete panel.calendarOrigin;\n\n delete panel.actions.changeCalendarOrigin;\n\n instance.reactions.changeCalendarOrigin.unsubscribe();\n delete panel.reactions.changeCalendarOrigin;\n}\n\n/* Exports */\nmodule.exports = {\n initCalendarOrigin,\n destroyCalendarOrigin\n};\n","/* ==========================================================================\n CalendarRxjs > Client > Helpers\n ========================================================================== */\n\n/* Constat */\nconst DEVICE_MOBILE = 'mobile';\nconst MODE_RANGE = 'range';\nconst MODE_SINGLE = 'single';\nconst MODE_TIME = 'time';\n\n/* Device */\nconst isMobile = (device = String) => String(device).toLowerCase() === DEVICE_MOBILE;\n\n/* Mode */\nconst isModeRange = (mode = String) => mode.toLowerCase() === MODE_RANGE;\nconst isModeSingle = (mode = String) => mode.toLowerCase() === MODE_SINGLE;\nconst isModeTime = (mode = String) => mode.toLowerCase() === MODE_TIME;\n\n/* Exports */\nmodule.exports = {\n modes: {\n MODE_RANGE,\n MODE_SINGLE,\n MODE_TIME\n },\n isMobile,\n isModeRange,\n isModeSingle,\n isModeTime\n};\n","/* ==========================================================================\n AutocompleteRxjs > Client > Suggestions\n ========================================================================== */\n\n/* Modules */\nconst { decode } = require('he');\nconst { html } = require('common-tags');\n\nconst { toNode } = require('@bluekiri/alexandria/helpers/domHelpers');\nconst { randomId } = require('@bluekiri/alexandria/helpers/dataHelpers');\nconst ViewHelpers = require('@bluekiri/alexandria/core/ViewHelpers');\n\nconst { fromEvent } = require('rxjs');\nconst { map, tap, filter } = require('rxjs/operators');\n\nconst { actions, types } = require('../store/actions');\n\nconst TooltipTemplate = require('../../../templates/tooltipPanel');\nconst TooltipClient = require('../../../../tooltip/client/js');\n\nconst { initKeyboard, destroyKeyboard } = require('./keyboard');\n\nconst { collectionByGroup } = require('../helpers/data');\n\nconst { ICONS } = require('../../../constants');\nconst configuration = require('../config');\n\nconst {\n hooks: { suggestionsList: hookSuggestionsList }\n} = configuration();\n\n/* Render suggestion */\nconst renderSuggestion = (data, context) => {\n /* Data */\n const { text, index, query } = data;\n\n /* View helpers */\n const { markdown } = ViewHelpers(context);\n\n /* Regex to look for query, remove invalid chars parenthesis and forward slash */\n const regex = new RegExp(query.replace(/[\\\\{()}]/g, ''), 'gi');\n\n const suggestionText = markdown(text.replace(regex, str => `**${str}**`));\n\n return html(`\n

\n ${suggestionText}\n

\n `);\n};\n\n/* Render group */\nconst renderGroup = (data, literals, context) => {\n /* Data */\n const { group = {}, query = '' } = data;\n\n /* Suggestions */\n const { key = '', suggestions = [] } = group;\n\n /* View helpers */\n const { icon } = ViewHelpers(context);\n\n return html(`\n

\n ${icon(ICONS[key])}\n ${literals[key] || ''}\n

\n ${html(suggestions.map(item => renderSuggestion({ ...item, query }, context)))}\n `);\n};\n\n/* Render groups */\nconst renderGroups = (data, literals, context) => {\n const { suggestions = [], query = '' } = data;\n\n /* Exit when no suggestions */\n if (suggestions.length < 1) return '';\n\n return html(collectionByGroup(suggestions).map(group => renderGroup({ group, query }, literals, context)));\n};\n\n/* Render suggestions */\nconst renderSuggestions = (data, literals, context) =>\n html(`\n
\n ${renderGroups(data, literals, context)}\n
\n `);\n\n/* Create */\nfunction createSuggestions(instance) {\n /* Data */\n const { config = {}, store = {} } = instance;\n const { context = {}, literals = {} } = config;\n const { suggestions = [], query } = store.select('autocomplete');\n\n /* Exit when no suggestions */\n if (suggestions.length < 1) return false;\n\n /* -Template */\n return renderSuggestions({ suggestions, query }, literals, context);\n}\n\nfunction createPanel(instance, content) {\n const { config = {}, store = {} } = instance;\n const { context = {}, placement } = config;\n\n /* Data */\n const { tooltipType: type } = store.select('autocomplete');\n\n /* Prepare tooltip data */\n const dataTooltip = {\n placement,\n type,\n content: html(content)\n };\n\n return toNode(TooltipTemplate(dataTooltip, context))[0];\n}\n\nfunction initSuggestions(instance) {\n const panel = instance;\n\n const { store = {} } = instance;\n const { input } = instance.hooks;\n\n /* Data */\n const { tooltipType } = store.select('autocomplete');\n\n /* Init tooltip */\n panel.tooltip = TooltipClient(`[data-component=\"Tooltip\"][data-type=\"${tooltipType}\"]`, {\n trigger: input\n });\n\n if (!panel.tooltip) return;\n\n /* Update hooks */\n panel.hooks = {\n ...instance.hooks,\n list: panel.tooltip.element.querySelector('[data-list]')\n };\n\n /* Extend actions */\n panel.actions = {\n ...instance.actions,\n changeValue: data => instance.store.dispatch(actions.changeValue(data))\n };\n\n /* Extend Reactions */\n panel.reactions = {\n ...instance.reactions,\n changeValue: instance.store.subscribe((state, action) => {\n if (action.type !== types.CHANGE_VALUE) return;\n\n /* Dispatch close panel suggestions */\n panel.actions.closeSuggestions();\n /* Sync input value */\n panel.actions.syncValue();\n })\n };\n\n /* Update subscriptions */\n panel.subscriptions = {\n ...instance.subscriptions,\n clicks: fromEvent(instance.hooks.list, 'click')\n .pipe(\n tap(event => event.stopPropagation()),\n map(event => event.target.closest('[data-autocomplete-suggestion]')),\n filter(element => !!element),\n map(element => +element.dataset.autocompleteSuggestion),\n map(index => instance.store.select('autocomplete').suggestions[index])\n )\n .subscribe(value => {\n /* Dispatch */\n instance.actions.changeValue(value);\n })\n };\n\n /* Keyboard */\n initKeyboard(instance);\n}\n\n/* Add */\nfunction addSuggestions(instance) {\n const panel = instance;\n\n const { config = {}, hooks = {} } = instance;\n const { appendToParent } = config;\n\n const { input } = hooks;\n\n /* Create Suggestions */\n const suggestionsTemplate = createSuggestions(instance);\n\n /* no suggestions -> close suggestions */\n if (!suggestionsTemplate) {\n /* Close suggestion and sync input value */\n panel.actions.closeSuggestions();\n panel.actions.syncValue();\n return;\n }\n\n /* Add tooltip with suggestions to DOM */\n if (appendToParent) input.parentNode.appendChild(createPanel(instance, suggestionsTemplate));\n else document.body.appendChild(createPanel(instance, suggestionsTemplate));\n\n initSuggestions(instance);\n}\n\n/* Update suggestions */\nfunction updateSuggestions(instance) {\n const panel = instance;\n\n /* Data */\n const { suggestions, query } = instance.store.select('autocomplete');\n const { literals, context } = instance.config;\n\n /* -Template */\n const template = renderGroups({ suggestions, query }, literals, context);\n\n panel.hooks.list.innerHTML = template;\n}\n\nfunction destroyTooltip(instance) {\n const panel = instance;\n\n if (!instance.tooltip) return;\n\n /* Destroy component */\n instance.tooltip.actions.destroy();\n\n /* Remove references */\n delete panel.tooltip;\n}\n\n/* Destroy suggestions */\nfunction destroySuggestions(instance) {\n const panel = instance;\n if (!instance.tooltip) return;\n\n /* Destroy */\n destroyTooltip(instance);\n\n /* Actions */\n delete panel.actions.changeValue;\n\n /* Reactions */\n instance.reactions.changeValue.unsubscribe();\n delete panel.reactions.changeValue;\n\n /* Subscriptions */\n instance.subscriptions.clicks.unsubscribe();\n delete panel.subscriptions.clicks;\n\n /* Keyboard */\n destroyKeyboard(instance);\n}\n\nfunction startSuggestions(instance) {\n const panel = instance;\n const { hooks = {}, config = {} } = panel;\n const { hasPlaceHolder } = config;\n const { input: inputEl } = hooks;\n\n /* Extends actions */\n panel.actions = {\n ...panel.actions,\n openSuggestions: () => {\n const tooltipType = randomId(randomId(configuration().type.tooltip));\n\n return instance.store.dispatch(actions.openSuggestions(tooltipType));\n },\n closeSuggestions: () => instance.store.dispatch(actions.closeSuggestions()),\n setSuggestions: data => {\n /**\n * Decode the special characters from the API\n */\n const suggestions = data.map(item => ({ ...item, text: decode(item.text) }));\n\n return instance.store.dispatch(actions.setSuggestions(suggestions));\n }\n };\n\n /* Extends reactions */\n panel.reactions = {\n ...panel.reactions,\n clear: instance.store.subscribe((state, action) => {\n if (action.type !== types.CLEAR) return;\n\n /* Data */\n const { error, active, isLoading } = panel.store.select('autocomplete');\n\n /* Toggle input label position */\n if (inputEl.value === '') {\n if (!hasPlaceHolder && active) panel.actions.toggleActive();\n if (error && !isLoading) panel.actions.resetStatus();\n }\n }),\n closeSuggestions: instance.store.subscribe((state, action) => {\n if (action.type !== types.CLOSE_SUGGESTIONS) return;\n\n /* Destroy suggestions */\n destroySuggestions(panel);\n }),\n openSuggestions: instance.store.subscribe((state, action) => {\n if (action.type !== types.OPEN_SUGGESTIONS) return;\n\n /* Add panel suggestions */\n addSuggestions(instance);\n }),\n setSuggestions: instance.store.subscribe((state, action) => {\n if (action.type !== types.SET_SUGGESTIONS) return;\n\n /* Data */\n const { openSuggestions, suggestions } = instance.store.select('autocomplete');\n\n if (!suggestions.length) return;\n\n if (!openSuggestions) {\n instance.actions.openSuggestions();\n return;\n }\n\n /* Update UI suggestions */\n updateSuggestions(instance);\n })\n };\n}\n/* Exports */\nmodule.exports = {\n updateSuggestions,\n addSuggestions,\n destroySuggestions,\n startSuggestions\n};\n","/* ==========================================================================\n SearcherCar > Client > Submit\n ========================================================================== */\n\n/* Modules */\nconst Button = require('@bluekiri/alexandria-contrib-components/components/button-rxjs/client/js');\nconst { addGa4Event } = require('@bluekiri/alexandria-contrib-components/helpers/ga4Event');\n\nconst Utils = require('../utils');\n\nconst { addLoader } = require('./loader');\n\nconst configuration = require('../config');\n\n/* Init */\nfunction initSubmit(instance) {\n const panel = instance;\n\n /* Selector */\n const { selector } = instance;\n\n /* Reference */\n panel.submit = Button(`${selector} [data-component='ButtonRxjs'][data-type='${configuration().type.submit}']`);\n\n /* Subscriptions */\n panel.subscriptions = {\n ...instance.subscriptions,\n submit: instance.submit.events.click$.subscribe(() => {\n if (!Utils.validation.validate(instance)) {\n return;\n }\n\n addLoader(instance);\n\n addGa4Event({\n event: 'search',\n event_type: 'availability',\n event_detail: 'transports/car'\n });\n\n const { hasNavigationBack } = instance.config;\n const url = Utils.url.buildUrl(instance);\n\n if (!hasNavigationBack) {\n window.location.replace(url);\n return;\n }\n\n window.location.assign(url);\n })\n };\n}\n\n/* Destroy */\nfunction destroySubmit(instance) {\n const panel = instance;\n\n instance.submit.actions.destroy();\n delete panel.submit;\n\n instance.subscriptions.submit.unsubscribe();\n delete panel.subscriptions.submit;\n}\n\n/* Exports */\nmodule.exports = {\n initSubmit,\n destroySubmit\n};\n","/* ==========================================================================\n SearcherCar > Client > Destination\n ========================================================================== */\n\n/* Modules */\nconst Autocomplete = require('@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js');\n\n/* eslint-disable */\nconst AutocompleteActions = require('@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js/store/actions');\n/* eslint-enable */\n\nconst { actions } = require('../store/actions');\n\nconst configuration = require('../config');\n\n/* Init */\nfunction initDestination(instance) {\n const panel = instance;\n\n /* Actions */\n panel.actions = {\n ...instance.actions,\n changeDestination: payload => {\n return instance.store.dispatch(actions.changeDestination(payload));\n }\n };\n\n /* Selector */\n const { selector } = instance;\n\n /* Reference */\n panel.destination = Autocomplete(\n `${selector} [data-component='AutocompleteRxjs'][data-type='${configuration().type.destination}']`\n );\n\n /* Reactions */\n panel.reactions = {\n ...instance.reactions,\n changeDestination: instance.destination.store.subscribe((_, action) => {\n if (action.type !== AutocompleteActions.types.CHANGE_VALUE) return;\n\n /* Dispatch */\n instance.actions.changeDestination(action.payload);\n instance.destination.actions.resetStatus();\n }),\n clearDestination: instance.destination.store.subscribe((_, action) => {\n if (action.type !== AutocompleteActions.types.CLEAR) return;\n\n /* Dispatch */\n instance.actions.setDestination(null);\n instance.destination.actions.setError();\n })\n };\n\n /* Start */\n const { value } = instance.destination.store.select('autocomplete');\n\n if (!value) {\n return;\n }\n\n /* Sync */\n instance.actions.setDestination(value);\n instance.destination.actions.resetStatus();\n}\n\n/* Destroy */\nfunction destroyDestination(instance) {\n const panel = instance;\n\n instance.reactions.changeDestination.unsubscribe();\n delete panel.reactions.changeDestination;\n\n instance.reactions.clearDestination.unsubscribe();\n delete panel.reactions.clearDestination;\n\n instance.destination.actions.destroy();\n delete panel.destination;\n\n delete panel.actions.changeDestination;\n}\n\n/* Exports */\nmodule.exports = {\n initDestination,\n destroyDestination\n};\n","/* ==========================================================================\n SearcherCar > Client > Utils > Url\n ========================================================================== */\n\n/* Modules */\nconst { TYPES, DIRECT, TOUR_OPERATOR, REFUNDABLE, ETHNIC } = require('../../../../constants');\n\n/* Age */\nconst buildAge = instance => {\n const {\n age: { value }\n } = instance.store.select('data');\n\n return `edadConductor=${value}`;\n};\n\n/* Calendar Destination */\nconst buildCalendarDestination = instance => {\n const {\n calendarDestination: { date, hour }\n } = instance.store.select('data');\n\n return [`fechaVueltaSV=${date} ${hour}`, `horaDevCoche=${hour}`].join('&');\n};\n\n/* Calendar Origin */\nconst buildCalendarOrigin = instance => {\n const {\n calendarOrigin: { date, hour }\n } = instance.store.select('data');\n\n return [`fechaIdaSV=${date} ${hour}`, `horaRecogidaCoche=${hour}`].join('&');\n};\n\n/* Destination */\nconst buildDestination = instance => {\n const { returnAtOrigin, destination } = instance.store.select('data');\n\n if (returnAtOrigin) {\n return [\n `destinoSV=''`,\n `nombreCiudadD=''`,\n `tipo_oficinaD_hidden=''`,\n `latitude_oficinaD_hidden=''`,\n `longitude_oficinaD_hidden=''`\n ].join('&');\n }\n\n const { latlon, text, type, value } = destination;\n const [latitude, longitude] = latlon.split(', ');\n\n return [\n `destinoSV=${encodeURIComponent(text)}`,\n `nombreCiudadD=${encodeURIComponent(text)}`,\n `tipo_oficinaD_hidden=${TYPES[type.toUpperCase()]}`,\n `latitude_oficinaD_hidden=${latitude}`,\n `longitude_oficinaD_hidden=${longitude}`,\n `bigBrotherCityName_hidden=gris+${encodeURIComponent(`${type}#${value}`)}`\n ].join('&');\n};\n\n/* Origin */\nconst buildOrigin = instance => {\n const { returnAtOrigin, origin } = instance.store.select('data');\n const { latlon, text, type, value } = origin;\n const [latitude, longitude] = latlon.split(', ');\n\n if (returnAtOrigin) {\n return [\n `origenSV=${encodeURIComponent(text)}`,\n `nombreCiudadR=${encodeURIComponent(text)}`,\n `tipo_oficinaR_hidden=${TYPES[type.toUpperCase()]}`,\n `latitude_oficinaR_hidden=${latitude}`,\n `longitude_oficinaR_hidden=${longitude}`,\n `bigBrotherCityName_hidden=gris+${encodeURIComponent(`${type}#${value}`)}`\n ].join('&');\n }\n\n return [\n `origenSV=${encodeURIComponent(text)}`,\n `nombreCiudadR=${encodeURIComponent(text)}`,\n `tipo_oficinaR_hidden=${TYPES[type.toUpperCase()]}`,\n `latitude_oficinaR_hidden=${latitude}`,\n `longitude_oficinaR_hidden=${longitude}`\n ].join('&');\n};\n\n/* Return at origin */\nconst buildReturnAtOrigin = instance => {\n const { returnAtOrigin } = instance.store.select('data');\n\n return `sameCityCheck=${returnAtOrigin}`;\n};\n\n/* Build parameter options */\nconst DEFAULT_NAMES = [DIRECT, TOUR_OPERATOR, REFUNDABLE, ETHNIC];\nfunction buildOptions(options, optionsConfig) {\n if (!options) {\n return false;\n }\n\n const optionNames = optionsConfig.map((x, i) => x.name || DEFAULT_NAMES[i]);\n\n return options\n .map((option, i) => (option ? `${optionNames[i]}=${options[i]}` : false))\n .filter(item => item)\n .join('&');\n}\n\n/* Build url */\nfunction buildUrl(instance) {\n if (!instance) {\n throw new Error('You have to provide the reference to the searcher');\n }\n\n /* Data */\n const { url, options: optionsConfig } = instance.config;\n\n const { options = false } = instance.store.select('dataTwo');\n\n return `${url}?`.concat(\n [\n buildAge(instance),\n buildCalendarDestination(instance),\n buildCalendarOrigin(instance),\n buildDestination(instance),\n buildOrigin(instance),\n buildReturnAtOrigin(instance),\n buildOptions(options, optionsConfig)\n ].join('&')\n );\n}\n\n/* Exports */\nmodule.exports = {\n buildUrl\n};\n","/* ==========================================================================\n SelectRxjs > Client > Prototype\n ========================================================================== */\n\n/* Modules */\nconst { Store } = require('@bluekiri/alexandria/helpers/state');\nconst Choices = require('choices.js');\nconst { fromEvent, of } = require('rxjs');\nconst { switchMap, filter } = require('rxjs/operators');\n\nconst { actions, types } = require('./store/actions');\nconst { reducer } = require('./store/reducer');\n\nconst { initLoader, destroyLoader } = require('./loader');\n\nconst Utils = require('./utils');\n\nconst configuration = require('./config');\n\n/* Helpers */\nconst setDataMultiple = instance => {\n const data = instance.choices.getValue();\n\n if (data.length > 0) {\n instance.actions.selectOption(data.map(item => ({ value: item.value, label: item.label })));\n\n if (!instance.element.classList.contains(configuration().css.hasItems)) {\n instance.element.classList.add(configuration().css.hasItems);\n }\n }\n};\n\nconst setDataSingle = instance => {\n const data = instance.choices.getValue();\n\n if (data) {\n instance.actions.selectOption({ value: data.value, label: data.label });\n }\n};\n\n/* Prototype */\nconst prototype = {\n /* Pairing label */\n setPairing() {\n if (this.hooks.label) {\n this.hooks.select.setAttribute('id', this.id);\n this.hooks.label.setAttribute('for', this.id);\n }\n\n return this;\n },\n /* Setup choices */\n setupChoices() {\n if (this.choices) return this;\n\n /* Data */\n const { multiple } = this.config;\n\n /* Literals */\n const {\n noResultsText = 'No results found',\n searchPlaceholderValue = 'Type to search...'\n } = this.config.literals;\n\n /* Create 3rd party library choices instance */\n this.choices = new Choices(this.hooks.select, {\n searchEnabled: true,\n renderChoiceLimit: -1 /* limit the quantity of options shown, -1 infinite */,\n searchResultLimit: 5 /* Limit the quantity of options to show on seach, -1 infinite */,\n removeItemButton: multiple /* for multiple select true */,\n placeholderValue: searchPlaceholderValue,\n searchPlaceholderValue,\n loadingText: 'Loading...',\n noResultsText,\n noChoicesText: 'No choices to choose from',\n itemSelectText: 'Press to select',\n sortFn: () => {},\n ...this.config.choices\n });\n\n return this;\n },\n /* Set up store */\n setupStore() {\n if (this.store) return this;\n\n this.store = new Store({\n select: reducer\n });\n\n return this;\n },\n /* Set up actions */\n setupActions() {\n if (this.actions) return this;\n\n this.actions = {\n destroy: () => this.store.dispatch(actions.destroy()),\n display: () => this.store.dispatch(actions.display()),\n hide: () => this.store.dispatch(actions.hide()),\n resetStatus: () => this.store.dispatch(actions.resetStatus()),\n setError: () => this.store.dispatch(actions.setError()),\n setValid: () => this.store.dispatch(actions.setValid()),\n setOption: value => this.store.dispatch(actions.setOption(value)),\n setOptions: options => this.store.dispatch(actions.setOptions(options)),\n selectOption: value => this.store.dispatch(actions.selectOption(value)),\n enable: () => this.store.dispatch(actions.enable()),\n disable: () => this.store.dispatch(actions.disable())\n };\n\n return this;\n },\n /* Set up reactions */\n setupReactions() {\n if (this.reactions) return this;\n\n this.reactions = {\n destroy: this.store.subscribe((state, action) => {\n if (action.type !== types.DESTROY) return;\n\n /* Loader */\n destroyLoader(this);\n\n /* Clean subscriptions */\n this.unsubscribe();\n [...Object.keys(this.reactions)].forEach(key => this.reactions[key].unsubscribe());\n this.choices.destroy();\n\n /* Remove from DOM */\n this.element.parentNode.removeChild(this.element);\n\n /* Clean instance */\n [...Object.keys(this)].forEach(key => delete this[key]);\n }),\n display: this.store.subscribe((state, action) => {\n if (action.type !== types.DISPLAY) return;\n\n const { css } = this.config;\n\n this.element.classList.remove(css.hidden);\n }),\n hide: this.store.subscribe((state, action) => {\n if (action.type !== types.HIDE) return;\n\n const { css } = this.config;\n\n this.element.classList.add(css.hidden);\n }),\n resetStatus: this.store.subscribe((state, action) => {\n if (action.type !== types.RESET_STATUS) return;\n\n const { css } = this.config;\n\n this.element.classList.remove(css.valid);\n this.element.classList.remove(css.error);\n }),\n setError: this.store.subscribe((state, action) => {\n if (action.type !== types.SET_ERROR) return;\n\n const { css } = this.config;\n\n this.element.classList.remove(css.valid);\n this.element.classList.add(css.error);\n }),\n setValid: this.store.subscribe((state, action) => {\n if (action.type !== types.SET_VALID) return;\n\n const { css } = this.config;\n\n this.element.classList.remove(css.error);\n this.element.classList.add(css.valid);\n }),\n setOptions: this.store.subscribe((state, action) => {\n if (action.type !== types.SET_OPTIONS) return;\n\n this.choices.setChoices(action.payload, 'value', 'label', true);\n }),\n setOption: this.store.subscribe((state, action) => {\n if (action.type !== types.SET_OPTION) return;\n\n /* Data */\n const { multiple } = this.config;\n\n /* Set that option to choices */\n this.choices.setChoiceByValue(action.payload);\n\n /* Update UI in case of multiple */\n if (multiple) {\n if (this.element.classList.contains(configuration().css.hasItems)) return;\n\n this.element.classList.add(configuration().css.hasItems);\n }\n }),\n enable: this.store.subscribe((state, action) => {\n if (action.type !== types.ENABLE) return;\n\n /* Enable choices */\n this.choices.enable();\n\n /* Update UI */\n this.element.classList.remove(configuration().css.disabled);\n }),\n disable: this.store.subscribe((state, action) => {\n if (action.type !== types.DISABLE) return;\n\n /* Disable choices */\n this.choices.disable();\n\n /* Update UI */\n this.element.classList.add(configuration().css.disabled);\n })\n };\n\n return this;\n },\n /* Subscribe */\n subscribe() {\n if (this.subscriptions) this.unsubscribe();\n\n this.subscriptions = {\n changes: fromEvent(this.element, 'change')\n .pipe(\n switchMap(() => of(this.choices.getValue())),\n filter(data => data)\n )\n .subscribe(data => {\n /* Data */\n const { value, label } = data;\n const { multiple } = this.config;\n\n /* Set value depending on mode */\n if (multiple) {\n this.actions.selectOption(data.map(item => ({ value: item.value, label: item.label })));\n\n if (data.length > 0) {\n if (this.element.classList.contains(configuration().css.hasItems)) return;\n\n this.element.classList.add(configuration().css.hasItems);\n } else {\n this.element.classList.remove(configuration().css.hasItems);\n }\n } else {\n /* Dispatch action to set value */\n this.actions.selectOption({ value, label });\n }\n }),\n showDropdown: fromEvent(this.element, 'showDropdown').subscribe(() => {\n /* Utils */\n const { fixSelectedChoice } = Utils(this);\n\n /**\n * Fix selected issue\n */\n fixSelectedChoice();\n })\n };\n\n return this;\n },\n /* Unsubscribe */\n unsubscribe() {\n if (!this.subscriptions) return this;\n\n [...Object.keys(this.subscriptions)].forEach(key => this.subscriptions[key].unsubscribe());\n\n return this;\n },\n /* Start */\n start() {\n if (!this.config.start) return this;\n\n const { items, value = false, multiple, disabled } = this.config;\n\n /* Set options meta items */\n if (!items) return this;\n\n /* Options */\n this.actions.setOptions(items);\n\n if (multiple) {\n setDataMultiple(this);\n } else {\n setDataSingle(this);\n }\n\n /**\n * In case we have a specified value above the default on choices\n * we have to override it so we have the flexibility to have\n * a unique item set for multiple usages with custom values on\n * each select\n */\n if (value) {\n this.actions.setOption(value);\n }\n\n if (disabled) {\n this.actions.disable();\n }\n\n return this;\n },\n /* Init */\n init() {\n /* Pairing label */\n this.setPairing();\n\n /* Setup choices */\n this.setupChoices();\n\n /* Setup store */\n this.setupStore();\n\n /* Setup actions */\n this.setupActions();\n\n /* Setup reactions */\n this.setupReactions();\n\n /* Subscribe */\n this.subscribe();\n\n /* Loader */\n initLoader(this);\n\n /* Start */\n this.start();\n }\n};\n\n/* Exports */\nmodule.exports = prototype;\n","/* ==========================================================================\n Tooltip > Client > Popper\n ========================================================================== */\n\n/* Modules */\nconst { createPopper } = require('@popperjs/core');\n\n/* Init */\nfunction initPopper(instance) {\n /* Trigger */\n const { trigger = false, placement, offset } = instance.config;\n\n if (!trigger) {\n return;\n }\n\n const panel = instance;\n\n /* Element */\n const { element } = instance;\n\n panel.popper = createPopper(trigger, element, {\n placement,\n modifiers: [\n {\n name: 'offset',\n options: {\n offset\n }\n }\n ]\n });\n}\n\n/* Destroy */\nfunction destroyPopper(instance) {\n /* Trigger */\n const { trigger = false } = instance.config;\n\n if (!trigger) {\n return;\n }\n\n const panel = instance;\n\n instance.popper.destroy();\n delete panel.popper;\n}\n\n/* Exports */\nmodule.exports = {\n initPopper,\n destroyPopper\n};\n","/* ==========================================================================\n SearcherCar > Client > Origin\n ========================================================================== */\n\n/* Modules */\nconst Autocomplete = require('@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js');\n\n/* eslint-disable */\nconst AutocompleteActions = require('@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js/store/actions');\n/* eslint-enable */\n\nconst { actions } = require('../store/actions');\n\nconst configuration = require('../config');\n\n/* Init */\nfunction initOrigin(instance) {\n const panel = instance;\n\n /* Actions */\n panel.actions = {\n ...instance.actions,\n changeOrigin: payload => {\n return instance.store.dispatch(actions.changeOrigin(payload));\n }\n };\n\n /* Selector */\n const { selector } = instance;\n\n /* Reference */\n panel.origin = Autocomplete(\n `${selector} [data-component='AutocompleteRxjs'][data-type='${configuration().type.origin}']`\n );\n\n /* Reactions */\n panel.reactions = {\n ...instance.reactions,\n changeOrigin: instance.origin.store.subscribe((_, action) => {\n if (action.type !== AutocompleteActions.types.CHANGE_VALUE) return;\n\n /* Dispatch */\n instance.actions.changeOrigin(action.payload);\n instance.origin.actions.resetStatus();\n }),\n clearOrigin: instance.origin.store.subscribe((_, action) => {\n if (action.type !== AutocompleteActions.types.CLEAR) return;\n\n /* Dispatch */\n instance.actions.setOrigin(null);\n instance.origin.actions.setError();\n })\n };\n\n /* Start */\n const { value } = instance.origin.store.select('autocomplete');\n\n if (!value) {\n return;\n }\n\n /* Sync */\n instance.actions.setOrigin(value);\n instance.origin.actions.resetStatus();\n}\n\n/* Destroy */\nfunction destroyOrigin(instance) {\n const panel = instance;\n\n instance.reactions.changeOrigin.unsubscribe();\n delete panel.reactions.changeOrigin;\n\n instance.reactions.clearOrigin.unsubscribe();\n delete panel.reactions.clearOrigin;\n\n instance.origin.actions.destroy();\n delete panel.origin;\n\n delete panel.actions.changeOrigin;\n}\n\n/* Exports */\nmodule.exports = {\n initOrigin,\n destroyOrigin\n};\n","/* ==========================================================================\n AutocompleteRxjs > Client > Prototype\n ========================================================================== */\n\n/* Import modules */\nconst { Store } = require('@bluekiri/alexandria/helpers/state');\n\nconst { fromEvent } = require('rxjs');\nconst { debounceTime, map, tap, distinctUntilChanged, filter, switchMap } = require('rxjs/operators');\n\nconst { actions, types } = require('./store/actions');\nconst { reducer } = require('./store/reducer');\n\nconst { startSuggestions, destroySuggestions } = require('./suggestions');\nconst { startInput } = require('./input');\nconst { initLoader, destroyLoader } = require('./loader');\n\nconst Services = require('./services');\n\nconst { NO_OPEN_SUGGESTIONS_KEYS } = require('../../constants');\n\n/* Prototype */\nconst prototype = {\n /* Pairing label */\n setPairing() {\n if (this.hooks.label) {\n this.hooks.input.setAttribute('id', this.id);\n this.hooks.label.setAttribute('for', this.id);\n }\n return this;\n },\n\n /* Setup store */\n setupStore() {\n if (this.store) return this;\n\n this.store = new Store({\n autocomplete: reducer\n });\n\n return this;\n },\n /* Setup actions */\n setupActions() {\n if (this.actions) return this;\n\n this.actions = {\n clear: () => this.store.dispatch(actions.clear()),\n destroy: () => this.store.dispatch(actions.destroy()),\n disable: () => this.store.dispatch(actions.disable()),\n display: () => this.store.dispatch(actions.display()),\n setUiState: data => this.store.dispatch(actions.setUiState(data)),\n enable: () => this.store.dispatch(actions.enable()),\n hide: () => this.store.dispatch(actions.hide()),\n setQuery: query => this.store.dispatch(actions.setQuery(query)),\n setValue: data => this.store.dispatch(actions.setValue(data))\n };\n\n return this;\n },\n /* Setup reactions */\n setupReactions() {\n if (this.reactions) return this;\n\n this.reactions = {\n destroy: this.store.subscribe((state, action) => {\n if (action.type !== types.DESTROY) return;\n\n /* Destroy components */\n destroySuggestions(this);\n destroyLoader(this);\n\n /* Unsubscribe */\n this.unsubscribe();\n [...Object.keys(this.reactions)].forEach(key => this.reactions[key].unsubscribe());\n\n /* Clean DOM */\n this.element.parentNode.removeChild(this.element);\n\n /* Clean reference */\n [...Object.keys(this)].forEach(key => delete this[key]);\n }),\n\n setValue: this.store.subscribe((state, action) => {\n if (action.type !== types.SET_VALUE) return;\n\n /* Data */\n const { text } = action.payload;\n const { active } = this.store.select('autocomplete');\n\n /* Update input */\n this.hooks.input.value = text;\n\n if (active) return;\n\n /* Toggle active */\n this.actions.toggleActive();\n }),\n disable: this.store.subscribe((state, action) => {\n if (action.type !== types.DISABLE) return;\n\n const { css } = this.config;\n this.element.classList.add(css.disabled);\n this.hooks.input.setAttribute('disabled', '');\n }),\n enable: this.store.subscribe((state, action) => {\n if (action.type !== types.ENABLE) return;\n\n const { css } = this.config;\n this.element.classList.remove(css.disabled);\n this.hooks.input.removeAttribute('disabled');\n }),\n hide: this.store.subscribe((state, action) => {\n if (action.type !== types.HIDE) return;\n\n const { css } = this.config;\n this.element.classList.add(css.hidden);\n }),\n display: this.store.subscribe((state, action) => {\n if (action.type !== types.DISPLAY) return;\n\n const { css } = this.config;\n this.element.classList.remove(css.hidden);\n })\n };\n\n return this;\n },\n /* Subscribe */\n subscribe() {\n if (this.subscriptions) this.unsubscribe();\n\n /* Build service */\n const { getSuggestions } = Services(this.config);\n\n this.subscriptions = {\n keyups: fromEvent(this.hooks.input, 'keyup')\n .pipe(\n tap(event => event.stopPropagation()),\n filter(event => !NO_OPEN_SUGGESTIONS_KEYS.some(key => key === event.keyCode)),\n map(event => event.target.value),\n distinctUntilChanged(),\n debounceTime(200),\n tap(value => {\n /* Close suggestions */\n const { openSuggestions } = this.store.select('autocomplete');\n if (value && value.length < this.config.threshold && openSuggestions)\n this.actions.closeSuggestions();\n }),\n filter(value => !!value && value.length >= this.config.threshold),\n tap(value => this.actions.setQuery(value)),\n switchMap(getSuggestions)\n )\n .subscribe(data => {\n /* Data */\n const { limit, hasAllAirpots, hasAllStations } = this.config;\n const { d = [], error: queryError } = data;\n const { error } = this.store.select('autocomplete');\n\n /* Set error */\n if (queryError) {\n if (!error) this.actions.setError();\n this.actions.closeSuggestions();\n\n return;\n }\n\n /* Remove error */\n if (error) this.actions.resetStatus();\n\n const list = !hasAllAirpots ? d.filter(item => item.id.split('-')[0] !== 'AEC') : d;\n const listFinal = !hasAllStations ? list.filter(item => item.id.split('-')[0] !== 'ESC') : list;\n\n /* Dispatch action to set suggestions */\n this.actions.setSuggestions(listFinal.slice(0, limit));\n }),\n document: fromEvent(window.document, 'click')\n .pipe(\n filter(event => !event.target.closest(`${this.selector}`)),\n filter(() => this.store.select('autocomplete').openSuggestions),\n map(() => {\n const { suggestions, openSuggestions } = this.store.select('autocomplete');\n\n return { suggestions, openSuggestions };\n })\n )\n .subscribe(() => {\n /* Close suggestions and sync input value on click outside */\n this.actions.closeSuggestions();\n this.actions.syncValue();\n })\n };\n\n return this;\n },\n /* Unsubscribe */\n unsubscribe() {\n if (!this.subscriptions) return this;\n\n [...Object.keys(this.subscriptions)].forEach(key => this.subscriptions[key].unsubscribe());\n\n return this;\n },\n /* Start */\n start() {\n if (!this.config.start) return this;\n\n /* Start logic */\n const { value, hidden, active, disabled, isLoading } = this.config;\n\n /* Sync store */\n this.actions.setUiState({ hidden, active, disabled, isLoading });\n\n if (disabled) this.actions.disable();\n\n if (!value) return this;\n\n /* Dispatch action */\n this.actions.setValue(value);\n\n return this;\n },\n /* Init */\n init() {\n if (!this.config.init) return this;\n\n /* Set pairing */\n this.setPairing();\n\n /* Setup store */\n this.setupStore();\n\n /* Setup actions */\n this.setupActions();\n\n /* Setup reactions */\n this.setupReactions();\n\n /* Subscribe */\n this.subscribe();\n\n /* Start */\n startInput(this);\n startSuggestions(this);\n initLoader(this);\n\n this.start();\n\n return this;\n }\n};\n\n/* Exports */\nmodule.exports = prototype;\n","/* ==========================================================================\n SelectRxjs > Client\n ========================================================================== */\n\n/* Import modules */\nconst { elementExist } = require('@bluekiri/alexandria/helpers/domHelpers');\nconst { randomId } = require('@bluekiri/alexandria/helpers/dataHelpers');\n\nconst prototype = require('./prototype');\nconst config = require('./config');\n\n/**\n * SelectRxjs component\n * @param {selector} String selector for the component in the client side.\n */\nmodule.exports = function SelectRxjs(selector = '[data-component=SelectRxjs]', configuration = {}) {\n if (elementExist(selector)) {\n /* Instance */\n const instance = Object.create(prototype);\n\n /* Element */\n instance.element = document.querySelector(selector);\n\n /* Hooks */\n instance.hooks = {\n select: instance.element.querySelector('select'),\n label: instance.element.querySelector('label')\n };\n\n /* ID for pairing */\n instance.id = randomId(randomId('select'));\n\n /* Config */\n instance.config = {\n ...config(),\n ...configuration,\n ...(function getConfig() {\n if (!instance.element.dataset.config) return '';\n\n const result = JSON.parse(instance.element.dataset.config);\n instance.element.dataset.config = '';\n return result;\n })()\n };\n\n /* Init */\n if (instance.config.init) instance.init();\n\n /* Return */\n return instance;\n }\n};\n","/* ==========================================================================\n AutocompleteRxjs > Client > constants\n ========================================================================== */\nconst CODE_ARROW_DOWN = 40;\nconst CODE_ARROW_UP = 38;\nconst CODE_ENTER = 13;\nconst CODE_ESC = 27;\nconst CODE_TAB = 9;\n\n/* Exports */\nmodule.exports = {\n APPENDTOPARENT: true,\n GEOLOCATION: false,\n ICONS: {\n AER: 'plane',\n BUS: 'bus',\n CIU: 'building',\n EST: 'train',\n FLIGHTS_COMPANY: 'plane',\n HOT: 'hotel',\n ISL: 'beach',\n PDI: 'marker',\n PUE: 'ferry',\n ZON: 'marker'\n },\n KEY_ARROW_DOWN: CODE_ARROW_DOWN,\n KEY_ARROW_UP: CODE_ARROW_UP,\n KEY_ENTER: CODE_ENTER,\n KEY_ESC: CODE_ESC,\n KEY_TAB: CODE_TAB,\n LIMIT: 120,\n MAX: 20,\n NO_OPEN_SUGGESTIONS_KEYS: [CODE_ENTER, CODE_ESC, CODE_TAB],\n PLACEMENT: 'bottom-start',\n SUGGESTIONS_KEYS: [CODE_ARROW_DOWN, CODE_ARROW_UP, CODE_ENTER, CODE_ESC, CODE_TAB],\n THRESHOLD: 3,\n LOADER_TEMPLATE: '
'\n};\n","/* ==========================================================================\n CalendarRxjs > Client > Prototype\n ========================================================================== */\n\n/* Modules */\nconst flatpickr = require('flatpickr').default;\nconst ConfirmDatePlugin = require('flatpickr/dist/plugins/confirmDate/confirmDate');\n\nconst { Store } = require('@bluekiri/alexandria/helpers/state');\n\nconst { fromEvent, of } = require('rxjs');\nconst { switchMap, filter } = require('rxjs/operators');\n\nconst { actions, types } = require('./store/actions');\nconst { reducer } = require('./store/reducer');\n\nconst { addClear, destroyClear } = require('./clear');\n\nconst { isMobile, isModeRange, isModeSingle, isModeTime } = require('./helpers');\n\n/**\n * Set language\n * Imports and configure the language locale\n * to the flatpickr library with its l10n files\n * @param {string} Language\n */\nfunction setLanguage(language) {\n const { Spanish } = module.require('flatpickr/dist/l10n/es');\n const { German } = module.require('flatpickr/dist/l10n/de');\n const { French } = module.require('flatpickr/dist/l10n/fr');\n const { Russian } = module.require('flatpickr/dist/l10n/ru');\n const { Portuguese } = module.require('flatpickr/dist/l10n/pt');\n const { Finnish } = module.require('flatpickr/dist/l10n/fi');\n const { Italian } = module.require('flatpickr/dist/l10n/it');\n\n this.languages = {\n es: Spanish,\n pt: Portuguese,\n it: Italian,\n de: German,\n fr: French,\n br: Portuguese,\n fi: Finnish,\n mx: Spanish,\n ru: Russian\n };\n\n flatpickr.localize(this.languages[language.toLowerCase()]);\n}\n\n/**\n * Set flatpickr range\n */\nfunction flatpickrRangeConfig(data = {}) {\n const { dates = [] } = data;\n\n return {\n defaultDate: dates,\n mode: 'range'\n };\n}\n\n/**\n * Set flatpickr single\n */\nfunction flatpickrSingleConfig(data = {}) {\n const { dates = [] } = data;\n\n return {\n defaultDate: dates.slice(0, 1),\n mode: 'single'\n };\n}\n\n/**\n * Set flatpickr time\n */\nfunction flatpickrTimeConfig(data = {}) {\n const { dates = [], minTime, maxTime } = data;\n\n return {\n dateFormat: 'D, j M Y H:i',\n defaultDate: dates.slice(0, 1),\n enableTime: true,\n minuteIncrement: 30,\n mode: 'single',\n noCalendar: false,\n showMonths: 1,\n time_24hr: true,\n minTime,\n maxTime,\n plugins: [\n new ConfirmDatePlugin({\n confirmIcon: '',\n confirmText: 'OK'\n })\n ]\n };\n}\n\n/**\n * Resolver flatpickr config\n */\nfunction resolveFlatpickrConfig(data = {}, mode = '') {\n if (!isModeRange(mode) && !isModeSingle(mode) && !isModeTime(mode)) {\n return flatpickrRangeConfig(data);\n }\n\n if (isModeRange(mode)) return flatpickrRangeConfig(data);\n\n if (isModeSingle(mode)) return flatpickrSingleConfig(data);\n\n return flatpickrTimeConfig(data);\n}\n\n/* Prototype */\nconst prototype = {\n /* Setup flatpickr */\n setupFlatpickr(params = {}) {\n /* Data */\n const { context = {} } = this.config;\n const { device, language } = context;\n\n const {\n minTime,\n maxTime,\n minDate,\n maxDate,\n mode,\n disable = [],\n showMonths = isMobile(device) ? 1 : 2\n } = this.config;\n\n /* Config */\n const config = {\n showMonths,\n ...resolveFlatpickrConfig(\n {\n minTime,\n maxTime\n },\n mode\n ),\n ...params\n };\n\n /* Setup language locale */\n setLanguage(language);\n\n const disableParsed = disable\n ? disable.map(d => {\n return Object.keys(d)\n .map((k, i) => {\n return {\n [k]: new Date(Object.values(d)[i])\n };\n })\n .reduce((a, b) => ({ ...a, ...b }));\n })\n : [];\n\n this.fp = flatpickr(this.hooks.input, {\n init: true,\n dateFormat: 'D, j M Y',\n locale: {\n rangeSeparator: ' → ',\n firstDayOfWeek: 1 // start week on Monday\n },\n minDate: !minDate ? 'today' : new Date(minDate),\n maxDate: !maxDate ? new Date().fp_incr(365 * 2) : new Date(maxDate),\n static: true,\n disableMobile: true,\n disable: disableParsed,\n ...this.config.fp,\n ...config\n });\n },\n\n /* Pairing label */\n setPairing() {\n if (this.hooks.label) {\n this.hooks.input.setAttribute('id', this.id);\n this.hooks.label.setAttribute('for', this.id);\n }\n\n return this;\n },\n\n /* Setup store */\n setupStore() {\n if (this.store) return this;\n\n this.store = new Store({\n calendar: reducer\n });\n\n return this;\n },\n /* Setup actions */\n setupActions() {\n if (this.actions) return this;\n\n this.actions = {\n destroy: () => this.store.dispatch(actions.destroy()),\n disable: () => this.store.dispatch(actions.disable()),\n display: () => this.store.dispatch(actions.display()),\n enable: () => this.store.dispatch(actions.enable()),\n hide: () => this.store.dispatch(actions.hide()),\n resetStatus: () => this.store.dispatch(actions.resetStatus()),\n setError: () => this.store.dispatch(actions.setError()),\n setMode: (mode = String) => this.store.dispatch(actions.setMode(mode)),\n setValid: () => this.store.dispatch(actions.setValid()),\n toggleActive: () => this.store.dispatch(actions.toggleActive()),\n setValue: value => this.store.dispatch(actions.setValue(value)),\n changeValue: value => this.store.dispatch(actions.changeValue(value))\n };\n\n return this;\n },\n /* Setup reactions */\n setupReactions() {\n if (this.reactions) return this;\n\n this.reactions = {\n destroy: this.store.subscribe((state, action) => {\n if (action.type !== types.DESTROY) return;\n\n /* Data */\n const { hasClear } = this.config;\n\n /* Flatpickr destroy */\n this.fp.destroy();\n\n /* Clear destroy */\n if (hasClear) {\n if (this.clear) {\n destroyClear(this);\n }\n }\n\n /* Unsubscribe */\n this.unsubscribe();\n\n /* Remove from DOM */\n this.element.parentNode.removeChild(this.element);\n\n /* Clean instance */\n [...Object.keys(this)].forEach(key => delete this[key]);\n }),\n disable: this.store.subscribe((state, action) => {\n if (action.type !== types.DISABLE) return;\n\n const { css } = this.config;\n this.element.classList.add(css.disabled);\n this.hooks.input.setAttribute('disabled', '');\n }),\n display: this.store.subscribe((state, action) => {\n if (action.type !== types.DISPLAY) return;\n\n const { css } = this.config;\n this.element.classList.remove(css.hidden);\n }),\n enable: this.store.subscribe((state, action) => {\n if (action.type !== types.ENABLE) return;\n\n const { css } = this.config;\n this.element.classList.remove(css.disabled);\n this.hooks.input.removeAttribute('disabled');\n }),\n hide: this.store.subscribe((state, action) => {\n if (action.type !== types.HIDE) return;\n\n const { css } = this.config;\n this.element.classList.add(css.hidden);\n }),\n resetStatus: this.store.subscribe((state, action) => {\n if (action.type !== types.RESET_STATUS) return;\n\n const { css } = this.config;\n this.element.classList.remove(css.valid);\n this.element.classList.remove(css.error);\n }),\n setError: this.store.subscribe((state, action) => {\n if (action.type !== types.SET_ERROR) return;\n\n const { css } = this.config;\n this.element.classList.remove(css.valid);\n this.element.classList.add(css.error);\n }),\n setMode: this.store.subscribe((state, action) => {\n if (action.type !== types.SET_MODE) return;\n\n if (!isModeRange(action.payload) && !isModeSingle(action.payload) && !isModeTime(action.payload)) {\n return;\n }\n\n /* Current dates to pass to new instance */\n const dates = this.fp.selectedDates || [];\n\n const { minTime, maxTime, disable } = this.config;\n\n /* Destroy current flatpickr */\n this.fp.destroy();\n\n /* Recreate fp with new config */\n this.setupFlatpickr(\n resolveFlatpickrConfig(\n {\n minTime,\n maxTime,\n disable,\n dates\n },\n action.payload\n )\n );\n }),\n setValid: this.store.subscribe((state, action) => {\n if (action.type !== types.SET_VALID) return;\n\n const { css } = this.config;\n this.element.classList.remove(css.error);\n this.element.classList.add(css.valid);\n }),\n toggleActive: this.store.subscribe((state, action) => {\n if (action.type !== types.TOGGLE_ACTIVE) return;\n\n const { active } = this.store.select('calendar');\n const { css } = this.config;\n\n if (active) {\n this.element.classList.add(css.active);\n } else {\n this.element.classList.remove(css.active);\n }\n }),\n setValue: this.store.subscribe((state, action) => {\n if (action.type !== types.SET_VALUE) return;\n\n /* Data */\n const { active } = state.calendar;\n const { isAlternative, hasClear } = this.config;\n\n /* Set data to the library */\n this.fp.setDate(action.payload);\n\n /* Active */\n if (!isAlternative && !active) this.actions.toggleActive();\n\n /* Clear */\n if (!hasClear) return;\n\n if (!this.clear) {\n addClear(this);\n }\n }),\n changeValue: this.store.subscribe((state, action) => {\n if (action.type !== types.CHANGE_VALUE) return;\n\n /* Data */\n const { active } = state.calendar;\n const { isAlternative, hasClear } = this.config;\n\n /* Active */\n if (!isAlternative && !active) this.actions.toggleActive();\n\n /* Clear */\n if (!hasClear) return;\n\n if (!this.clear) {\n addClear(this);\n }\n })\n };\n\n return this;\n },\n /* Subscribe */\n subscribe() {\n if (this.subscriptions) this.unsubscribe();\n\n this.subscriptions = {\n focusIn$: fromEvent(this.element, 'focusin').subscribe(() => {\n const { active } = this.store.select('calendar');\n\n if (!active && !this.config.isAlternative) this.actions.toggleActive();\n }),\n focusOut$: fromEvent(this.element, 'focusout').subscribe(() => {\n const { active } = this.store.select('calendar');\n const { value } = this.hooks.input;\n\n if (active && !value && !this.config.isAlternative) this.actions.toggleActive();\n }),\n change$: fromEvent(this.element, 'change')\n .pipe(\n switchMap(() => of(this.fp.selectedDates)),\n filter(data => {\n const { mode } = this.store.select('calendar');\n\n if (isModeRange(mode)) {\n return data.length > 1;\n }\n\n return data.length === 1;\n })\n )\n .subscribe(data => {\n /* Dispatch update store */\n this.actions.changeValue(data);\n })\n };\n },\n /* Unsubscribe */\n unsubscribe() {\n if (!this.subscriptions) return this;\n\n [...Object.keys(this.subscriptions)].forEach(key => this.subscriptions[key].unsubscribe());\n\n return this;\n },\n /* Start */\n start() {\n if (!this.config.start) return this;\n\n /* Init data */\n const { startDate, endDate, mode = 'range' } = this.config;\n\n /* Set mode */\n this.actions.setMode(mode);\n\n if (!startDate && !endDate) return this;\n\n /* Start dates */\n if (isModeRange(mode)) {\n this.actions.setValue([new Date(startDate), new Date(endDate)]);\n } else {\n this.actions.setValue(new Date(startDate));\n }\n\n return this;\n },\n /* Init */\n init() {\n /* Setup flatpickr */\n this.setupFlatpickr();\n\n /* Set pairing */\n this.setPairing();\n\n /* Setup store */\n this.setupStore();\n\n /* Setup actions */\n this.setupActions();\n\n /* Setup reactions */\n this.setupReactions();\n\n /* Subscribe */\n this.subscribe();\n\n /* Start */\n this.start();\n }\n};\n\n/* Exports */\nmodule.exports = prototype;\n","/* ==========================================================================\n AutocompleteRxjs > Client > Store > Actions\n ========================================================================== */\n\n/* Types */\n\nconst CHANGE_VALUE = 'AUTOCOMPLETE::CHANGE_VALUE';\nconst CLEAR = 'AUTOCOMPLETE::CLEAR';\nconst CLOSE_SUGGESTIONS = 'AUTOCOMPLETE::CLOSE_SUGGESTIONS';\nconst DESTROY = 'AUTOCOMPLETE::DESTROY';\nconst DISABLE = 'AUTOCOMPLETE::DISABLE';\nconst DISPLAY = 'AUTOCOMPLETE::DISPLAY';\nconst ENABLE = 'AUTOCOMPLETE::ENABLE';\nconst HIDE = 'AUTOCOMPLETE::HIDE';\nconst OPEN_SUGGESTIONS = 'AUTOCOMPLETE::OPEN_SUGGESTIONS';\nconst RESET_STATUS = 'AUTOCOMPLETE::RESET_STATUS';\nconst SET_UI_STATE = 'AUTOCOMPLETE::SET_UI_STATE';\nconst SET_ERROR = 'AUTOCOMPLETE::SET_ERROR';\nconst SET_QUERY = 'AUTOCOMPLETE::SET_QUERY';\nconst SET_SUGGESTIONS = 'AUTOCOMPLETE::SET_SUGGESTIONS';\nconst SET_VALID = 'AUTOCOMPLETE::SET_VALID';\nconst SET_VALUE = 'AUTOCOMPLETE::SET_VALUE';\nconst SYNC_VALUE = 'AUTOCOMPLETE::SYNC_VALUE';\nconst TOGGLE_ACTIVE = 'AUTOCOMPLETE::TOGGLE_ACTIVE';\nconst TOGGLE_LOADING = 'AUTOCOMPLETE::TOGGLE_LOADING';\n\n/* Actions */\n\nconst changeValue = payload => ({ type: CHANGE_VALUE, payload });\nconst clear = () => ({ type: CLEAR });\nconst closeSuggestions = () => ({ type: CLOSE_SUGGESTIONS });\nconst destroy = () => ({ type: DESTROY });\nconst disable = () => ({ type: DISABLE });\nconst display = () => ({ type: DISPLAY });\nconst enable = () => ({ type: ENABLE });\nconst hide = () => ({ type: HIDE });\nconst openSuggestions = payload => ({ type: OPEN_SUGGESTIONS, payload });\nconst resetStatus = () => ({ type: RESET_STATUS });\nconst setUiState = payload => ({ type: SET_UI_STATE, payload });\nconst setError = () => ({ type: SET_ERROR });\nconst setQuery = payload => ({ type: SET_QUERY, payload });\nconst setSuggestions = payload => ({ type: SET_SUGGESTIONS, payload });\nconst setValid = () => ({ type: SET_VALID });\nconst setValue = payload => ({ type: SET_VALUE, payload });\nconst syncValue = () => ({ type: SYNC_VALUE });\nconst toggleActive = () => ({ type: TOGGLE_ACTIVE });\nconst toggleLoading = () => ({ type: TOGGLE_LOADING });\n\n/* Exports */\nmodule.exports = {\n types: {\n CHANGE_VALUE,\n CLEAR,\n CLOSE_SUGGESTIONS,\n DESTROY,\n DISABLE,\n DISPLAY,\n ENABLE,\n HIDE,\n OPEN_SUGGESTIONS,\n RESET_STATUS,\n SET_UI_STATE,\n SET_ERROR,\n SET_QUERY,\n SET_SUGGESTIONS,\n SET_VALID,\n SET_VALUE,\n SYNC_VALUE,\n TOGGLE_ACTIVE,\n TOGGLE_LOADING\n },\n actions: {\n changeValue,\n clear,\n closeSuggestions,\n destroy,\n disable,\n display,\n enable,\n hide,\n openSuggestions,\n resetStatus,\n setUiState,\n setError,\n setQuery,\n setSuggestions,\n setValid,\n setValue,\n syncValue,\n toggleActive,\n toggleLoading\n }\n};\n","/* ==========================================================================\n LoadingInformationRxjs > Client > Config\n ========================================================================== */\n\n/* Import modules */\n\n/* Config */\nconst config = {\n component: 'LoadingInformationRxjs',\n init: true,\n css: {\n image: 'm-loading-information__image'\n },\n image: {\n src: '/comun/images/shim.gif',\n resize: {\n height: 220,\n width: 450,\n quality: 97\n }\n }\n};\n\nmodule.exports = () => config;\n","/* ==========================================================================\n CheckboxRxjs > Client\n ========================================================================== */\n\n/* Import modules */\nconst { elementExist } = require('@bluekiri/alexandria/helpers/domHelpers');\nconst { randomId } = require('@bluekiri/alexandria/helpers/dataHelpers');\n\nconst prototype = require('./prototype');\nconst config = require('./config');\n\n/**\n * CheckboxRxjs component\n * @param {selector} String selector for the component in the client side.\n */\nmodule.exports = function CheckboxRxjs(selector = '[data-component=CheckboxRxjs]', configuration = {}) {\n if (elementExist(selector)) {\n /* Instance */\n const instance = Object.create(prototype);\n\n /* Element */\n instance.element = document.querySelector(selector);\n\n /* Hooks */\n instance.hooks = {\n input: instance.element.querySelector('input'),\n label: instance.element.querySelector('label')\n };\n\n /* ID for pairing */\n instance.id = randomId(randomId('checkbox'));\n\n /* Config */\n instance.config = {\n ...config(),\n ...configuration,\n ...(function getConfig() {\n if (!instance.element.dataset.config) return '';\n\n const result = JSON.parse(instance.element.dataset.config);\n instance.element.dataset.config = '';\n return result;\n })()\n };\n\n /* Init */\n instance.init();\n\n /* Return */\n return instance;\n }\n};\n","/* ==========================================================================\n Tooltip > Client > Config\n ========================================================================== */\n\n/* Import modules */\n\n/* Config */\nconst config = {\n component: 'Tooltip',\n init: true,\n start: true,\n css: {},\n type: {},\n offset: [0, 8]\n};\n\nmodule.exports = () => config;\n","/* ==========================================================================\n LoadingInformationRxjs > Client\n ========================================================================== */\n\n/* Import modules */\nconst { elementExist } = require('@bluekiri/alexandria/helpers/domHelpers');\n\nconst prototype = require('./prototype');\nconst config = require('./config');\n\n/**\n * LoadingInformationRxjs component\n * @param {selector} String selector for the component in the client side.\n */\nmodule.exports = function LoadingInformationRxjs(\n selector = '[data-component=LoadingInformationRxjs]',\n configuration = {}\n) {\n if (elementExist(selector)) {\n /* Instance */\n const instance = Object.create(prototype);\n\n /* Selector */\n instance.selector = selector;\n\n /* Element */\n instance.element = document.querySelector(selector);\n\n /* Config */\n instance.config = {\n ...config(),\n ...configuration,\n ...(function getConfig() {\n if (!instance.element.dataset.config) return '';\n\n const result = JSON.parse(instance.element.dataset.config);\n instance.element.dataset.config = '';\n return result;\n })()\n };\n\n /* Init */\n if (instance.config.init) instance.init();\n\n /* Return */\n return instance;\n }\n};\n","/* ==========================================================================\n CalendarRxjs > Client > Clear\n ========================================================================== */\n\n/* Modules */\nconst { toNode } = require('@bluekiri/alexandria/helpers/domHelpers');\nconst { addData, addStyle } = require('@bluekiri/alexandria/helpers/dataHelpers');\n\nconst ButtonTemplate = require('../../../../button-rxjs/template');\nconst Button = require('../../../../button-rxjs/client/js');\n\nconst configuration = require('../config');\n\n/* Create clear */\nfunction createClear(instance) {\n /* Data */\n const { context } = instance.config;\n\n /* Template */\n const template = ButtonTemplate(\n addStyle(\n addData(\n {\n icon: configuration().icon.cancel\n },\n {\n type: configuration().type.clear\n }\n ),\n [configuration().css.clear]\n ),\n context\n );\n\n /* Node */\n const node = toNode(template)[0];\n\n /* Return */\n return node;\n}\n\n/* Add clear */\nfunction addClear(instance) {\n const panel = instance;\n\n /* Data */\n const { selector } = instance;\n\n /* Node */\n const node = createClear(instance);\n\n /* Add to DOM */\n instance.element.appendChild(node);\n\n /* Init */\n panel.clear = Button(`${selector} [data-component='ButtonRxjs'][data-type='${configuration().type.clear}']`);\n\n /* Update subscriptions */\n panel.subscriptions = {\n ...panel.subscriptions,\n clear: instance.clear.events.click$.subscribe(event => {\n event.stopPropagation();\n\n /* Clear fp */\n instance.fp.clear();\n\n /* Dispatch action to clean */\n instance.actions.setValue(null);\n\n /* Destroy clear */\n destroyClear(instance);\n })\n };\n\n /* Animate */\n setTimeout(() => instance.clear.element.classList.add('is-visible'), 50);\n}\n\n/* Destroy clear */\nfunction destroyClear(instance) {\n const panel = instance;\n\n /* Destroy */\n instance.clear.actions.destroy();\n\n /* Clean subscriptions */\n instance.subscriptions.clear.unsubscribe();\n delete panel.subscriptions.clear;\n\n /* Clean reference */\n delete panel.clear;\n}\n\n/* Exports */\nmodule.exports = {\n addClear,\n destroyClear\n};\n","/* ==========================================================================\n AutocompleteRxjs > Templates > TooltipPanel\n ========================================================================== */\n\n/* Modules */\nconst { html } = require('common-tags');\n\nconst { PLACEMENT } = require('../constants');\nconst configuration = require('../client/js/config');\n\nconst {\n hooks: { panelContent: hookPanelContent, suggestion: hookSuggestions }\n} = configuration();\n\n/**\n * Rating template\n * @param {object} data Object containing the data model for this component.\n * @param {object} context The general context object.\n * @returns {object} Additional data to have available in the template\n */\n\nmodule.exports = function Template(data, context = {}) {\n const { content = '', type, placement = PLACEMENT } = data;\n\n return html(`\n `);\n};\n","/* ==========================================================================\n SearcherCar > Client > Utils > Validation\n ========================================================================== */\n\nconst validateAge = instance => {\n const { age } = instance.store.select('data');\n\n if (!age) {\n instance.age.actions.setError();\n\n return false;\n }\n\n return true;\n};\n\nconst validateCalendarDestination = instance => {\n const { calendarDestination } = instance.store.select('data');\n\n if (!calendarDestination) {\n instance.calendarDestination.actions.setError();\n\n return false;\n }\n\n return true;\n};\n\nconst validateCalendarOrigin = instance => {\n const { calendarOrigin } = instance.store.select('data');\n\n if (!calendarOrigin) {\n instance.calendarOrigin.actions.setError();\n\n return false;\n }\n\n return true;\n};\n\nconst validateOrigin = instance => {\n const { origin } = instance.store.select('data');\n\n if (!origin) {\n instance.origin.actions.setError();\n\n return false;\n }\n\n return true;\n};\n\nconst validateDestination = instance => {\n const { destination, returnAtOrigin } = instance.store.select('data');\n\n if (returnAtOrigin) {\n return true;\n }\n\n if (!destination) {\n instance.destination.actions.setError();\n\n return false;\n }\n\n return true;\n};\n\nconst validateTimePeriod = instance => {\n const { calendarOrigin = {}, calendarDestination = {} } = instance.store.select('data');\n const { minimumTimePeriod } = instance.config;\n\n if (calendarOrigin.value && calendarDestination.value) {\n const timeDifference = Math.floor(\n (calendarDestination.value.getTime() - calendarOrigin.value.getTime()) / (60 * 60 * 1000)\n );\n\n if (timeDifference < minimumTimePeriod) {\n instance.calendarDestination.actions.setError();\n return false;\n }\n }\n\n return true;\n};\n\nfunction validate(instance) {\n if (!instance) {\n throw new Error('You have to provide the reference to the searcher');\n }\n\n const hasErrors = [\n /* Age */\n validateAge(instance),\n\n /* Calendar Destination */\n validateCalendarDestination(instance),\n\n /* Calendar Origin */\n validateCalendarOrigin(instance),\n\n /* Origin */\n validateOrigin(instance),\n\n /* Destination */\n validateDestination(instance),\n\n /* Time period */\n validateTimePeriod(instance)\n ].reduce((p, c) => p || !c, false);\n\n if (hasErrors) {\n return false;\n }\n\n return true;\n}\n\n/* Exports */\nmodule.exports = {\n validate\n};\n","/* ==========================================================================\n SearcherCar > Client > CalendarDestination\n ========================================================================== */\n\n/* Modules */\nconst Calendar = require('@bluekiri/alexandria-contrib-components/components/calendar-rxjs/client/js');\n\n/* eslint-disable */\nconst CalendarActions = require('@bluekiri/alexandria-contrib-components/components/calendar-rxjs/client/js/store/actions');\n/* eslint-enable */\nconst { toNode } = require('@bluekiri/alexandria/helpers/domHelpers');\n\nconst { actions } = require('../store/actions');\n\nconst configuration = require('../config');\n\n/* Error message */\nfunction addErrorMessage(instance, errorType) {\n const panel = instance;\n\n const { literals, minimumTimePeriod } = instance.config;\n const { returnDateError = '', minimumTimeError = '' } = literals;\n\n let errorMessage;\n switch (errorType) {\n case 1:\n errorMessage = minimumTimeError.replace('#value#', minimumTimePeriod);\n break;\n\n default:\n case 0:\n errorMessage = returnDateError;\n break;\n }\n\n const node = toNode(`
${errorMessage}
`)[0];\n\n /* Show error */\n instance.calendarDestination.element.appendChild(node);\n instance.calendarDestination.actions.setError();\n\n /* Remove error */\n panel.calendarDestinationErrorTimeout = setTimeout(() => clearErrorMessage(instance), 3000);\n}\n\n/* Remove error message */\nfunction clearErrorMessage(instance) {\n const panel = instance;\n\n if (instance.calendarDestinationErrorTimeout >= 0) {\n const element = instance.calendarDestination.element.querySelector('.searcher-car__error');\n instance.calendarDestination.element.removeChild(element);\n clearTimeout(instance.calendarDestinationErrorTimeout);\n delete panel.calendarDestinationErrorTimeout;\n }\n}\n\n/* Validate dates */\nfunction validateDates(instance) {\n const { showCalendarOrigin, showError, errorType } = getDateErrors(instance);\n\n if (showCalendarOrigin) {\n requestAnimationFrame(() => instance.calendarOrigin.fp.open());\n } else if (showError) {\n addErrorMessage(instance, errorType);\n }\n\n if (showError) {\n instance.calendarDestination.actions.setError();\n }\n}\n\nfunction getDateErrors(instance) {\n const { calendarOrigin = {}, calendarDestination = {} } = instance.store.select('data');\n const { minimumTimePeriod } = instance.config;\n\n let showCalendarOrigin = false;\n let showError = false;\n let errorType = 0;\n\n if (calendarDestination.value) {\n if (\n !calendarOrigin.value ||\n (calendarOrigin.value > calendarDestination.value && instance.calendarDestination.hooks.input.value)\n ) {\n showCalendarOrigin = true;\n showError = true;\n } else if (!instance.calendarDestination.hooks.input.value) {\n showError = true;\n } else {\n const hours = Math.floor(\n (calendarDestination.value.getTime() - calendarOrigin.value.getTime()) / (60 * 60 * 1000)\n );\n if (hours < minimumTimePeriod) {\n showError = true;\n errorType = 1;\n }\n }\n }\n\n return {\n showCalendarOrigin,\n showError,\n errorType\n };\n}\n\n/* Init */\nfunction initCalendarDestination(instance) {\n const panel = instance;\n\n /* Actions */\n panel.actions = {\n ...instance.actions,\n changeCalendarDestination: payload => {\n return instance.store.dispatch(actions.changeCalendarDestination(payload));\n }\n };\n\n /* Selector */\n const { selector } = instance;\n\n /* Reference */\n panel.calendarDestination = Calendar(\n `${selector} [data-component='CalendarRxjs'][data-type='${configuration().type.calendarDestination}']`,\n {\n showMonths: 1\n }\n );\n\n panel.calendarDestination.fp.config.onClose.push(() => validateDates(instance));\n panel.calendarDestination.fp.config.onOpen.push(() => clearErrorMessage(instance));\n panel.calendarDestination.hideError = () => clearErrorMessage(instance);\n\n /* Reactions */\n panel.reactions = {\n ...instance.reactions,\n changeCalendarDestination: instance.calendarDestination.store.subscribe((_, action) => {\n if (action.type !== CalendarActions.types.CHANGE_VALUE) return;\n\n /* Format */\n const [date, hour] = instance.calendarDestination.fp.formatDate(action.payload[0], 'Y-m-d H:i').split(' ');\n\n /* Dispatch */\n instance.actions.changeCalendarDestination({ value: action.payload[0], date, hour });\n instance.calendarDestination.actions.resetStatus();\n })\n };\n\n /* Start */\n const { value } = instance.calendarDestination.store.select('calendar');\n\n if (!value) {\n return;\n }\n\n /* Format */\n const [date, hour] = instance.calendarDestination.fp.formatDate(value, 'Y-m-d H:i').split(' ');\n\n /* Sync */\n instance.actions.setCalendarDestination({ value, date, hour });\n instance.calendarDestination.actions.resetStatus();\n}\n\n/* Destroy */\nfunction destroyCalendarDestination(instance) {\n const panel = instance;\n\n /* Remove error message */\n clearErrorMessage(instance);\n\n instance.calendarDestination.actions.destroy();\n delete panel.calendarDestination;\n\n delete panel.actions.changeCalendarDestination;\n\n instance.reactions.changeCalendarDestination.unsubscribe();\n delete panel.reactions.changeCalendarDestination;\n}\n\n/* Exports */\nmodule.exports = {\n initCalendarDestination,\n destroyCalendarDestination\n};\n","/* ==========================================================================\n SearcherCar > Client > Prototype\n ========================================================================== */\n\n/* Import modules */\nconst { Store } = require('@bluekiri/alexandria/helpers/state');\n\nconst { actions, types } = require('./store/actions');\nconst { reducer, reducerTwo } = require('./store/reducer');\n\nconst { initAge, destroyAge } = require('./age');\nconst { initCalendarDestination, destroyCalendarDestination } = require('./calendar-destination');\nconst { initCalendarOrigin, destroyCalendarOrigin } = require('./calendar-origin');\nconst { initDestination, destroyDestination } = require('./destination');\nconst { initOrigin, destroyOrigin } = require('./origin');\nconst { initReturnAtOrigin, destroyReturnAtOrigin } = require('./return-at-origin');\nconst { initOptions, destroyOptions } = require('./options');\nconst { initSubmit, destroySubmit } = require('./submit');\n\n/* Prototype */\nconst prototype = {\n /* Setup store */\n setupStore() {\n if (this.store) return this;\n\n this.store = new Store({\n data: reducer,\n dataTwo: reducerTwo\n });\n\n return this;\n },\n /* Setup actions */\n setupActions() {\n if (this.actions) return this;\n\n this.actions = {\n destroy: () => {\n return this.store.dispatch(actions.destroy());\n },\n setSearcher: payload => {\n return this.store.dispatch(actions.setSearcher(payload));\n },\n setAge: payload => {\n return this.store.dispatch(actions.setAge(payload));\n },\n setCalendarDestination: payload => {\n return this.store.dispatch(actions.setCalendarDestination(payload));\n },\n setCalendarOrigin: payload => {\n return this.store.dispatch(actions.setCalendarOrigin(payload));\n },\n setDestination: payload => {\n return this.store.dispatch(actions.setDestination(payload));\n },\n setOrigin: payload => {\n return this.store.dispatch(actions.setOrigin(payload));\n },\n setReturnAtOrigin: payload => {\n return this.store.dispatch(actions.setReturnAtOrigin(payload));\n }\n };\n\n return this;\n },\n /* Setup reactions */\n setupReactions() {\n if (this.reactions) return this;\n\n this.reactions = {\n destroy: this.store.subscribe((_, action) => {\n if (action.type !== types.DESTROY) return;\n\n /* Submit */\n destroySubmit(this);\n\n /* Age */\n destroyAge(this);\n\n /* Calendar Destination */\n destroyCalendarDestination(this);\n\n /* Calendar Origin */\n destroyCalendarOrigin(this);\n\n /* Destination */\n destroyDestination(this);\n\n /* Origin */\n destroyOrigin(this);\n\n /* Return at origin */\n destroyReturnAtOrigin(this);\n\n /* Options */\n destroyOptions(this);\n\n /* Unsubscribe */\n this.unsubscribe();\n [...Object.keys(this.reactions)].forEach(key => this.reactions[key].unsubscribe());\n\n /* Clean DOM */\n this.element.parentNode.removeChild(this.element);\n\n /* Clean reference */\n [...Object.keys(this)].forEach(key => delete this[key]);\n })\n };\n\n return this;\n },\n /* Subscribe */\n subscribe() {\n if (this.subscriptions) this.unsubscribe();\n\n this.subscriptions = {};\n\n return this;\n },\n /* Unsubscribe */\n unsubscribe() {\n if (!this.subscriptions) return this;\n\n [...Object.keys(this.subscriptions)].forEach(key => this.subscriptions[key].unsubscribe());\n\n return this;\n },\n /* Init */\n init() {\n if (!this.config.init) return this;\n\n /* Setup store */\n this.setupStore();\n\n /* Setup actions */\n this.setupActions();\n\n /* Setup reactions */\n this.setupReactions();\n\n /* Subscribe */\n this.subscribe();\n\n /* Age */\n initAge(this);\n\n /* Calendar Destination */\n initCalendarDestination(this);\n\n /* Calendar Origin */\n initCalendarOrigin(this);\n\n /* Destination */\n initDestination(this);\n\n /* Origin */\n initOrigin(this);\n\n /* Return at origin */\n initReturnAtOrigin(this);\n\n /* Options */\n initOptions(this);\n\n /* Submit */\n initSubmit(this);\n\n return this;\n }\n};\n\n/* Exports */\nmodule.exports = prototype;\n","/* ==========================================================================\n CheckboxRxjs > Client > Config\n ========================================================================== */\n\n/* Import modules */\n\n/* Config */\nconst config = {\n component: 'CheckboxRxjs',\n init: true,\n start: true,\n css: {\n error: 'has-error',\n hidden: 'is-hidden',\n valid: 'is-valid',\n disabled: 'is-disabled',\n withBorder: 'checkbox-rxjs--with-border'\n }\n};\n\nmodule.exports = () => config;\n","/* ==========================================================================\n Tooltip > Client > Prototype\n ========================================================================== */\n\n/* Import modules */\nconst { Store } = require('@bluekiri/alexandria/helpers/state');\n\nconst { actions, types } = require('./store/actions');\nconst { reducer } = require('./store/reducer');\n\nconst { initPopper, destroyPopper } = require('./popper');\n\n/* Prototype */\nconst prototype = {\n /* Setup store */\n setupStore() {\n if (this.store) return this;\n\n this.store = new Store({\n data: reducer\n });\n\n return this;\n },\n /* Setup actions */\n setupActions() {\n if (this.actions) return this;\n\n this.actions = {\n destroy: () => this.store.dispatch(actions.destroy())\n };\n\n return this;\n },\n /* Setup reactions */\n setupReactions() {\n if (this.reactions) return this;\n\n this.reactions = {\n destroy: this.store.subscribe((state, action) => {\n if (action.type !== types.DESTROY) return;\n\n /* Popper */\n destroyPopper(this);\n\n /* Unsubscribe */\n [...Object.keys(this.reactions)].forEach(key => this.reactions[key].unsubscribe());\n\n /* Clean DOM */\n this.element.parentNode.removeChild(this.element);\n\n /* Clean reference */\n [...Object.keys(this)].forEach(key => delete this[key]);\n })\n };\n\n return this;\n },\n /* Init */\n init() {\n if (!this.config.init) return this;\n\n /* Setup store */\n this.setupStore();\n\n /* Setup actions */\n this.setupActions();\n\n /* Setup reactions */\n this.setupReactions();\n\n /* Popper */\n initPopper(this);\n\n return this;\n }\n};\n\n/* Exports */\nmodule.exports = prototype;\n","/* ==========================================================================\n Tooltip > Client > Store > Reducer\n ========================================================================== */\n\n/* Modules */\nconst { types } = require('./actions');\n\n/* Initial state */\nconst initialState = {};\n\n/* Reducer */\nfunction reducer(state = initialState, action) {\n switch (action.type) {\n case types.DESTROY:\n default:\n return state;\n }\n}\n\n/* Exports */\nmodule.exports = {\n reducer\n};\n","/* ==========================================================================\n CalendarRxjs > Client > Config\n ========================================================================== */\n\n/* Import modules */\nconst { css } = require('../../../input-rxjs/client/js/config')();\n\n/* Config */\nconst config = {\n component: 'CalendarRxjs',\n init: true,\n start: true,\n events: true,\n icon: {\n calendar: 'calendar',\n cancel: 'cancel'\n },\n type: {\n clear: 'calendar-rxjs-clear'\n },\n css: {\n alternative: css.alternative,\n valid: css.valid,\n error: css.error,\n active: css.active,\n hidden: css.hidden,\n disabled: css.disabled,\n withBorder: css.withBorder,\n clear: 'calendar-rxjs__clear'\n }\n};\n\nmodule.exports = () => config;\n","/* ==========================================================================\n AutocompleteRxjs > Client > Helpers > Data\n ========================================================================== */\n\n/* Modules */\nconst { groupBy } = require('../../../../../helpers/array');\n\n/**\n * Group by type a collection of objects\n * @param {array} collection of objects\n * @return {set} grouped collection\n */\nfunction groupByType(collection) {\n if (collection.length < 1) return collection;\n\n return groupBy(\n collection.map((item, index) => ({ ...item, index })),\n item => item.type\n );\n}\n\n/**\n * Collection by group\n * Transforms a collection into the same 2 dimensional grouped by types\n * @\n */\nfunction collectionByGroup(collection) {\n if (collection.length < 1) return collection;\n\n const grouped = groupByType(collection);\n\n return [...grouped.keys()].map(key => ({ key, suggestions: grouped.get(key) }));\n}\n\n/* Exports */\nmodule.exports = {\n collectionByGroup\n};\n","/* ==========================================================================\n AutocompleteRxjs > Client > Config\n ========================================================================== */\n\n/* Import modules */\nconst { css } = require('../../../input-rxjs/client/js/config')();\n\n/* Config */\nconst config = {\n component: 'AutocompleteRxjs',\n init: true,\n start: true,\n selectionRange: true,\n hasAllAirpots: true,\n hasAllStations: true,\n css: {\n active: css.active,\n alternative: css.alternative,\n disabled: css.disabled,\n error: css.error,\n header: 'autocomplete-rxjs__header',\n hidden: css.hidden,\n keyed: 'is-keyed',\n suggestion: 'autocomplete-rxjs__suggestion',\n valid: css.valid,\n withBorder: css.withBorder,\n loading: 'is-loading'\n },\n type: {\n tooltip: 'autocomplete-suggestion-panel'\n },\n hooks: {\n panelContent: 'data-ui-panel-content',\n suggestion: 'data-suggestions',\n suggestionsList: 'data-list'\n }\n};\n\nmodule.exports = () => config;\n","/* ==========================================================================\n SearcherCar > Client > Store > Actions\n ========================================================================== */\n\n/* Types */\nconst DESTROY = 'SEARCHER_CAR::DESTROY';\n\nconst CHANGE_AGE = 'SEARCHER_CAR::CHANGE_AGE';\nconst SET_AGE = 'SEARCHER_CAR::SET_AGE';\n\nconst CHANGE_CALENDAR_DESTINATION = 'SEARCHER_CAR::CHANGE_CALENDAR_DESTINATION';\nconst SET_CALENDAR_DESTINATION = 'SEARCHER_CAR::SET_CALENDAR_DESTINATION';\n\nconst CHANGE_CALENDAR_ORIGIN = 'SEARCHER_CAR::CHANGE_CALENDAR_ORIGIN';\nconst SET_CALENDAR_ORIGIN = 'SEARCHER_CAR::SET_CALENDAR_ORIGIN';\n\nconst CHANGE_DESTINATION = 'SEARCHER_CAR::CHANGE_DESTINATION';\nconst SET_DESTINATION = 'SEARCHER_CAR::SET_DESTINATION';\n\nconst CHANGE_ORIGIN = 'SEARCHER_CAR::CHANGE_ORIGIN';\nconst SET_ORIGIN = 'SEARCHER_CAR::SET_ORIGIN';\n\nconst CHANGE_RETURN_AT_ORIGIN = 'SEARCHER_CAR::CHANGE_RETURN_AT_ORIGIN';\nconst SET_RETURN_AT_ORIGIN = 'SEARCHER_CAR::SET_RETURN_AT_ORIGIN';\n\nconst CHANGE_OPTIONS = 'SEARCHER_CAR::CHANGE_OPTIONS';\nconst SET_SEARCHER = 'SEARCHER_CAR::SET_SEARCHER';\n\n/* Actions */\nconst destroy = () => ({ type: DESTROY });\n\nconst changeAge = payload => ({ type: CHANGE_AGE, payload });\nconst setAge = payload => ({ type: SET_AGE, payload });\n\nconst changeCalendarDestination = payload => ({ type: CHANGE_CALENDAR_DESTINATION, payload });\nconst setCalendarDestination = payload => ({ type: SET_CALENDAR_DESTINATION, payload });\n\nconst changeCalendarOrigin = payload => ({ type: CHANGE_CALENDAR_ORIGIN, payload });\nconst setCalendarOrigin = payload => ({ type: SET_CALENDAR_ORIGIN, payload });\n\nconst changeDestination = payload => ({ type: CHANGE_DESTINATION, payload });\nconst setDestination = payload => ({ type: SET_DESTINATION, payload });\n\nconst changeOrigin = payload => ({ type: CHANGE_ORIGIN, payload });\nconst setOrigin = payload => ({ type: SET_ORIGIN, payload });\n\nconst changeReturnAtOrigin = payload => ({ type: CHANGE_RETURN_AT_ORIGIN, payload });\nconst setReturnAtOrigin = payload => ({ type: SET_RETURN_AT_ORIGIN, payload });\n\nconst changeOptions = payload => ({ type: CHANGE_OPTIONS, payload });\n\nconst setSearcher = payload => ({ type: SET_SEARCHER, payload });\n\n/* Exports */\nmodule.exports = {\n types: {\n DESTROY,\n CHANGE_AGE,\n SET_AGE,\n CHANGE_CALENDAR_DESTINATION,\n SET_CALENDAR_DESTINATION,\n CHANGE_CALENDAR_ORIGIN,\n SET_CALENDAR_ORIGIN,\n CHANGE_DESTINATION,\n SET_DESTINATION,\n CHANGE_ORIGIN,\n SET_ORIGIN,\n CHANGE_RETURN_AT_ORIGIN,\n SET_RETURN_AT_ORIGIN,\n CHANGE_OPTIONS,\n SET_SEARCHER\n },\n actions: {\n destroy,\n changeAge,\n setAge,\n changeCalendarDestination,\n setCalendarDestination,\n changeCalendarOrigin,\n setCalendarOrigin,\n changeDestination,\n setDestination,\n changeOrigin,\n setOrigin,\n changeReturnAtOrigin,\n setReturnAtOrigin,\n changeOptions,\n setSearcher\n }\n};\n","/* ==========================================================================\n SelectRxjs > Client > Config\n ========================================================================== */\n\n/* Import modules */\n\n/* Config */\nconst config = {\n component: 'SelectRxjs',\n init: true,\n start: true,\n events: true,\n css: {\n valid: 'is-valid',\n error: 'has-error',\n active: 'is-active',\n hidden: 'is-hidden',\n withBorder: 'select-rxjs--with-border',\n withLabel: 'select-rxjs--with-label',\n multiple: 'select-rxjs--multiple',\n hasItems: 'has-items',\n disabled: 'is-disabled',\n selected: 'is-selected',\n loading: 'is-loading'\n }\n};\n\nmodule.exports = () => config;\n","/* ==========================================================================\n AutocompleteRxjs > Client > Services\n ========================================================================== */\n\n/* Modules */\nconst { of } = require('rxjs');\nconst { catchError, switchMap } = require('rxjs/operators');\nconst { fromFetch } = require('rxjs/fetch');\n\nconst BORG_ENDPOINT = '//autocomplete.toolfactory.tech/query';\n\n/* Global variables for AbortController */\nlet controller;\n\n/* Exports */\nmodule.exports = function Services(config = {}) {\n /* Data */\n const { geolocation = false, max = 20, types = [], context, operator, codes = [] } = config;\n const { language } = context;\n\n /* Cancel the previous request */\n if (controller !== undefined) {\n controller.abort();\n }\n\n /* Feature detect */\n if ('AbortController' in window) {\n controller = new AbortController();\n }\n\n /**\n * Get suggestions\n * Params documentation:\n * q: query string to took for\n * f: format\n * g: boolean to include geolocation data\n * n: maximum number of suggestions\n * l: language\n * t: list of types\n * o: list of [codes]\n * p: operator \"OR/AND\"\n *\n * @param {string} text to look for in borg\n * @returns {JSON} data\n */\n function getSuggestions(text = '') {\n /* Build url */\n const url = BORG_ENDPOINT.concat(\n '?',\n `q=${text}`,\n `&f=json`,\n `&g=${geolocation}`,\n `&n=${max}`,\n `&l=${language}`,\n `&t=${types.join(',')}`,\n operator ? `&p=${operator}` : '',\n codes.length ? `&o=${codes.map(code => code)}` : ''\n ).trim();\n\n return fromFetch(url, {\n signal: controller.signal,\n credentials: 'same-origin',\n cache: 'no-store'\n }).pipe(\n switchMap(response => {\n if (response.ok) {\n return response.json();\n }\n return of({ error: true, message: `Error fetching results in borg ${response.statusText}` });\n }),\n catchError(err => of({ error: true, message: err.message }))\n );\n }\n\n return {\n getSuggestions\n };\n};\n","/* ==========================================================================\n SearcherCar > Client > Config\n ========================================================================== */\n\n/* Import modules */\n\n/* Config */\nconst config = {\n component: 'SearcherCar',\n init: true,\n start: true,\n css: {\n withReturnAtOrigin: 'with-return-at-origin',\n car: 'is-car'\n },\n type: {\n origin: 'searcher-car-origin',\n destination: 'searcher-car-destination',\n calendarOrigin: 'searcher-car-calendar-origin',\n calendarDestination: 'searcher-car-calendar-destination',\n age: 'searcher-car-age',\n submit: 'searcher-car-submit',\n returnAtOrigin: 'searcher-car-return-at-origin',\n loading: 'searcher-car-loading',\n options: 'searcher-car-options'\n }\n};\n\nmodule.exports = () => config;\n","/* ==========================================================================\n LoadingInformationRxjs > Client > Image\n ========================================================================== */\n\n/* Modules */\nconst Image = require('../../../../image-rxjs/client/js');\n\n/* Init image */\nfunction initImage(instance) {\n /* Data */\n const { hasImage } = instance.config;\n\n if (!hasImage) return;\n\n const inst = instance;\n\n const { selector } = instance;\n\n inst.image = Image(`${selector} [data-component='ImageRxjs']`);\n}\n\n/* Destroy image */\nfunction destroyImage(instance) {\n /* Data */\n const { hasImage } = instance.config;\n\n if (!hasImage) return;\n\n const int = instance;\n\n instance.image.actions.destroy();\n\n delete int.image;\n}\n\n/* Exports */\nmodule.exports = {\n initImage,\n destroyImage\n};\n","/* ==========================================================================\n SearcherCar > Client\n ========================================================================== */\n\n/* Import modules */\nconst { elementExist } = require('@bluekiri/alexandria/helpers/domHelpers');\n\nconst prototype = require('./prototype');\nconst config = require('./config');\n\n/**\n * SearcherCar component\n * @param {selector} String selector for the component in the client side.\n */\nmodule.exports = function SearcherCar(selector = '[data-component=SearcherCar]', configuration = {}) {\n if (elementExist(selector)) {\n /* Instance */\n const instance = Object.create(prototype);\n\n /* Selector */\n instance.selector = selector;\n\n /* Element */\n instance.element = document.querySelector(selector);\n\n /* Config */\n instance.config = {\n ...config(),\n ...configuration,\n ...(function getConfig() {\n if (!instance.element.dataset.config) return '';\n\n const result = JSON.parse(instance.element.dataset.config);\n instance.element.dataset.config = '';\n return result;\n })()\n };\n\n /* Init */\n instance.init();\n\n /* Return */\n return instance;\n }\n};\n","/* ==========================================================================\n SearcherCar > Constants\n ========================================================================== */\n\n/* Age */\nconst AGE_DEFAULT_VALUE = 30;\nconst AGE_DEFAULT_MIN_VALUE = 18;\nconst AGE_DEFAULT_MAX_VALUE = 99;\n\n/* Calendar */\nconst CALENDAR_ORIGIN_DEFAULT_DATE = new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 2)\n .toISOString()\n .split('T')[0]\n .concat('T10:00:00');\n\nconst CALENDAR_DESTINATION_DEFAULT_DATE = new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 3)\n .toISOString()\n .split('T')[0]\n .concat('T10:00:00');\n\n/* Destination */\nconst DESTINATION_DEFAULT_TYPES = ['AER', 'EST', 'PUE', 'CIU', 'ZON', 'PDI', 'HOT'];\n\n/* Origin */\nconst ORIGIN_DEFAULT_TYPES = ['AER', 'EST', 'PUE', 'CIU', 'ZON', 'PDI', 'HOT'];\n\n/* Return at origin */\nconst RETURN_AT_ORIGIN_DEFAULT_VALUE = true;\n\n/* Url */\nconst URL_DEFAULT_VALUE = '/carssaleprocess/availability';\n\n/* Minimum time */\nconst MINIMUM_TIME = 2;\n\n/* Types */\nconst AER = 1;\nconst EST = 2;\nconst PUE = 3;\nconst CIU = 4;\nconst ZON = 5;\nconst PDI = 6;\n\n/* Navigation */\nconst HAS_NAVIGATION_BACK = true;\n\nconst DIRECT = 'Direct';\nconst TOUR_OPERATOR = 'TourOperator';\nconst REFUNDABLE = 'Refundable';\nconst ETHNIC = 'Ethnic';\n\n/* Exports */\nmodule.exports = {\n AGE: {\n AGE_DEFAULT_MAX_VALUE,\n AGE_DEFAULT_MIN_VALUE,\n AGE_DEFAULT_VALUE\n },\n CALENDAR: {\n CALENDAR_ORIGIN_DEFAULT_DATE,\n CALENDAR_DESTINATION_DEFAULT_DATE\n },\n DESTINATION: {\n DESTINATION_DEFAULT_TYPES\n },\n ORIGIN: {\n ORIGIN_DEFAULT_TYPES\n },\n TIME: {\n MINIMUM_TIME\n },\n RETURN_AT_ORIGIN: {\n RETURN_AT_ORIGIN_DEFAULT_VALUE\n },\n URL: {\n URL_DEFAULT_VALUE\n },\n TYPES: {\n AER,\n EST,\n PUE,\n CIU,\n ZON,\n PDI\n },\n NAVIGATION: {\n HAS_NAVIGATION_BACK\n },\n DIRECT,\n TOUR_OPERATOR,\n REFUNDABLE,\n ETHNIC\n};\n","/* ==========================================================================\n SelectRxjs > Client > Utils\n ========================================================================== */\n\n/* Modules */\nconst configuration = require('../config');\n\n/* Export */\nmodule.exports = function Utils(instance) {\n return {\n /**\n * Fix selected choice\n */\n fixSelectedChoice: () => {\n if (!instance.choices) return;\n\n const choiceListEl = instance.choices.choiceList.element;\n\n choiceListEl.querySelectorAll('[data-choice]').forEach(el => {\n el.classList.remove(configuration().css.selected);\n\n const { value } = instance.choices.getValue() || {};\n const sValue = `${value}`;\n const dValue = el.dataset.value;\n\n if (sValue === dValue) {\n el.classList.add(configuration().css.selected);\n }\n });\n }\n };\n};\n","/* ==========================================================================\n InputRxjs > Client > Loader\n ========================================================================== */\n\n/* Modules */\nconst { html } = require('common-tags');\nconst { toNode } = require('@bluekiri/alexandria/helpers/domHelpers');\n\nconst { actions, types } = require('../store/actions');\n\nconst configuration = require('../config');\n\nconst { LOADER_TEMPLATE } = require('../../../constants');\n\n/* Add */\nfunction addLoader(instance) {\n const { loader = false } = instance.hooks;\n\n if (loader) return;\n\n /* Close suggestions and syncValue */\n instance.actions.closeSuggestions();\n instance.actions.syncValue();\n\n const template = html(LOADER_TEMPLATE);\n\n const node = toNode(template)[0];\n\n const inst = instance;\n\n /* DOM */\n instance.element.classList.add(configuration().css.loading);\n instance.element.appendChild(node);\n\n /* Disable */\n instance.hooks.input.setAttribute('disabled', true);\n\n /* Hooks */\n inst.hooks = {\n ...instance.hooks,\n loader: instance.element.querySelector('[data-loader]')\n };\n}\n\n/* Remove */\nfunction removeLoader(instance) {\n const { loader = false } = instance.hooks;\n\n if (!loader) {\n return;\n }\n\n const inst = instance;\n\n /* DOM */\n instance.element.removeChild(instance.hooks.loader);\n instance.element.classList.remove(configuration().css.loading);\n\n /* Enable */\n instance.hooks.input.removeAttribute('disabled');\n\n /* Hooks */\n delete inst.hooks.loader;\n}\n\n/* Init */\nfunction initLoader(instance) {\n const inst = instance;\n\n /* Actions */\n inst.actions = {\n ...instance.actions,\n toggleLoading: () => instance.store.dispatch(actions.toggleLoading())\n };\n\n /* Reactions */\n inst.reactions = {\n ...instance.reactions,\n toggleLoading: instance.store.subscribe((state, action) => {\n if (action.type !== types.TOGGLE_LOADING) return;\n\n const { isLoading } = state.autocomplete;\n\n if (!isLoading) {\n /* Remove */\n removeLoader(instance);\n\n return;\n }\n\n /* Add */\n addLoader(instance);\n })\n };\n}\n\n/* Destroy */\nfunction destroyLoader(instance) {\n /* Data */\n const { hasLoader } = instance.config;\n\n if (!hasLoader) {\n return;\n }\n\n const inst = instance;\n\n /* Reactions */\n instance.reactions.toggleLoading.unsubscribe();\n delete inst.reactions.toggleLoading;\n\n /* Actions */\n delete inst.actions.toggleLoading;\n}\n\n/* Exports */\nmodule.exports = {\n initLoader,\n destroyLoader\n};\n","/* ==========================================================================\n LoadingInformationRxjs > Client > Store > actions\n ========================================================================== */\n\n/* Types */\nconst DESTROY = 'M_LOADING_INFORMATION_RXJS::DESTROY';\n\n/* Actions */\nconst destroy = () => ({ type: DESTROY });\n\n/* Exports */\nmodule.exports = {\n types: {\n DESTROY\n },\n actions: {\n destroy\n }\n};\n","/* ==========================================================================\n CalendarRxjs > Client > Store > Reducer\n ========================================================================== */\n\n/* Modules */\nconst { types } = require('./actions');\n\n/* Initial state */\nconst initialState = {\n active: false,\n disabled: false,\n hidden: false,\n error: false,\n valid: false,\n mode: null,\n value: null\n};\n\n/* Reducer */\nfunction reducer(state = initialState, action) {\n switch (action.type) {\n case types.DESTROY:\n return null;\n case types.DISABLE:\n return {\n ...state,\n disabled: true\n };\n case types.DISPLAY:\n return {\n ...state,\n hidden: false\n };\n case types.ENABLE:\n return {\n ...state,\n disabled: false\n };\n case types.HIDE:\n return {\n ...state,\n hidden: true\n };\n case types.RESET_STATUS:\n return {\n ...state,\n error: false,\n valid: false\n };\n case types.SET_ERROR:\n return {\n ...state,\n error: true,\n valid: false\n };\n case types.SET_MODE:\n return {\n ...state,\n mode: action.payload,\n value: state.value\n ? state.value.filter((item, index) => {\n if (index < 1) {\n return true;\n }\n\n if (action.payload.toLowerCase() !== 'range') {\n return false;\n }\n\n return true;\n })\n : state.value\n };\n case types.SET_VALID:\n return {\n ...state,\n error: false,\n valid: true\n };\n case types.TOGGLE_ACTIVE:\n return {\n ...state,\n active: !state.active\n };\n case types.SET_VALUE:\n case types.CHANGE_VALUE:\n return {\n ...state,\n value: action.payload\n };\n default:\n return state;\n }\n}\n\n/* Exports */\nmodule.exports = {\n reducer\n};\n","/* ==========================================================================\n SearcherCar > Client > ReturnAtOrigin\n ========================================================================== */\n\n/* Modules */\nconst Checkbox = require('@bluekiri/alexandria-contrib-components/components/checkbox-rxjs/client/js');\n\n/* eslint-disable */\nconst CheckboxActions = require('@bluekiri/alexandria-contrib-components/components/checkbox-rxjs/client/js/store/actions');\n/* eslint-enable */\n\nconst { actions } = require('../store/actions');\n\nconst configuration = require('../config');\n\n/* Init */\nfunction initReturnAtOrigin(instance) {\n const panel = instance;\n\n /* Actions */\n panel.actions = {\n ...instance.actions,\n changeReturnAtOrigin: payload => {\n return instance.store.dispatch(actions.changeReturnAtOrigin(payload));\n }\n };\n\n /* Selector */\n const { selector } = instance;\n\n /* Reference */\n panel.returnAtOrigin = Checkbox(\n `${selector} [data-component='CheckboxRxjs'][data-type='${configuration().type.returnAtOrigin}']`\n );\n\n /* Reactions */\n panel.reactions = {\n ...instance.reactions,\n changeReturnAtOrigin: instance.returnAtOrigin.store.subscribe((state, action) => {\n if (action.type !== CheckboxActions.types.TOGGLE) return;\n\n const { checked } = state.checkbox;\n\n /* Dispatch */\n instance.actions.changeReturnAtOrigin(checked);\n\n /* Update UI */\n if (!checked) {\n requestAnimationFrame(() => instance.element.classList.remove(configuration().css.withReturnAtOrigin));\n\n return;\n }\n\n requestAnimationFrame(() => instance.element.classList.add(configuration().css.withReturnAtOrigin));\n })\n };\n\n /* Start */\n const { checked } = instance.returnAtOrigin.store.select('checkbox');\n\n if (!checked) {\n return;\n }\n\n /* Sync */\n instance.actions.setReturnAtOrigin(checked);\n requestAnimationFrame(() => instance.element.classList.add(configuration().css.withReturnAtOrigin));\n}\n\n/* Destroy */\nfunction destroyReturnAtOrigin(instance) {\n const panel = instance;\n\n instance.returnAtOrigin.actions.destroy();\n delete panel.returnAtOrigin;\n\n delete actions.changeReturnAtOrigin;\n\n instance.reactions.changeReturnAtOrigin.unsubscribe();\n delete panel.reactions.changeReturnAtOrigin;\n}\n\n/* Exports */\nmodule.exports = {\n initReturnAtOrigin,\n destroyReturnAtOrigin\n};\n","/* ==========================================================================\n CalendarRxjs > Client\n ========================================================================== */\n\n/* Import modules */\nconst { elementExist } = require('@bluekiri/alexandria/helpers/domHelpers');\nconst { randomId } = require('@bluekiri/alexandria/helpers/dataHelpers');\n\nconst prototype = require('./prototype');\nconst config = require('./config');\n\n/**\n * CalendarRxjs component\n * @param {selector} String selector for the component in the client side.\n */\nmodule.exports = function CalendarRxjs(selector = '[data-component=CalendarRxjs]', configuration = {}) {\n if (elementExist(selector)) {\n /* Instance */\n const instance = Object.create(prototype);\n\n /* Selector */\n instance.selector = selector;\n\n /* Element */\n instance.element = document.querySelector(selector);\n\n /* Hooks */\n instance.hooks = {\n input: instance.element.querySelector('input'),\n label: instance.element.querySelector('label')\n };\n\n /* ID for pairing */\n instance.id = randomId(randomId('input'));\n\n /* Config */\n instance.config = {\n ...config(),\n ...configuration,\n ...(function getConfig() {\n if (!instance.element.dataset.config) return '';\n\n const result = JSON.parse(instance.element.dataset.config);\n instance.element.dataset.config = '';\n return result;\n })()\n };\n\n /* Init */\n if (instance.config.init) instance.init();\n\n /* Return */\n return instance;\n }\n};\n","/* ==========================================================================\n SelectRxjs > Client > Store > Reducer\n ========================================================================== */\n\n/* Modules */\nconst { types } = require('./actions');\n\n/* Initial state */\nconst initialState = {\n display: true,\n error: false,\n valid: false,\n multiple: false,\n options: null,\n value: null,\n disabled: false,\n isLoading: false\n};\n\n/* Reducer */\nfunction reducer(state = initialState, action) {\n switch (action.type) {\n case types.TOGGLE_LOADING:\n return {\n ...state,\n isLoading: !state.isLoading\n };\n case types.DISPLAY:\n return {\n ...state,\n display: true\n };\n case types.HIDE:\n return {\n ...state,\n display: false\n };\n case types.RESET_STATUS:\n return {\n ...state,\n error: false,\n valid: false\n };\n case types.SET_VALID:\n return {\n ...state,\n error: false,\n valid: true\n };\n case types.SET_ERROR:\n return {\n ...state,\n error: true,\n valid: false\n };\n case types.SET_OPTION:\n return {\n ...state,\n value: state.options.filter(option => option.value === action.payload).reduce(acc => acc)\n };\n case types.SET_OPTIONS:\n return {\n ...state,\n options: action.payload\n };\n case types.SELECT_OPTION:\n return {\n ...state,\n value: action.payload\n };\n case types.ENABLE:\n return {\n ...state,\n disabled: false\n };\n case types.DISABLE:\n return {\n ...state,\n disabled: true\n };\n case types.DESTROY:\n default:\n return state;\n }\n}\n\n/* Exports */\nmodule.exports = {\n reducer\n};\n","/* ==========================================================================\n Tooltip > Client > Store > Actions\n ========================================================================== */\n\n/* Types */\nconst DESTROY = 'TOOLTIP::DESTROY';\n\n/* Actions */\nconst destroy = () => ({ type: DESTROY });\n\n/* Exports */\nmodule.exports = {\n types: {\n DESTROY\n },\n actions: {\n destroy\n }\n};\n","/* ==========================================================================\n LoadingInformationRxjs > Client > Prototype\n ========================================================================== */\n\n/* Modules */\nconst { Store } = require('@bluekiri/alexandria/helpers/state');\n\nconst { types, actions } = require('./store/actions');\nconst { reducer } = require('./store/reducer');\n\nconst { initImage, destroyImage } = require('./image');\n\n/* Prototype */\nconst prototype = {\n /* Setup store */\n setupStore() {\n if (this.store) return this;\n\n this.store = new Store({\n loading: reducer\n });\n\n return this;\n },\n /* Setup actions */\n setupActions() {\n if (this.actions) return this;\n\n this.actions = {\n destroy: () => this.store.dispatch(actions.destroy())\n };\n\n return this;\n },\n /* Setup reactions */\n setupReactions() {\n if (this.reactions) return this;\n\n this.reactions = {\n destroy: this.store.subscribe((state, action) => {\n if (action.type !== types.DESTROY) return;\n\n /* Remove element */\n this.element.parentNode.removeChild(this.element);\n\n /* Delete image */\n destroyImage(this);\n\n /* Clean */\n [...Object.keys(this)].forEach(key => delete this[key]);\n })\n };\n\n return this;\n },\n /* Init */\n init() {\n if (!this.config.init) return this;\n\n /* Setup store */\n this.setupStore();\n\n /* Setup actions */\n this.setupActions();\n\n /* Setup reactions */\n this.setupReactions();\n\n /* Init image */\n initImage(this);\n\n return this;\n }\n};\n\n/* Exports */\nmodule.exports = prototype;\n","/* ==========================================================================\n SearcherCar > Client > Utils\n ========================================================================== */\n\n/* Modules */\nconst url = require('./url');\nconst validation = require('./validation');\n\n/* Exports */\nmodule.exports = {\n url,\n validation\n};\n","/* ==========================================================================\n AutocompleteRxjs > Client > Prototype\n ========================================================================== */\n/* Modules */\nconst { fromEvent } = require('rxjs');\nconst { filter } = require('rxjs/operators');\nconst { actions, types } = require('../store/actions');\n\nconst configuration = require('../config');\n\nconst {\n css: { valid: cssValid, error: cssError, active: cssActive }\n} = configuration();\n\nfunction startInput(instance) {\n const panel = instance;\n const { hooks = {}, config = {} } = instance;\n const { input: inputEl } = hooks;\n\n /* Extends actions */\n panel.actions = {\n ...panel.actions,\n resetStatus: () => panel.store.dispatch(actions.resetStatus()),\n setError: () => panel.store.dispatch(actions.setError()),\n setValid: () => panel.store.dispatch(actions.setValid()),\n syncValue: () => panel.store.dispatch(actions.syncValue()),\n toggleActive: () => panel.store.dispatch(actions.toggleActive())\n };\n\n /* Extends reactions */\n panel.reactions = {\n ...panel.reactions,\n setError: panel.store.subscribe((state, action) => {\n if (action.type !== types.SET_ERROR) return;\n\n panel.element.classList.remove(cssValid);\n panel.element.classList.add(cssError);\n }),\n setValid: panel.store.subscribe((state, action) => {\n if (action.type !== types.SET_VALID) return;\n\n panel.element.classList.remove(cssError);\n panel.element.classList.add(cssValid);\n }),\n resetStatus: panel.store.subscribe((state, action) => {\n if (action.type !== types.RESET_STATUS) return;\n\n panel.element.classList.remove(cssValid);\n panel.element.classList.remove(cssError);\n }),\n syncValue: panel.store.subscribe((state, action) => {\n if (action.type !== types.SYNC_VALUE) return;\n\n /* Data */\n const { value, error } = panel.store.select('autocomplete');\n const { text } = value || {};\n\n /* Don't sync input and clear */\n if (error && inputEl.value !== '') {\n panel.actions.clear();\n return;\n }\n\n /* Empty imput value and Clear */\n if (!text || inputEl.value === '') {\n inputEl.value = '';\n panel.actions.clear();\n return;\n }\n\n /* Restore stored value */\n if (text !== inputEl.value) inputEl.value = text;\n }),\n toggleActive: panel.store.subscribe((state, action) => {\n if (action.type !== types.TOGGLE_ACTIVE) return;\n\n /* Data */\n const { active } = panel.store.select('autocomplete');\n const { isAlternative } = config;\n\n /* is alternative, don't toggle */\n if (isAlternative) return;\n\n /* Label up */\n if (active) {\n panel.element.classList.add(cssActive);\n return;\n }\n\n /* Lobel down */\n panel.element.classList.remove(cssActive);\n })\n };\n\n /* Extends subscriptions */\n panel.subscriptions = {\n ...panel.subscriptions,\n focusIn: fromEvent(panel.hooks.input, 'focusin').subscribe(() => {\n const { active } = panel.store.select('autocomplete');\n\n const { selectionRange } = config;\n\n /* Tooggle input label */\n if (!active && !panel.config.isAlternative) panel.actions.toggleActive();\n\n if (!selectionRange) return;\n\n /* Select all content in input */\n panel.hooks.input.setSelectionRange(0, panel.hooks.input.value.length);\n }),\n focusOut: fromEvent(panel.hooks.input, 'focusout')\n .pipe(filter(() => !panel.store.select('autocomplete').openSuggestions))\n .subscribe(() => {\n panel.actions.syncValue();\n })\n };\n}\n\nmodule.exports = {\n startInput\n};\n","/* ==========================================================================\n Tooltip > Client\n ========================================================================== */\n\n/* Import modules */\nconst { elementExist } = require('@bluekiri/alexandria/helpers/domHelpers');\n\nconst prototype = require('./prototype');\nconst config = require('./config');\n\n/**\n * Tooltip component\n * @param {selector} String selector for the component in the client side.\n */\nmodule.exports = function Tooltip(selector = '[data-component=Tooltip]', configuration = {}) {\n if (elementExist(selector)) {\n /* Instance */\n const instance = Object.create(prototype);\n\n /* Element */\n instance.element = document.querySelector(selector);\n\n /* Config */\n instance.config = {\n ...config(),\n ...configuration,\n ...(function getConfig() {\n if (!instance.element.dataset.config) return '';\n\n const result = JSON.parse(instance.element.dataset.config);\n instance.element.dataset.config = '';\n return result;\n })()\n };\n\n /* Init */\n instance.init();\n\n /* Return */\n return instance;\n }\n};\n","/* ==========================================================================\n Helpers > Dom\n ========================================================================== */\n\n/**\n * Get next sibling\n * @param {HTMLElement} element\n * @param {string} selector where to stop\n * @returns {HTMLElement} next sibling\n */\nfunction getNextSibling(element, selector) {\n /* Get the next sibling element */\n let sibling = element.nextElementSibling;\n\n if (!sibling) {\n return null;\n }\n\n /* If there's no selector, return the first sibling */\n if (!selector) return sibling;\n\n /**\n * If the sibling matches our selector, use it\n * If not, jump to the next sibling and continue the loop\n */\n while (sibling) {\n if (sibling.matches(selector)) return sibling;\n sibling = sibling.nextElementSibling;\n }\n\n return sibling;\n}\n\n/**\n * Get previous sibling\n * @param {HTMLElement} element\n * @param {string} selector where to stop\n * @returns {HTMLElement} previous sibling\n */\nfunction getPreviousSibling(element, selector) {\n /* Get the next sibling element */\n let sibling = element.previousElementSibling;\n\n if (!sibling) {\n return null;\n }\n\n /* If there's no selector, return the first sibling */\n if (!selector) return sibling;\n\n /**\n * If the sibling matches our selector, use it\n * If not, jump to the next sibling and continue the loop\n */\n while (sibling) {\n if (sibling.matches(selector)) return sibling;\n sibling = sibling.previousElementSibling;\n }\n\n return sibling;\n}\n\n/* Exports */\nmodule.exports = {\n getNextSibling,\n getPreviousSibling\n};\n","/* ==========================================================================\n SearcherCar > Client > Age\n ========================================================================== */\n\n/* Modules */\nconst Select = require('@bluekiri/alexandria-contrib-components/components/select-rxjs/client/js');\n\n/* eslint-disable */\nconst SelectActions = require('@bluekiri/alexandria-contrib-components/components/select-rxjs/client/js/store/actions');\n/* eslint-enable */\n\nconst { actions } = require('../store/actions');\n\nconst configuration = require('../config');\n\n/* Init */\nfunction initAge(instance) {\n const panel = instance;\n\n /* Actions */\n panel.actions = {\n ...instance.actions,\n changeAge: payload => {\n return instance.store.dispatch(actions.changeAge(payload));\n }\n };\n\n /* Selector */\n const { selector } = instance;\n\n /* Reference */\n panel.age = Select(`${selector} [data-component='SelectRxjs'][data-type='${configuration().type.age}']`, {\n choices: {\n searchEnabled: false\n }\n });\n\n /* Reactions */\n panel.reactions = {\n ...instance.reactions,\n changeAge: instance.age.store.subscribe((_, action) => {\n if (action.type !== SelectActions.types.SELECT_OPTION) return;\n\n /* Dispatch */\n instance.actions.changeAge(action.payload);\n instance.age.actions.resetStatus();\n })\n };\n\n /* Start */\n const { value } = instance.age.store.select('select');\n\n if (!value) {\n return;\n }\n\n /* Sync */\n instance.actions.setAge(value);\n instance.age.actions.resetStatus();\n}\n\n/* Destroy */\nfunction destroyAge(instance) {\n const panel = instance;\n\n instance.age.actions.destroy();\n delete panel.age;\n\n delete panel.actions.changeAge;\n\n instance.reactions.changeAge.unsubscribe();\n delete panel.reactions.changeAge;\n}\n\n/* Exports */\nmodule.exports = {\n initAge,\n destroyAge\n};\n","const addGa4Event = data => {\n // eslint-disable-next-line camelcase\n const { event, event_type, event_detail } = data;\n const dataLayer = window.dataLayer || [];\n\n if (dataLayer && dataLayer.push) {\n dataLayer.push({\n event,\n event_type,\n event_detail\n });\n }\n};\n\nmodule.exports = {\n addGa4Event\n};\n","/* ==========================================================================\n AutocompleteRxjs > Client > Store > Reducer\n ========================================================================== */\n\n/* Modules */\nconst { types } = require('./actions');\n\n/* Initial state */\nconst initialState = {\n active: false,\n disabled: false,\n hidden: false,\n error: false,\n valid: false,\n suggestions: [],\n openSuggestions: false,\n tooltipType: '',\n query: '',\n value: null,\n isLoading: false\n};\n\n/* Reducer */\nfunction reducer(state = initialState, action) {\n const { type, payload = {} } = action;\n return (\n {\n [types.DISABLE]: {\n ...state,\n disabled: true\n },\n [types.ENABLE]: {\n ...state,\n disabled: false\n },\n [types.DISPLAY]: {\n ...state,\n hidden: false\n },\n [types.HIDE]: {\n ...state,\n hidden: true\n },\n [types.TOGGLE_ACTIVE]: {\n ...state,\n active: !state.active\n },\n [types.SET_VALUE]: {\n ...state,\n value: payload\n },\n [types.CHANGE_VALUE]: {\n ...state,\n value: payload\n },\n [types.RESET_STATUS]: {\n ...state,\n error: false,\n valid: false\n },\n [types.SET_ERROR]: {\n ...state,\n error: true,\n valid: false\n },\n [types.SET_UI_STATE]: {\n ...state,\n active: payload.active || state.active,\n hidden: payload.hidden || state.hidden,\n isLoading: payload.isLoading || state.isLoading\n },\n [types.SET_VALID]: {\n ...state,\n error: false,\n valid: true\n },\n [types.CLEAR]: {\n ...state,\n suggestions: [],\n query: '',\n value: null,\n openSuggestions: false\n },\n [types.CLOSE_SUGGESTIONS]: {\n ...state,\n openSuggestions: false\n },\n [types.OPEN_SUGGESTIONS]: {\n ...state,\n tooltipType: payload,\n openSuggestions: true\n },\n [types.SET_QUERY]: {\n ...state,\n query: payload\n },\n [types.SET_SUGGESTIONS]: {\n ...state,\n suggestions: payload\n },\n [types.TOGGLE_LOADING]: {\n ...state,\n isLoading: !state.isLoading\n }\n }[type] || state\n );\n}\n\n/* Exports */\nmodule.exports = {\n reducer\n};\n","/* ==========================================================================\n CheckboxRxjs > Prototype\n ========================================================================== */\n\n/* Modules */\nconst { Store } = require('@bluekiri/alexandria/helpers/state');\n\nconst { fromEvent } = require('rxjs');\nconst { filter } = require('rxjs/operators');\n\nconst { types, actions } = require('./store/actions');\nconst { reducer } = require('./store/reducer');\n\nconst configuration = require('./config');\n\n/* Prototype */\nconst prototype = {\n /* Pairing label */\n setPairing() {\n if (this.hooks.label) {\n this.hooks.input.setAttribute('id', this.id);\n this.hooks.label.setAttribute('for', this.id);\n }\n\n return this;\n },\n /* Setup store */\n setupStore() {\n if (this.store) return this;\n\n this.store = new Store({\n checkbox: reducer\n });\n\n return this;\n },\n /* Setup actions */\n setupActions() {\n if (this.actions) return this;\n\n this.actions = {\n destroy: () => this.store.dispatch(actions.destroy()),\n display: () => this.store.dispatch(actions.display()),\n hide: () => this.store.dispatch(actions.hide()),\n resetStatus: () => this.store.dispatch(actions.resetStatus()),\n setError: () => this.store.dispatch(actions.setError()),\n setValid: () => this.store.dispatch(actions.setValid()),\n toggle: () => this.store.dispatch(actions.toggle()),\n disable: () => this.store.dispatch(actions.disable()),\n enable: () => this.store.dispatch(actions.enable())\n };\n\n return this;\n },\n /* Setup reactions */\n setupReactions() {\n if (this.reactions) return this;\n\n this.reactions = {\n destroy: this.store.subscribe((state, action) => {\n if (action.type !== types.DESTROY) return;\n\n /* Unsubscribe */\n this.unsubscribe();\n\n /* Remove from DOM */\n this.element.parentNode.removeChild(this.element);\n\n /* Clean reactions */\n [...Object.keys(this.reactions)].forEach(key => this.reactions[key].unsubscribe());\n\n /* Clean instance */\n [...Object.keys(this)].forEach(key => delete this[key]);\n }),\n display: this.store.subscribe((state, action) => {\n if (action.type !== types.DISPLAY) return;\n\n this.element.classList.remove(configuration().css.hidden);\n }),\n hide: this.store.subscribe((state, action) => {\n if (action.type !== types.HIDE) return;\n\n this.element.classList.add(configuration().css.hidden);\n }),\n disable: this.store.subscribe((state, action) => {\n if (action.type !== types.DISABLE) return;\n\n this.hooks.input.setAttribute('disabled', true);\n this.element.classList.add(configuration().css.disabled);\n }),\n enable: this.store.subscribe((state, action) => {\n if (action.type !== types.ENABLE) return;\n\n this.hooks.input.removeAttribute('disabled');\n this.element.classList.remove(configuration().css.disabled);\n }),\n resetStatus: this.store.subscribe((state, action) => {\n if (action.type !== types.RESET_STATUS) return;\n\n this.element.classList.remove(configuration().css.valid);\n this.element.classList.remove(configuration().css.error);\n }),\n setError: this.store.subscribe((state, action) => {\n if (action.type !== types.SET_ERROR) return;\n\n this.element.classList.remove(configuration().css.valid);\n this.element.classList.add(configuration().css.error);\n }),\n setValid: this.store.subscribe((state, action) => {\n if (action.type !== types.SET_VALID) return;\n\n this.element.classList.remove(configuration().css.error);\n this.element.classList.add(configuration().css.valid);\n })\n };\n\n return this;\n },\n /* Subscribe */\n subscribe() {\n if (this.subscriptions) this.unsubscribe();\n\n this.subscriptions = {\n changes: fromEvent(this.element, 'change')\n .pipe(\n filter(() => {\n /* Data */\n const { disabled } = this.store.select('checkbox');\n\n if (disabled) {\n return false;\n }\n\n return true;\n })\n )\n .subscribe(() => {\n /* Dispatch action */\n this.actions.toggle();\n })\n };\n\n return this;\n },\n /* Unsubscribe */\n unsubscribe() {\n if (!this.subscriptions) return this;\n\n [...Object.keys(this.subscriptions)].forEach(key => this.subscriptions[key].unsubscribe());\n\n return this;\n },\n /* Start */\n start() {\n if (!this.config.start) return this;\n\n /* Sync checked status */\n const { checked } = this.hooks.input;\n\n /* Sync disabled status */\n const { disabled } = this.config;\n\n if (checked) {\n this.actions.toggle();\n }\n\n /* Check for auto disabled from render */\n if (disabled) {\n this.actions.disable();\n }\n\n return this;\n },\n /* Init */\n init() {\n if (!this.config.init) return this;\n\n /* Set pairing */\n this.setPairing();\n\n /* Setup store */\n this.setupStore();\n\n /* Setup actions */\n this.setupActions();\n\n /* Setup reactions */\n this.setupReactions();\n\n /* Subscribe */\n this.subscribe();\n\n /* Start */\n this.start();\n\n return this;\n }\n};\n\n/* Exports */\nmodule.exports = prototype;\n"],"sourceRoot":""}