{"version":3,"file":"static/chunks/pages/_app-2a971fbe60dd5d67.js","mappings":"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","sources":["webpack://_N_E/./node_modules/@algolia/events/events.js","webpack://_N_E/./node_modules/algoliasearch-helper/index.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/DerivedHelper/index.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/RecommendParameters/index.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/RecommendResults/index.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/SearchParameters/RefinementList.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/SearchParameters/index.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/SearchResults/generate-hierarchical-tree.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/SearchResults/index.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/algoliasearch.helper.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/functions/compact.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/functions/defaultsPure.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/functions/escapeFacetValue.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/functions/find.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/functions/findIndex.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/functions/flat.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/functions/formatSort.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/functions/inherits.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/functions/intersection.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/functions/merge.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/functions/mergeNumericMax.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/functions/objectHasKeys.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/functions/omit.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/functions/orderBy.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/functions/valToNumber.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/requestBuilder.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/utils/isValidUserToken.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/utils/sortAndMergeRecommendations.js","webpack://_N_E/./node_modules/algoliasearch-helper/src/version.js","webpack://_N_E/./node_modules/algoliasearch/dist/algoliasearch.umd.js","webpack://_N_E/./node_modules/core-js/modules/es.object.define-properties.js","webpack://_N_E/./node_modules/core-js/modules/es.object.freeze.js","webpack://_N_E/./node_modules/core-js/modules/es.object.get-own-property-descriptor.js","webpack://_N_E/./node_modules/core-js/modules/es.object.get-own-property-descriptors.js","webpack://_N_E/./node_modules/core-js/modules/es.string.small.js","webpack://_N_E/./node_modules/next/app.js","webpack://_N_E/./adapters/algolia/client.js","webpack://_N_E/./adapters/helpers/Constants.js","webpack://_N_E/./components/Core/DynamicPage/DomainNameContext.js","webpack://_N_E/./components/TabContext.js","webpack://_N_E/./node_modules/next/dist/pages/_app.js","webpack://_N_E/./pages/_app.js","webpack://_N_E/?ed95","webpack://_N_E/./node_modules/next/dist/compiled/@babel/runtime/helpers/defineProperty.js","webpack://_N_E/./styles/index.scss","webpack://_N_E/./node_modules/prop-types/factoryWithThrowingShims.js","webpack://_N_E/./node_modules/prop-types/index.js","webpack://_N_E/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://_N_E/./node_modules/react-fast-compare/index.js","webpack://_N_E/./node_modules/react-instantsearch-core/dist/es/core/context.js","webpack://_N_E/./node_modules/react-instantsearch-core/dist/es/core/indexUtils.js","webpack://_N_E/./node_modules/react-instantsearch-core/dist/es/core/utils.js","webpack://_N_E/./node_modules/react-instantsearch-core/dist/es/core/createWidgetsManager.js","webpack://_N_E/./node_modules/react-instantsearch-core/dist/es/core/createStore.js","webpack://_N_E/./node_modules/react-instantsearch-core/dist/es/core/highlight.js","webpack://_N_E/./node_modules/react-instantsearch-core/dist/es/core/version.js","webpack://_N_E/./node_modules/react-instantsearch-core/dist/es/core/createInstantSearchManager.js","webpack://_N_E/./node_modules/react-instantsearch-core/dist/es/core/metadata.js","webpack://_N_E/./node_modules/react-instantsearch-core/dist/es/widgets/InstantSearch.js","webpack://_N_E/"],"sourcesContent":["// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\n// EventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n","'use strict';\n\nvar AlgoliaSearchHelper = require('./src/algoliasearch.helper');\nvar RecommendParameters = require('./src/RecommendParameters');\nvar RecommendResults = require('./src/RecommendResults');\nvar SearchParameters = require('./src/SearchParameters');\nvar SearchResults = require('./src/SearchResults');\n\n/**\n * The algoliasearchHelper module is the function that will let its\n * contains everything needed to use the Algoliasearch\n * Helper. It is a also a function that instanciate the helper.\n * To use the helper, you also need the Algolia JS client v3.\n * @example\n * //using the UMD build\n * var client = algoliasearch('latency', '6be0576ff61c053d5f9a3225e2a90f76');\n * var helper = algoliasearchHelper(client, 'bestbuy', {\n * facets: ['shipping'],\n * disjunctiveFacets: ['category']\n * });\n * helper.on('result', function(event) {\n * console.log(event.results);\n * });\n * helper\n * .toggleFacetRefinement('category', 'Movies & TV Shows')\n * .toggleFacetRefinement('shipping', 'Free shipping')\n * .search();\n * @example\n * // The helper is an event emitter using the node API\n * helper.on('result', updateTheResults);\n * helper.once('result', updateTheResults);\n * helper.removeListener('result', updateTheResults);\n * helper.removeAllListeners('result');\n * @module algoliasearchHelper\n * @param {AlgoliaSearch} client an AlgoliaSearch client\n * @param {string} index the name of the index to query\n * @param {SearchParameters|object} opts an object defining the initial config of the search. It doesn't have to be a {SearchParameters}, just an object containing the properties you need from it.\n * @param {SearchResultsOptions|object} searchResultsOptions an object defining the options to use when creating the search results.\n * @return {AlgoliaSearchHelper} The helper instance\n */\nfunction algoliasearchHelper(client, index, opts, searchResultsOptions) {\n return new AlgoliaSearchHelper(client, index, opts, searchResultsOptions);\n}\n\n/**\n * The version currently used\n * @member module:algoliasearchHelper.version\n * @type {number}\n */\nalgoliasearchHelper.version = require('./src/version');\n\n/**\n * Constructor for the Helper.\n * @member module:algoliasearchHelper.AlgoliaSearchHelper\n * @type {AlgoliaSearchHelper}\n */\nalgoliasearchHelper.AlgoliaSearchHelper = AlgoliaSearchHelper;\n\n/**\n * Constructor for the object containing all the parameters of the search.\n * @member module:algoliasearchHelper.SearchParameters\n * @type {SearchParameters}\n */\nalgoliasearchHelper.SearchParameters = SearchParameters;\n\n/**\n * Constructor for the object containing all the parameters for Recommend.\n * @member module:algoliasearchHelper.RecommendParameters\n * @type {RecommendParameters}\n */\nalgoliasearchHelper.RecommendParameters = RecommendParameters;\n\n/**\n * Constructor for the object containing the results of the search.\n * @member module:algoliasearchHelper.SearchResults\n * @type {SearchResults}\n */\nalgoliasearchHelper.SearchResults = SearchResults;\n\n/**\n * Constructor for the object containing the results for Recommend.\n * @member module:algoliasearchHelper.RecommendResults\n * @type {RecommendResults}\n */\nalgoliasearchHelper.RecommendResults = RecommendResults;\n\nmodule.exports = algoliasearchHelper;\n","'use strict';\n\nvar EventEmitter = require('@algolia/events');\n\nvar inherits = require('../functions/inherits');\n\n/**\n * A DerivedHelper is a way to create sub requests to\n * Algolia from a main helper.\n * @class\n * @classdesc The DerivedHelper provides an event based interface for search callbacks:\n * - search: when a search is triggered using the `search()` method.\n * - result: when the response is retrieved from Algolia and is processed.\n * This event contains a {@link SearchResults} object and the\n * {@link SearchParameters} corresponding to this answer.\n * @param {AlgoliaSearchHelper} mainHelper the main helper\n * @param {function} fn the function to create the derived state for search\n * @param {function} recommendFn the function to create the derived state for recommendations\n */\nfunction DerivedHelper(mainHelper, fn, recommendFn) {\n this.main = mainHelper;\n this.fn = fn;\n this.recommendFn = recommendFn;\n this.lastResults = null;\n this.lastRecommendResults = null;\n}\n\ninherits(DerivedHelper, EventEmitter);\n\n/**\n * Detach this helper from the main helper\n * @return {undefined}\n * @throws Error if the derived helper is already detached\n */\nDerivedHelper.prototype.detach = function () {\n this.removeAllListeners();\n this.main.detachDerivedHelper(this);\n};\n\nDerivedHelper.prototype.getModifiedState = function (parameters) {\n return this.fn(parameters);\n};\n\nDerivedHelper.prototype.getModifiedRecommendState = function (parameters) {\n return this.recommendFn(parameters);\n};\n\nmodule.exports = DerivedHelper;\n","'use strict';\n\n/**\n * RecommendParameters is the data structure that contains all the information\n * usable for getting recommendations from the Algolia API. It doesn't do the\n * search itself, nor does it contains logic about the parameters.\n * It is an immutable object, therefore it has been created in a way that each\n * changes does not change the object itself but returns a copy with the\n * modification.\n * This object should probably not be instantiated outside of the helper. It\n * will be provided when needed.\n * @constructor\n * @classdesc contains all the parameters for recommendations\n * @param {RecommendParametersOptions} opts the options to create the object\n */\nfunction RecommendParameters(opts) {\n opts = opts || {};\n this.params = opts.params || [];\n}\n\nRecommendParameters.prototype = {\n constructor: RecommendParameters,\n\n addParams: function (params) {\n var newParams = this.params.slice();\n\n newParams.push(params);\n\n return new RecommendParameters({ params: newParams });\n },\n\n removeParams: function (id) {\n return new RecommendParameters({\n params: this.params.filter(function (param) {\n return param.$$id !== id;\n }),\n });\n },\n\n addFrequentlyBoughtTogether: function (params) {\n return this.addParams(\n Object.assign({}, params, { model: 'bought-together' })\n );\n },\n\n addRelatedProducts: function (params) {\n return this.addParams(\n Object.assign({}, params, { model: 'related-products' })\n );\n },\n\n addTrendingItems: function (params) {\n return this.addParams(\n Object.assign({}, params, { model: 'trending-items' })\n );\n },\n\n addTrendingFacets: function (params) {\n return this.addParams(\n Object.assign({}, params, { model: 'trending-facets' })\n );\n },\n\n addLookingSimilar: function (params) {\n return this.addParams(\n Object.assign({}, params, { model: 'looking-similar' })\n );\n },\n\n _buildQueries: function (indexName, cache) {\n return this.params\n .filter(function (params) {\n return cache[params.$$id] === undefined;\n })\n .map(function (params) {\n var query = Object.assign({}, params, {\n indexName: indexName,\n // @TODO: remove this if it ever gets handled by the API\n threshold: params.threshold || 0,\n });\n delete query.$$id;\n\n return query;\n });\n },\n};\n\nmodule.exports = RecommendParameters;\n","'use strict';\n\n/**\n * Constructor for SearchResults\n * @class\n * @classdesc SearchResults contains the results of a query to Algolia using the\n * {@link AlgoliaSearchHelper}.\n * @param {RecommendParameters} state state that led to the response\n * @param {Record} results the results from algolia client\n **/\nfunction RecommendResults(state, results) {\n this._state = state;\n this._rawResults = {};\n\n // eslint-disable-next-line consistent-this\n var self = this;\n\n state.params.forEach(function (param) {\n var id = param.$$id;\n self[id] = results[id];\n self._rawResults[id] = results[id];\n });\n}\n\nRecommendResults.prototype = {\n constructor: RecommendResults,\n};\n\nmodule.exports = RecommendResults;\n","'use strict';\n\n/**\n * Functions to manipulate refinement lists\n *\n * The RefinementList is not formally defined through a prototype but is based\n * on a specific structure.\n *\n * @module SearchParameters.refinementList\n *\n * @typedef {string[]} SearchParameters.refinementList.Refinements\n * @typedef {Object.} SearchParameters.refinementList.RefinementList\n */\n\nvar defaultsPure = require('../functions/defaultsPure');\nvar objectHasKeys = require('../functions/objectHasKeys');\nvar omit = require('../functions/omit');\n\nvar lib = {\n /**\n * Adds a refinement to a RefinementList\n * @param {RefinementList} refinementList the initial list\n * @param {string} attribute the attribute to refine\n * @param {string} value the value of the refinement, if the value is not a string it will be converted\n * @return {RefinementList} a new and updated refinement list\n */\n addRefinement: function addRefinement(refinementList, attribute, value) {\n if (lib.isRefined(refinementList, attribute, value)) {\n return refinementList;\n }\n\n var valueAsString = '' + value;\n\n var facetRefinement = !refinementList[attribute]\n ? [valueAsString]\n : refinementList[attribute].concat(valueAsString);\n\n var mod = {};\n\n mod[attribute] = facetRefinement;\n\n return defaultsPure(mod, refinementList);\n },\n /**\n * Removes refinement(s) for an attribute:\n * - if the value is specified removes the refinement for the value on the attribute\n * - if no value is specified removes all the refinements for this attribute\n * @param {RefinementList} refinementList the initial list\n * @param {string} attribute the attribute to refine\n * @param {string} [value] the value of the refinement\n * @return {RefinementList} a new and updated refinement lst\n */\n removeRefinement: function removeRefinement(\n refinementList,\n attribute,\n value\n ) {\n if (value === undefined) {\n // we use the \"filter\" form of clearRefinement, since it leaves empty values as-is\n // the form with a string will remove the attribute completely\n return lib.clearRefinement(refinementList, function (v, f) {\n return attribute === f;\n });\n }\n\n var valueAsString = '' + value;\n\n return lib.clearRefinement(refinementList, function (v, f) {\n return attribute === f && valueAsString === v;\n });\n },\n /**\n * Toggles the refinement value for an attribute.\n * @param {RefinementList} refinementList the initial list\n * @param {string} attribute the attribute to refine\n * @param {string} value the value of the refinement\n * @return {RefinementList} a new and updated list\n */\n toggleRefinement: function toggleRefinement(\n refinementList,\n attribute,\n value\n ) {\n if (value === undefined)\n throw new Error('toggleRefinement should be used with a value');\n\n if (lib.isRefined(refinementList, attribute, value)) {\n return lib.removeRefinement(refinementList, attribute, value);\n }\n\n return lib.addRefinement(refinementList, attribute, value);\n },\n /**\n * Clear all or parts of a RefinementList. Depending on the arguments, three\n * kinds of behavior can happen:\n * - if no attribute is provided: clears the whole list\n * - if an attribute is provided as a string: clears the list for the specific attribute\n * - if an attribute is provided as a function: discards the elements for which the function returns true\n * @param {RefinementList} refinementList the initial list\n * @param {string} [attribute] the attribute or function to discard\n * @param {string} [refinementType] optional parameter to give more context to the attribute function\n * @return {RefinementList} a new and updated refinement list\n */\n clearRefinement: function clearRefinement(\n refinementList,\n attribute,\n refinementType\n ) {\n if (attribute === undefined) {\n // return the same object if the list is already empty\n // this is mainly for tests, as it doesn't have much impact on performance\n if (!objectHasKeys(refinementList)) {\n return refinementList;\n }\n return {};\n } else if (typeof attribute === 'string') {\n return omit(refinementList, [attribute]);\n } else if (typeof attribute === 'function') {\n var hasChanged = false;\n\n var newRefinementList = Object.keys(refinementList).reduce(function (\n memo,\n key\n ) {\n var values = refinementList[key] || [];\n var facetList = values.filter(function (value) {\n return !attribute(value, key, refinementType);\n });\n\n if (facetList.length !== values.length) {\n hasChanged = true;\n }\n\n memo[key] = facetList;\n\n return memo;\n },\n {});\n\n if (hasChanged) return newRefinementList;\n return refinementList;\n }\n\n // We return nothing if the attribute is not undefined, a string or a function,\n // as it is not a valid value for a refinement\n return undefined;\n },\n /**\n * Test if the refinement value is used for the attribute. If no refinement value\n * is provided, test if the refinementList contains any refinement for the\n * given attribute.\n * @param {RefinementList} refinementList the list of refinement\n * @param {string} attribute name of the attribute\n * @param {string} [refinementValue] value of the filter/refinement\n * @return {boolean} true if the attribute is refined, false otherwise\n */\n isRefined: function isRefined(refinementList, attribute, refinementValue) {\n var containsRefinements =\n Boolean(refinementList[attribute]) &&\n refinementList[attribute].length > 0;\n\n if (refinementValue === undefined || !containsRefinements) {\n return containsRefinements;\n }\n\n var refinementValueAsString = '' + refinementValue;\n\n return refinementList[attribute].indexOf(refinementValueAsString) !== -1;\n },\n};\n\nmodule.exports = lib;\n","'use strict';\n\nvar defaultsPure = require('../functions/defaultsPure');\nvar find = require('../functions/find');\nvar intersection = require('../functions/intersection');\nvar merge = require('../functions/merge');\nvar objectHasKeys = require('../functions/objectHasKeys');\nvar omit = require('../functions/omit');\nvar valToNumber = require('../functions/valToNumber');\nvar isValidUserToken = require('../utils/isValidUserToken');\n\nvar RefinementList = require('./RefinementList');\n\n/**\n * isEqual, but only for numeric refinement values, possible values:\n * - 5\n * - [5]\n * - [[5]]\n * - [[5,5],[4]]\n * @param {any} a numeric refinement value\n * @param {any} b numeric refinement value\n * @return {boolean} true if the values are equal\n */\nfunction isEqualNumericRefinement(a, b) {\n if (Array.isArray(a) && Array.isArray(b)) {\n return (\n a.length === b.length &&\n a.every(function (el, i) {\n return isEqualNumericRefinement(b[i], el);\n })\n );\n }\n return a === b;\n}\n\n/**\n * like _.find but using deep equality to be able to use it\n * to find arrays.\n * @private\n * @param {any[]} array array to search into (elements are base or array of base)\n * @param {any} searchedValue the value we're looking for (base or array of base)\n * @return {any} the searched value or undefined\n */\nfunction findArray(array, searchedValue) {\n return find(array, function (currentValue) {\n return isEqualNumericRefinement(currentValue, searchedValue);\n });\n}\n\n/**\n * The facet list is the structure used to store the list of values used to\n * filter a single attribute.\n * @typedef {string[]} SearchParameters.FacetList\n */\n\n/**\n * Structure to store numeric filters with the operator as the key. The supported operators\n * are `=`, `>`, `<`, `>=`, `<=` and `!=`.\n * @typedef {Object.>} SearchParameters.OperatorList\n */\n\n/**\n * SearchParameters is the data structure that contains all the information\n * usable for making a search to Algolia API. It doesn't do the search itself,\n * nor does it contains logic about the parameters.\n * It is an immutable object, therefore it has been created in a way that each\n * changes does not change the object itself but returns a copy with the\n * modification.\n * This object should probably not be instantiated outside of the helper. It will\n * be provided when needed. This object is documented for reference as you'll\n * get it from events generated by the {@link AlgoliaSearchHelper}.\n * If need be, instantiate the Helper from the factory function {@link SearchParameters.make}\n * @constructor\n * @classdesc contains all the parameters of a search\n * @param {object|SearchParameters} newParameters existing parameters or partial object\n * for the properties of a new SearchParameters\n * @see SearchParameters.make\n * @example SearchParameters of the first query in\n * the instant search demo\n{\n \"query\": \"\",\n \"disjunctiveFacets\": [\n \"customerReviewCount\",\n \"category\",\n \"salePrice_range\",\n \"manufacturer\"\n ],\n \"maxValuesPerFacet\": 30,\n \"page\": 0,\n \"hitsPerPage\": 10,\n \"facets\": [\n \"type\",\n \"shipping\"\n ]\n}\n */\nfunction SearchParameters(newParameters) {\n var params = newParameters\n ? SearchParameters._parseNumbers(newParameters)\n : {};\n\n if (params.userToken !== undefined && !isValidUserToken(params.userToken)) {\n // eslint-disable-next-line no-console\n console.warn(\n '[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\\n - Format: [a-zA-Z0-9_-]{1,64}'\n );\n }\n /**\n * This attribute contains the list of all the conjunctive facets\n * used. This list will be added to requested facets in the\n * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n * @member {string[]}\n */\n this.facets = params.facets || [];\n /**\n * This attribute contains the list of all the disjunctive facets\n * used. This list will be added to requested facets in the\n * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n * @member {string[]}\n */\n this.disjunctiveFacets = params.disjunctiveFacets || [];\n /**\n * This attribute contains the list of all the hierarchical facets\n * used. This list will be added to requested facets in the\n * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n * Hierarchical facets are a sub type of disjunctive facets that\n * let you filter faceted attributes hierarchically.\n * @member {string[]|object[]}\n */\n this.hierarchicalFacets = params.hierarchicalFacets || [];\n\n // Refinements\n /**\n * This attribute contains all the filters that need to be\n * applied on the conjunctive facets. Each facet must be properly\n * defined in the `facets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters selected for the associated facet name.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.facetsRefinements = params.facetsRefinements || {};\n /**\n * This attribute contains all the filters that need to be\n * excluded from the conjunctive facets. Each facet must be properly\n * defined in the `facets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters excluded for the associated facet name.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.facetsExcludes = params.facetsExcludes || {};\n /**\n * This attribute contains all the filters that need to be\n * applied on the disjunctive facets. Each facet must be properly\n * defined in the `disjunctiveFacets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters selected for the associated facet name.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.disjunctiveFacetsRefinements = params.disjunctiveFacetsRefinements || {};\n /**\n * This attribute contains all the filters that need to be\n * applied on the numeric attributes.\n *\n * The key is the name of the attribute, and the value is the\n * filters to apply to this attribute.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `numericFilters` attribute.\n * @member {Object.}\n */\n this.numericRefinements = params.numericRefinements || {};\n /**\n * This attribute contains all the tags used to refine the query.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `tagFilters` attribute.\n * @member {string[]}\n */\n this.tagRefinements = params.tagRefinements || [];\n /**\n * This attribute contains all the filters that need to be\n * applied on the hierarchical facets. Each facet must be properly\n * defined in the `hierarchicalFacets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters selected for the associated facet name. The FacetList values\n * are structured as a string that contain the values for each level\n * separated by the configured separator.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.hierarchicalFacetsRefinements =\n params.hierarchicalFacetsRefinements || {};\n\n // eslint-disable-next-line consistent-this\n var self = this;\n Object.keys(params).forEach(function (paramName) {\n var isKeyKnown = SearchParameters.PARAMETERS.indexOf(paramName) !== -1;\n var isValueDefined = params[paramName] !== undefined;\n\n if (!isKeyKnown && isValueDefined) {\n self[paramName] = params[paramName];\n }\n });\n}\n\n/**\n * List all the properties in SearchParameters and therefore all the known Algolia properties\n * This doesn't contain any beta/hidden features.\n * @private\n */\nSearchParameters.PARAMETERS = Object.keys(new SearchParameters());\n\n/**\n * @private\n * @param {object} partialState full or part of a state\n * @return {object} a new object with the number keys as number\n */\nSearchParameters._parseNumbers = function (partialState) {\n // Do not parse numbers again in SearchParameters, they ought to be parsed already\n if (partialState instanceof SearchParameters) return partialState;\n\n var numbers = {};\n\n var numberKeys = [\n 'aroundPrecision',\n 'aroundRadius',\n 'getRankingInfo',\n 'minWordSizefor2Typos',\n 'minWordSizefor1Typo',\n 'page',\n 'maxValuesPerFacet',\n 'distinct',\n 'minimumAroundRadius',\n 'hitsPerPage',\n 'minProximity',\n ];\n\n numberKeys.forEach(function (k) {\n var value = partialState[k];\n if (typeof value === 'string') {\n var parsedValue = parseFloat(value);\n // global isNaN is ok to use here, value is only number or NaN\n numbers[k] = isNaN(parsedValue) ? value : parsedValue;\n }\n });\n\n // there's two formats of insideBoundingBox, we need to parse\n // the one which is an array of float geo rectangles\n if (Array.isArray(partialState.insideBoundingBox)) {\n numbers.insideBoundingBox = partialState.insideBoundingBox.map(function (\n geoRect\n ) {\n if (Array.isArray(geoRect)) {\n return geoRect.map(function (value) {\n return parseFloat(value);\n });\n }\n return geoRect;\n });\n }\n\n if (partialState.numericRefinements) {\n var numericRefinements = {};\n Object.keys(partialState.numericRefinements).forEach(function (attribute) {\n var operators = partialState.numericRefinements[attribute] || {};\n numericRefinements[attribute] = {};\n Object.keys(operators).forEach(function (operator) {\n var values = operators[operator];\n var parsedValues = values.map(function (v) {\n if (Array.isArray(v)) {\n return v.map(function (vPrime) {\n if (typeof vPrime === 'string') {\n return parseFloat(vPrime);\n }\n return vPrime;\n });\n } else if (typeof v === 'string') {\n return parseFloat(v);\n }\n return v;\n });\n numericRefinements[attribute][operator] = parsedValues;\n });\n });\n numbers.numericRefinements = numericRefinements;\n }\n\n return merge(partialState, numbers);\n};\n\n/**\n * Factory for SearchParameters\n * @param {object|SearchParameters} newParameters existing parameters or partial\n * object for the properties of a new SearchParameters\n * @return {SearchParameters} frozen instance of SearchParameters\n */\nSearchParameters.make = function makeSearchParameters(newParameters) {\n var instance = new SearchParameters(newParameters);\n\n var hierarchicalFacets = newParameters.hierarchicalFacets || [];\n hierarchicalFacets.forEach(function (facet) {\n if (facet.rootPath) {\n var currentRefinement = instance.getHierarchicalRefinement(facet.name);\n\n if (\n currentRefinement.length > 0 &&\n currentRefinement[0].indexOf(facet.rootPath) !== 0\n ) {\n instance = instance.clearRefinements(facet.name);\n }\n\n // get it again in case it has been cleared\n currentRefinement = instance.getHierarchicalRefinement(facet.name);\n if (currentRefinement.length === 0) {\n instance = instance.toggleHierarchicalFacetRefinement(\n facet.name,\n facet.rootPath\n );\n }\n }\n });\n\n return instance;\n};\n\n/**\n * Validates the new parameters based on the previous state\n * @param {SearchParameters} currentState the current state\n * @param {object|SearchParameters} parameters the new parameters to set\n * @return {Error|null} Error if the modification is invalid, null otherwise\n */\nSearchParameters.validate = function (currentState, parameters) {\n var params = parameters || {};\n\n if (\n currentState.tagFilters &&\n params.tagRefinements &&\n params.tagRefinements.length > 0\n ) {\n return new Error(\n '[Tags] Cannot switch from the managed tag API to the advanced API. It is probably ' +\n 'an error, if it is really what you want, you should first clear the tags with clearTags method.'\n );\n }\n\n if (currentState.tagRefinements.length > 0 && params.tagFilters) {\n return new Error(\n '[Tags] Cannot switch from the advanced tag API to the managed API. It is probably ' +\n 'an error, if it is not, you should first clear the tags with clearTags method.'\n );\n }\n\n if (\n currentState.numericFilters &&\n params.numericRefinements &&\n objectHasKeys(params.numericRefinements)\n ) {\n return new Error(\n \"[Numeric filters] Can't switch from the advanced to the managed API. It\" +\n ' is probably an error, if this is really what you want, you have to first' +\n ' clear the numeric filters.'\n );\n }\n\n if (objectHasKeys(currentState.numericRefinements) && params.numericFilters) {\n return new Error(\n \"[Numeric filters] Can't switch from the managed API to the advanced. It\" +\n ' is probably an error, if this is really what you want, you have to first' +\n ' clear the numeric filters.'\n );\n }\n\n return null;\n};\n\nSearchParameters.prototype = {\n constructor: SearchParameters,\n\n /**\n * Remove all refinements (disjunctive + conjunctive + excludes + numeric filters)\n * @method\n * @param {undefined|string|SearchParameters.clearCallback} [attribute] optional string or function\n * - If not given, means to clear all the filters.\n * - If `string`, means to clear all refinements for the `attribute` named filter.\n * - If `function`, means to clear all the refinements that return truthy values.\n * @return {SearchParameters} new instance with filters cleared\n */\n clearRefinements: function clearRefinements(attribute) {\n var patch = {\n numericRefinements: this._clearNumericRefinements(attribute),\n facetsRefinements: RefinementList.clearRefinement(\n this.facetsRefinements,\n attribute,\n 'conjunctiveFacet'\n ),\n facetsExcludes: RefinementList.clearRefinement(\n this.facetsExcludes,\n attribute,\n 'exclude'\n ),\n disjunctiveFacetsRefinements: RefinementList.clearRefinement(\n this.disjunctiveFacetsRefinements,\n attribute,\n 'disjunctiveFacet'\n ),\n hierarchicalFacetsRefinements: RefinementList.clearRefinement(\n this.hierarchicalFacetsRefinements,\n attribute,\n 'hierarchicalFacet'\n ),\n };\n if (\n patch.numericRefinements === this.numericRefinements &&\n patch.facetsRefinements === this.facetsRefinements &&\n patch.facetsExcludes === this.facetsExcludes &&\n patch.disjunctiveFacetsRefinements ===\n this.disjunctiveFacetsRefinements &&\n patch.hierarchicalFacetsRefinements === this.hierarchicalFacetsRefinements\n ) {\n return this;\n }\n return this.setQueryParameters(patch);\n },\n /**\n * Remove all the refined tags from the SearchParameters\n * @method\n * @return {SearchParameters} new instance with tags cleared\n */\n clearTags: function clearTags() {\n if (this.tagFilters === undefined && this.tagRefinements.length === 0)\n return this;\n\n return this.setQueryParameters({\n tagFilters: undefined,\n tagRefinements: [],\n });\n },\n /**\n * Set the index.\n * @method\n * @param {string} index the index name\n * @return {SearchParameters} new instance\n */\n setIndex: function setIndex(index) {\n if (index === this.index) return this;\n\n return this.setQueryParameters({\n index: index,\n });\n },\n /**\n * Query setter\n * @method\n * @param {string} newQuery value for the new query\n * @return {SearchParameters} new instance\n */\n setQuery: function setQuery(newQuery) {\n if (newQuery === this.query) return this;\n\n return this.setQueryParameters({\n query: newQuery,\n });\n },\n /**\n * Page setter\n * @method\n * @param {number} newPage new page number\n * @return {SearchParameters} new instance\n */\n setPage: function setPage(newPage) {\n if (newPage === this.page) return this;\n\n return this.setQueryParameters({\n page: newPage,\n });\n },\n /**\n * Facets setter\n * The facets are the simple facets, used for conjunctive (and) faceting.\n * @method\n * @param {string[]} facets all the attributes of the algolia records used for conjunctive faceting\n * @return {SearchParameters} new instance\n */\n setFacets: function setFacets(facets) {\n return this.setQueryParameters({\n facets: facets,\n });\n },\n /**\n * Disjunctive facets setter\n * Change the list of disjunctive (or) facets the helper chan handle.\n * @method\n * @param {string[]} facets all the attributes of the algolia records used for disjunctive faceting\n * @return {SearchParameters} new instance\n */\n setDisjunctiveFacets: function setDisjunctiveFacets(facets) {\n return this.setQueryParameters({\n disjunctiveFacets: facets,\n });\n },\n /**\n * HitsPerPage setter\n * Hits per page represents the number of hits retrieved for this query\n * @method\n * @param {number} n number of hits retrieved per page of results\n * @return {SearchParameters} new instance\n */\n setHitsPerPage: function setHitsPerPage(n) {\n if (this.hitsPerPage === n) return this;\n\n return this.setQueryParameters({\n hitsPerPage: n,\n });\n },\n /**\n * typoTolerance setter\n * Set the value of typoTolerance\n * @method\n * @param {string} typoTolerance new value of typoTolerance (\"true\", \"false\", \"min\" or \"strict\")\n * @return {SearchParameters} new instance\n */\n setTypoTolerance: function setTypoTolerance(typoTolerance) {\n if (this.typoTolerance === typoTolerance) return this;\n\n return this.setQueryParameters({\n typoTolerance: typoTolerance,\n });\n },\n /**\n * Add a numeric filter for a given attribute\n * When value is an array, they are combined with OR\n * When value is a single value, it will combined with AND\n * @method\n * @param {string} attribute attribute to set the filter on\n * @param {string} operator operator of the filter (possible values: =, >, >=, <, <=, !=)\n * @param {number | number[]} value value of the filter\n * @return {SearchParameters} new instance\n * @example\n * // for price = 50 or 40\n * state.addNumericRefinement('price', '=', [50, 40]);\n * @example\n * // for size = 38 and 40\n * state.addNumericRefinement('size', '=', 38);\n * state.addNumericRefinement('size', '=', 40);\n */\n addNumericRefinement: function (attribute, operator, value) {\n var val = valToNumber(value);\n\n if (this.isNumericRefined(attribute, operator, val)) return this;\n\n var mod = merge({}, this.numericRefinements);\n\n mod[attribute] = merge({}, mod[attribute]);\n\n if (mod[attribute][operator]) {\n // Array copy\n mod[attribute][operator] = mod[attribute][operator].slice();\n // Add the element. Concat can't be used here because value can be an array.\n mod[attribute][operator].push(val);\n } else {\n mod[attribute][operator] = [val];\n }\n\n return this.setQueryParameters({\n numericRefinements: mod,\n });\n },\n /**\n * Get the list of conjunctive refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getConjunctiveRefinements: function (facetName) {\n if (!this.isConjunctiveFacet(facetName)) {\n return [];\n }\n return this.facetsRefinements[facetName] || [];\n },\n /**\n * Get the list of disjunctive refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getDisjunctiveRefinements: function (facetName) {\n if (!this.isDisjunctiveFacet(facetName)) {\n return [];\n }\n return this.disjunctiveFacetsRefinements[facetName] || [];\n },\n /**\n * Get the list of hierarchical refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getHierarchicalRefinement: function (facetName) {\n // we send an array but we currently do not support multiple\n // hierarchicalRefinements for a hierarchicalFacet\n return this.hierarchicalFacetsRefinements[facetName] || [];\n },\n /**\n * Get the list of exclude refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getExcludeRefinements: function (facetName) {\n if (!this.isConjunctiveFacet(facetName)) {\n return [];\n }\n return this.facetsExcludes[facetName] || [];\n },\n\n /**\n * Remove all the numeric filter for a given (attribute, operator)\n * @method\n * @param {string} attribute attribute to set the filter on\n * @param {string} [operator] operator of the filter (possible values: =, >, >=, <, <=, !=)\n * @param {number} [number] the value to be removed\n * @return {SearchParameters} new instance\n */\n removeNumericRefinement: function (attribute, operator, number) {\n var paramValue = number;\n if (paramValue !== undefined) {\n if (!this.isNumericRefined(attribute, operator, paramValue)) {\n return this;\n }\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function (\n value,\n key\n ) {\n return (\n key === attribute &&\n value.op === operator &&\n isEqualNumericRefinement(value.val, valToNumber(paramValue))\n );\n }),\n });\n } else if (operator !== undefined) {\n if (!this.isNumericRefined(attribute, operator)) return this;\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function (\n value,\n key\n ) {\n return key === attribute && value.op === operator;\n }),\n });\n }\n\n if (!this.isNumericRefined(attribute)) return this;\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function (value, key) {\n return key === attribute;\n }),\n });\n },\n /**\n * Get the list of numeric refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {SearchParameters.OperatorList} list of refinements\n */\n getNumericRefinements: function (facetName) {\n return this.numericRefinements[facetName] || {};\n },\n /**\n * Return the current refinement for the (attribute, operator)\n * @param {string} attribute attribute in the record\n * @param {string} operator operator applied on the refined values\n * @return {Array.} refined values\n */\n getNumericRefinement: function (attribute, operator) {\n return (\n this.numericRefinements[attribute] &&\n this.numericRefinements[attribute][operator]\n );\n },\n /**\n * Clear numeric filters.\n * @method\n * @private\n * @param {string|SearchParameters.clearCallback} [attribute] optional string or function\n * - If not given, means to clear all the filters.\n * - If `string`, means to clear all refinements for the `attribute` named filter.\n * - If `function`, means to clear all the refinements that return truthy values.\n * @return {Object.} new numeric refinements\n */\n _clearNumericRefinements: function _clearNumericRefinements(attribute) {\n if (attribute === undefined) {\n if (!objectHasKeys(this.numericRefinements)) {\n return this.numericRefinements;\n }\n return {};\n } else if (typeof attribute === 'string') {\n return omit(this.numericRefinements, [attribute]);\n } else if (typeof attribute === 'function') {\n var hasChanged = false;\n var numericRefinements = this.numericRefinements;\n var newNumericRefinements = Object.keys(numericRefinements).reduce(\n function (memo, key) {\n var operators = numericRefinements[key];\n var operatorList = {};\n\n operators = operators || {};\n Object.keys(operators).forEach(function (operator) {\n var values = operators[operator] || [];\n var outValues = [];\n values.forEach(function (value) {\n var predicateResult = attribute(\n { val: value, op: operator },\n key,\n 'numeric'\n );\n if (!predicateResult) outValues.push(value);\n });\n if (outValues.length !== values.length) {\n hasChanged = true;\n }\n operatorList[operator] = outValues;\n });\n\n memo[key] = operatorList;\n\n return memo;\n },\n {}\n );\n\n if (hasChanged) return newNumericRefinements;\n return this.numericRefinements;\n }\n\n // We return nothing if the attribute is not undefined, a string or a function,\n // as it is not a valid value for a refinement\n return undefined;\n },\n /**\n * Add a facet to the facets attribute of the helper configuration, if it\n * isn't already present.\n * @method\n * @param {string} facet facet name to add\n * @return {SearchParameters} new instance\n */\n addFacet: function addFacet(facet) {\n if (this.isConjunctiveFacet(facet)) {\n return this;\n }\n\n return this.setQueryParameters({\n facets: this.facets.concat([facet]),\n });\n },\n /**\n * Add a disjunctive facet to the disjunctiveFacets attribute of the helper\n * configuration, if it isn't already present.\n * @method\n * @param {string} facet disjunctive facet name to add\n * @return {SearchParameters} new instance\n */\n addDisjunctiveFacet: function addDisjunctiveFacet(facet) {\n if (this.isDisjunctiveFacet(facet)) {\n return this;\n }\n\n return this.setQueryParameters({\n disjunctiveFacets: this.disjunctiveFacets.concat([facet]),\n });\n },\n /**\n * Add a hierarchical facet to the hierarchicalFacets attribute of the helper\n * configuration.\n * @method\n * @param {object} hierarchicalFacet hierarchical facet to add\n * @return {SearchParameters} new instance\n * @throws will throw an error if a hierarchical facet with the same name was already declared\n */\n addHierarchicalFacet: function addHierarchicalFacet(hierarchicalFacet) {\n if (this.isHierarchicalFacet(hierarchicalFacet.name)) {\n throw new Error(\n 'Cannot declare two hierarchical facets with the same name: `' +\n hierarchicalFacet.name +\n '`'\n );\n }\n\n return this.setQueryParameters({\n hierarchicalFacets: this.hierarchicalFacets.concat([hierarchicalFacet]),\n });\n },\n /**\n * Add a refinement on a \"normal\" facet\n * @method\n * @param {string} facet attribute to apply the faceting on\n * @param {string} value value of the attribute (will be converted to string)\n * @return {SearchParameters} new instance\n */\n addFacetRefinement: function addFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n if (RefinementList.isRefined(this.facetsRefinements, facet, value))\n return this;\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.addRefinement(\n this.facetsRefinements,\n facet,\n value\n ),\n });\n },\n /**\n * Exclude a value from a \"normal\" facet\n * @method\n * @param {string} facet attribute to apply the exclusion on\n * @param {string} value value of the attribute (will be converted to string)\n * @return {SearchParameters} new instance\n */\n addExcludeRefinement: function addExcludeRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n if (RefinementList.isRefined(this.facetsExcludes, facet, value))\n return this;\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.addRefinement(\n this.facetsExcludes,\n facet,\n value\n ),\n });\n },\n /**\n * Adds a refinement on a disjunctive facet.\n * @method\n * @param {string} facet attribute to apply the faceting on\n * @param {string} value value of the attribute (will be converted to string)\n * @return {SearchParameters} new instance\n */\n addDisjunctiveFacetRefinement: function addDisjunctiveFacetRefinement(\n facet,\n value\n ) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the disjunctiveFacets attribute of the helper configuration'\n );\n }\n\n if (\n RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)\n )\n return this;\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.addRefinement(\n this.disjunctiveFacetsRefinements,\n facet,\n value\n ),\n });\n },\n /**\n * addTagRefinement adds a tag to the list used to filter the results\n * @param {string} tag tag to be added\n * @return {SearchParameters} new instance\n */\n addTagRefinement: function addTagRefinement(tag) {\n if (this.isTagRefined(tag)) return this;\n\n var modification = {\n tagRefinements: this.tagRefinements.concat(tag),\n };\n\n return this.setQueryParameters(modification);\n },\n /**\n * Remove a facet from the facets attribute of the helper configuration, if it\n * is present.\n * @method\n * @param {string} facet facet name to remove\n * @return {SearchParameters} new instance\n */\n removeFacet: function removeFacet(facet) {\n if (!this.isConjunctiveFacet(facet)) {\n return this;\n }\n\n return this.clearRefinements(facet).setQueryParameters({\n facets: this.facets.filter(function (f) {\n return f !== facet;\n }),\n });\n },\n /**\n * Remove a disjunctive facet from the disjunctiveFacets attribute of the\n * helper configuration, if it is present.\n * @method\n * @param {string} facet disjunctive facet name to remove\n * @return {SearchParameters} new instance\n */\n removeDisjunctiveFacet: function removeDisjunctiveFacet(facet) {\n if (!this.isDisjunctiveFacet(facet)) {\n return this;\n }\n\n return this.clearRefinements(facet).setQueryParameters({\n disjunctiveFacets: this.disjunctiveFacets.filter(function (f) {\n return f !== facet;\n }),\n });\n },\n /**\n * Remove a hierarchical facet from the hierarchicalFacets attribute of the\n * helper configuration, if it is present.\n * @method\n * @param {string} facet hierarchical facet name to remove\n * @return {SearchParameters} new instance\n */\n removeHierarchicalFacet: function removeHierarchicalFacet(facet) {\n if (!this.isHierarchicalFacet(facet)) {\n return this;\n }\n\n return this.clearRefinements(facet).setQueryParameters({\n hierarchicalFacets: this.hierarchicalFacets.filter(function (f) {\n return f.name !== facet;\n }),\n });\n },\n /**\n * Remove a refinement set on facet. If a value is provided, it will clear the\n * refinement for the given value, otherwise it will clear all the refinement\n * values for the faceted attribute.\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {string} [value] value used to filter\n * @return {SearchParameters} new instance\n */\n removeFacetRefinement: function removeFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n if (!RefinementList.isRefined(this.facetsRefinements, facet, value))\n return this;\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.removeRefinement(\n this.facetsRefinements,\n facet,\n value\n ),\n });\n },\n /**\n * Remove a negative refinement on a facet\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {string} value value used to filter\n * @return {SearchParameters} new instance\n */\n removeExcludeRefinement: function removeExcludeRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n if (!RefinementList.isRefined(this.facetsExcludes, facet, value))\n return this;\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.removeRefinement(\n this.facetsExcludes,\n facet,\n value\n ),\n });\n },\n /**\n * Remove a refinement on a disjunctive facet\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {string} value value used to filter\n * @return {SearchParameters} new instance\n */\n removeDisjunctiveFacetRefinement: function removeDisjunctiveFacetRefinement(\n facet,\n value\n ) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the disjunctiveFacets attribute of the helper configuration'\n );\n }\n if (\n !RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)\n )\n return this;\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.removeRefinement(\n this.disjunctiveFacetsRefinements,\n facet,\n value\n ),\n });\n },\n /**\n * Remove a tag from the list of tag refinements\n * @method\n * @param {string} tag the tag to remove\n * @return {SearchParameters} new instance\n */\n removeTagRefinement: function removeTagRefinement(tag) {\n if (!this.isTagRefined(tag)) return this;\n\n var modification = {\n tagRefinements: this.tagRefinements.filter(function (t) {\n return t !== tag;\n }),\n };\n\n return this.setQueryParameters(modification);\n },\n /**\n * Generic toggle refinement method to use with facet, disjunctive facets\n * and hierarchical facets\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {SearchParameters} new instance\n * @throws will throw an error if the facet is not declared in the settings of the helper\n * @deprecated since version 2.19.0, see {@link SearchParameters#toggleFacetRefinement}\n */\n toggleRefinement: function toggleRefinement(facet, value) {\n return this.toggleFacetRefinement(facet, value);\n },\n /**\n * Generic toggle refinement method to use with facet, disjunctive facets\n * and hierarchical facets\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {SearchParameters} new instance\n * @throws will throw an error if the facet is not declared in the settings of the helper\n */\n toggleFacetRefinement: function toggleFacetRefinement(facet, value) {\n if (this.isHierarchicalFacet(facet)) {\n return this.toggleHierarchicalFacetRefinement(facet, value);\n } else if (this.isConjunctiveFacet(facet)) {\n return this.toggleConjunctiveFacetRefinement(facet, value);\n } else if (this.isDisjunctiveFacet(facet)) {\n return this.toggleDisjunctiveFacetRefinement(facet, value);\n }\n\n throw new Error(\n 'Cannot refine the undeclared facet ' +\n facet +\n '; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets'\n );\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters} new instance\n */\n toggleConjunctiveFacetRefinement: function toggleConjunctiveFacetRefinement(\n facet,\n value\n ) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.toggleRefinement(\n this.facetsRefinements,\n facet,\n value\n ),\n });\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters} new instance\n */\n toggleExcludeFacetRefinement: function toggleExcludeFacetRefinement(\n facet,\n value\n ) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.toggleRefinement(\n this.facetsExcludes,\n facet,\n value\n ),\n });\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters} new instance\n */\n toggleDisjunctiveFacetRefinement: function toggleDisjunctiveFacetRefinement(\n facet,\n value\n ) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the disjunctiveFacets attribute of the helper configuration'\n );\n }\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.toggleRefinement(\n this.disjunctiveFacetsRefinements,\n facet,\n value\n ),\n });\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters} new instance\n */\n toggleHierarchicalFacetRefinement: function toggleHierarchicalFacetRefinement(\n facet,\n value\n ) {\n if (!this.isHierarchicalFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the hierarchicalFacets attribute of the helper configuration'\n );\n }\n\n var separator = this._getHierarchicalFacetSeparator(\n this.getHierarchicalFacetByName(facet)\n );\n\n var mod = {};\n\n var upOneOrMultipleLevel =\n this.hierarchicalFacetsRefinements[facet] !== undefined &&\n this.hierarchicalFacetsRefinements[facet].length > 0 &&\n // remove current refinement:\n // refinement was 'beer > IPA', call is toggleRefine('beer > IPA'), refinement should be `beer`\n (this.hierarchicalFacetsRefinements[facet][0] === value ||\n // remove a parent refinement of the current refinement:\n // - refinement was 'beer > IPA > Flying dog'\n // - call is toggleRefine('beer > IPA')\n // - refinement should be `beer`\n this.hierarchicalFacetsRefinements[facet][0].indexOf(\n value + separator\n ) === 0);\n\n if (upOneOrMultipleLevel) {\n if (value.indexOf(separator) === -1) {\n // go back to root level\n mod[facet] = [];\n } else {\n mod[facet] = [value.slice(0, value.lastIndexOf(separator))];\n }\n } else {\n mod[facet] = [value];\n }\n\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaultsPure(\n mod,\n this.hierarchicalFacetsRefinements\n ),\n });\n },\n\n /**\n * Adds a refinement on a hierarchical facet.\n * @param {string} facet the facet name\n * @param {string} path the hierarchical facet path\n * @return {SearchParameter} the new state\n * @throws Error if the facet is not defined or if the facet is refined\n */\n addHierarchicalFacetRefinement: function (facet, path) {\n if (this.isHierarchicalFacetRefined(facet)) {\n throw new Error(facet + ' is already refined.');\n }\n if (!this.isHierarchicalFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the hierarchicalFacets attribute of the helper configuration.'\n );\n }\n var mod = {};\n mod[facet] = [path];\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaultsPure(\n mod,\n this.hierarchicalFacetsRefinements\n ),\n });\n },\n\n /**\n * Removes the refinement set on a hierarchical facet.\n * @param {string} facet the facet name\n * @return {SearchParameter} the new state\n * @throws Error if the facet is not defined or if the facet is not refined\n */\n removeHierarchicalFacetRefinement: function (facet) {\n if (!this.isHierarchicalFacetRefined(facet)) {\n return this;\n }\n var mod = {};\n mod[facet] = [];\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaultsPure(\n mod,\n this.hierarchicalFacetsRefinements\n ),\n });\n },\n /**\n * Switch the tag refinement\n * @method\n * @param {string} tag the tag to remove or add\n * @return {SearchParameters} new instance\n */\n toggleTagRefinement: function toggleTagRefinement(tag) {\n if (this.isTagRefined(tag)) {\n return this.removeTagRefinement(tag);\n }\n\n return this.addTagRefinement(tag);\n },\n /**\n * Test if the facet name is from one of the disjunctive facets\n * @method\n * @param {string} facet facet name to test\n * @return {boolean} true if facet is a disjunctive facet\n */\n isDisjunctiveFacet: function (facet) {\n return this.disjunctiveFacets.indexOf(facet) > -1;\n },\n /**\n * Test if the facet name is from one of the hierarchical facets\n * @method\n * @param {string} facetName facet name to test\n * @return {boolean} true if facetName is a hierarchical facet\n */\n isHierarchicalFacet: function (facetName) {\n return this.getHierarchicalFacetByName(facetName) !== undefined;\n },\n /**\n * Test if the facet name is from one of the conjunctive/normal facets\n * @method\n * @param {string} facet facet name to test\n * @return {boolean} true if facet is a conjunctive facet\n */\n isConjunctiveFacet: function (facet) {\n return this.facets.indexOf(facet) > -1;\n },\n /**\n * Returns true if the facet is refined, either for a specific value or in\n * general.\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} value, optional value. If passed will test that this value\n * is filtering the given facet.\n * @return {boolean} returns true if refined\n */\n isFacetRefined: function isFacetRefined(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n return false;\n }\n return RefinementList.isRefined(this.facetsRefinements, facet, value);\n },\n /**\n * Returns true if the facet contains exclusions or if a specific value is\n * excluded.\n *\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} [value] optional value. If passed will test that this value\n * is filtering the given facet.\n * @return {boolean} returns true if refined\n */\n isExcludeRefined: function isExcludeRefined(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n return false;\n }\n return RefinementList.isRefined(this.facetsExcludes, facet, value);\n },\n /**\n * Returns true if the facet contains a refinement, or if a value passed is a\n * refinement for the facet.\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} value optional, will test if the value is used for refinement\n * if there is one, otherwise will test if the facet contains any refinement\n * @return {boolean} true if the facet is refined\n */\n isDisjunctiveFacetRefined: function isDisjunctiveFacetRefined(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n return false;\n }\n return RefinementList.isRefined(\n this.disjunctiveFacetsRefinements,\n facet,\n value\n );\n },\n /**\n * Returns true if the facet contains a refinement, or if a value passed is a\n * refinement for the facet.\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} value optional, will test if the value is used for refinement\n * if there is one, otherwise will test if the facet contains any refinement\n * @return {boolean} true if the facet is refined\n */\n isHierarchicalFacetRefined: function isHierarchicalFacetRefined(\n facet,\n value\n ) {\n if (!this.isHierarchicalFacet(facet)) {\n return false;\n }\n\n var refinements = this.getHierarchicalRefinement(facet);\n\n if (!value) {\n return refinements.length > 0;\n }\n\n return refinements.indexOf(value) !== -1;\n },\n /**\n * Test if the triple (attribute, operator, value) is already refined.\n * If only the attribute and the operator are provided, it tests if the\n * contains any refinement value.\n * @method\n * @param {string} attribute attribute for which the refinement is applied\n * @param {string} [operator] operator of the refinement\n * @param {string} [value] value of the refinement\n * @return {boolean} true if it is refined\n */\n isNumericRefined: function isNumericRefined(attribute, operator, value) {\n if (value === undefined && operator === undefined) {\n return Boolean(this.numericRefinements[attribute]);\n }\n\n var isOperatorDefined =\n this.numericRefinements[attribute] &&\n this.numericRefinements[attribute][operator] !== undefined;\n\n if (value === undefined || !isOperatorDefined) {\n return isOperatorDefined;\n }\n\n var parsedValue = valToNumber(value);\n var isAttributeValueDefined =\n findArray(this.numericRefinements[attribute][operator], parsedValue) !==\n undefined;\n\n return isOperatorDefined && isAttributeValueDefined;\n },\n /**\n * Returns true if the tag refined, false otherwise\n * @method\n * @param {string} tag the tag to check\n * @return {boolean} true if tag is refined\n */\n isTagRefined: function isTagRefined(tag) {\n return this.tagRefinements.indexOf(tag) !== -1;\n },\n /**\n * Returns the list of all disjunctive facets refined\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {string[]} returns the list of refinements\n */\n getRefinedDisjunctiveFacets: function getRefinedDisjunctiveFacets() {\n // eslint-disable-next-line consistent-this\n var self = this;\n\n // attributes used for numeric filter can also be disjunctive\n var disjunctiveNumericRefinedFacets = intersection(\n Object.keys(this.numericRefinements).filter(function (facet) {\n return Object.keys(self.numericRefinements[facet]).length > 0;\n }),\n this.disjunctiveFacets\n );\n\n return Object.keys(this.disjunctiveFacetsRefinements)\n .filter(function (facet) {\n return self.disjunctiveFacetsRefinements[facet].length > 0;\n })\n .concat(disjunctiveNumericRefinedFacets)\n .concat(this.getRefinedHierarchicalFacets())\n .sort();\n },\n /**\n * Returns the list of all disjunctive facets refined\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {string[]} returns the list of refinements\n */\n getRefinedHierarchicalFacets: function getRefinedHierarchicalFacets() {\n // eslint-disable-next-line consistent-this\n var self = this;\n return intersection(\n // enforce the order between the two arrays,\n // so that refinement name index === hierarchical facet index\n this.hierarchicalFacets.map(function (facet) {\n return facet.name;\n }),\n Object.keys(this.hierarchicalFacetsRefinements).filter(function (facet) {\n return self.hierarchicalFacetsRefinements[facet].length > 0;\n })\n ).sort();\n },\n /**\n * Returned the list of all disjunctive facets not refined\n * @method\n * @return {string[]} returns the list of facets that are not refined\n */\n getUnrefinedDisjunctiveFacets: function () {\n var refinedFacets = this.getRefinedDisjunctiveFacets();\n\n return this.disjunctiveFacets.filter(function (f) {\n return refinedFacets.indexOf(f) === -1;\n });\n },\n\n managedParameters: [\n 'index',\n\n 'facets',\n 'disjunctiveFacets',\n 'facetsRefinements',\n 'hierarchicalFacets',\n 'facetsExcludes',\n\n 'disjunctiveFacetsRefinements',\n 'numericRefinements',\n 'tagRefinements',\n 'hierarchicalFacetsRefinements',\n ],\n\n getQueryParams: function getQueryParams() {\n var managedParameters = this.managedParameters;\n\n var queryParams = {};\n\n // eslint-disable-next-line consistent-this\n var self = this;\n Object.keys(this).forEach(function (paramName) {\n var paramValue = self[paramName];\n if (\n managedParameters.indexOf(paramName) === -1 &&\n paramValue !== undefined\n ) {\n queryParams[paramName] = paramValue;\n }\n });\n\n return queryParams;\n },\n /**\n * Let the user set a specific value for a given parameter. Will return the\n * same instance if the parameter is invalid or if the value is the same as the\n * previous one.\n * @method\n * @param {string} parameter the parameter name\n * @param {any} value the value to be set, must be compliant with the definition\n * of the attribute on the object\n * @return {SearchParameters} the updated state\n */\n setQueryParameter: function setParameter(parameter, value) {\n if (this[parameter] === value) return this;\n\n var modification = {};\n\n modification[parameter] = value;\n\n return this.setQueryParameters(modification);\n },\n /**\n * Let the user set any of the parameters with a plain object.\n * @method\n * @param {object} params all the keys and the values to be updated\n * @return {SearchParameters} a new updated instance\n */\n setQueryParameters: function setQueryParameters(params) {\n if (!params) return this;\n\n var error = SearchParameters.validate(this, params);\n\n if (error) {\n throw error;\n }\n\n // eslint-disable-next-line consistent-this\n var self = this;\n var nextWithNumbers = SearchParameters._parseNumbers(params);\n var previousPlainObject = Object.keys(this).reduce(function (acc, key) {\n acc[key] = self[key];\n return acc;\n }, {});\n\n var nextPlainObject = Object.keys(nextWithNumbers).reduce(function (\n previous,\n key\n ) {\n var isPreviousValueDefined = previous[key] !== undefined;\n var isNextValueDefined = nextWithNumbers[key] !== undefined;\n\n if (isPreviousValueDefined && !isNextValueDefined) {\n return omit(previous, [key]);\n }\n\n if (isNextValueDefined) {\n previous[key] = nextWithNumbers[key];\n }\n\n return previous;\n },\n previousPlainObject);\n\n return new this.constructor(nextPlainObject);\n },\n\n /**\n * Returns a new instance with the page reset. Two scenarios possible:\n * the page is omitted -> return the given instance\n * the page is set -> return a new instance with a page of 0\n * @return {SearchParameters} a new updated instance\n */\n resetPage: function () {\n if (this.page === undefined) {\n return this;\n }\n\n return this.setPage(0);\n },\n\n /**\n * Helper function to get the hierarchicalFacet separator or the default one (`>`)\n * @param {object} hierarchicalFacet the hierarchicalFacet object\n * @return {string} returns the hierarchicalFacet.separator or `>` as default\n */\n _getHierarchicalFacetSortBy: function (hierarchicalFacet) {\n return hierarchicalFacet.sortBy || ['isRefined:desc', 'name:asc'];\n },\n\n /**\n * Helper function to get the hierarchicalFacet separator or the default one (`>`)\n * @private\n * @param {object} hierarchicalFacet the hierarchicalFacet object\n * @return {string} returns the hierarchicalFacet.separator or `>` as default\n */\n _getHierarchicalFacetSeparator: function (hierarchicalFacet) {\n return hierarchicalFacet.separator || ' > ';\n },\n\n /**\n * Helper function to get the hierarchicalFacet prefix path or null\n * @private\n * @param {object} hierarchicalFacet the hierarchicalFacet object\n * @return {string} returns the hierarchicalFacet.rootPath or null as default\n */\n _getHierarchicalRootPath: function (hierarchicalFacet) {\n return hierarchicalFacet.rootPath || null;\n },\n\n /**\n * Helper function to check if we show the parent level of the hierarchicalFacet\n * @private\n * @param {object} hierarchicalFacet the hierarchicalFacet object\n * @return {string} returns the hierarchicalFacet.showParentLevel or true as default\n */\n _getHierarchicalShowParentLevel: function (hierarchicalFacet) {\n if (typeof hierarchicalFacet.showParentLevel === 'boolean') {\n return hierarchicalFacet.showParentLevel;\n }\n return true;\n },\n\n /**\n * Helper function to get the hierarchicalFacet by it's name\n * @param {string} hierarchicalFacetName the hierarchicalFacet name\n * @return {object} a hierarchicalFacet\n */\n getHierarchicalFacetByName: function (hierarchicalFacetName) {\n return find(this.hierarchicalFacets, function (f) {\n return f.name === hierarchicalFacetName;\n });\n },\n\n /**\n * Get the current breadcrumb for a hierarchical facet, as an array\n * @param {string} facetName Hierarchical facet name\n * @return {array.} the path as an array of string\n */\n getHierarchicalFacetBreadcrumb: function (facetName) {\n if (!this.isHierarchicalFacet(facetName)) {\n return [];\n }\n\n var refinement = this.getHierarchicalRefinement(facetName)[0];\n if (!refinement) return [];\n\n var separator = this._getHierarchicalFacetSeparator(\n this.getHierarchicalFacetByName(facetName)\n );\n var path = refinement.split(separator);\n return path.map(function (part) {\n return part.trim();\n });\n },\n\n toString: function () {\n return JSON.stringify(this, null, 2);\n },\n};\n\n/**\n * Callback used for clearRefinement method\n * @callback SearchParameters.clearCallback\n * @param {OperatorList|FacetList} value the value of the filter\n * @param {string} key the current attribute name\n * @param {string} type `numeric`, `disjunctiveFacet`, `conjunctiveFacet`, `hierarchicalFacet` or `exclude`\n * depending on the type of facet\n * @return {boolean} `true` if the element should be removed. `false` otherwise.\n */\nmodule.exports = SearchParameters;\n","'use strict';\n\nmodule.exports = generateTrees;\n\nvar fv = require('../functions/escapeFacetValue');\nvar find = require('../functions/find');\nvar prepareHierarchicalFacetSortBy = require('../functions/formatSort');\nvar orderBy = require('../functions/orderBy');\nvar escapeFacetValue = fv.escapeFacetValue;\nvar unescapeFacetValue = fv.unescapeFacetValue;\n\nfunction generateTrees(state) {\n return function generate(hierarchicalFacetResult, hierarchicalFacetIndex) {\n var hierarchicalFacet = state.hierarchicalFacets[hierarchicalFacetIndex];\n var hierarchicalFacetRefinement =\n (state.hierarchicalFacetsRefinements[hierarchicalFacet.name] &&\n state.hierarchicalFacetsRefinements[hierarchicalFacet.name][0]) ||\n '';\n var hierarchicalSeparator =\n state._getHierarchicalFacetSeparator(hierarchicalFacet);\n var hierarchicalRootPath =\n state._getHierarchicalRootPath(hierarchicalFacet);\n var hierarchicalShowParentLevel =\n state._getHierarchicalShowParentLevel(hierarchicalFacet);\n var sortBy = prepareHierarchicalFacetSortBy(\n state._getHierarchicalFacetSortBy(hierarchicalFacet)\n );\n\n var rootExhaustive = hierarchicalFacetResult.every(function (facetResult) {\n return facetResult.exhaustive;\n });\n\n var generateTreeFn = generateHierarchicalTree(\n sortBy,\n hierarchicalSeparator,\n hierarchicalRootPath,\n hierarchicalShowParentLevel,\n hierarchicalFacetRefinement\n );\n\n var results = hierarchicalFacetResult;\n\n if (hierarchicalRootPath) {\n results = hierarchicalFacetResult.slice(\n hierarchicalRootPath.split(hierarchicalSeparator).length\n );\n }\n\n return results.reduce(generateTreeFn, {\n name: state.hierarchicalFacets[hierarchicalFacetIndex].name,\n count: null, // root level, no count\n isRefined: true, // root level, always refined\n path: null, // root level, no path\n escapedValue: null,\n exhaustive: rootExhaustive,\n data: null,\n });\n };\n}\n\nfunction generateHierarchicalTree(\n sortBy,\n hierarchicalSeparator,\n hierarchicalRootPath,\n hierarchicalShowParentLevel,\n currentRefinement\n) {\n return function generateTree(\n hierarchicalTree,\n hierarchicalFacetResult,\n currentHierarchicalLevel\n ) {\n var parent = hierarchicalTree;\n\n if (currentHierarchicalLevel > 0) {\n var level = 0;\n\n parent = hierarchicalTree;\n\n while (level < currentHierarchicalLevel) {\n /**\n * @type {object[]]} hierarchical data\n */\n var data = parent && Array.isArray(parent.data) ? parent.data : [];\n parent = find(data, function (subtree) {\n return subtree.isRefined;\n });\n level++;\n }\n }\n\n // we found a refined parent, let's add current level data under it\n if (parent) {\n // filter values in case an object has multiple categories:\n // {\n // categories: {\n // level0: ['beers', 'bières'],\n // level1: ['beers > IPA', 'bières > Belges']\n // }\n // }\n //\n // If parent refinement is `beers`, then we do not want to have `bières > Belges`\n // showing up\n\n var picked = Object.keys(hierarchicalFacetResult.data)\n .map(function (facetValue) {\n return [facetValue, hierarchicalFacetResult.data[facetValue]];\n })\n .filter(function (tuple) {\n var facetValue = tuple[0];\n return onlyMatchingTree(\n facetValue,\n parent.path || hierarchicalRootPath,\n currentRefinement,\n hierarchicalSeparator,\n hierarchicalRootPath,\n hierarchicalShowParentLevel\n );\n });\n\n parent.data = orderBy(\n picked.map(function (tuple) {\n var facetValue = tuple[0];\n var facetCount = tuple[1];\n\n return format(\n facetCount,\n facetValue,\n hierarchicalSeparator,\n unescapeFacetValue(currentRefinement),\n hierarchicalFacetResult.exhaustive\n );\n }),\n sortBy[0],\n sortBy[1]\n );\n }\n\n return hierarchicalTree;\n };\n}\n\n// eslint-disable-next-line max-params\nfunction onlyMatchingTree(\n facetValue,\n parentPath,\n currentRefinement,\n hierarchicalSeparator,\n hierarchicalRootPath,\n hierarchicalShowParentLevel\n) {\n // we want the facetValue is a child of hierarchicalRootPath\n if (\n hierarchicalRootPath &&\n (facetValue.indexOf(hierarchicalRootPath) !== 0 ||\n hierarchicalRootPath === facetValue)\n ) {\n return false;\n }\n\n // we always want root levels (only when there is no prefix path)\n return (\n (!hierarchicalRootPath &&\n facetValue.indexOf(hierarchicalSeparator) === -1) ||\n // if there is a rootPath, being root level mean 1 level under rootPath\n (hierarchicalRootPath &&\n facetValue.split(hierarchicalSeparator).length -\n hierarchicalRootPath.split(hierarchicalSeparator).length ===\n 1) ||\n // if current refinement is a root level and current facetValue is a root level,\n // keep the facetValue\n (facetValue.indexOf(hierarchicalSeparator) === -1 &&\n currentRefinement.indexOf(hierarchicalSeparator) === -1) ||\n // currentRefinement is a child of the facet value\n currentRefinement.indexOf(facetValue) === 0 ||\n // facetValue is a child of the current parent, add it\n (facetValue.indexOf(parentPath + hierarchicalSeparator) === 0 &&\n (hierarchicalShowParentLevel ||\n facetValue.indexOf(currentRefinement) === 0))\n );\n}\n\nfunction format(\n facetCount,\n facetValue,\n hierarchicalSeparator,\n currentRefinement,\n exhaustive\n) {\n var parts = facetValue.split(hierarchicalSeparator);\n return {\n name: parts[parts.length - 1].trim(),\n path: facetValue,\n escapedValue: escapeFacetValue(facetValue),\n count: facetCount,\n isRefined:\n currentRefinement === facetValue ||\n currentRefinement.indexOf(facetValue + hierarchicalSeparator) === 0,\n exhaustive: exhaustive,\n data: null,\n };\n}\n","'use strict';\n\nvar compact = require('../functions/compact');\nvar defaultsPure = require('../functions/defaultsPure');\nvar fv = require('../functions/escapeFacetValue');\nvar find = require('../functions/find');\nvar findIndex = require('../functions/findIndex');\nvar formatSort = require('../functions/formatSort');\nvar mergeNumericMax = require('../functions/mergeNumericMax');\nvar orderBy = require('../functions/orderBy');\nvar escapeFacetValue = fv.escapeFacetValue;\nvar unescapeFacetValue = fv.unescapeFacetValue;\n\nvar generateHierarchicalTree = require('./generate-hierarchical-tree');\n\n/**\n * @typedef SearchResults.Facet\n * @type {object}\n * @property {string} name name of the attribute in the record\n * @property {object} data the faceting data: value, number of entries\n * @property {object} stats undefined unless facet_stats is retrieved from algolia\n */\n\n/**\n * @typedef SearchResults.HierarchicalFacet\n * @type {object}\n * @property {string} name name of the current value given the hierarchical level, trimmed.\n * If root node, you get the facet name\n * @property {number} count number of objects matching this hierarchical value\n * @property {string} path the current hierarchical value full path\n * @property {boolean} isRefined `true` if the current value was refined, `false` otherwise\n * @property {HierarchicalFacet[]} data sub values for the current level\n */\n\n/**\n * @typedef SearchResults.FacetValue\n * @type {object}\n * @property {string} name the facet value itself\n * @property {number} count times this facet appears in the results\n * @property {boolean} isRefined is the facet currently selected\n * @property {boolean} isExcluded is the facet currently excluded (only for conjunctive facets)\n */\n\n/**\n * @typedef Refinement\n * @type {object}\n * @property {string} type the type of filter used:\n * `numeric`, `facet`, `exclude`, `disjunctive`, `hierarchical`\n * @property {string} attributeName name of the attribute used for filtering\n * @property {string} name the value of the filter\n * @property {number} numericValue the value as a number. Only for numeric filters.\n * @property {string} operator the operator used. Only for numeric filters.\n * @property {number} count the number of computed hits for this filter. Only on facets.\n * @property {boolean} exhaustive if the count is exhaustive\n */\n\n/**\n * Turn an array of attributes in an object of attributes with their position in the array as value\n * @param {string[]} attributes the list of attributes in the record\n * @return {object} the list of attributes indexed by attribute name\n */\nfunction getIndices(attributes) {\n var indices = {};\n\n attributes.forEach(function (val, idx) {\n indices[val] = idx;\n });\n\n return indices;\n}\n\nfunction assignFacetStats(dest, facetStats, key) {\n if (facetStats && facetStats[key]) {\n dest.stats = facetStats[key];\n }\n}\n\n/**\n * @typedef {Object} HierarchicalFacet\n * @property {string} name\n * @property {string[]} attributes\n */\n\n/**\n * @param {HierarchicalFacet[]} hierarchicalFacets All hierarchical facets\n * @param {string} hierarchicalAttributeName The name of the hierarchical attribute\n * @return {HierarchicalFacet} The hierarchical facet matching the attribute name\n */\nfunction findMatchingHierarchicalFacetFromAttributeName(\n hierarchicalFacets,\n hierarchicalAttributeName\n) {\n return find(\n hierarchicalFacets,\n function facetKeyMatchesAttribute(hierarchicalFacet) {\n var facetNames = hierarchicalFacet.attributes || [];\n return facetNames.indexOf(hierarchicalAttributeName) > -1;\n }\n );\n}\n\n/**\n * Constructor for SearchResults\n * @class\n * @classdesc SearchResults contains the results of a query to Algolia using the\n * {@link AlgoliaSearchHelper}.\n * @param {SearchParameters} state state that led to the response\n * @param {array.} results the results from algolia client\n * @param {object} options options to control results content\n * @example SearchResults of the first query in\n * the instant search demo\n{\n \"hitsPerPage\": 10,\n \"processingTimeMS\": 2,\n \"facets\": [\n {\n \"name\": \"type\",\n \"data\": {\n \"HardGood\": 6627,\n \"BlackTie\": 550,\n \"Music\": 665,\n \"Software\": 131,\n \"Game\": 456,\n \"Movie\": 1571\n },\n \"exhaustive\": false\n },\n {\n \"exhaustive\": false,\n \"data\": {\n \"Free shipping\": 5507\n },\n \"name\": \"shipping\"\n }\n ],\n \"hits\": [\n {\n \"thumbnailImage\": \"http://img.bbystatic.com/BestBuy_US/images/products/1688/1688832_54x108_s.gif\",\n \"_highlightResult\": {\n \"shortDescription\": {\n \"matchLevel\": \"none\",\n \"value\": \"Safeguard your PC, Mac, Android and iOS devices with comprehensive Internet protection\",\n \"matchedWords\": []\n },\n \"category\": {\n \"matchLevel\": \"none\",\n \"value\": \"Computer Security Software\",\n \"matchedWords\": []\n },\n \"manufacturer\": {\n \"matchedWords\": [],\n \"value\": \"Webroot\",\n \"matchLevel\": \"none\"\n },\n \"name\": {\n \"value\": \"Webroot SecureAnywhere Internet Security (3-Device) (1-Year Subscription) - Mac/Windows\",\n \"matchedWords\": [],\n \"matchLevel\": \"none\"\n }\n },\n \"image\": \"http://img.bbystatic.com/BestBuy_US/images/products/1688/1688832_105x210_sc.jpg\",\n \"shipping\": \"Free shipping\",\n \"bestSellingRank\": 4,\n \"shortDescription\": \"Safeguard your PC, Mac, Android and iOS devices with comprehensive Internet protection\",\n \"url\": \"http://www.bestbuy.com/site/webroot-secureanywhere-internet-security-3-devi…d=1219060687969&skuId=1688832&cmp=RMX&ky=2d3GfEmNIzjA0vkzveHdZEBgpPCyMnLTJ\",\n \"name\": \"Webroot SecureAnywhere Internet Security (3-Device) (1-Year Subscription) - Mac/Windows\",\n \"category\": \"Computer Security Software\",\n \"salePrice_range\": \"1 - 50\",\n \"objectID\": \"1688832\",\n \"type\": \"Software\",\n \"customerReviewCount\": 5980,\n \"salePrice\": 49.99,\n \"manufacturer\": \"Webroot\"\n },\n ....\n ],\n \"nbHits\": 10000,\n \"disjunctiveFacets\": [\n {\n \"exhaustive\": false,\n \"data\": {\n \"5\": 183,\n \"12\": 112,\n \"7\": 149,\n ...\n },\n \"name\": \"customerReviewCount\",\n \"stats\": {\n \"max\": 7461,\n \"avg\": 157.939,\n \"min\": 1\n }\n },\n {\n \"data\": {\n \"Printer Ink\": 142,\n \"Wireless Speakers\": 60,\n \"Point & Shoot Cameras\": 48,\n ...\n },\n \"name\": \"category\",\n \"exhaustive\": false\n },\n {\n \"exhaustive\": false,\n \"data\": {\n \"> 5000\": 2,\n \"1 - 50\": 6524,\n \"501 - 2000\": 566,\n \"201 - 500\": 1501,\n \"101 - 200\": 1360,\n \"2001 - 5000\": 47\n },\n \"name\": \"salePrice_range\"\n },\n {\n \"data\": {\n \"Dynexâ„¢\": 202,\n \"Insigniaâ„¢\": 230,\n \"PNY\": 72,\n ...\n },\n \"name\": \"manufacturer\",\n \"exhaustive\": false\n }\n ],\n \"query\": \"\",\n \"nbPages\": 100,\n \"page\": 0,\n \"index\": \"bestbuy\"\n}\n **/\nfunction SearchResults(state, results, options) {\n var mainSubResponse = results[0] || {};\n\n this._rawResults = results;\n\n // eslint-disable-next-line consistent-this\n var self = this;\n\n // https://www.algolia.com/doc/api-reference/api-methods/search/#response\n Object.keys(mainSubResponse).forEach(function (key) {\n self[key] = mainSubResponse[key];\n });\n\n // Make every key of the result options reachable from the instance\n var opts = defaultsPure(options, {\n persistHierarchicalRootCount: false,\n });\n Object.keys(opts).forEach(function (key) {\n self[key] = opts[key];\n });\n\n /**\n * query used to generate the results\n * @name query\n * @member {string}\n * @memberof SearchResults\n * @instance\n */\n /**\n * The query as parsed by the engine given all the rules.\n * @name parsedQuery\n * @member {string}\n * @memberof SearchResults\n * @instance\n */\n /**\n * all the records that match the search parameters. Each record is\n * augmented with a new attribute `_highlightResult`\n * which is an object keyed by attribute and with the following properties:\n * - `value` : the value of the facet highlighted (html)\n * - `matchLevel`: `full`, `partial` or `none`, depending on how the query terms match\n * @name hits\n * @member {object[]}\n * @memberof SearchResults\n * @instance\n */\n /**\n * index where the results come from\n * @name index\n * @member {string}\n * @memberof SearchResults\n * @instance\n */\n /**\n * number of hits per page requested\n * @name hitsPerPage\n * @member {number}\n * @memberof SearchResults\n * @instance\n */\n /**\n * total number of hits of this query on the index\n * @name nbHits\n * @member {number}\n * @memberof SearchResults\n * @instance\n */\n /**\n * total number of pages with respect to the number of hits per page and the total number of hits\n * @name nbPages\n * @member {number}\n * @memberof SearchResults\n * @instance\n */\n /**\n * current page\n * @name page\n * @member {number}\n * @memberof SearchResults\n * @instance\n */\n /**\n * The position if the position was guessed by IP.\n * @name aroundLatLng\n * @member {string}\n * @memberof SearchResults\n * @instance\n * @example \"48.8637,2.3615\",\n */\n /**\n * The radius computed by Algolia.\n * @name automaticRadius\n * @member {string}\n * @memberof SearchResults\n * @instance\n * @example \"126792922\",\n */\n /**\n * String identifying the server used to serve this request.\n *\n * getRankingInfo needs to be set to `true` for this to be returned\n *\n * @name serverUsed\n * @member {string}\n * @memberof SearchResults\n * @instance\n * @example \"c7-use-2.algolia.net\",\n */\n /**\n * Boolean that indicates if the computation of the counts did time out.\n * @deprecated\n * @name timeoutCounts\n * @member {boolean}\n * @memberof SearchResults\n * @instance\n */\n /**\n * Boolean that indicates if the computation of the hits did time out.\n * @deprecated\n * @name timeoutHits\n * @member {boolean}\n * @memberof SearchResults\n * @instance\n */\n /**\n * True if the counts of the facets is exhaustive\n * @name exhaustiveFacetsCount\n * @member {boolean}\n * @memberof SearchResults\n * @instance\n */\n /**\n * True if the number of hits is exhaustive\n * @name exhaustiveNbHits\n * @member {boolean}\n * @memberof SearchResults\n * @instance\n */\n /**\n * Contains the userData if they are set by a [query rule](https://www.algolia.com/doc/guides/query-rules/query-rules-overview/).\n * @name userData\n * @member {object[]}\n * @memberof SearchResults\n * @instance\n */\n /**\n * queryID is the unique identifier of the query used to generate the current search results.\n * This value is only available if the `clickAnalytics` search parameter is set to `true`.\n * @name queryID\n * @member {string}\n * @memberof SearchResults\n * @instance\n */\n\n /**\n * sum of the processing time of all the queries\n * @name processingTimeMS\n * @member {number}\n * @memberof SearchResults\n * @instance\n */\n this.processingTimeMS = results.reduce(function (sum, result) {\n return result.processingTimeMS === undefined\n ? sum\n : sum + result.processingTimeMS;\n }, 0);\n\n /**\n * disjunctive facets results\n * @member {SearchResults.Facet[]}\n */\n this.disjunctiveFacets = [];\n /**\n * disjunctive facets results\n * @member {SearchResults.HierarchicalFacet[]}\n */\n this.hierarchicalFacets = state.hierarchicalFacets.map(\n function initFutureTree() {\n return [];\n }\n );\n /**\n * other facets results\n * @member {SearchResults.Facet[]}\n */\n this.facets = [];\n\n var disjunctiveFacets = state.getRefinedDisjunctiveFacets();\n\n var facetsIndices = getIndices(state.facets);\n var disjunctiveFacetsIndices = getIndices(state.disjunctiveFacets);\n var nextDisjunctiveResult = 1;\n\n // Since we send request only for disjunctive facets that have been refined,\n // we get the facets information from the first, general, response.\n\n var mainFacets = mainSubResponse.facets || {};\n\n Object.keys(mainFacets).forEach(function (facetKey) {\n var facetValueObject = mainFacets[facetKey];\n\n var hierarchicalFacet = findMatchingHierarchicalFacetFromAttributeName(\n state.hierarchicalFacets,\n facetKey\n );\n\n if (hierarchicalFacet) {\n // Place the hierarchicalFacet data at the correct index depending on\n // the attributes order that was defined at the helper initialization\n var facetIndex = hierarchicalFacet.attributes.indexOf(facetKey);\n var idxAttributeName = findIndex(state.hierarchicalFacets, function (f) {\n return f.name === hierarchicalFacet.name;\n });\n self.hierarchicalFacets[idxAttributeName][facetIndex] = {\n attribute: facetKey,\n data: facetValueObject,\n exhaustive: mainSubResponse.exhaustiveFacetsCount,\n };\n } else {\n var isFacetDisjunctive = state.disjunctiveFacets.indexOf(facetKey) !== -1;\n var isFacetConjunctive = state.facets.indexOf(facetKey) !== -1;\n var position;\n\n if (isFacetDisjunctive) {\n position = disjunctiveFacetsIndices[facetKey];\n self.disjunctiveFacets[position] = {\n name: facetKey,\n data: facetValueObject,\n exhaustive: mainSubResponse.exhaustiveFacetsCount,\n };\n assignFacetStats(\n self.disjunctiveFacets[position],\n mainSubResponse.facets_stats,\n facetKey\n );\n }\n if (isFacetConjunctive) {\n position = facetsIndices[facetKey];\n self.facets[position] = {\n name: facetKey,\n data: facetValueObject,\n exhaustive: mainSubResponse.exhaustiveFacetsCount,\n };\n assignFacetStats(\n self.facets[position],\n mainSubResponse.facets_stats,\n facetKey\n );\n }\n }\n });\n\n // Make sure we do not keep holes within the hierarchical facets\n this.hierarchicalFacets = compact(this.hierarchicalFacets);\n\n // aggregate the refined disjunctive facets\n disjunctiveFacets.forEach(function (disjunctiveFacet) {\n var result = results[nextDisjunctiveResult];\n var facets = result && result.facets ? result.facets : {};\n var hierarchicalFacet = state.getHierarchicalFacetByName(disjunctiveFacet);\n\n // There should be only item in facets.\n Object.keys(facets).forEach(function (dfacet) {\n var facetResults = facets[dfacet];\n\n var position;\n\n if (hierarchicalFacet) {\n position = findIndex(state.hierarchicalFacets, function (f) {\n return f.name === hierarchicalFacet.name;\n });\n var attributeIndex = findIndex(\n self.hierarchicalFacets[position],\n function (f) {\n return f.attribute === dfacet;\n }\n );\n\n // previous refinements and no results so not able to find it\n if (attributeIndex === -1) {\n return;\n }\n\n self.hierarchicalFacets[position][attributeIndex].data =\n self.persistHierarchicalRootCount\n ? mergeNumericMax(\n self.hierarchicalFacets[position][attributeIndex].data,\n facetResults\n )\n : defaultsPure(\n facetResults,\n self.hierarchicalFacets[position][attributeIndex].data\n );\n } else {\n position = disjunctiveFacetsIndices[dfacet];\n\n var dataFromMainRequest =\n (mainSubResponse.facets && mainSubResponse.facets[dfacet]) || {};\n\n self.disjunctiveFacets[position] = {\n name: dfacet,\n data: mergeNumericMax(dataFromMainRequest, facetResults),\n exhaustive: result.exhaustiveFacetsCount,\n };\n assignFacetStats(\n self.disjunctiveFacets[position],\n result.facets_stats,\n dfacet\n );\n\n if (state.disjunctiveFacetsRefinements[dfacet]) {\n state.disjunctiveFacetsRefinements[dfacet].forEach(function (\n refinementValue\n ) {\n // add the disjunctive refinements if it is no more retrieved\n if (\n !self.disjunctiveFacets[position].data[refinementValue] &&\n state.disjunctiveFacetsRefinements[dfacet].indexOf(\n unescapeFacetValue(refinementValue)\n ) > -1\n ) {\n self.disjunctiveFacets[position].data[refinementValue] = 0;\n }\n });\n }\n }\n });\n nextDisjunctiveResult++;\n });\n\n // if we have some parent level values for hierarchical facets, merge them\n state.getRefinedHierarchicalFacets().forEach(function (refinedFacet) {\n var hierarchicalFacet = state.getHierarchicalFacetByName(refinedFacet);\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n\n var currentRefinement = state.getHierarchicalRefinement(refinedFacet);\n // if we are already at a root refinement (or no refinement at all), there is no\n // root level values request\n if (\n currentRefinement.length === 0 ||\n currentRefinement[0].split(separator).length < 2\n ) {\n return;\n }\n\n results.slice(nextDisjunctiveResult).forEach(function (result) {\n var facets = result && result.facets ? result.facets : {};\n\n Object.keys(facets).forEach(function (dfacet) {\n var facetResults = facets[dfacet];\n var position = findIndex(state.hierarchicalFacets, function (f) {\n return f.name === hierarchicalFacet.name;\n });\n var attributeIndex = findIndex(\n self.hierarchicalFacets[position],\n function (f) {\n return f.attribute === dfacet;\n }\n );\n\n // previous refinements and no results so not able to find it\n if (attributeIndex === -1) {\n return;\n }\n\n // when we always get root levels, if the hits refinement is `beers > IPA` (count: 5),\n // then the disjunctive values will be `beers` (count: 100),\n // but we do not want to display\n // | beers (100)\n // > IPA (5)\n // We want\n // | beers (5)\n // > IPA (5)\n // @MAJOR: remove this legacy behaviour in next major version\n var defaultData = {};\n\n if (\n currentRefinement.length > 0 &&\n !self.persistHierarchicalRootCount\n ) {\n var root = currentRefinement[0].split(separator)[0];\n defaultData[root] =\n self.hierarchicalFacets[position][attributeIndex].data[root];\n }\n\n self.hierarchicalFacets[position][attributeIndex].data = defaultsPure(\n defaultData,\n facetResults,\n self.hierarchicalFacets[position][attributeIndex].data\n );\n });\n\n nextDisjunctiveResult++;\n });\n });\n\n // add the excludes\n Object.keys(state.facetsExcludes).forEach(function (facetName) {\n var excludes = state.facetsExcludes[facetName];\n var position = facetsIndices[facetName];\n\n self.facets[position] = {\n name: facetName,\n data: mainFacets[facetName],\n exhaustive: mainSubResponse.exhaustiveFacetsCount,\n };\n excludes.forEach(function (facetValue) {\n self.facets[position] = self.facets[position] || { name: facetName };\n self.facets[position].data = self.facets[position].data || {};\n self.facets[position].data[facetValue] = 0;\n });\n });\n\n /**\n * @type {Array}\n */\n this.hierarchicalFacets = this.hierarchicalFacets.map(\n generateHierarchicalTree(state)\n );\n\n /**\n * @type {Array}\n */\n this.facets = compact(this.facets);\n /**\n * @type {Array}\n */\n this.disjunctiveFacets = compact(this.disjunctiveFacets);\n\n this._state = state;\n}\n\n/**\n * Get a facet object with its name\n * @deprecated\n * @param {string} name name of the faceted attribute\n * @return {SearchResults.Facet} the facet object\n */\nSearchResults.prototype.getFacetByName = function (name) {\n function predicate(facet) {\n return facet.name === name;\n }\n\n return (\n find(this.facets, predicate) ||\n find(this.disjunctiveFacets, predicate) ||\n find(this.hierarchicalFacets, predicate)\n );\n};\n\n/**\n * Get the facet values of a specified attribute from a SearchResults object.\n * @private\n * @param {SearchResults} results the search results to search in\n * @param {string} attribute name of the faceted attribute to search for\n * @return {array|object} facet values. For the hierarchical facets it is an object.\n */\nfunction extractNormalizedFacetValues(results, attribute) {\n function predicate(facet) {\n return facet.name === attribute;\n }\n\n if (results._state.isConjunctiveFacet(attribute)) {\n var facet = find(results.facets, predicate);\n if (!facet) return [];\n\n return Object.keys(facet.data).map(function (name) {\n var value = escapeFacetValue(name);\n return {\n name: name,\n escapedValue: value,\n count: facet.data[name],\n isRefined: results._state.isFacetRefined(attribute, value),\n isExcluded: results._state.isExcludeRefined(attribute, name),\n };\n });\n } else if (results._state.isDisjunctiveFacet(attribute)) {\n var disjunctiveFacet = find(results.disjunctiveFacets, predicate);\n if (!disjunctiveFacet) return [];\n\n return Object.keys(disjunctiveFacet.data).map(function (name) {\n var value = escapeFacetValue(name);\n return {\n name: name,\n escapedValue: value,\n count: disjunctiveFacet.data[name],\n isRefined: results._state.isDisjunctiveFacetRefined(attribute, value),\n };\n });\n } else if (results._state.isHierarchicalFacet(attribute)) {\n var hierarchicalFacetValues = find(results.hierarchicalFacets, predicate);\n if (!hierarchicalFacetValues) return hierarchicalFacetValues;\n\n var hierarchicalFacet =\n results._state.getHierarchicalFacetByName(attribute);\n var separator =\n results._state._getHierarchicalFacetSeparator(hierarchicalFacet);\n var currentRefinement = unescapeFacetValue(\n results._state.getHierarchicalRefinement(attribute)[0] || ''\n );\n\n if (currentRefinement.indexOf(hierarchicalFacet.rootPath) === 0) {\n currentRefinement = currentRefinement.replace(\n hierarchicalFacet.rootPath + separator,\n ''\n );\n }\n\n var currentRefinementSplit = currentRefinement.split(separator);\n currentRefinementSplit.unshift(attribute);\n\n setIsRefined(hierarchicalFacetValues, currentRefinementSplit, 0);\n\n return hierarchicalFacetValues;\n }\n\n return undefined;\n}\n\n/**\n * Set the isRefined of a hierarchical facet result based on the current state.\n * @param {SearchResults.HierarchicalFacet} item Hierarchical facet to fix\n * @param {string[]} currentRefinement array of parts of the current hierarchical refinement\n * @param {number} depth recursion depth in the currentRefinement\n * @return {undefined} function mutates the item\n */\nfunction setIsRefined(item, currentRefinement, depth) {\n item.isRefined =\n item.name === (currentRefinement[depth] && currentRefinement[depth].trim());\n if (item.data) {\n item.data.forEach(function (child) {\n setIsRefined(child, currentRefinement, depth + 1);\n });\n }\n}\n\n/**\n * Sort nodes of a hierarchical or disjunctive facet results\n * @private\n * @param {function} sortFn sort function to apply\n * @param {HierarchicalFacet|Array} node node upon which we want to apply the sort\n * @param {string[]} names attribute names\n * @param {number} [level=0] current index in the names array\n * @return {HierarchicalFacet|Array} sorted node\n */\nfunction recSort(sortFn, node, names, level) {\n level = level || 0;\n\n if (Array.isArray(node)) {\n return sortFn(node, names[level]);\n }\n\n if (!node.data || node.data.length === 0) {\n return node;\n }\n\n var children = node.data.map(function (childNode) {\n return recSort(sortFn, childNode, names, level + 1);\n });\n var sortedChildren = sortFn(children, names[level]);\n var newNode = defaultsPure({ data: sortedChildren }, node);\n return newNode;\n}\n\nSearchResults.DEFAULT_SORT = ['isRefined:desc', 'count:desc', 'name:asc'];\n\nfunction vanillaSortFn(order, data) {\n return data.sort(order);\n}\n\n/**\n * @typedef FacetOrdering\n * @type {Object}\n * @property {string[]} [order]\n * @property {'count' | 'alpha' | 'hidden'} [sortRemainingBy]\n */\n\n/**\n * Sorts facet arrays via their facet ordering\n * @param {Array} facetValues the values\n * @param {FacetOrdering} facetOrdering the ordering\n * @returns {Array} the sorted facet values\n */\nfunction sortViaFacetOrdering(facetValues, facetOrdering) {\n var orderedFacets = [];\n var remainingFacets = [];\n var hide = facetOrdering.hide || [];\n var order = facetOrdering.order || [];\n\n /**\n * an object with the keys being the values in order, the values their index:\n * ['one', 'two'] -> { one: 0, two: 1 }\n */\n var reverseOrder = order.reduce(function (acc, name, i) {\n acc[name] = i;\n return acc;\n }, {});\n\n facetValues.forEach(function (item) {\n // hierarchical facets get sorted using their raw name\n var name = item.path || item.name;\n var hidden = hide.indexOf(name) > -1;\n if (!hidden && reverseOrder[name] !== undefined) {\n orderedFacets[reverseOrder[name]] = item;\n } else if (!hidden) {\n remainingFacets.push(item);\n }\n });\n\n orderedFacets = orderedFacets.filter(function (facet) {\n return facet;\n });\n\n var sortRemainingBy = facetOrdering.sortRemainingBy;\n var ordering;\n if (sortRemainingBy === 'hidden') {\n return orderedFacets;\n } else if (sortRemainingBy === 'alpha') {\n ordering = [\n ['path', 'name'],\n ['asc', 'asc'],\n ];\n } else {\n ordering = [['count'], ['desc']];\n }\n\n return orderedFacets.concat(\n orderBy(remainingFacets, ordering[0], ordering[1])\n );\n}\n\n/**\n * @param {SearchResults} results the search results class\n * @param {string} attribute the attribute to retrieve ordering of\n * @returns {FacetOrdering | undefined} the facet ordering\n */\nfunction getFacetOrdering(results, attribute) {\n return (\n results.renderingContent &&\n results.renderingContent.facetOrdering &&\n results.renderingContent.facetOrdering.values &&\n results.renderingContent.facetOrdering.values[attribute]\n );\n}\n\n/**\n * Get a the list of values for a given facet attribute. Those values are sorted\n * refinement first, descending count (bigger value on top), and name ascending\n * (alphabetical order). The sort formula can overridden using either string based\n * predicates or a function.\n *\n * This method will return all the values returned by the Algolia engine plus all\n * the values already refined. This means that it can happen that the\n * `maxValuesPerFacet` [configuration](https://www.algolia.com/doc/rest-api/search#param-maxValuesPerFacet)\n * might not be respected if you have facet values that are already refined.\n * @param {string} attribute attribute name\n * @param {object} opts configuration options.\n * @param {boolean} [opts.facetOrdering]\n * Force the use of facetOrdering from the result if a sortBy is present. If\n * sortBy isn't present, facetOrdering will be used automatically.\n * @param {Array. | function} opts.sortBy\n * When using strings, it consists of\n * the name of the [FacetValue](#SearchResults.FacetValue) or the\n * [HierarchicalFacet](#SearchResults.HierarchicalFacet) attributes with the\n * order (`asc` or `desc`). For example to order the value by count, the\n * argument would be `['count:asc']`.\n *\n * If only the attribute name is specified, the ordering defaults to the one\n * specified in the default value for this attribute.\n *\n * When not specified, the order is\n * ascending. This parameter can also be a function which takes two facet\n * values and should return a number, 0 if equal, 1 if the first argument is\n * bigger or -1 otherwise.\n *\n * The default value for this attribute `['isRefined:desc', 'count:desc', 'name:asc']`\n * @return {FacetValue[]|HierarchicalFacet|undefined} depending on the type of facet of\n * the attribute requested (hierarchical, disjunctive or conjunctive)\n * @example\n * helper.on('result', function(event){\n * //get values ordered only by name ascending using the string predicate\n * event.results.getFacetValues('city', {sortBy: ['name:asc']});\n * //get values ordered only by count ascending using a function\n * event.results.getFacetValues('city', {\n * // this is equivalent to ['count:asc']\n * sortBy: function(a, b) {\n * if (a.count === b.count) return 0;\n * if (a.count > b.count) return 1;\n * if (b.count > a.count) return -1;\n * }\n * });\n * });\n */\nSearchResults.prototype.getFacetValues = function (attribute, opts) {\n var facetValues = extractNormalizedFacetValues(this, attribute);\n if (!facetValues) {\n return undefined;\n }\n\n var options = defaultsPure(opts, {\n sortBy: SearchResults.DEFAULT_SORT,\n // if no sortBy is given, attempt to sort based on facetOrdering\n // if it is given, we still allow to sort via facet ordering first\n facetOrdering: !(opts && opts.sortBy),\n });\n\n // eslint-disable-next-line consistent-this\n var results = this;\n var attributes;\n if (Array.isArray(facetValues)) {\n attributes = [attribute];\n } else {\n var config = results._state.getHierarchicalFacetByName(facetValues.name);\n attributes = config.attributes;\n }\n\n return recSort(\n function (data, facetName) {\n if (options.facetOrdering) {\n var facetOrdering = getFacetOrdering(results, facetName);\n if (facetOrdering) {\n return sortViaFacetOrdering(data, facetOrdering);\n }\n }\n\n if (Array.isArray(options.sortBy)) {\n var order = formatSort(options.sortBy, SearchResults.DEFAULT_SORT);\n return orderBy(data, order[0], order[1]);\n } else if (typeof options.sortBy === 'function') {\n return vanillaSortFn(options.sortBy, data);\n }\n throw new Error(\n 'options.sortBy is optional but if defined it must be ' +\n 'either an array of string (predicates) or a sorting function'\n );\n },\n facetValues,\n attributes\n );\n};\n\n/**\n * Returns the facet stats if attribute is defined and the facet contains some.\n * Otherwise returns undefined.\n * @param {string} attribute name of the faceted attribute\n * @return {object} The stats of the facet\n */\nSearchResults.prototype.getFacetStats = function (attribute) {\n if (this._state.isConjunctiveFacet(attribute)) {\n return getFacetStatsIfAvailable(this.facets, attribute);\n } else if (this._state.isDisjunctiveFacet(attribute)) {\n return getFacetStatsIfAvailable(this.disjunctiveFacets, attribute);\n }\n\n return undefined;\n};\n\n/**\n * @typedef {Object} FacetListItem\n * @property {string} name\n */\n\n/**\n * @param {FacetListItem[]} facetList (has more items, but enough for here)\n * @param {string} facetName The attribute to look for\n * @return {object|undefined} The stats of the facet\n */\nfunction getFacetStatsIfAvailable(facetList, facetName) {\n var data = find(facetList, function (facet) {\n return facet.name === facetName;\n });\n return data && data.stats;\n}\n\n/**\n * Returns all refinements for all filters + tags. It also provides\n * additional information: count and exhaustiveness for each filter.\n *\n * See the [refinement type](#Refinement) for an exhaustive view of the available\n * data.\n *\n * Note that for a numeric refinement, results are grouped per operator, this\n * means that it will return responses for operators which are empty.\n *\n * @return {Array.} all the refinements\n */\nSearchResults.prototype.getRefinements = function () {\n var state = this._state;\n // eslint-disable-next-line consistent-this\n var results = this;\n var res = [];\n\n Object.keys(state.facetsRefinements).forEach(function (attributeName) {\n state.facetsRefinements[attributeName].forEach(function (name) {\n res.push(\n getRefinement(state, 'facet', attributeName, name, results.facets)\n );\n });\n });\n\n Object.keys(state.facetsExcludes).forEach(function (attributeName) {\n state.facetsExcludes[attributeName].forEach(function (name) {\n res.push(\n getRefinement(state, 'exclude', attributeName, name, results.facets)\n );\n });\n });\n\n Object.keys(state.disjunctiveFacetsRefinements).forEach(function (\n attributeName\n ) {\n state.disjunctiveFacetsRefinements[attributeName].forEach(function (name) {\n res.push(\n getRefinement(\n state,\n 'disjunctive',\n attributeName,\n name,\n results.disjunctiveFacets\n )\n );\n });\n });\n\n Object.keys(state.hierarchicalFacetsRefinements).forEach(function (\n attributeName\n ) {\n state.hierarchicalFacetsRefinements[attributeName].forEach(function (name) {\n res.push(\n getHierarchicalRefinement(\n state,\n attributeName,\n name,\n results.hierarchicalFacets\n )\n );\n });\n });\n\n Object.keys(state.numericRefinements).forEach(function (attributeName) {\n var operators = state.numericRefinements[attributeName];\n Object.keys(operators).forEach(function (operator) {\n operators[operator].forEach(function (value) {\n res.push({\n type: 'numeric',\n attributeName: attributeName,\n name: value,\n numericValue: value,\n operator: operator,\n });\n });\n });\n });\n\n state.tagRefinements.forEach(function (name) {\n res.push({ type: 'tag', attributeName: '_tags', name: name });\n });\n\n return res;\n};\n\n/**\n * @typedef {Object} Facet\n * @property {string} name\n * @property {Object} data\n * @property {boolean} exhaustive\n */\n\n/**\n * @param {SearchParameters} state the current state\n * @param {string} type the type of the refinement\n * @param {string} attributeName The attribute of the facet\n * @param {*} name The name of the facet\n * @param {Facet[]} resultsFacets facets from the results\n * @return {Refinement} the refinement\n */\nfunction getRefinement(state, type, attributeName, name, resultsFacets) {\n var facet = find(resultsFacets, function (f) {\n return f.name === attributeName;\n });\n var count = facet && facet.data && facet.data[name] ? facet.data[name] : 0;\n var exhaustive = (facet && facet.exhaustive) || false;\n\n return {\n type: type,\n attributeName: attributeName,\n name: name,\n count: count,\n exhaustive: exhaustive,\n };\n}\n\n/**\n * @param {SearchParameters} state the current state\n * @param {string} attributeName the attribute of the hierarchical facet\n * @param {string} name the name of the facet\n * @param {Facet[]} resultsFacets facets from the results\n * @return {HierarchicalFacet} the hierarchical facet\n */\nfunction getHierarchicalRefinement(state, attributeName, name, resultsFacets) {\n var facetDeclaration = state.getHierarchicalFacetByName(attributeName);\n var separator = state._getHierarchicalFacetSeparator(facetDeclaration);\n var split = name.split(separator);\n var rootFacet = find(resultsFacets, function (facet) {\n return facet.name === attributeName;\n });\n\n var facet = split.reduce(function (intermediateFacet, part) {\n var newFacet =\n intermediateFacet &&\n find(intermediateFacet.data, function (f) {\n return f.name === part;\n });\n return newFacet !== undefined ? newFacet : intermediateFacet;\n }, rootFacet);\n\n var count = (facet && facet.count) || 0;\n var exhaustive = (facet && facet.exhaustive) || false;\n var path = (facet && facet.path) || '';\n\n return {\n type: 'hierarchical',\n attributeName: attributeName,\n name: path,\n count: count,\n exhaustive: exhaustive,\n };\n}\n\nmodule.exports = SearchResults;\n","'use strict';\n\nvar EventEmitter = require('@algolia/events');\n\nvar DerivedHelper = require('./DerivedHelper');\nvar escapeFacetValue = require('./functions/escapeFacetValue').escapeFacetValue;\nvar inherits = require('./functions/inherits');\nvar merge = require('./functions/merge');\nvar objectHasKeys = require('./functions/objectHasKeys');\nvar omit = require('./functions/omit');\nvar RecommendParameters = require('./RecommendParameters');\nvar RecommendResults = require('./RecommendResults');\nvar requestBuilder = require('./requestBuilder');\nvar SearchParameters = require('./SearchParameters');\nvar SearchResults = require('./SearchResults');\nvar sortAndMergeRecommendations = require('./utils/sortAndMergeRecommendations');\nvar version = require('./version');\n\n/**\n * Event triggered when a parameter is set or updated\n * @event AlgoliaSearchHelper#event:change\n * @property {object} event\n * @property {SearchParameters} event.state the current parameters with the latest changes applied\n * @property {SearchResults} event.results the previous results received from Algolia. `null` before the first request\n * @example\n * helper.on('change', function(event) {\n * console.log('The parameters have changed');\n * });\n */\n\n/**\n * Event triggered when a main search is sent to Algolia\n * @event AlgoliaSearchHelper#event:search\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search\n * @property {SearchResults} event.results the results from the previous search. `null` if it is the first search.\n * @example\n * helper.on('search', function(event) {\n * console.log('Search sent');\n * });\n */\n\n/**\n * Event triggered when a search using `searchForFacetValues` is sent to Algolia\n * @event AlgoliaSearchHelper#event:searchForFacetValues\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search it is the first search.\n * @property {string} event.facet the facet searched into\n * @property {string} event.query the query used to search in the facets\n * @example\n * helper.on('searchForFacetValues', function(event) {\n * console.log('searchForFacetValues sent');\n * });\n */\n\n/**\n * Event triggered when a search using `searchOnce` is sent to Algolia\n * @event AlgoliaSearchHelper#event:searchOnce\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search it is the first search.\n * @example\n * helper.on('searchOnce', function(event) {\n * console.log('searchOnce sent');\n * });\n */\n\n/**\n * Event triggered when the results are retrieved from Algolia\n * @event AlgoliaSearchHelper#event:result\n * @property {object} event\n * @property {SearchResults} event.results the results received from Algolia\n * @property {SearchParameters} event.state the parameters used to query Algolia. Those might be different from the one in the helper instance (for example if the network is unreliable).\n * @example\n * helper.on('result', function(event) {\n * console.log('Search results received');\n * });\n */\n\n/**\n * Event triggered when Algolia sends back an error. For example, if an unknown parameter is\n * used, the error can be caught using this event.\n * @event AlgoliaSearchHelper#event:error\n * @property {object} event\n * @property {Error} event.error the error returned by the Algolia.\n * @example\n * helper.on('error', function(event) {\n * console.log('Houston we got a problem.');\n * });\n */\n\n/**\n * Event triggered when the queue of queries have been depleted (with any result or outdated queries)\n * @event AlgoliaSearchHelper#event:searchQueueEmpty\n * @example\n * helper.on('searchQueueEmpty', function() {\n * console.log('No more search pending');\n * // This is received before the result event if we're not expecting new results\n * });\n *\n * helper.search();\n */\n\n/**\n * Initialize a new AlgoliaSearchHelper\n * @class\n * @classdesc The AlgoliaSearchHelper is a class that ease the management of the\n * search. It provides an event based interface for search callbacks:\n * - change: when the internal search state is changed.\n * This event contains a {@link SearchParameters} object and the\n * {@link SearchResults} of the last result if any.\n * - search: when a search is triggered using the `search()` method.\n * - result: when the response is retrieved from Algolia and is processed.\n * This event contains a {@link SearchResults} object and the\n * {@link SearchParameters} corresponding to this answer.\n * - error: when the response is an error. This event contains the error returned by the server.\n * @param {AlgoliaSearch} client an AlgoliaSearch client\n * @param {string} index the index name to query\n * @param {SearchParameters | object} options an object defining the initial\n * config of the search. It doesn't have to be a {SearchParameters},\n * just an object containing the properties you need from it.\n * @param {SearchResultsOptions|object} searchResultsOptions an object defining the options to use when creating the search results.\n */\nfunction AlgoliaSearchHelper(client, index, options, searchResultsOptions) {\n if (typeof client.addAlgoliaAgent === 'function') {\n client.addAlgoliaAgent('JS Helper (' + version + ')');\n }\n\n this.setClient(client);\n var opts = options || {};\n opts.index = index;\n this.state = SearchParameters.make(opts);\n this.recommendState = new RecommendParameters({\n params: opts.recommendState,\n });\n this.lastResults = null;\n this.lastRecommendResults = null;\n this._queryId = 0;\n this._recommendQueryId = 0;\n this._lastQueryIdReceived = -1;\n this._lastRecommendQueryIdReceived = -1;\n this.derivedHelpers = [];\n this._currentNbQueries = 0;\n this._currentNbRecommendQueries = 0;\n this._searchResultsOptions = searchResultsOptions;\n this._recommendCache = {};\n}\n\ninherits(AlgoliaSearchHelper, EventEmitter);\n\n/**\n * Start the search with the parameters set in the state. When the\n * method is called, it triggers a `search` event. The results will\n * be available through the `result` event. If an error occurs, an\n * `error` will be fired instead.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires search\n * @fires result\n * @fires error\n * @chainable\n */\nAlgoliaSearchHelper.prototype.search = function () {\n this._search({ onlyWithDerivedHelpers: false });\n return this;\n};\n\nAlgoliaSearchHelper.prototype.searchOnlyWithDerivedHelpers = function () {\n this._search({ onlyWithDerivedHelpers: true });\n return this;\n};\n\nAlgoliaSearchHelper.prototype.searchWithComposition = function () {\n this._runComposition({ onlyWithDerivedHelpers: true });\n return this;\n};\n/**\n * Sends the recommendation queries set in the state. When the method is\n * called, it triggers a `fetch` event. The results will be available through\n * the `result` event. If an error occurs, an `error` will be fired instead.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires fetch\n * @fires result\n * @fires error\n * @chainable\n */\nAlgoliaSearchHelper.prototype.recommend = function () {\n this._recommend();\n return this;\n};\n\n/**\n * Gets the search query parameters that would be sent to the Algolia Client\n * for the hits\n * @return {object} Query Parameters\n */\nAlgoliaSearchHelper.prototype.getQuery = function () {\n var state = this.state;\n return requestBuilder._getHitsSearchParams(state);\n};\n\n/**\n * Start a search using a modified version of the current state. This method does\n * not trigger the helper lifecycle and does not modify the state kept internally\n * by the helper. This second aspect means that the next search call will be the\n * same as a search call before calling searchOnce.\n * @param {object} options can contain all the parameters that can be set to SearchParameters\n * plus the index\n * @param {function} [cb] optional callback executed when the response from the\n * server is back.\n * @return {promise|undefined} if a callback is passed the method returns undefined\n * otherwise it returns a promise containing an object with two keys :\n * - content with a SearchResults\n * - state with the state used for the query as a SearchParameters\n * @example\n * // Changing the number of records returned per page to 1\n * // This example uses the callback API\n * var state = helper.searchOnce({hitsPerPage: 1},\n * function(error, content, state) {\n * // if an error occurred it will be passed in error, otherwise its value is null\n * // content contains the results formatted as a SearchResults\n * // state is the instance of SearchParameters used for this search\n * });\n * @example\n * // Changing the number of records returned per page to 1\n * // This example uses the promise API\n * var state1 = helper.searchOnce({hitsPerPage: 1})\n * .then(promiseHandler);\n *\n * function promiseHandler(res) {\n * // res contains\n * // {\n * // content : SearchResults\n * // state : SearchParameters (the one used for this specific search)\n * // }\n * }\n */\nAlgoliaSearchHelper.prototype.searchOnce = function (options, cb) {\n var tempState = !options\n ? this.state\n : this.state.setQueryParameters(options);\n var queries = requestBuilder._getQueries(tempState.index, tempState);\n // eslint-disable-next-line consistent-this\n var self = this;\n\n this._currentNbQueries++;\n\n this.emit('searchOnce', {\n state: tempState,\n });\n\n if (cb) {\n this.client\n .search(queries)\n .then(function (content) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) {\n self.emit('searchQueueEmpty');\n }\n\n cb(null, new SearchResults(tempState, content.results), tempState);\n })\n .catch(function (err) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) {\n self.emit('searchQueueEmpty');\n }\n\n cb(err, null, tempState);\n });\n\n return undefined;\n }\n\n return this.client.search(queries).then(\n function (content) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n return {\n content: new SearchResults(tempState, content.results),\n state: tempState,\n _originalResponse: content,\n };\n },\n function (e) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n throw e;\n }\n );\n};\n\n/**\n * Start the search for answers with the parameters set in the state.\n * This method returns a promise.\n * @param {Object} options - the options for answers API call\n * @param {string[]} options.attributesForPrediction - Attributes to use for predictions. If empty, `searchableAttributes` is used instead.\n * @param {string[]} options.queryLanguages - The languages in the query. Currently only supports ['en'].\n * @param {number} options.nbHits - Maximum number of answers to retrieve from the Answers Engine. Cannot be greater than 1000.\n *\n * @return {promise} the answer results\n * @deprecated answers is deprecated and will be replaced with new initiatives\n */\nAlgoliaSearchHelper.prototype.findAnswers = function (options) {\n // eslint-disable-next-line no-console\n console.warn('[algoliasearch-helper] answers is no longer supported');\n var state = this.state;\n var derivedHelper = this.derivedHelpers[0];\n if (!derivedHelper) {\n return Promise.resolve([]);\n }\n var derivedState = derivedHelper.getModifiedState(state);\n var data = merge(\n {\n attributesForPrediction: options.attributesForPrediction,\n nbHits: options.nbHits,\n },\n {\n params: omit(requestBuilder._getHitsSearchParams(derivedState), [\n 'attributesToSnippet',\n 'hitsPerPage',\n 'restrictSearchableAttributes',\n 'snippetEllipsisText',\n ]),\n }\n );\n\n var errorMessage =\n 'search for answers was called, but this client does not have a function client.initIndex(index).findAnswers';\n if (typeof this.client.initIndex !== 'function') {\n throw new Error(errorMessage);\n }\n var index = this.client.initIndex(derivedState.index);\n if (typeof index.findAnswers !== 'function') {\n throw new Error(errorMessage);\n }\n return index.findAnswers(derivedState.query, options.queryLanguages, data);\n};\n\n/**\n * Structure of each result when using\n * [`searchForFacetValues()`](reference.html#AlgoliaSearchHelper#searchForFacetValues)\n * @typedef FacetSearchHit\n * @type {object}\n * @property {string} value the facet value\n * @property {string} highlighted the facet value highlighted with the query string\n * @property {number} count number of occurrence of this facet value\n * @property {boolean} isRefined true if the value is already refined\n */\n\n/**\n * Structure of the data resolved by the\n * [`searchForFacetValues()`](reference.html#AlgoliaSearchHelper#searchForFacetValues)\n * promise.\n * @typedef FacetSearchResult\n * @type {object}\n * @property {FacetSearchHit} facetHits the results for this search for facet values\n * @property {number} processingTimeMS time taken by the query inside the engine\n */\n\n/**\n * Search for facet values based on an query and the name of a faceted attribute. This\n * triggers a search and will return a promise. On top of using the query, it also sends\n * the parameters from the state so that the search is narrowed down to only the possible values.\n *\n * See the description of [FacetSearchResult](reference.html#FacetSearchResult)\n * @param {string} facet the name of the faceted attribute\n * @param {string} query the string query for the search\n * @param {number} [maxFacetHits] the maximum number values returned. Should be > 0 and <= 100\n * @param {object} [userState] the set of custom parameters to use on top of the current state. Setting a property to `undefined` removes\n * it in the generated query.\n * @return {promise.} the results of the search\n */\nAlgoliaSearchHelper.prototype.searchForFacetValues = function (\n facet,\n query,\n maxFacetHits,\n userState\n) {\n var clientHasSFFV =\n typeof this.client.searchForFacetValues === 'function' &&\n // v5 has a wrong sffv signature\n typeof this.client.searchForFacets !== 'function';\n var clientHasInitIndex = typeof this.client.initIndex === 'function';\n if (\n !clientHasSFFV &&\n !clientHasInitIndex &&\n typeof this.client.search !== 'function'\n ) {\n throw new Error(\n 'search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues'\n );\n }\n\n var state = this.state.setQueryParameters(userState || {});\n var isDisjunctive = state.isDisjunctiveFacet(facet);\n var algoliaQuery = requestBuilder.getSearchForFacetQuery(\n facet,\n query,\n maxFacetHits,\n state\n );\n\n this._currentNbQueries++;\n // eslint-disable-next-line consistent-this\n var self = this;\n var searchForFacetValuesPromise;\n // newer algoliasearch ^3.27.1 - ~4.0.0\n if (clientHasSFFV) {\n searchForFacetValuesPromise = this.client.searchForFacetValues([\n { indexName: state.index, params: algoliaQuery },\n ]);\n // algoliasearch < 3.27.1\n } else if (clientHasInitIndex) {\n searchForFacetValuesPromise = this.client\n .initIndex(state.index)\n .searchForFacetValues(algoliaQuery);\n // algoliasearch ~5.0.0\n } else {\n // @MAJOR only use client.search\n delete algoliaQuery.facetName;\n searchForFacetValuesPromise = this.client\n .search([\n {\n type: 'facet',\n facet: facet,\n indexName: state.index,\n params: algoliaQuery,\n },\n ])\n .then(function processResponse(response) {\n return response.results[0];\n });\n }\n\n this.emit('searchForFacetValues', {\n state: state,\n facet: facet,\n query: query,\n });\n\n return searchForFacetValuesPromise.then(\n function addIsRefined(content) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n\n content = Array.isArray(content) ? content[0] : content;\n\n content.facetHits.forEach(function (f) {\n f.escapedValue = escapeFacetValue(f.value);\n f.isRefined = isDisjunctive\n ? state.isDisjunctiveFacetRefined(facet, f.escapedValue)\n : state.isFacetRefined(facet, f.escapedValue);\n });\n\n return content;\n },\n function (e) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n throw e;\n }\n );\n};\n\n/**\n * Search for facet values using the Composition API & based on a query and the name of a faceted attribute.\n * This triggers a search and will return a promise. On top of using the query, it also sends\n * the parameters from the state so that the search is narrowed down to only the possible values.\n *\n * See the description of [FacetSearchResult](reference.html#FacetSearchResult)\n * @param {string} facet the name of the faceted attribute\n * @param {string} query the string query for the search\n * @param {number} [maxFacetHits] the maximum number values returned. Should be > 0 and <= 100\n * @param {object} [userState] the set of custom parameters to use on top of the current state. Setting a property to `undefined` removes\n * it in the generated query.\n * @return {promise.} the results of the search\n */\nAlgoliaSearchHelper.prototype.searchForCompositionFacetValues = function (\n facet,\n query,\n maxFacetHits,\n userState\n) {\n if (typeof this.client.searchForFacetValues !== 'function') {\n throw new Error(\n 'search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues'\n );\n }\n\n var state = this.state.setQueryParameters(userState || {});\n var isDisjunctive = state.isDisjunctiveFacet(facet);\n\n this._currentNbQueries++;\n // eslint-disable-next-line consistent-this\n var self = this;\n var searchForFacetValuesPromise;\n\n searchForFacetValuesPromise = this.client.searchForFacetValues({\n compositionID: state.index,\n facetName: facet,\n searchForFacetValuesRequest: {\n params: {\n query: query,\n maxFacetHits: maxFacetHits,\n searchQuery: requestBuilder._getCompositionHitsSearchParams(state),\n },\n },\n });\n\n this.emit('searchForFacetValues', {\n state: state,\n facet: facet,\n query: query,\n });\n\n return searchForFacetValuesPromise.then(\n function addIsRefined(content) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n\n content = content.results[0];\n\n content.facetHits.forEach(function (f) {\n f.escapedValue = escapeFacetValue(f.value);\n f.isRefined = isDisjunctive\n ? state.isDisjunctiveFacetRefined(facet, f.escapedValue)\n : state.isFacetRefined(facet, f.escapedValue);\n });\n\n return content;\n },\n function (e) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n throw e;\n }\n );\n};\n\n/**\n * Sets the text query used for the search.\n *\n * This method resets the current page to 0.\n * @param {string} q the user query\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setQuery = function (q) {\n this._change({\n state: this.state.resetPage().setQuery(q),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Remove all the types of refinements except tags. A string can be provided to remove\n * only the refinements of a specific attribute. For more advanced use case, you can\n * provide a function instead. This function should follow the\n * [clearCallback definition](#SearchParameters.clearCallback).\n *\n * This method resets the current page to 0.\n * @param {string} [name] optional name of the facet / attribute on which we want to remove all refinements\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n * @example\n * // Removing all the refinements\n * helper.clearRefinements().search();\n * @example\n * // Removing all the filters on a the category attribute.\n * helper.clearRefinements('category').search();\n * @example\n * // Removing only the exclude filters on the category facet.\n * helper.clearRefinements(function(value, attribute, type) {\n * return type === 'exclude' && attribute === 'category';\n * }).search();\n */\nAlgoliaSearchHelper.prototype.clearRefinements = function (name) {\n this._change({\n state: this.state.resetPage().clearRefinements(name),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Remove all the tag filters.\n *\n * This method resets the current page to 0.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.clearTags = function () {\n this._change({\n state: this.state.resetPage().clearTags(),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Adds a disjunctive filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addDisjunctiveFacetRefinement = function (\n facet,\n value\n) {\n this._change({\n state: this.state.resetPage().addDisjunctiveFacetRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addDisjunctiveFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.addDisjunctiveRefine = function () {\n return this.addDisjunctiveFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Adds a refinement on a hierarchical facet. It will throw\n * an exception if the facet is not defined or if the facet\n * is already refined.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet name\n * @param {string} path the hierarchical facet path\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @throws Error if the facet is not defined or if the facet is refined\n * @chainable\n * @fires change\n */\nAlgoliaSearchHelper.prototype.addHierarchicalFacetRefinement = function (\n facet,\n path\n) {\n this._change({\n state: this.state.resetPage().addHierarchicalFacetRefinement(facet, path),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Adds a an numeric filter to an attribute with the `operator` and `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} attribute the attribute on which the numeric filter applies\n * @param {string} operator the operator of the filter\n * @param {number} value the value of the filter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addNumericRefinement = function (\n attribute,\n operator,\n value\n) {\n this._change({\n state: this.state\n .resetPage()\n .addNumericRefinement(attribute, operator, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Adds a filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFacetRefinement = function (facet, value) {\n this._change({\n state: this.state.resetPage().addFacetRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.addRefine = function () {\n return this.addFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Adds a an exclusion filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFacetExclusion = function (facet, value) {\n this._change({\n state: this.state.resetPage().addExcludeRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.addExclude = function () {\n return this.addFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Adds a tag filter with the `tag` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} tag the tag to add to the filter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addTag = function (tag) {\n this._change({\n state: this.state.resetPage().addTagRefinement(tag),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Adds a \"frequently bought together\" recommendation query.\n *\n * @param {FrequentlyBoughtTogetherQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFrequentlyBoughtTogether = function (params) {\n this._recommendChange({\n state: this.recommendState.addFrequentlyBoughtTogether(params),\n });\n\n return this;\n};\n\n/**\n * Adds a \"related products\" recommendation query.\n *\n * @param {RelatedProductsQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addRelatedProducts = function (params) {\n this._recommendChange({\n state: this.recommendState.addRelatedProducts(params),\n });\n\n return this;\n};\n\n/**\n * Adds a \"trending items\" recommendation query.\n *\n * @param {TrendingItemsQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addTrendingItems = function (params) {\n this._recommendChange({\n state: this.recommendState.addTrendingItems(params),\n });\n\n return this;\n};\n\n/**\n * Adds a \"trending facets\" recommendation query.\n *\n * @param {TrendingFacetsQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addTrendingFacets = function (params) {\n this._recommendChange({\n state: this.recommendState.addTrendingFacets(params),\n });\n\n return this;\n};\n\n/**\n * Adds a \"looking similar\" recommendation query.\n *\n * @param {LookingSimilarQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addLookingSimilar = function (params) {\n this._recommendChange({\n state: this.recommendState.addLookingSimilar(params),\n });\n\n return this;\n};\n\n/**\n * Removes an numeric filter to an attribute with the `operator` and `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * Some parameters are optional, triggering different behavior:\n * - if the value is not provided, then all the numeric value will be removed for the\n * specified attribute/operator couple.\n * - if the operator is not provided either, then all the numeric filter on this attribute\n * will be removed.\n *\n * This method resets the current page to 0.\n * @param {string} attribute the attribute on which the numeric filter applies\n * @param {string} [operator] the operator of the filter\n * @param {number} [value] the value of the filter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeNumericRefinement = function (\n attribute,\n operator,\n value\n) {\n this._change({\n state: this.state\n .resetPage()\n .removeNumericRefinement(attribute, operator, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Removes a disjunctive filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} [value] the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeDisjunctiveFacetRefinement = function (\n facet,\n value\n) {\n this._change({\n state: this.state\n .resetPage()\n .removeDisjunctiveFacetRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeDisjunctiveFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.removeDisjunctiveRefine = function () {\n return this.removeDisjunctiveFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Removes the refinement set on a hierarchical facet.\n * @param {string} facet the facet name\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @throws Error if the facet is not defined or if the facet is not refined\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeHierarchicalFacetRefinement = function (\n facet\n) {\n this._change({\n state: this.state.resetPage().removeHierarchicalFacetRefinement(facet),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Removes a filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} [value] the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFacetRefinement = function (facet, value) {\n this._change({\n state: this.state.resetPage().removeFacetRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.removeRefine = function () {\n return this.removeFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Removes an exclusion filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} [value] the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFacetExclusion = function (facet, value) {\n this._change({\n state: this.state.resetPage().removeExcludeRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.removeExclude = function () {\n return this.removeFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Removes a tag filter with the `tag` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} tag tag to remove from the filter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeTag = function (tag) {\n this._change({\n state: this.state.resetPage().removeTagRefinement(tag),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Removes a \"frequently bought together\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFrequentlyBoughtTogether = function (id) {\n this._recommendChange({\n state: this.recommendState.removeParams(id),\n });\n\n return this;\n};\n\n/**\n * Removes a \"related products\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeRelatedProducts = function (id) {\n this._recommendChange({\n state: this.recommendState.removeParams(id),\n });\n\n return this;\n};\n\n/**\n * Removes a \"trending items\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeTrendingItems = function (id) {\n this._recommendChange({\n state: this.recommendState.removeParams(id),\n });\n\n return this;\n};\n\n/**\n * Removes a \"trending facets\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeTrendingFacets = function (id) {\n this._recommendChange({\n state: this.recommendState.removeParams(id),\n });\n\n return this;\n};\n\n/**\n * Removes a \"looking similar\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeLookingSimilar = function (id) {\n this._recommendChange({\n state: this.recommendState.removeParams(id),\n });\n\n return this;\n};\n\n/**\n * Adds or removes an exclusion filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleFacetExclusion = function (facet, value) {\n this._change({\n state: this.state.resetPage().toggleExcludeFacetRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#toggleFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.toggleExclude = function () {\n return this.toggleFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Adds or removes a filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method can be used for conjunctive, disjunctive and hierarchical filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @throws Error will throw an error if the facet is not declared in the settings of the helper\n * @fires change\n * @chainable\n * @deprecated since version 2.19.0, see {@link AlgoliaSearchHelper#toggleFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.toggleRefinement = function (facet, value) {\n return this.toggleFacetRefinement(facet, value);\n};\n\n/**\n * Adds or removes a filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method can be used for conjunctive, disjunctive and hierarchical filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @throws Error will throw an error if the facet is not declared in the settings of the helper\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleFacetRefinement = function (facet, value) {\n this._change({\n state: this.state.resetPage().toggleFacetRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#toggleFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.toggleRefine = function () {\n return this.toggleFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Adds or removes a tag filter with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method resets the current page to 0.\n * @param {string} tag tag to remove or add\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleTag = function (tag) {\n this._change({\n state: this.state.resetPage().toggleTagRefinement(tag),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Increments the page number by one.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n * @example\n * helper.setPage(0).nextPage().getPage();\n * // returns 1\n */\nAlgoliaSearchHelper.prototype.nextPage = function () {\n var page = this.state.page || 0;\n return this.setPage(page + 1);\n};\n\n/**\n * Decrements the page number by one.\n * @fires change\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @chainable\n * @example\n * helper.setPage(1).previousPage().getPage();\n * // returns 0\n */\nAlgoliaSearchHelper.prototype.previousPage = function () {\n var page = this.state.page || 0;\n return this.setPage(page - 1);\n};\n\n/**\n * @private\n * @param {number} page The page number\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @chainable\n * @fires change\n */\nfunction setCurrentPage(page) {\n if (page < 0) throw new Error('Page requested below 0.');\n\n this._change({\n state: this.state.setPage(page),\n isPageReset: false,\n });\n\n return this;\n}\n\n/**\n * Change the current page\n * @deprecated\n * @param {number} page The page number\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setCurrentPage = setCurrentPage;\n\n/**\n * Updates the current page.\n * @function\n * @param {number} page The page number\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setPage = setCurrentPage;\n\n/**\n * Updates the name of the index that will be targeted by the query.\n *\n * This method resets the current page to 0.\n * @param {string} name the index name\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setIndex = function (name) {\n this._change({\n state: this.state.resetPage().setIndex(name),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Update a parameter of the search. This method reset the page\n *\n * The complete list of parameters is available on the\n * [Algolia website](https://www.algolia.com/doc/rest#query-an-index).\n * The most commonly used parameters have their own [shortcuts](#query-parameters-shortcuts)\n * or benefit from higher-level APIs (all the kind of filters and facets have their own API)\n *\n * This method resets the current page to 0.\n * @param {string} parameter name of the parameter to update\n * @param {any} value new value of the parameter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n * @example\n * helper.setQueryParameter('hitsPerPage', 20).search();\n */\nAlgoliaSearchHelper.prototype.setQueryParameter = function (parameter, value) {\n this._change({\n state: this.state.resetPage().setQueryParameter(parameter, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Set the whole state (warning: will erase previous state)\n * @param {SearchParameters} newState the whole new state\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setState = function (newState) {\n this._change({\n state: SearchParameters.make(newState),\n isPageReset: false,\n });\n\n return this;\n};\n\n/**\n * Override the current state without triggering a change event.\n * Do not use this method unless you know what you are doing. (see the example\n * for a legit use case)\n * @param {SearchParameters} newState the whole new state\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @example\n * helper.on('change', function(state){\n * // In this function you might want to find a way to store the state in the url/history\n * updateYourURL(state)\n * })\n * window.onpopstate = function(event){\n * // This is naive though as you should check if the state is really defined etc.\n * helper.overrideStateWithoutTriggeringChangeEvent(event.state).search()\n * }\n * @chainable\n */\nAlgoliaSearchHelper.prototype.overrideStateWithoutTriggeringChangeEvent =\n function (newState) {\n this.state = new SearchParameters(newState);\n return this;\n };\n\n/**\n * Check if an attribute has any numeric, conjunctive, disjunctive or hierarchical filters.\n * @param {string} attribute the name of the attribute\n * @return {boolean} true if the attribute is filtered by at least one value\n * @example\n * // hasRefinements works with numeric, conjunctive, disjunctive and hierarchical filters\n * helper.hasRefinements('price'); // false\n * helper.addNumericRefinement('price', '>', 100);\n * helper.hasRefinements('price'); // true\n *\n * helper.hasRefinements('color'); // false\n * helper.addFacetRefinement('color', 'blue');\n * helper.hasRefinements('color'); // true\n *\n * helper.hasRefinements('material'); // false\n * helper.addDisjunctiveFacetRefinement('material', 'plastic');\n * helper.hasRefinements('material'); // true\n *\n * helper.hasRefinements('categories'); // false\n * helper.toggleFacetRefinement('categories', 'kitchen > knife');\n * helper.hasRefinements('categories'); // true\n *\n */\nAlgoliaSearchHelper.prototype.hasRefinements = function (attribute) {\n if (objectHasKeys(this.state.getNumericRefinements(attribute))) {\n return true;\n } else if (this.state.isConjunctiveFacet(attribute)) {\n return this.state.isFacetRefined(attribute);\n } else if (this.state.isDisjunctiveFacet(attribute)) {\n return this.state.isDisjunctiveFacetRefined(attribute);\n } else if (this.state.isHierarchicalFacet(attribute)) {\n return this.state.isHierarchicalFacetRefined(attribute);\n }\n\n // there's currently no way to know that the user did call `addNumericRefinement` at some point\n // thus we cannot distinguish if there once was a numeric refinement that was cleared\n // so we will return false in every other situations to be consistent\n // while what we should do here is throw because we did not find the attribute in any type\n // of refinement\n return false;\n};\n\n/**\n * Check if a value is excluded for a specific faceted attribute. If the value\n * is omitted then the function checks if there is any excluding refinements.\n *\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} [value] optional value. If passed will test that this value\n * is filtering the given facet.\n * @return {boolean} true if refined\n * @example\n * helper.isExcludeRefined('color'); // false\n * helper.isExcludeRefined('color', 'blue') // false\n * helper.isExcludeRefined('color', 'red') // false\n *\n * helper.addFacetExclusion('color', 'red');\n *\n * helper.isExcludeRefined('color'); // true\n * helper.isExcludeRefined('color', 'blue') // false\n * helper.isExcludeRefined('color', 'red') // true\n */\nAlgoliaSearchHelper.prototype.isExcluded = function (facet, value) {\n return this.state.isExcludeRefined(facet, value);\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since 2.4.0, see {@link AlgoliaSearchHelper#hasRefinements}\n */\nAlgoliaSearchHelper.prototype.isDisjunctiveRefined = function (facet, value) {\n return this.state.isDisjunctiveFacetRefined(facet, value);\n};\n\n/**\n * Check if the string is a currently filtering tag.\n * @param {string} tag tag to check\n * @return {boolean} true if the tag is currently refined\n */\nAlgoliaSearchHelper.prototype.hasTag = function (tag) {\n return this.state.isTagRefined(tag);\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since 2.4.0, see {@link AlgoliaSearchHelper#hasTag}\n */\nAlgoliaSearchHelper.prototype.isTagRefined = function () {\n return this.hasTagRefinements.apply(this, arguments);\n};\n\n/**\n * Get the name of the currently used index.\n * @return {string} name of the index\n * @example\n * helper.setIndex('highestPrice_products').getIndex();\n * // returns 'highestPrice_products'\n */\nAlgoliaSearchHelper.prototype.getIndex = function () {\n return this.state.index;\n};\n\nfunction getCurrentPage() {\n return this.state.page;\n}\n\n/**\n * Get the currently selected page\n * @deprecated\n * @return {number} the current page\n */\nAlgoliaSearchHelper.prototype.getCurrentPage = getCurrentPage;\n/**\n * Get the currently selected page\n * @function\n * @return {number} the current page\n */\nAlgoliaSearchHelper.prototype.getPage = getCurrentPage;\n\n/**\n * Get all the tags currently set to filters the results.\n *\n * @return {string[]} The list of tags currently set.\n */\nAlgoliaSearchHelper.prototype.getTags = function () {\n return this.state.tagRefinements;\n};\n\n/**\n * Get the list of refinements for a given attribute. This method works with\n * conjunctive, disjunctive, excluding and numerical filters.\n *\n * See also SearchResults#getRefinements\n *\n * @param {string} facetName attribute name used for faceting\n * @return {Array.} All Refinement are objects that contain a value, and\n * a type. Numeric also contains an operator.\n * @example\n * helper.addNumericRefinement('price', '>', 100);\n * helper.getRefinements('price');\n * // [\n * // {\n * // \"value\": [\n * // 100\n * // ],\n * // \"operator\": \">\",\n * // \"type\": \"numeric\"\n * // }\n * // ]\n * @example\n * helper.addFacetRefinement('color', 'blue');\n * helper.addFacetExclusion('color', 'red');\n * helper.getRefinements('color');\n * // [\n * // {\n * // \"value\": \"blue\",\n * // \"type\": \"conjunctive\"\n * // },\n * // {\n * // \"value\": \"red\",\n * // \"type\": \"exclude\"\n * // }\n * // ]\n * @example\n * helper.addDisjunctiveFacetRefinement('material', 'plastic');\n * // [\n * // {\n * // \"value\": \"plastic\",\n * // \"type\": \"disjunctive\"\n * // }\n * // ]\n */\nAlgoliaSearchHelper.prototype.getRefinements = function (facetName) {\n var refinements = [];\n\n if (this.state.isConjunctiveFacet(facetName)) {\n var conjRefinements = this.state.getConjunctiveRefinements(facetName);\n\n conjRefinements.forEach(function (r) {\n refinements.push({\n value: r,\n type: 'conjunctive',\n });\n });\n\n var excludeRefinements = this.state.getExcludeRefinements(facetName);\n\n excludeRefinements.forEach(function (r) {\n refinements.push({\n value: r,\n type: 'exclude',\n });\n });\n } else if (this.state.isDisjunctiveFacet(facetName)) {\n var disjunctiveRefinements =\n this.state.getDisjunctiveRefinements(facetName);\n\n disjunctiveRefinements.forEach(function (r) {\n refinements.push({\n value: r,\n type: 'disjunctive',\n });\n });\n }\n\n var numericRefinements = this.state.getNumericRefinements(facetName);\n\n Object.keys(numericRefinements).forEach(function (operator) {\n var value = numericRefinements[operator];\n\n refinements.push({\n value: value,\n operator: operator,\n type: 'numeric',\n });\n });\n\n return refinements;\n};\n\n/**\n * Return the current refinement for the (attribute, operator)\n * @param {string} attribute attribute in the record\n * @param {string} operator operator applied on the refined values\n * @return {Array.} refined values\n */\nAlgoliaSearchHelper.prototype.getNumericRefinement = function (\n attribute,\n operator\n) {\n return this.state.getNumericRefinement(attribute, operator);\n};\n\n/**\n * Get the current breadcrumb for a hierarchical facet, as an array\n * @param {string} facetName Hierarchical facet name\n * @return {array.} the path as an array of string\n */\nAlgoliaSearchHelper.prototype.getHierarchicalFacetBreadcrumb = function (\n facetName\n) {\n return this.state.getHierarchicalFacetBreadcrumb(facetName);\n};\n\n// /////////// PRIVATE\n\n/**\n * Perform the underlying queries\n * @private\n * @param {object} options options for the query\n * @param {boolean} [options.onlyWithDerivedHelpers=false] if true, only the derived helpers will be queried\n * @return {undefined} does not return anything\n * @fires search\n * @fires result\n * @fires error\n */\nAlgoliaSearchHelper.prototype._search = function (options) {\n var state = this.state;\n var states = [];\n var mainQueries = [];\n\n if (!options.onlyWithDerivedHelpers) {\n mainQueries = requestBuilder._getQueries(state.index, state);\n\n states.push({\n state: state,\n queriesCount: mainQueries.length,\n helper: this,\n });\n\n this.emit('search', {\n state: state,\n results: this.lastResults,\n });\n }\n\n var derivedQueries = this.derivedHelpers.map(function (derivedHelper) {\n var derivedState = derivedHelper.getModifiedState(state);\n var derivedStateQueries = derivedState.index\n ? requestBuilder._getQueries(derivedState.index, derivedState)\n : [];\n\n states.push({\n state: derivedState,\n queriesCount: derivedStateQueries.length,\n helper: derivedHelper,\n });\n\n derivedHelper.emit('search', {\n state: derivedState,\n results: derivedHelper.lastResults,\n });\n\n return derivedStateQueries;\n });\n\n var queries = Array.prototype.concat.apply(mainQueries, derivedQueries);\n\n var queryId = this._queryId++;\n this._currentNbQueries++;\n\n if (!queries.length) {\n return Promise.resolve({ results: [] }).then(\n this._dispatchAlgoliaResponse.bind(this, states, queryId)\n );\n }\n\n try {\n this.client\n .search(queries)\n .then(this._dispatchAlgoliaResponse.bind(this, states, queryId))\n .catch(this._dispatchAlgoliaError.bind(this, queryId));\n } catch (error) {\n // If we reach this part, we're in an internal error state\n this.emit('error', {\n error: error,\n });\n }\n\n return undefined;\n};\n\n/**\n * Perform the underlying queries\n * @private\n * @param {boolean} [options.onlyWithDerivedHelpers=false] if true, only the derived helpers will be queried\n * @return {undefined} does not return anything\n * @fires search\n * @fires result\n * @fires error\n */\nAlgoliaSearchHelper.prototype._runComposition = function () {\n var state = this.state;\n var states = [];\n var mainQueries = [];\n\n var derivedQueries = this.derivedHelpers.map(function (derivedHelper) {\n var derivedState = derivedHelper.getModifiedState(state);\n var derivedStateQueries =\n requestBuilder._getCompositionQueries(derivedState);\n\n states.push({\n state: derivedState,\n queriesCount: derivedStateQueries.length,\n helper: derivedHelper,\n });\n\n derivedHelper.emit('search', {\n state: derivedState,\n results: derivedHelper.lastResults,\n });\n\n return derivedStateQueries;\n });\n\n var queries = Array.prototype.concat.apply(mainQueries, derivedQueries);\n\n var queryId = this._queryId++;\n this._currentNbQueries++;\n\n if (!queries.length) {\n return Promise.resolve({ results: [] }).then(\n this._dispatchAlgoliaResponse.bind(this, states, queryId)\n );\n }\n\n if (queries.length > 1) {\n throw new Error('Only one query is allowed when using a composition.');\n }\n\n var query = queries[0];\n\n try {\n this.client\n .search(query)\n .then(this._dispatchAlgoliaResponse.bind(this, states, queryId))\n .catch(this._dispatchAlgoliaError.bind(this, queryId));\n } catch (error) {\n // If we reach this part, we're in an internal error state\n this.emit('error', {\n error: error,\n });\n }\n\n return undefined;\n};\n\nAlgoliaSearchHelper.prototype._recommend = function () {\n var searchState = this.state;\n var recommendState = this.recommendState;\n var index = this.getIndex();\n var states = [{ state: recommendState, index: index, helper: this }];\n var ids = recommendState.params.map(function (param) {\n return param.$$id;\n });\n\n this.emit('fetch', {\n recommend: {\n state: recommendState,\n results: this.lastRecommendResults,\n },\n });\n\n var cache = this._recommendCache;\n\n var derivedQueries = this.derivedHelpers.map(function (derivedHelper) {\n var derivedIndex = derivedHelper.getModifiedState(searchState).index;\n if (!derivedIndex) {\n return [];\n }\n\n // Contrary to what is done when deriving the search state, we don't want to\n // provide the current recommend state to the derived helper, as it would\n // inherit unwanted queries. We instead provide an empty recommend state.\n var derivedState = derivedHelper.getModifiedRecommendState(\n new RecommendParameters()\n );\n states.push({\n state: derivedState,\n index: derivedIndex,\n helper: derivedHelper,\n });\n\n ids = Array.prototype.concat.apply(\n ids,\n derivedState.params.map(function (param) {\n return param.$$id;\n })\n );\n\n derivedHelper.emit('fetch', {\n recommend: {\n state: derivedState,\n results: derivedHelper.lastRecommendResults,\n },\n });\n\n return derivedState._buildQueries(derivedIndex, cache);\n });\n\n var queries = Array.prototype.concat.apply(\n this.recommendState._buildQueries(index, cache),\n derivedQueries\n );\n\n if (queries.length === 0) {\n return;\n }\n\n if (\n queries.length > 0 &&\n typeof this.client.getRecommendations === 'undefined'\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Please update algoliasearch/lite to the latest version in order to use recommend widgets.'\n );\n return;\n }\n\n var queryId = this._recommendQueryId++;\n this._currentNbRecommendQueries++;\n\n try {\n this.client\n .getRecommendations(queries)\n .then(this._dispatchRecommendResponse.bind(this, queryId, states, ids))\n .catch(this._dispatchRecommendError.bind(this, queryId));\n } catch (error) {\n // If we reach this part, we're in an internal error state\n this.emit('error', {\n error: error,\n });\n }\n\n return;\n};\n\n/**\n * Transform the responses as sent by the server and transform them into a user\n * usable object that merge the results of all the batch requests. It will dispatch\n * over the different helper + derived helpers (when there are some).\n * @private\n * @param {array.<{SearchParameters, AlgoliaQueries, AlgoliaSearchHelper}>} states state used to generate the request\n * @param {number} queryId id of the current request\n * @param {object} content content of the response\n * @return {undefined}\n */\nAlgoliaSearchHelper.prototype._dispatchAlgoliaResponse = function (\n states,\n queryId,\n content\n) {\n // eslint-disable-next-line consistent-this\n var self = this;\n\n // @TODO remove the number of outdated queries discarded instead of just one\n\n if (queryId < this._lastQueryIdReceived) {\n // Outdated answer\n return;\n }\n\n this._currentNbQueries -= queryId - this._lastQueryIdReceived;\n this._lastQueryIdReceived = queryId;\n\n if (this._currentNbQueries === 0) this.emit('searchQueueEmpty');\n\n var results = content.results.slice();\n var rawContent = Object.keys(content).reduce(function (value, key) {\n if (key !== 'results') value[key] = content[key];\n return value;\n }, {});\n\n if (Object.keys(rawContent).length <= 0) {\n rawContent = undefined;\n }\n\n states.forEach(function (s) {\n var state = s.state;\n var queriesCount = s.queriesCount;\n var helper = s.helper;\n var specificResults = results.splice(0, queriesCount);\n\n if (!state.index) {\n helper.emit('result', {\n results: null,\n state: state,\n });\n return;\n }\n\n helper.lastResults = new SearchResults(\n state,\n specificResults,\n self._searchResultsOptions\n );\n if (rawContent !== undefined) helper.lastResults._rawContent = rawContent;\n\n helper.emit('result', {\n results: helper.lastResults,\n state: state,\n });\n });\n};\n\nAlgoliaSearchHelper.prototype._dispatchRecommendResponse = function (\n queryId,\n states,\n ids,\n content\n) {\n // @TODO remove the number of outdated queries discarded instead of just one\n\n if (queryId < this._lastRecommendQueryIdReceived) {\n // Outdated answer\n return;\n }\n\n this._currentNbRecommendQueries -=\n queryId - this._lastRecommendQueryIdReceived;\n this._lastRecommendQueryIdReceived = queryId;\n\n if (this._currentNbRecommendQueries === 0) this.emit('recommendQueueEmpty');\n\n var cache = this._recommendCache;\n\n var idsMap = {};\n ids\n .filter(function (id) {\n return cache[id] === undefined;\n })\n .forEach(function (id, index) {\n if (!idsMap[id]) idsMap[id] = [];\n\n idsMap[id].push(index);\n });\n\n Object.keys(idsMap).forEach(function (id) {\n var indices = idsMap[id];\n var firstResult = content.results[indices[0]];\n if (indices.length === 1) {\n cache[id] = firstResult;\n return;\n }\n cache[id] = Object.assign({}, firstResult, {\n hits: sortAndMergeRecommendations(\n indices.map(function (idx) {\n return content.results[idx].hits;\n })\n ),\n });\n });\n\n var results = {};\n ids.forEach(function (id) {\n results[id] = cache[id];\n });\n\n states.forEach(function (s) {\n var state = s.state;\n var helper = s.helper;\n\n if (!s.index) {\n // eslint-disable-next-line no-warning-comments\n // TODO: emit \"result\" event when events for Recommend are implemented\n helper.emit('recommend:result', {\n results: null,\n state: state,\n });\n return;\n }\n\n helper.lastRecommendResults = new RecommendResults(state, results);\n\n // eslint-disable-next-line no-warning-comments\n // TODO: emit \"result\" event when events for Recommend are implemented\n helper.emit('recommend:result', {\n recommend: {\n results: helper.lastRecommendResults,\n state: state,\n },\n });\n });\n};\n\nAlgoliaSearchHelper.prototype._dispatchAlgoliaError = function (\n queryId,\n error\n) {\n if (queryId < this._lastQueryIdReceived) {\n // Outdated answer\n return;\n }\n\n this._currentNbQueries -= queryId - this._lastQueryIdReceived;\n this._lastQueryIdReceived = queryId;\n\n this.emit('error', {\n error: error,\n });\n\n if (this._currentNbQueries === 0) this.emit('searchQueueEmpty');\n};\n\nAlgoliaSearchHelper.prototype._dispatchRecommendError = function (\n queryId,\n error\n) {\n if (queryId < this._lastRecommendQueryIdReceived) {\n // Outdated answer\n return;\n }\n\n this._currentNbRecommendQueries -=\n queryId - this._lastRecommendQueryIdReceived;\n this._lastRecommendQueryIdReceived = queryId;\n\n this.emit('error', {\n error: error,\n });\n\n if (this._currentNbRecommendQueries === 0) this.emit('recommendQueueEmpty');\n};\n\nAlgoliaSearchHelper.prototype.containsRefinement = function (\n query,\n facetFilters,\n numericFilters,\n tagFilters\n) {\n return (\n query ||\n facetFilters.length !== 0 ||\n numericFilters.length !== 0 ||\n tagFilters.length !== 0\n );\n};\n\n/**\n * Test if there are some disjunctive refinements on the facet\n * @private\n * @param {string} facet the attribute to test\n * @return {boolean} true if there are refinements on this attribute\n */\nAlgoliaSearchHelper.prototype._hasDisjunctiveRefinements = function (facet) {\n return (\n this.state.disjunctiveRefinements[facet] &&\n this.state.disjunctiveRefinements[facet].length > 0\n );\n};\n\nAlgoliaSearchHelper.prototype._change = function (event) {\n var state = event.state;\n var isPageReset = event.isPageReset;\n\n if (state !== this.state) {\n this.state = state;\n\n this.emit('change', {\n state: this.state,\n results: this.lastResults,\n isPageReset: isPageReset,\n });\n }\n};\n\nAlgoliaSearchHelper.prototype._recommendChange = function (event) {\n var state = event.state;\n\n if (state !== this.recommendState) {\n this.recommendState = state;\n\n // eslint-disable-next-line no-warning-comments\n // TODO: emit \"change\" event when events for Recommend are implemented\n this.emit('recommend:change', {\n search: {\n results: this.lastResults,\n state: this.state,\n },\n recommend: {\n results: this.lastRecommendResults,\n state: this.recommendState,\n },\n });\n }\n};\n\n/**\n * Clears the cache of the underlying Algolia client.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n */\nAlgoliaSearchHelper.prototype.clearCache = function () {\n if (this.client.clearCache) this.client.clearCache();\n return this;\n};\n\n/**\n * Updates the internal client instance. If the reference of the clients\n * are equal then no update is actually done.\n * @param {AlgoliaSearch} newClient an AlgoliaSearch client\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n */\nAlgoliaSearchHelper.prototype.setClient = function (newClient) {\n if (this.client === newClient) return this;\n\n if (typeof newClient.addAlgoliaAgent === 'function') {\n newClient.addAlgoliaAgent('JS Helper (' + version + ')');\n }\n this.client = newClient;\n\n return this;\n};\n\n/**\n * Gets the instance of the currently used client.\n * @return {AlgoliaSearch} the currently used client\n */\nAlgoliaSearchHelper.prototype.getClient = function () {\n return this.client;\n};\n\n/**\n * Creates an derived instance of the Helper. A derived helper\n * is a way to request other indices synchronised with the lifecycle\n * of the main Helper. This mechanism uses the multiqueries feature\n * of Algolia to aggregate all the requests in a single network call.\n *\n * This method takes a function that is used to create a new SearchParameter\n * that will be used to create requests to Algolia. Those new requests\n * are created just before the `search` event. The signature of the function\n * is `SearchParameters -> SearchParameters`.\n *\n * This method returns a new DerivedHelper which is an EventEmitter\n * that fires the same `search`, `result` and `error` events. Those\n * events, however, will receive data specific to this DerivedHelper\n * and the SearchParameters that is returned by the call of the\n * parameter function.\n * @param {function} fn SearchParameters -> SearchParameters\n * @param {function} recommendFn RecommendParameters -> RecommendParameters\n * @return {DerivedHelper} a new DerivedHelper\n */\nAlgoliaSearchHelper.prototype.derive = function (fn, recommendFn) {\n var derivedHelper = new DerivedHelper(this, fn, recommendFn);\n this.derivedHelpers.push(derivedHelper);\n return derivedHelper;\n};\n\n/**\n * This method detaches a derived Helper from the main one. Prefer using the one from the\n * derived helper itself, to remove the event listeners too.\n * @private\n * @param {DerivedHelper} derivedHelper the derived helper to detach\n * @return {undefined} nothing is returned\n * @throws Error\n */\nAlgoliaSearchHelper.prototype.detachDerivedHelper = function (derivedHelper) {\n var pos = this.derivedHelpers.indexOf(derivedHelper);\n if (pos === -1) throw new Error('Derived helper already detached');\n this.derivedHelpers.splice(pos, 1);\n};\n\n/**\n * This method returns true if there is currently at least one on-going search.\n * @return {boolean} true if there is a search pending\n */\nAlgoliaSearchHelper.prototype.hasPendingRequests = function () {\n return this._currentNbQueries > 0;\n};\n\n/**\n * @typedef AlgoliaSearchHelper.NumericRefinement\n * @type {object}\n * @property {number[]} value the numbers that are used for filtering this attribute with\n * the operator specified.\n * @property {string} operator the faceting data: value, number of entries\n * @property {string} type will be 'numeric'\n */\n\n/**\n * @typedef AlgoliaSearchHelper.FacetRefinement\n * @type {object}\n * @property {string} value the string use to filter the attribute\n * @property {string} type the type of filter: 'conjunctive', 'disjunctive', 'exclude'\n */\n\nmodule.exports = AlgoliaSearchHelper;\n","'use strict';\n\nmodule.exports = function compact(array) {\n if (!Array.isArray(array)) {\n return [];\n }\n\n return array.filter(Boolean);\n};\n","'use strict';\n\n// NOTE: this behaves like lodash/defaults, but doesn't mutate the target\n// it also preserve keys order\nmodule.exports = function defaultsPure() {\n var sources = Array.prototype.slice.call(arguments);\n\n return sources.reduceRight(function (acc, source) {\n Object.keys(Object(source)).forEach(function (key) {\n if (source[key] === undefined) {\n return;\n }\n if (acc[key] !== undefined) {\n // remove if already added, so that we can add it in correct order\n delete acc[key];\n }\n acc[key] = source[key];\n });\n return acc;\n }, {});\n};\n","'use strict';\n\n/**\n * Replaces a leading - with \\-\n * @private\n * @param {any} value the facet value to replace\n * @returns {any} the escaped facet value or the value if it was not a string\n */\nfunction escapeFacetValue(value) {\n if (typeof value !== 'string') return value;\n\n return String(value).replace(/^-/, '\\\\-');\n}\n\n/**\n * Replaces a leading \\- with -\n * @private\n * @param {any} value the escaped facet value\n * @returns {any} the unescaped facet value or the value if it was not a string\n */\nfunction unescapeFacetValue(value) {\n if (typeof value !== 'string') return value;\n\n return value.replace(/^\\\\-/, '-');\n}\n\nmodule.exports = {\n escapeFacetValue: escapeFacetValue,\n unescapeFacetValue: unescapeFacetValue,\n};\n","'use strict';\n\n// @MAJOR can be replaced by native Array#find when we change support\nmodule.exports = function find(array, comparator) {\n if (!Array.isArray(array)) {\n return undefined;\n }\n\n for (var i = 0; i < array.length; i++) {\n if (comparator(array[i])) {\n return array[i];\n }\n }\n\n return undefined;\n};\n","'use strict';\n\n// @MAJOR can be replaced by native Array#findIndex when we change support\nmodule.exports = function find(array, comparator) {\n if (!Array.isArray(array)) {\n return -1;\n }\n\n for (var i = 0; i < array.length; i++) {\n if (comparator(array[i])) {\n return i;\n }\n }\n return -1;\n};\n","// @MAJOR: remove this function and use Array.prototype.flat\nmodule.exports = function flat(arr) {\n return arr.reduce(function (acc, val) {\n return acc.concat(val);\n }, []);\n};\n","'use strict';\n\nvar find = require('./find');\n\n/**\n * Transform sort format from user friendly notation to lodash format\n * @param {string[]} sortBy array of predicate of the form \"attribute:order\"\n * @param {string[]} [defaults] array of predicate of the form \"attribute:order\"\n * @return {array.} array containing 2 elements : attributes, orders\n */\nmodule.exports = function formatSort(sortBy, defaults) {\n var defaultInstructions = (defaults || []).map(function (sort) {\n return sort.split(':');\n });\n\n return sortBy.reduce(\n function preparePredicate(out, sort) {\n var sortInstruction = sort.split(':');\n\n var matchingDefault = find(\n defaultInstructions,\n function (defaultInstruction) {\n return defaultInstruction[0] === sortInstruction[0];\n }\n );\n\n if (sortInstruction.length > 1 || !matchingDefault) {\n out[0].push(sortInstruction[0]);\n out[1].push(sortInstruction[1]);\n return out;\n }\n\n out[0].push(matchingDefault[0]);\n out[1].push(matchingDefault[1]);\n return out;\n },\n [[], []]\n );\n};\n","'use strict';\n\nfunction inherits(ctor, superCtor) {\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true,\n },\n });\n}\n\nmodule.exports = inherits;\n","'use strict';\n\nfunction intersection(arr1, arr2) {\n return arr1.filter(function (value, index) {\n return (\n arr2.indexOf(value) > -1 &&\n arr1.indexOf(value) === index /* skips duplicates */\n );\n });\n}\n\nmodule.exports = intersection;\n","'use strict';\n\nfunction clone(value) {\n if (typeof value === 'object' && value !== null) {\n return _merge(Array.isArray(value) ? [] : {}, value);\n }\n return value;\n}\n\nfunction isObjectOrArrayOrFunction(value) {\n return (\n typeof value === 'function' ||\n Array.isArray(value) ||\n Object.prototype.toString.call(value) === '[object Object]'\n );\n}\n\nfunction _merge(target, source) {\n if (target === source) {\n return target;\n }\n\n // eslint-disable-next-line no-restricted-syntax\n for (var key in source) {\n if (\n !Object.prototype.hasOwnProperty.call(source, key) ||\n key === '__proto__' ||\n key === 'constructor'\n ) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n var sourceVal = source[key];\n var targetVal = target[key];\n\n if (typeof targetVal !== 'undefined' && typeof sourceVal === 'undefined') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (\n isObjectOrArrayOrFunction(targetVal) &&\n isObjectOrArrayOrFunction(sourceVal)\n ) {\n target[key] = _merge(targetVal, sourceVal);\n } else {\n target[key] = clone(sourceVal);\n }\n }\n return target;\n}\n\n/**\n * This method is like Object.assign, but recursively merges own and inherited\n * enumerable keyed properties of source objects into the destination object.\n *\n * NOTE: this behaves like lodash/merge, but:\n * - does mutate functions if they are a source\n * - treats non-plain objects as plain\n * - does not work for circular objects\n * - treats sparse arrays as sparse\n * - does not convert Array-like objects (Arguments, NodeLists, etc.) to arrays\n *\n * @param {Object} target The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n */\nfunction merge(target) {\n if (!isObjectOrArrayOrFunction(target)) {\n target = {};\n }\n\n for (var i = 1, l = arguments.length; i < l; i++) {\n var source = arguments[i];\n\n if (isObjectOrArrayOrFunction(source)) {\n _merge(target, source);\n }\n }\n return target;\n}\n\nmodule.exports = merge;\n","'use strict';\n\n// NOTE: this behaves like lodash/defaults, but doesn't mutate the target\n// it also preserve keys order and keep the highest numeric value\nfunction mergeNumericMax() {\n var sources = Array.prototype.slice.call(arguments);\n\n return sources.reduceRight(function (acc, source) {\n Object.keys(Object(source)).forEach(function (key) {\n var accValue = typeof acc[key] === 'number' ? acc[key] : 0;\n var sourceValue = source[key];\n\n if (sourceValue === undefined) {\n return;\n }\n\n if (sourceValue >= accValue) {\n if (acc[key] !== undefined) {\n // remove if already added, so that we can add it in correct order\n delete acc[key];\n }\n acc[key] = sourceValue;\n }\n });\n return acc;\n }, {});\n}\n\nmodule.exports = mergeNumericMax;\n","'use strict';\n\nfunction objectHasKeys(obj) {\n return obj && Object.keys(obj).length > 0;\n}\n\nmodule.exports = objectHasKeys;\n","'use strict';\n\n// https://github.com/babel/babel/blob/3aaafae053fa75febb3aa45d45b6f00646e30ba4/packages/babel-helpers/src/helpers.js#L604-L620\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source === null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key;\n var i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n // eslint-disable-next-line no-continue\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\n","'use strict';\n\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined;\n var valIsNull = value === null;\n\n var othIsDefined = other !== undefined;\n var othIsNull = other === null;\n\n if (\n (!othIsNull && value > other) ||\n (valIsNull && othIsDefined) ||\n !valIsDefined\n ) {\n return 1;\n }\n if (\n (!valIsNull && value < other) ||\n (othIsNull && valIsDefined) ||\n !othIsDefined\n ) {\n return -1;\n }\n }\n return 0;\n}\n\n/**\n * @param {Array} collection object with keys in attributes\n * @param {Array} iteratees attributes\n * @param {Array} orders asc | desc\n * @return {Array} sorted collection\n */\nfunction orderBy(collection, iteratees, orders) {\n if (!Array.isArray(collection)) {\n return [];\n }\n\n if (!Array.isArray(orders)) {\n orders = [];\n }\n\n var result = collection.map(function (value, index) {\n return {\n criteria: iteratees.map(function (iteratee) {\n return value[iteratee];\n }),\n index: index,\n value: value,\n };\n });\n\n result.sort(function comparer(object, other) {\n var index = -1;\n\n while (++index < object.criteria.length) {\n var res = compareAscending(object.criteria[index], other.criteria[index]);\n if (res) {\n if (index >= orders.length) {\n return res;\n }\n if (orders[index] === 'desc') {\n return -res;\n }\n return res;\n }\n }\n\n // This ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n });\n\n return result.map(function (res) {\n return res.value;\n });\n}\n\nmodule.exports = orderBy;\n","'use strict';\n\nfunction valToNumber(v) {\n if (typeof v === 'number') {\n return v;\n } else if (typeof v === 'string') {\n return parseFloat(v);\n } else if (Array.isArray(v)) {\n return v.map(valToNumber);\n }\n\n throw new Error(\n 'The value should be a number, a parsable string or an array of those.'\n );\n}\n\nmodule.exports = valToNumber;\n","'use strict';\n\nvar merge = require('./functions/merge');\n\nfunction sortObject(obj) {\n return Object.keys(obj)\n .sort()\n .reduce(function (acc, curr) {\n acc[curr] = obj[curr];\n return acc;\n }, {});\n}\n\nvar requestBuilder = {\n /**\n * Get all the queries to send to the client, those queries can used directly\n * with the Algolia client.\n * @private\n * @param {string} index The name of the index\n * @param {SearchParameters} state The state from which to get the queries\n * @return {object[]} The queries\n */\n _getQueries: function getQueries(index, state) {\n var queries = [];\n\n // One query for the hits\n queries.push({\n indexName: index,\n params: requestBuilder._getHitsSearchParams(state),\n });\n\n // One for each disjunctive facets\n state.getRefinedDisjunctiveFacets().forEach(function (refinedFacet) {\n queries.push({\n indexName: index,\n params: requestBuilder._getDisjunctiveFacetSearchParams(\n state,\n refinedFacet\n ),\n });\n });\n\n // More to get the parent levels of the hierarchical facets when refined\n state.getRefinedHierarchicalFacets().forEach(function (refinedFacet) {\n var hierarchicalFacet = state.getHierarchicalFacetByName(refinedFacet);\n var currentRefinement = state.getHierarchicalRefinement(refinedFacet);\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n\n // If we are deeper than level 0 (starting from `beer > IPA`)\n // we want to get all parent values\n if (\n currentRefinement.length > 0 &&\n currentRefinement[0].split(separator).length > 1\n ) {\n // We generate a map of the filters we will use for our facet values queries\n var filtersMap = currentRefinement[0]\n .split(separator)\n .slice(0, -1)\n .reduce(function createFiltersMap(map, segment, level) {\n return map.concat({\n attribute: hierarchicalFacet.attributes[level],\n value:\n level === 0\n ? segment\n : [map[map.length - 1].value, segment].join(separator),\n });\n }, []);\n\n filtersMap.forEach(function (filter, level) {\n var params = requestBuilder._getDisjunctiveFacetSearchParams(\n state,\n filter.attribute,\n level === 0\n );\n\n // Keep facet filters unrelated to current hierarchical attributes\n function hasHierarchicalFacetFilter(value) {\n return hierarchicalFacet.attributes.some(function (attribute) {\n return attribute === value.split(':')[0];\n });\n }\n\n var filteredFacetFilters = (params.facetFilters || []).reduce(\n function (acc, facetFilter) {\n if (Array.isArray(facetFilter)) {\n var filtered = facetFilter.filter(function (filterValue) {\n return !hasHierarchicalFacetFilter(filterValue);\n });\n\n if (filtered.length > 0) {\n acc.push(filtered);\n }\n }\n\n if (\n typeof facetFilter === 'string' &&\n !hasHierarchicalFacetFilter(facetFilter)\n ) {\n acc.push(facetFilter);\n }\n\n return acc;\n },\n []\n );\n\n var parent = filtersMap[level - 1];\n if (level > 0) {\n params.facetFilters = filteredFacetFilters.concat(\n parent.attribute + ':' + parent.value\n );\n } else if (filteredFacetFilters.length > 0) {\n params.facetFilters = filteredFacetFilters;\n } else {\n delete params.facetFilters;\n }\n\n queries.push({ indexName: index, params: params });\n });\n }\n });\n\n return queries;\n },\n\n /**\n * Get all the queries to send to the client, those queries can used directly\n * with the Algolia client.\n * @private\n * @param {SearchParameters} state The state from which to get the queries\n * @return {object[]} The queries\n */\n _getCompositionQueries: function getQueries(state) {\n return [\n {\n compositionID: state.index,\n requestBody: {\n params: requestBuilder._getCompositionHitsSearchParams(state),\n },\n },\n ];\n },\n\n /**\n * Build search parameters used to fetch hits\n * @private\n * @param {SearchParameters} state The state from which to get the queries\n * @return {object.} The search parameters for hits\n */\n _getHitsSearchParams: function (state) {\n var facets = state.facets\n .concat(state.disjunctiveFacets)\n .concat(requestBuilder._getHitsHierarchicalFacetsAttributes(state))\n .sort();\n\n var facetFilters = requestBuilder._getFacetFilters(state);\n var numericFilters = requestBuilder._getNumericFilters(state);\n var tagFilters = requestBuilder._getTagFilters(state);\n var additionalParams = {};\n\n if (facets.length > 0) {\n additionalParams.facets = facets.indexOf('*') > -1 ? ['*'] : facets;\n }\n\n if (tagFilters.length > 0) {\n additionalParams.tagFilters = tagFilters;\n }\n\n if (facetFilters.length > 0) {\n additionalParams.facetFilters = facetFilters;\n }\n\n if (numericFilters.length > 0) {\n additionalParams.numericFilters = numericFilters;\n }\n\n return sortObject(merge({}, state.getQueryParams(), additionalParams));\n },\n\n /**\n * Build search parameters used to fetch hits\n * @private\n * @param {SearchParameters} state The state from which to get the queries\n * @return {object.} The search parameters for hits\n */\n _getCompositionHitsSearchParams: function (state) {\n var facets = state.facets\n .concat(\n state.disjunctiveFacets.map(function (value) {\n return 'disjunctive(' + value + ')';\n })\n )\n .concat(requestBuilder._getHitsHierarchicalFacetsAttributes(state))\n .sort();\n\n var facetFilters = requestBuilder._getFacetFilters(state);\n var numericFilters = requestBuilder._getNumericFilters(state);\n var tagFilters = requestBuilder._getTagFilters(state);\n var additionalParams = {};\n\n if (facets.length > 0) {\n additionalParams.facets = facets.indexOf('*') > -1 ? ['*'] : facets;\n }\n\n if (tagFilters.length > 0) {\n additionalParams.tagFilters = tagFilters;\n }\n\n if (facetFilters.length > 0) {\n additionalParams.facetFilters = facetFilters;\n }\n\n if (numericFilters.length > 0) {\n additionalParams.numericFilters = numericFilters;\n }\n\n var params = state.getQueryParams();\n\n delete params.highlightPreTag;\n delete params.highlightPostTag;\n // not a valid search parameter, it is handled in _getCompositionQueries\n delete params.index;\n\n return sortObject(merge({}, params, additionalParams));\n },\n\n /**\n * Build search parameters used to fetch a disjunctive facet\n * @private\n * @param {SearchParameters} state The state from which to get the queries\n * @param {string} facet the associated facet name\n * @param {boolean} hierarchicalRootLevel ?? FIXME\n * @return {object} The search parameters for a disjunctive facet\n */\n _getDisjunctiveFacetSearchParams: function (\n state,\n facet,\n hierarchicalRootLevel\n ) {\n var facetFilters = requestBuilder._getFacetFilters(\n state,\n facet,\n hierarchicalRootLevel\n );\n var numericFilters = requestBuilder._getNumericFilters(state, facet);\n var tagFilters = requestBuilder._getTagFilters(state);\n var additionalParams = {\n hitsPerPage: 0,\n page: 0,\n analytics: false,\n clickAnalytics: false,\n };\n\n if (tagFilters.length > 0) {\n additionalParams.tagFilters = tagFilters;\n }\n\n var hierarchicalFacet = state.getHierarchicalFacetByName(facet);\n\n if (hierarchicalFacet) {\n additionalParams.facets =\n requestBuilder._getDisjunctiveHierarchicalFacetAttribute(\n state,\n hierarchicalFacet,\n hierarchicalRootLevel\n );\n } else {\n additionalParams.facets = facet;\n }\n\n if (numericFilters.length > 0) {\n additionalParams.numericFilters = numericFilters;\n }\n\n if (facetFilters.length > 0) {\n additionalParams.facetFilters = facetFilters;\n }\n\n return sortObject(merge({}, state.getQueryParams(), additionalParams));\n },\n\n /**\n * Return the numeric filters in an algolia request fashion\n * @private\n * @param {SearchParameters} state the state from which to get the filters\n * @param {string} [facetName] the name of the attribute for which the filters should be excluded\n * @return {string[]} the numeric filters in the algolia format\n */\n _getNumericFilters: function (state, facetName) {\n if (state.numericFilters) {\n return state.numericFilters;\n }\n\n var numericFilters = [];\n\n Object.keys(state.numericRefinements).forEach(function (attribute) {\n var operators = state.numericRefinements[attribute] || {};\n Object.keys(operators).forEach(function (operator) {\n var values = operators[operator] || [];\n if (facetName !== attribute) {\n values.forEach(function (value) {\n if (Array.isArray(value)) {\n var vs = value.map(function (v) {\n return attribute + operator + v;\n });\n numericFilters.push(vs);\n } else {\n numericFilters.push(attribute + operator + value);\n }\n });\n }\n });\n });\n\n return numericFilters;\n },\n\n /**\n * Return the tags filters depending on which format is used, either tagFilters or tagRefinements\n * @private\n * @param {SearchParameters} state the state from which to get the filters\n * @return {string} Tag filters in a single string\n */\n _getTagFilters: function (state) {\n if (state.tagFilters) {\n return state.tagFilters;\n }\n\n return state.tagRefinements.join(',');\n },\n\n /**\n * Build facetFilters parameter based on current refinements. The array returned\n * contains strings representing the facet filters in the algolia format.\n * @private\n * @param {SearchParameters} state The state from which to get the queries\n * @param {string} [facet] if set, the current disjunctive facet\n * @param {boolean} [hierarchicalRootLevel] ?? FIXME\n * @return {array.} The facet filters in the algolia format\n */\n _getFacetFilters: function (state, facet, hierarchicalRootLevel) {\n var facetFilters = [];\n\n var facetsRefinements = state.facetsRefinements || {};\n Object.keys(facetsRefinements)\n .sort()\n .forEach(function (facetName) {\n var facetValues = facetsRefinements[facetName] || [];\n facetValues\n .slice()\n .sort()\n .forEach(function (facetValue) {\n facetFilters.push(facetName + ':' + facetValue);\n });\n });\n\n var facetsExcludes = state.facetsExcludes || {};\n Object.keys(facetsExcludes)\n .sort()\n .forEach(function (facetName) {\n var facetValues = facetsExcludes[facetName] || [];\n facetValues.sort().forEach(function (facetValue) {\n facetFilters.push(facetName + ':-' + facetValue);\n });\n });\n\n var disjunctiveFacetsRefinements = state.disjunctiveFacetsRefinements || {};\n Object.keys(disjunctiveFacetsRefinements)\n .sort()\n .forEach(function (facetName) {\n var facetValues = disjunctiveFacetsRefinements[facetName] || [];\n if (facetName === facet || !facetValues || facetValues.length === 0) {\n return;\n }\n var orFilters = [];\n\n facetValues\n .slice()\n .sort()\n .forEach(function (facetValue) {\n orFilters.push(facetName + ':' + facetValue);\n });\n\n facetFilters.push(orFilters);\n });\n\n var hierarchicalFacetsRefinements =\n state.hierarchicalFacetsRefinements || {};\n Object.keys(hierarchicalFacetsRefinements)\n .sort()\n .forEach(function (facetName) {\n var facetValues = hierarchicalFacetsRefinements[facetName] || [];\n var facetValue = facetValues[0];\n\n if (facetValue === undefined) {\n return;\n }\n\n var hierarchicalFacet = state.getHierarchicalFacetByName(facetName);\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n var rootPath = state._getHierarchicalRootPath(hierarchicalFacet);\n var attributeToRefine;\n var attributesIndex;\n\n // we ask for parent facet values only when the `facet` is the current hierarchical facet\n if (facet === facetName) {\n // if we are at the root level already, no need to ask for facet values, we get them from\n // the hits query\n if (\n facetValue.indexOf(separator) === -1 ||\n (!rootPath && hierarchicalRootLevel === true) ||\n (rootPath &&\n rootPath.split(separator).length ===\n facetValue.split(separator).length)\n ) {\n return;\n }\n\n if (!rootPath) {\n attributesIndex = facetValue.split(separator).length - 2;\n facetValue = facetValue.slice(0, facetValue.lastIndexOf(separator));\n } else {\n attributesIndex = rootPath.split(separator).length - 1;\n facetValue = rootPath;\n }\n\n attributeToRefine = hierarchicalFacet.attributes[attributesIndex];\n } else {\n attributesIndex = facetValue.split(separator).length - 1;\n\n attributeToRefine = hierarchicalFacet.attributes[attributesIndex];\n }\n\n if (attributeToRefine) {\n facetFilters.push([attributeToRefine + ':' + facetValue]);\n }\n });\n\n return facetFilters;\n },\n\n _getHitsHierarchicalFacetsAttributes: function (state) {\n var out = [];\n\n return state.hierarchicalFacets.reduce(\n // ask for as much levels as there's hierarchical refinements\n function getHitsAttributesForHierarchicalFacet(\n allAttributes,\n hierarchicalFacet\n ) {\n var hierarchicalRefinement = state.getHierarchicalRefinement(\n hierarchicalFacet.name\n )[0];\n\n // if no refinement, ask for root level\n if (!hierarchicalRefinement) {\n allAttributes.push(hierarchicalFacet.attributes[0]);\n return allAttributes;\n }\n\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n var level = hierarchicalRefinement.split(separator).length;\n var newAttributes = hierarchicalFacet.attributes.slice(0, level + 1);\n\n return allAttributes.concat(newAttributes);\n },\n out\n );\n },\n\n _getDisjunctiveHierarchicalFacetAttribute: function (\n state,\n hierarchicalFacet,\n rootLevel\n ) {\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n if (rootLevel === true) {\n var rootPath = state._getHierarchicalRootPath(hierarchicalFacet);\n var attributeIndex = 0;\n\n if (rootPath) {\n attributeIndex = rootPath.split(separator).length;\n }\n return [hierarchicalFacet.attributes[attributeIndex]];\n }\n\n var hierarchicalRefinement =\n state.getHierarchicalRefinement(hierarchicalFacet.name)[0] || '';\n // if refinement is 'beers > IPA > Flying dog',\n // then we want `facets: ['beers > IPA']` as disjunctive facet (parent level values)\n\n var parentLevel = hierarchicalRefinement.split(separator).length - 1;\n return hierarchicalFacet.attributes.slice(0, parentLevel + 1);\n },\n\n getSearchForFacetQuery: function (facetName, query, maxFacetHits, state) {\n var stateForSearchForFacetValues = state.isDisjunctiveFacet(facetName)\n ? state.clearRefinements(facetName)\n : state;\n var searchForFacetSearchParameters = {\n facetQuery: query,\n facetName: facetName,\n };\n if (typeof maxFacetHits === 'number') {\n searchForFacetSearchParameters.maxFacetHits = maxFacetHits;\n }\n return sortObject(\n merge(\n {},\n requestBuilder._getHitsSearchParams(stateForSearchForFacetValues),\n searchForFacetSearchParameters\n )\n );\n },\n};\n\nmodule.exports = requestBuilder;\n","'use strict';\n\nmodule.exports = function isValidUserToken(userToken) {\n if (userToken === null) {\n return false;\n }\n return /^[a-zA-Z0-9_-]{1,64}$/.test(userToken);\n};\n","'use strict';\n\nvar find = require('../functions/find');\nvar flat = require('../functions/flat');\n\nfunction getAverageIndices(indexTracker, nrOfObjs) {\n var avgIndices = [];\n\n Object.keys(indexTracker).forEach(function (key) {\n if (indexTracker[key].count < 2) {\n indexTracker[key].indexSum += 100;\n }\n avgIndices.push({\n objectID: key,\n avgOfIndices: indexTracker[key].indexSum / nrOfObjs,\n });\n });\n\n return avgIndices.sort(function (a, b) {\n return a.avgOfIndices > b.avgOfIndices ? 1 : -1;\n });\n}\n\nfunction sortAndMergeRecommendations(results) {\n var indexTracker = {};\n\n results.forEach(function (hits) {\n hits.forEach(function (hit, index) {\n if (!indexTracker[hit.objectID]) {\n indexTracker[hit.objectID] = { indexSum: index, count: 1 };\n } else {\n indexTracker[hit.objectID] = {\n indexSum: indexTracker[hit.objectID].indexSum + index,\n count: indexTracker[hit.objectID].count + 1,\n };\n }\n });\n });\n\n var sortedAverageIndices = getAverageIndices(indexTracker, results.length);\n\n var finalOrder = sortedAverageIndices.reduce(function (\n orderedHits,\n avgIndexRef\n ) {\n var result = find(flat(results), function (hit) {\n return hit.objectID === avgIndexRef.objectID;\n });\n return result ? orderedHits.concat(result) : orderedHits;\n },\n []);\n\n return finalOrder;\n}\n\nmodule.exports = sortAndMergeRecommendations;\n","'use strict';\n\nmodule.exports = '3.24.2';\n","/*! algoliasearch.umd.js | 4.24.0 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */\n!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=t||self).algoliasearch=e()}(this,(function(){\"use strict\";function t(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n=0||(a[r]=t[r]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}function a(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(!(Symbol.iterator in Object(t)||\"[object Arguments]\"===Object.prototype.toString.call(t)))return;var r=[],n=!0,a=!1,o=void 0;try{for(var i,u=t[Symbol.iterator]();!(n=(i=u.next()).done)&&(r.push(i.value),!e||r.length!==e);n=!0);}catch(t){a=!0,o=t}finally{try{n||null==u.return||u.return()}finally{if(a)throw o}}return r}(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}()}function o(t){return function(t){if(Array.isArray(t)){for(var e=0,r=new Array(t.length);e2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){u();var e=JSON.stringify(t);return o()[e]})).then((function(t){return Promise.all([t?t.value:e(),void 0!==t])})).then((function(t){var e=a(t,2),n=e[0],o=e[1];return Promise.all([n,o||r.miss(n)])})).then((function(t){return a(t,1)[0]}))},set:function(t,e){return Promise.resolve().then((function(){var a=o();return a[JSON.stringify(t)]={timestamp:(new Date).getTime(),value:e},n().setItem(r,JSON.stringify(a)),e}))},delete:function(t){return Promise.resolve().then((function(){var e=o();delete e[JSON.stringify(t)],n().setItem(r,JSON.stringify(e))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function u(t){var e=o(t.caches),r=e.shift();return void 0===r?{get:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},n=e();return n.then((function(t){return Promise.all([t,r.miss(t)])})).then((function(t){return a(t,1)[0]}))},set:function(t,e){return Promise.resolve(e)},delete:function(t){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(t,n){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(t,n,a).catch((function(){return u({caches:e}).get(t,n,a)}))},set:function(t,n){return r.set(t,n).catch((function(){return u({caches:e}).set(t,n)}))},delete:function(t){return r.delete(t).catch((function(){return u({caches:e}).delete(t)}))},clear:function(){return r.clear().catch((function(){return u({caches:e}).clear()}))}}}function s(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},e={};return{get:function(r,n){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},o=JSON.stringify(r);if(o in e)return Promise.resolve(t.serializable?JSON.parse(e[o]):e[o]);var i=n(),u=a&&a.miss||function(){return Promise.resolve()};return i.then((function(t){return u(t)})).then((function(){return i}))},set:function(r,n){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(t){return delete e[JSON.stringify(t)],Promise.resolve()},clear:function(){return e={},Promise.resolve()}}}function c(t,e,r){var n={\"x-algolia-api-key\":r,\"x-algolia-application-id\":e};return{headers:function(){return t===m.WithinHeaders?n:{}},queryParameters:function(){return t===m.WithinQueryParameters?n:{}}}}function f(t){var e=0;return t((function r(){return e++,new Promise((function(n){setTimeout((function(){n(t(r))}),Math.min(100*e,1e3))}))}))}function d(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(t,e){return Promise.resolve()};return Object.assign(t,{wait:function(r){return d(t.then((function(t){return Promise.all([e(t,r),t])})).then((function(t){return t[1]})))}})}function l(t){for(var e=t.length-1;e>0;e--){var r=Math.floor(Math.random()*(e+1)),n=t[e];t[e]=t[r],t[r]=n}return t}function h(t,e){return e?(Object.keys(e).forEach((function(r){t[r]=e[r](t)})),t):t}function p(t){for(var e=arguments.length,r=new Array(e>1?e-1:0),n=1;n0?n:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var g={Read:1,Write:2,Any:3},v=1,b=2,P=3;function O(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:v;return r(r({},t),{},{status:e,lastUpdate:Date.now()})}function w(t){return\"string\"==typeof t?{protocol:\"https\",url:t,accept:g.Any}:{protocol:t.protocol||\"https\",url:t.url,accept:t.accept||g.Any}}var I=\"DELETE\",x=\"GET\",j=\"POST\",D=\"PUT\";function q(t,e){return Promise.all(e.map((function(e){return t.get(e,(function(){return Promise.resolve(O(e))}))}))).then((function(t){var r=t.filter((function(t){return function(t){return t.status===v||Date.now()-t.lastUpdate>12e4}(t)})),n=t.filter((function(t){return function(t){return t.status===P&&Date.now()-t.lastUpdate<=12e4}(t)})),a=[].concat(o(r),o(n));return{getTimeout:function(t,e){return(0===n.length&&0===t?1:n.length+3+t)*e},statelessHosts:a.length>0?a.map((function(t){return w(t)})):e}}))}function S(t,e,n,a){var i=[],u=function(t,e){if(t.method===x||void 0===t.data&&void 0===e.data)return;var n=Array.isArray(t.data)?t.data:r(r({},t.data),e.data);return JSON.stringify(n)}(n,a),s=function(t,e){var n=r(r({},t.headers),e.headers),a={};return Object.keys(n).forEach((function(t){var e=n[t];a[t.toLowerCase()]=e})),a}(t,a),c=n.method,f=n.method!==x?{}:r(r({},n.data),a.data),d=r(r(r({\"x-algolia-agent\":t.userAgent.value},t.queryParameters),f),a.queryParameters),l=0,h=function e(r,o){var f=r.pop();if(void 0===f)throw{name:\"RetryError\",message:\"Unreachable hosts - your application id may be incorrect. If the error persists, please reach out to the Algolia Support team: https://alg.li/support .\",transporterStackTrace:E(i)};var h={data:u,headers:s,method:c,url:N(f,n.path,d),connectTimeout:o(l,t.timeouts.connect),responseTimeout:o(l,a.timeout)},p=function(t){var e={request:h,response:t,host:f,triesLeft:r.length};return i.push(e),e},m={onSuccess:function(t){return function(t){try{return JSON.parse(t.content)}catch(e){throw function(t,e){return{name:\"DeserializationError\",message:t,response:e}}(e.message,t)}}(t)},onRetry:function(n){var a=p(n);return n.isTimedOut&&l++,Promise.all([t.logger.info(\"Retryable failure\",A(a)),t.hostsCache.set(f,O(f,n.isTimedOut?P:b))]).then((function(){return e(r,o)}))},onFail:function(t){throw p(t),function(t,e){var r=t.content,n=t.status,a=r;try{a=JSON.parse(r).message}catch(t){}return function(t,e,r){return{name:\"ApiError\",message:t,status:e,transporterStackTrace:r}}(a,n,e)}(t,E(i))}};return t.requester.send(h).then((function(t){return function(t,e){return function(t){var e=t.status;return t.isTimedOut||function(t){var e=t.isTimedOut,r=t.status;return!e&&0==~~r}(t)||2!=~~(e/100)&&4!=~~(e/100)}(t)?e.onRetry(t):2==~~(t.status/100)?e.onSuccess(t):e.onFail(t)}(t,m)}))};return q(t.hostsCache,e).then((function(t){return h(o(t.statelessHosts).reverse(),t.getTimeout)}))}function k(t){var e=t.hostsCache,r=t.logger,n=t.requester,o=t.requestsCache,i=t.responsesCache,u=t.timeouts,s=t.userAgent,c=t.hosts,f=t.queryParameters,d={hostsCache:e,logger:r,requester:n,requestsCache:o,responsesCache:i,timeouts:u,userAgent:s,headers:t.headers,queryParameters:f,hosts:c.map((function(t){return w(t)})),read:function(t,e){var r=y(e,d.timeouts.read),n=function(){return S(d,d.hosts.filter((function(t){return 0!=(t.accept&g.Read)})),t,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:t.cacheable))return n();var o={request:t,mappedRequestOptions:r,transporter:{queryParameters:d.queryParameters,headers:d.headers}};return d.responsesCache.get(o,(function(){return d.requestsCache.get(o,(function(){return d.requestsCache.set(o,n()).then((function(t){return Promise.all([d.requestsCache.delete(o),t])}),(function(t){return Promise.all([d.requestsCache.delete(o),Promise.reject(t)])})).then((function(t){var e=a(t,2);e[0];return e[1]}))}))}),{miss:function(t){return d.responsesCache.set(o,t)}})},write:function(t,e){return S(d,d.hosts.filter((function(t){return 0!=(t.accept&g.Write)})),t,y(e,d.timeouts.write))}};return d}function T(t){var e={value:\"Algolia for JavaScript (\".concat(t,\")\"),add:function(t){var r=\"; \".concat(t.segment).concat(void 0!==t.version?\" (\".concat(t.version,\")\"):\"\");return-1===e.value.indexOf(r)&&(e.value=\"\".concat(e.value).concat(r)),e}};return e}function N(t,e,r){var n=R(r),a=\"\".concat(t.protocol,\"://\").concat(t.url,\"/\").concat(\"/\"===e.charAt(0)?e.substr(1):e);return n.length&&(a+=\"?\".concat(n)),a}function R(t){return Object.keys(t).map((function(e){return p(\"%s=%s\",e,(r=t[e],\"[object Object]\"===Object.prototype.toString.call(r)||\"[object Array]\"===Object.prototype.toString.call(r)?JSON.stringify(t[e]):t[e]));var r})).join(\"&\")}function E(t){return t.map((function(t){return A(t)}))}function A(t){var e=t.request.headers[\"x-algolia-api-key\"]?{\"x-algolia-api-key\":\"*****\"}:{};return r(r({},t),{},{request:r(r({},t.request),{},{headers:r(r({},t.request.headers),e)})})}var C=function(t){return function(e,r){return t.transporter.write({method:j,path:\"2/abtests\",data:e},r)}},U=function(t){return function(e,r){return t.transporter.write({method:I,path:p(\"2/abtests/%s\",e)},r)}},z=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"2/abtests/%s\",e)},r)}},J=function(t){return function(e){return t.transporter.read({method:x,path:\"2/abtests\"},e)}},F=function(t){return function(e,r){return t.transporter.write({method:j,path:p(\"2/abtests/%s/stop\",e)},r)}},H=function(t){return function(e){return t.transporter.read({method:x,path:\"1/strategies/personalization\"},e)}},M=function(t){return function(e,r){return t.transporter.write({method:j,path:\"1/strategies/personalization\",data:e},r)}};function B(t){return function e(r){return t.request(r).then((function(n){if(void 0!==t.batch&&t.batch(n.hits),!t.shouldStop(n))return n.cursor?e({cursor:n.cursor}):e({page:(r.page||0)+1})}))}({})}var K=function(t){return function(e,a){var o=a||{},i=o.queryParameters,u=n(o,[\"queryParameters\"]),s=r({acl:e},void 0!==i?{queryParameters:i}:{});return d(t.transporter.write({method:j,path:\"1/keys\",data:s},u),(function(e,r){return f((function(n){return tt(t)(e.key,r).catch((function(t){if(404!==t.status)throw t;return n()}))}))}))}},W=function(t){return function(e,r,n){var a=y(n);return a.queryParameters[\"X-Algolia-User-ID\"]=e,t.transporter.write({method:j,path:\"1/clusters/mapping\",data:{cluster:r}},a)}},L=function(t){return function(e,r,n){return t.transporter.write({method:j,path:\"1/clusters/mapping/batch\",data:{users:e,cluster:r}},n)}},Q=function(t){return function(e,r){return d(t.transporter.write({method:j,path:p(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!0,requests:{action:\"addEntry\",body:[]}}},r),(function(e,r){return jt(t)(e.taskID,r)}))}},G=function(t){return function(e,r,n){return d(t.transporter.write({method:j,path:p(\"1/indexes/%s/operation\",e),data:{operation:\"copy\",destination:r}},n),(function(r,n){return ut(t)(e,{methods:{waitTask:de}}).waitTask(r.taskID,n)}))}},V=function(t){return function(e,n,a){return G(t)(e,n,r(r({},a),{},{scope:[he.Rules]}))}},_=function(t){return function(e,n,a){return G(t)(e,n,r(r({},a),{},{scope:[he.Settings]}))}},X=function(t){return function(e,n,a){return G(t)(e,n,r(r({},a),{},{scope:[he.Synonyms]}))}},Y=function(t){return function(e,r){return e.method===x?t.transporter.read(e,r):t.transporter.write(e,r)}},Z=function(t){return function(e,r){return d(t.transporter.write({method:I,path:p(\"1/keys/%s\",e)},r),(function(r,n){return f((function(r){return tt(t)(e,n).then(r).catch((function(t){if(404!==t.status)throw t}))}))}))}},$=function(t){return function(e,r,n){var a=r.map((function(t){return{action:\"deleteEntry\",body:{objectID:t}}}));return d(t.transporter.write({method:j,path:p(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!1,requests:a}},n),(function(e,r){return jt(t)(e.taskID,r)}))}},tt=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"1/keys/%s\",e)},r)}},et=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"1/task/%s\",e.toString())},r)}},rt=function(t){return function(e){return t.transporter.read({method:x,path:\"/1/dictionaries/*/settings\"},e)}},nt=function(t){return function(e){return t.transporter.read({method:x,path:\"1/logs\"},e)}},at=function(t){return function(e){return t.transporter.read({method:x,path:\"1/clusters/mapping/top\"},e)}},ot=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"1/clusters/mapping/%s\",e)},r)}},it=function(t){return function(e){var r=e||{},a=r.retrieveMappings,o=n(r,[\"retrieveMappings\"]);return!0===a&&(o.getClusters=!0),t.transporter.read({method:x,path:\"1/clusters/mapping/pending\"},o)}},ut=function(t){return function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={transporter:t.transporter,appId:t.appId,indexName:e};return h(n,r.methods)}},st=function(t){return function(e){return t.transporter.read({method:x,path:\"1/keys\"},e)}},ct=function(t){return function(e){return t.transporter.read({method:x,path:\"1/clusters\"},e)}},ft=function(t){return function(e){return t.transporter.read({method:x,path:\"1/indexes\"},e)}},dt=function(t){return function(e){return t.transporter.read({method:x,path:\"1/clusters/mapping\"},e)}},lt=function(t){return function(e,r,n){return d(t.transporter.write({method:j,path:p(\"1/indexes/%s/operation\",e),data:{operation:\"move\",destination:r}},n),(function(r,n){return ut(t)(e,{methods:{waitTask:de}}).waitTask(r.taskID,n)}))}},ht=function(t){return function(e,r){return d(t.transporter.write({method:j,path:\"1/indexes/*/batch\",data:{requests:e}},r),(function(e,r){return Promise.all(Object.keys(e.taskID).map((function(n){return ut(t)(n,{methods:{waitTask:de}}).waitTask(e.taskID[n],r)})))}))}},pt=function(t){return function(e,r){return t.transporter.read({method:j,path:\"1/indexes/*/objects\",data:{requests:e}},r)}},mt=function(t){return function(e,n){var a=e.map((function(t){return r(r({},t),{},{params:R(t.params||{})})}));return t.transporter.read({method:j,path:\"1/indexes/*/queries\",data:{requests:a},cacheable:!0},n)}},yt=function(t){return function(e,a){return Promise.all(e.map((function(e){var o=e.params,i=o.facetName,u=o.facetQuery,s=n(o,[\"facetName\",\"facetQuery\"]);return ut(t)(e.indexName,{methods:{searchForFacetValues:ue}}).searchForFacetValues(i,u,r(r({},a),s))})))}},gt=function(t){return function(e,r){var n=y(r);return n.queryParameters[\"X-Algolia-User-ID\"]=e,t.transporter.write({method:I,path:\"1/clusters/mapping\"},n)}},vt=function(t){return function(e,r,n){var a=r.map((function(t){return{action:\"addEntry\",body:t}}));return d(t.transporter.write({method:j,path:p(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!0,requests:a}},n),(function(e,r){return jt(t)(e.taskID,r)}))}},bt=function(t){return function(e,r){return d(t.transporter.write({method:j,path:p(\"1/keys/%s/restore\",e)},r),(function(r,n){return f((function(r){return tt(t)(e,n).catch((function(t){if(404!==t.status)throw t;return r()}))}))}))}},Pt=function(t){return function(e,r,n){var a=r.map((function(t){return{action:\"addEntry\",body:t}}));return d(t.transporter.write({method:j,path:p(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!1,requests:a}},n),(function(e,r){return jt(t)(e.taskID,r)}))}},Ot=function(t){return function(e,r,n){return t.transporter.read({method:j,path:p(\"/1/dictionaries/%s/search\",e),data:{query:r},cacheable:!0},n)}},wt=function(t){return function(e,r){return t.transporter.read({method:j,path:\"1/clusters/mapping/search\",data:{query:e}},r)}},It=function(t){return function(e,r){return d(t.transporter.write({method:D,path:\"/1/dictionaries/*/settings\",data:e},r),(function(e,r){return jt(t)(e.taskID,r)}))}},xt=function(t){return function(e,r){var a=Object.assign({},r),o=r||{},i=o.queryParameters,u=n(o,[\"queryParameters\"]),s=i?{queryParameters:i}:{},c=[\"acl\",\"indexes\",\"referers\",\"restrictSources\",\"queryParameters\",\"description\",\"maxQueriesPerIPPerHour\",\"maxHitsPerQuery\"];return d(t.transporter.write({method:D,path:p(\"1/keys/%s\",e),data:s},u),(function(r,n){return f((function(r){return tt(t)(e,n).then((function(t){return function(t){return Object.keys(a).filter((function(t){return-1!==c.indexOf(t)})).every((function(e){if(Array.isArray(t[e])&&Array.isArray(a[e])){var r=t[e];return r.length===a[e].length&&r.every((function(t,r){return t===a[e][r]}))}return t[e]===a[e]}))}(t)?Promise.resolve():r()}))}))}))}},jt=function(t){return function(e,r){return f((function(n){return et(t)(e,r).then((function(t){return\"published\"!==t.status?n():void 0}))}))}},Dt=function(t){return function(e,r){return d(t.transporter.write({method:j,path:p(\"1/indexes/%s/batch\",t.indexName),data:{requests:e}},r),(function(e,r){return de(t)(e.taskID,r)}))}},qt=function(t){return function(e){return B(r(r({shouldStop:function(t){return void 0===t.cursor}},e),{},{request:function(r){return t.transporter.read({method:j,path:p(\"1/indexes/%s/browse\",t.indexName),data:r},e)}}))}},St=function(t){return function(e){var n=r({hitsPerPage:1e3},e);return B(r(r({shouldStop:function(t){return t.hits.length0&&void 0!==arguments[0]?arguments[0]:0,c=[];for(a=o;a=t.nbPages)throw{name:\"ObjectNotFoundError\",message:\"Object not found.\"};return n()}))}()}},Kt=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"1/indexes/%s/%s\",t.indexName,e)},r)}},Wt=function(){return function(t,e){for(var r=0,n=Object.entries(t.hits);rr.OPENED&&void 0===n&&(clearTimeout(o),n=a(t.responseTimeout,\"Socket timeout\"))},r.onerror=function(){0===r.status&&(clearTimeout(o),clearTimeout(n),e({content:r.responseText||\"Network request failed\",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(o),clearTimeout(n),e({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(t.data)}))}},logger:(a=ye,{debug:function(t,e){return pe>=a&&console.debug(t,e),Promise.resolve()},info:function(t,e){return me>=a&&console.info(t,e),Promise.resolve()},error:function(t,e){return console.error(t,e),Promise.resolve()}}),responsesCache:s(),requestsCache:s({serializable:!1}),hostsCache:u({caches:[i({key:\"\".concat(\"4.24.0\",\"-\").concat(t)}),s()]}),userAgent:T(\"4.24.0\").add({segment:\"Browser\"})},f=r(r({},o),n),d=function(){return function(t){return function(t){var e=t.region||\"us\",n=c(m.WithinHeaders,t.appId,t.apiKey),a=k(r(r({hosts:[{url:\"personalization.\".concat(e,\".algolia.com\")}]},t),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/json\"}),t.headers),queryParameters:r(r({},n.queryParameters()),t.queryParameters)}));return h({appId:t.appId,transporter:a},t.methods)}(r(r(r({},o),t),{},{methods:{getPersonalizationStrategy:H,setPersonalizationStrategy:M}}))}};return function(t){var e=t.appId,n=c(void 0!==t.authMode?t.authMode:m.WithinHeaders,e,t.apiKey),a=k(r(r({hosts:[{url:\"\".concat(e,\"-dsn.algolia.net\"),accept:g.Read},{url:\"\".concat(e,\".algolia.net\"),accept:g.Write}].concat(l([{url:\"\".concat(e,\"-1.algolianet.com\")},{url:\"\".concat(e,\"-2.algolianet.com\")},{url:\"\".concat(e,\"-3.algolianet.com\")}]))},t),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/x-www-form-urlencoded\"}),t.headers),queryParameters:r(r({},n.queryParameters()),t.queryParameters)}));return h({transporter:a,appId:e,addAlgoliaAgent:function(t,e){a.userAgent.add({segment:t,version:e})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},t.methods)}(r(r({},f),{},{methods:{search:mt,searchForFacetValues:yt,multipleBatch:ht,multipleGetObjects:pt,multipleQueries:mt,copyIndex:G,copySettings:_,copySynonyms:X,copyRules:V,moveIndex:lt,listIndices:ft,getLogs:nt,listClusters:ct,multipleSearchForFacetValues:yt,getApiKey:tt,addApiKey:K,listApiKeys:st,updateApiKey:xt,deleteApiKey:Z,restoreApiKey:bt,assignUserID:W,assignUserIDs:L,getUserID:ot,searchUserIDs:wt,listUserIDs:dt,getTopUserIDs:at,removeUserID:gt,hasPendingMappings:it,clearDictionaryEntries:Q,deleteDictionaryEntries:$,getDictionarySettings:rt,getAppTask:et,replaceDictionaryEntries:vt,saveDictionaryEntries:Pt,searchDictionaryEntries:Ot,setDictionarySettings:It,waitAppTask:jt,customRequest:Y,initIndex:function(t){return function(e){return ut(t)(e,{methods:{batch:Dt,delete:Ct,findAnswers:Mt,getObject:Kt,getObjects:Lt,saveObject:te,saveObjects:ee,search:ie,searchForFacetValues:ue,waitTask:de,setSettings:fe,getSettings:Gt,partialUpdateObject:_t,partialUpdateObjects:Xt,deleteObject:Ut,deleteObjects:zt,deleteBy:At,clearObjects:Nt,browseObjects:qt,getObjectPosition:Wt,findObject:Bt,exists:Ht,saveSynonym:ae,saveSynonyms:oe,getSynonym:Vt,searchSynonyms:ce,browseSynonyms:kt,deleteSynonym:Ft,clearSynonyms:Et,replaceAllObjects:Yt,replaceAllSynonyms:$t,searchRules:se,getRule:Qt,deleteRule:Jt,saveRule:re,saveRules:ne,replaceAllRules:Zt,browseRules:St,clearRules:Rt}})}},initAnalytics:function(){return function(t){return function(t){var e=t.region||\"us\",n=c(m.WithinHeaders,t.appId,t.apiKey),a=k(r(r({hosts:[{url:\"analytics.\".concat(e,\".algolia.com\")}]},t),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/json\"}),t.headers),queryParameters:r(r({},n.queryParameters()),t.queryParameters)}));return h({appId:t.appId,transporter:a},t.methods)}(r(r(r({},o),t),{},{methods:{addABTest:C,getABTest:z,getABTests:J,stopABTest:F,deleteABTest:U}}))}},initPersonalization:d,initRecommendation:function(){return function(t){return f.logger.info(\"The `initRecommendation` method is deprecated. Use `initPersonalization` instead.\"),d()(t)}},getRecommendations:ge,getFrequentlyBoughtTogether:ve,getLookingSimilar:we,getRecommendedForYou:Ie,getRelatedProducts:be,getTrendingFacets:Pe,getTrendingItems:Oe}}))}return xe.version=\"4.24.0\",xe}));\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperties = require('../internals/object-define-properties');\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\n$({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, {\n defineProperties: defineProperties\n});\n","var $ = require('../internals/export');\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\n\nvar nativeFreeze = Object.freeze;\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeFreeze(1); });\n\n// `Object.freeze` method\n// https://tc39.github.io/ecma262/#sec-object.freeze\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n freeze: function freeze(it) {\n return nativeFreeze && isObject(it) ? nativeFreeze(onFreeze(it)) : it;\n }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.small` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.small\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('small') }, {\n small: function small() {\n return createHTML(this, 'small', '', '');\n }\n});\n","module.exports = require('./dist/pages/_app')\n","import algoliasearch from 'algoliasearch'\nimport { AlgoliaConstants } from '../helpers/Constants'\n\nconst clients = {\n search: null,\n write: null\n}\n\nexport const getSearchClient = () => {\n if (!process.env.ALGOLIA_APP_ID || !process.env.ALGOLIA_APP_SEARCH_KEY) {\n throw new Error(AlgoliaConstants.errorMsg)\n }\n\n if (!clients.search) {\n clients.search = algoliasearch(process.env.ALGOLIA_APP_ID, process.env.ALGOLIA_APP_SEARCH_KEY)\n }\n\n return clients.search\n}\n\n","export const Constants = Object.freeze({\n title: 'title',\n titleLevel: 'titleLevel',\n classNames: 'classNames',\n callToActionLink: 'callToActionLink',\n callToActionLabel: 'callToActionLabel',\n description: 'description',\n disclaimer: 'disclaimer',\n disclaimerReference: 'disclaimerReference',\n eyebrow: 'eyebrow',\n backgroundAsset: 'backgroundAsset',\n mobileBackgroundAsset: 'mobileBackgroundAsset',\n anchorId: 'anchorId',\n hashChange: 'hashchange',\n resize: 'resize',\n close: 'close',\n play: 'play',\n mobile: 'mobile',\n desktop: 'desktop',\n chevronRight: 'chevronRight',\n blue: 'blue',\n smooth: 'smooth',\n backgroundImage: 'backgroundImage',\n mainAsset: 'mainAsset',\n name: 'name',\n empty: '',\n blocks: 'blocks',\n body: 'body',\n submit: 'submit',\n json: 'application/json',\n whiteText: 'white-text',\n white: 'white',\n content: 'content ',\n top: 'top',\n primaryColor: '#0057B8',\n scroll: 'scroll',\n ratingSummary: 'rating_summary',\n button: 'button',\n chevronDown: 'chevronDown',\n chevronTop: 'chevronTop',\n wideChevronDown: 'wideChevronDown',\n thinChevronDown: 'thinChevronDown',\n itemType: 'https://schema.org/Product',\n text: 'text',\n small: 'small',\n medium: 'medium',\n large: 'large',\n h1: 'h1',\n h2: 'h2',\n keydown: 'keydown',\n Tab: 'Tab',\n Escape: 'Escape',\n touchmove: 'touchmove',\n mediumLong: 'medium-long',\n alreadyInUse: 'already in use',\n brand: 'OralB',\n pathDelimiter: '/',\n blank: '_blank',\n collectionHeroSection: 'collection-hero-section',\n collectionHeroSectionCta: 'collection-hero-section-cta',\n titleLinkName: 'title-link',\n kidsProductCategory: 'Kids Product Category',\n optins: 'optIns',\n optinIdx: 0,\n autoComplete: 'on',\n aboutReviews: 'about reviews',\n Loading: 'Loading',\n breadcrumb: 'BreadcrumbList',\n Answer:'Answer',\n Question:'Question',\n HowToSchema:'Howto',\n article: 'BlogPosting',\n WebPage:'WebPage',\n FAQschema:'FAQPage',\n ImageObject:'ImageObject',\n organization: 'Organization',\n context: 'http://schema.org',\n typeLD: 'application/ld+json',\n signInEmail: 'signInEmail',\n signInPassword: 'signInPassword',\n product:'Product',\n PrivacyLinkPlaceholder: '{{privacyLink}}',\n bannerImagePositionLeft: 'Left',\n bannerImagePositionUp: 'Up',\n bannerImagePositionRight: 'Right',\n bannerImagePositionTop: 'Top'\n});\n\nexport const OrganizationConstants = Object.freeze({\n brand: 'OralB',\n parentOrganization: 'Procter & Gamble'\n});\n\nexport const AdditionalReadingBlockConstants = Object.freeze({\n additionalReadingBlock: 'additionalReadingBlock',\n articleLink: 'article link'\n});\n\nexport const AnnouncementBarConstants = Object.freeze({\n disableDays: 'disableDays',\n AnnouncementBarDisableDate: 'AnnouncementBarDisableDate',\n closeAriaLabel: 'closeAriaLabel',\n close: Constants.close,\n classNames: Constants.classNames,\n callToActionLink: Constants.callToActionLink,\n callToActionLabel: Constants.callToActionLabel,\n description: Constants.description,\n ctaName: 'electric toothburshes'\n});\n\nexport const AppDownloadBlockConstants = Object.freeze({\n title: Constants.title,\n classNames: Constants.classNames,\n eyebrow: Constants.eyebrow,\n backgroundAsset: Constants.backgroundAsset,\n mobileBackgroundAsset: Constants.mobileBackgroundAsset,\n downloadLinks: 'downloadLinks',\n mobile: Constants.mobile,\n desktop: Constants.desktop,\n body: Constants.body,\n button: 'BUTTON'\n});\n\nexport const ArticleCategoryHeroBlockConstants = Object.freeze({\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n classNames: Constants.classNames,\n eyebrow: Constants.eyebrow,\n body: Constants.body,\n backgroundAsset: Constants.backgroundAsset,\n mobileBackgroundAsset: Constants.mobileBackgroundAsset,\n ctas: 'ctas',\n chevronRight: Constants.chevronRight,\n disclaimer: Constants.disclaimer,\n blue: Constants.blue,\n mainAsset: 'mainAsset',\n mobileAsset: 'mobileAsset',\n textToTheRight: 'textToTheRight',\n backgroundColor: 'backgroundColor',\n callToActionAriaLabel: 'callToActionAriaLabel'\n});\n\nexport const ArticleHeroBlockConstants = Object.freeze({\n classNames: Constants.classNames,\n readTimeLabel: 'readTimeLabel',\n articleBanner: 'article banner'\n});\n\n\nexport const ImageConstants = Object.freeze({\n defaultImageWindWidth: 450,\n defaultWidth: 400,\n defaultDesktopWidth:768,\n dpr_1440: 'f_auto,q_auto,w_1440',\n product: 'product',\n mobile_max_width: '767px',\n desktop_min_width: '768px'\n});\n\nexport const ArticlePopUpConstants = Object.freeze({\n title: Constants.title,\n body: 'body',\n facebookLabel: 'facebookLabel',\n twitterLabel: 'twitterLabel',\n closeOverlayLabel: 'closeOverlayLabel'\n});\n\nexport const BrushConfiguratorConstants = Object.freeze({\n dataName: 'data-name',\n smooth: Constants.smooth,\n center: 'center',\n switch: 'switch',\n status: 'status',\n features: 'features',\n live: 'live',\n off: 'off'\n});\n\n export const ButtonTabsNavigationConstant = Object.freeze({\n replacementBrushHead: 'Replacement Brush Head',\n chevronDown: 'chevronDown',\n panel: 'panel',\n tab: 'tab',\n tablist: 'tablist',\n chevronLeft: 'chevronLeft',\n chevronRight: Constants.chevronRight,\n });\n\n export const FAQConstants = Object.freeze({\n link: 'link'\n });\n\n export const IconsConstant = Object.freeze({\n role: 'img',\n iconOne: 'icon-1',\n iconTwo: 'icon-2',\n obIconRoundedContainer: 'ob-icon-rounded-container'\n });\n\n export const labelConstant = Object.freeze({\n reviewLabel: 'Search topics and reviews'\n });\n\nexport const CharacterBlockConstants = Object.freeze({\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n classNames: Constants.classNames,\n eyebrow: Constants.eyebrow,\n description: Constants.description,\n backgroundImage: Constants.backgroundImage,\n mobileBackgroundImage: 'mobileBackgroundImage',\n characterLogo: 'characterLogo',\n mobileCharacterLogo: 'mobileCharacterLogo',\n maxWidth: '(max-width: 667px)',\n anchorId: Constants.anchorId,\n});\n\nexport const CollectionTabsBlockConstants = Object.freeze({\n smooth: Constants.smooth,\n hash: '#',\n});\n\nexport const ComparisonChartBlockConstants = Object.freeze({\n row: 'row',\n table: 'table',\n rowheader: 'rowheader',\n columnheader: 'columnheader',\n cell: 'cell',\n noValueLabel: 'noValueLabel',\n top: Constants.top,\n chevronRight: Constants.chevronRight,\n jumpToConfiguratorLink: 'jumpToConfiguratorLink',\n altTextPrefixFeatureImage: 'comparison-chart-feature',\n ariaLabel: 'Select first IO series'\n});\n\nexport const ContactUsBlockConstants = Object.freeze({\n classNames: Constants.classNames,\n contactUs: 'contact-us'\n});\n\nexport const ContentConstants = Object.freeze({\n playing: 'playing',\n play: 'play',\n pause: 'pause',\n pauseLabel: 'pauseLabel',\n playLabel: 'playLabel',\n resetLabel: 'resetLabel',\n openTranscriptLabel: 'openTranscriptLabel',\n closeTranscriptLabel: 'closeTranscriptLabel',\n ended: 'ended',\n Src: 'Src',\n Dest: 'Dest',\n x: 'x',\n y: 'y',\n White: 'White',\n white: Constants.white,\n blue: Constants.blue,\n transparentWithBorder: 'Transparent With Border',\n blueBorderBtn: 'ob-blue-border-btn',\n chevronRight: Constants.chevronRight,\n primaryGrey: 'primaryGrey',\n callToActionLink: Constants.callToActionLink,\n callToActionLabel: Constants.callToActionLabel,\n callToActionAriaLabel:'callToActionAriaLabel',\n callToActionTitle: 'callToActionTitle',\n surtitle: 'surtitle',\n description: Constants.description,\n classNames: Constants.classNames,\n callToActionIsALink: 'callToActionIsALink',\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n backgroundColor: 'backgroundColor',\n textContainerBackgroundColor: 'textContainerBackgroundColor',\n textContainerBackgroundOpacity: 'textContainerBackgroundOpacity',\n textContainerHasPadding: 'textContainerHasPadding',\n blueEyebrow: 'blueEyebrow',\n disclaimer: Constants.disclaimer,\n disclaimerReference: Constants.disclaimerReference,\n textsImage: 'textsImage',\n cloudinaryVideo: 'cloudinaryVideo',\n devicesConfigurations: 'devicesConfigurations',\n deviceConfigurations: 'deviceConfigurations',\n isMedium: 'isMedium',\n blockMinHeight: 'blockMinHeight',\n blockMarginTop: 'blockMarginTop',\n blockMarginBottom: 'blockMarginBottom',\n blockMarginRight: 'blockMarginRight',\n blockMarginLeft: 'blockMarginLeft',\n blockPadding: 'blockPadding',\n textAlign: 'textAlign',\n textContainerWidth: 'textContainerWidth',\n titleWidth: 'titleWidth',\n descriptionWidth: 'descriptionWidth',\n textContainerHorizontalAlignment: 'textContainerHorizontalAlignment',\n textContainerVerticalAlignment: 'textContainerVerticalAlignment',\n textContainerOffset: 'textContainerOffset',\n textContainerMarginRight: 'textContainerMarginRight',\n textContainerMarginLeft: 'textContainerMarginLeft',\n textContainerMarginBottom: 'textContainerMarginBottom',\n mainAsset: 'mainAsset',\n mainAssetBelowOrAboveText: 'mainAssetBelowOrAboveText',\n mainAssetMaxWidth: 'mainAssetMaxWidth',\n mainAssetMaxHeight: 'mainAssetMaxHeight',\n mainAssetHeight: 'mainAssetHeight',\n mainAssetMarginTop: 'mainAssetMarginTop',\n mainAssetMarginRight: 'mainAssetMarginRight',\n mainAssetOffsetBottom: 'mainAssetOffsetBottom',\n mainAssetOffsetLeft: 'mainAssetOffsetLeft',\n mainAssetScale: 'mainAssetScale',\n backgroundAsset: 'backgroundAsset',\n mainAssetHorizontalAlignment: 'mainAssetHorizontalAlignment',\n mainAssetVerticalAlignment: 'mainAssetVerticalAlignment',\n backgroundPosition: 'backgroundPosition',\n sectionOffsetTop: 'sectionOffsetTop',\n mainAssetParallax: 'mainAssetParallax',\n mainAssetParallaxSetting: 'mainAssetParallaxSetting',\n textParallax: 'textParallax',\n textParallaxSetting: 'textParallaxSetting',\n textParallaxConfiguration: 'textParallaxConfiguration',\n assetParallaxConfiguration: 'assetParallaxConfiguration',\n textShowAnimation: 'textShowAnimation',\n textFadeIn: 'textFadeIn',\n textColor: 'textColor',\n respectImageAspectRatio: 'respectImageAspectRatio',\n titleFontSize: 'titleFontSize',\n small: Constants.small,\n medium: Constants.medium,\n large: Constants.large,\n ctaBackgroundColor: 'ctaBackgroundColor',\n aboveText: 'above text',\n belowText: 'below text',\n hasDivider: 'hasDivider',\n isRemoveParallax:'isRemoveParallax',\n defaultWidth: 350,\n defaultWindWidth: 400,\n CtalabelId:'ctaLabelId',\n ctaName: 'collection-cta',\n reset: 'reset',\n isPopupCta: 'isPopupCta',\n imagePopup: 'imagePopup',\n replay: 'replay',\n descriptionBelowOption: 'descriptionBelowOption',\n callToActionType: 'callToActionType',\n contentOptions: 'contentOptions',\n contentOptionClassName: 'contentOptionClassName',\n CtalabelId:'ctaLabelId',\n secondaryAsset:'secondaryAsset',\n ctaName: 'collection-cta',\n isCtaLinkExternal: 'isCtaLinkExternal',\n gaEventClass: 'gaEventClass',\n gaEventLabel: 'gaEventLabel',\n gaEvents: 'gaEvents',\n gAeventClassName : 'gAeventClassName',\n textAlignBottomMobileView: 'text-align-bottom-mobile-view',\n appStoreIcon: 'appStoreIcon',\n noteText: 'noteText',\n isContentHyperlinkBlock: 'isContentHyperlinkBlock',\n blockHyperlink: 'blockHyperlink',\n subDescription: 'subDescription',\n mobileMainHeading: 'mobileMainHeading'\n});\n\nexport const ContentVideoConstants = Object.freeze({\n Tab: Constants.Tab,\n keydown: Constants.keydown,\n description: Constants.description,\n disclaimer: Constants.disclaimer,\n mobileLayout: 'mobileLayout',\n desktopLayout: 'desktopLayout',\n whiteText: Constants.whiteText,\n backgroundImage: 'background-image',\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n classNames: Constants.classNames,\n textContainerMarginBottom: 'textContainerMarginBottom',\n textContainerMarginTop: 'textContainerMarginTop',\n playIconColor: 'playIconColor',\n backgroundColor: 'backgroundColor',\n playLabel: 'playLabel',\n closeLabel: 'closeLabel',\n close: Constants.close,\n play: Constants.play,\n pauseLabel: 'pauseLabel',\n resetLabel: 'resetLabel',\n openTranscriptLabel: 'openTranscriptLabel',\n closeTranscriptLabel: 'closeTranscriptLabel',\n white: Constants.white,\n whiteHexThreeChars: '#fff',\n whiteHexFull: '#ffffff',\n surtitle: 'surtitle',\n blueEyebrow: 'blueEyebrow',\n contentOptions: 'contentOptions',\n playIcon: 'playIcon',\n textImage: 'textImage',\n youtubeVideoBlock: 'youtubeVideoBlock',\n mainHeading: 'mainHeading',\n gaEventLabel: 'gaEventLabel',\n});\n\nexport const AwardsBlockConstant = Object.freeze({\n awardItemLogo: 'award-item-logo'\n});\n\nexport const FAQBlockConstants = Object.freeze({\n switch: 'switch',\n button: Constants.button,\n minus6: 'minus6',\n plus: 'plus',\n arrowRight: 'ovalArrowRight',\n popularSentence: 'Popular topics others look for',\n searchResultsTitle: 'We found 6 results for Warranty',\n obSupport: 'Oral-B Support',\n Previous: 'Previous',\n Next: 'Next',\n of: 'of'\n});\n\nexport const FooterConstants = Object.freeze({\n resize: Constants.resize,\n copyright: 'copyright',\n copyrightAt: '©',\n countryCode: 'CZ',\n lang: 'cs'\n});\n\nexport const GalleryBlockConstants = Object.freeze({\n cloudinaryImage: 'cloudinaryImage',\n classNames: Constants.classNames,\n title: Constants.title,\n whiteText: Constants.whiteText,\n anchorId: Constants.anchorId,\n seeMoreButtonLabel: 'seeMoreButtonLabel',\n seeLessButtonLabel: 'seeLessButtonLabel',\n minus6: 'minus6',\n blue: Constants.blue,\n plus: 'plus',\n full: 'Full',\n large: 'Large',\n small: 'Small'\n});\n\nexport const InTheBoxBlockConstants = Object.freeze({\n whiteText: Constants.whiteText,\n body: 'body',\n classNames: 'classNames',\n items: 'items',\n anchorId: Constants.anchorId,\n inTheBoxImage: 'inTheBoxImage',\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n});\n\nexport const LanguageSelectionConstants = Object.freeze({\n primaryColor: Constants.primaryColor,\n smooth: Constants.smooth,\n title: Constants.title,\n keydown: Constants.keydown,\n regions: 'regions',\n currentLanguage: 'currentLanguage',\n jumpToLabel: 'jumpToLabel',\n closeLanguageSelectionLabel: 'closeLanguageSelectionLabel',\n wideChevronDown: 'wideChevronDown',\n close: Constants.close,\n countryLanguageSelection: 'Country and Language selection',\n countryLanguageAriaLabel:'languageSelectionAriaLabel'\n});\n\nexport const LayoutConstants = Object.freeze({\n classNames: Constants.classNames,\n zoneContestCode: 'zone-contest',\n zoneThankYouCode: 'zone-thankyou',\n paddingValue:'66px',\n paddingValueBreadcrumb: '112px'\n});\n\nexport const LegacyProductHighlightsConstants = Object.freeze({\n isActive: 'is-active',\n empty: Constants.empty,\n minus6: 'minus6',\n blue: Constants.blue,\n button: Constants.button,\n plus: 'plus',\n seeLess: 'SEE LESS',\n seeMore: 'SEE MORE',\n highlights: ' highlights',\n plusSymbol: '+',\n minusSymbol: '-',\n arrowUp: 'ArrowUp',\n arrowDown: 'ArrowDown',\n text: Constants.text,\n prev: 'prev',\n next: 'next',\n smooth: 'smooth',\n nearest: 'nearest',\n center: 'center',\n highlights: 'highlights',\n productRating: 'rating'\n});\n\nexport const MainMenuConstants = Object.freeze({\n primaryColor: Constants.primaryColor,\n mousedown: 'mousedown',\n blur: 'blur',\n resize: Constants.resize,\n scroll: Constants.scroll,\n keydown: Constants.keydown,\n close: Constants.close,\n Open: 'Open',\n Close: 'Close',\n child: 'child',\n productByNeed: 'product-by-need',\n productByType: 'product-by-type',\n whyOralB: 'why-oral-b',\n conditions: 'conditions',\n lifeStages: 'life-stages',\n ourAmbition: 'our-ambition',\n wideChevronDown: 'wideChevronDown',\n chevronDown: Constants.chevronDown,\n plus: 'plus',\n minus6: 'minus6',\n mainMenuLabel: 'mainMenuLabel',\n hierarchy: 'hierarchy',\n classNames: Constants.classNames,\n hamburger: 'hamburger',\n closeMenuLabel: 'closeMenuLabel',\n openMenuLabel: 'openMenuLabel',\n searchLabel: 'searchLabel',\n returnToMainMenuLabel: 'returnToMainMenuLabel',\n arrowLeft: 'arrowLeft',\n searchDataActionDetail: 'Open Search Panel',\n panel: 'panel',\n pullDown: 'pull-down',\n collapsed: 'collapsed',\n expanded: 'expanded',\n expanding: 'expanding',\n escape: 'Escape',\n menubar: 'menubar',\n menuitem: 'menuitem',\n menulist: 'menu-list',\n menulistDesktop: 'menu-list-desktop',\n languageLink: 'language link',\n languageTabMobile: 'language tab mobile',\n expandingMenu: 'expanding-menu',\n closeButton: 'close button',\n menu: 'menu',\n chevronTop: 'chevronTop',\n white: 'white',\n capExpanded: 'EXPANDED',\n capExpanding: 'EXPANDING',\n capEscape: 'ESCAPE',\n});\n\nexport const MarkdownTextConstants = Object.freeze({\n script: 'script',\n text: 'text'\n})\n\nexport const MetaConstants = Object.freeze({\n https: 'https://'\n});\n\nexport const MiniNavigationConstants = Object.freeze({\n hierarchy: 'hierarchy',\n classNames: Constants.classNames,\n backgroundGrey: 'backgroundGrey',\n href: 'href',\n smooth: Constants.smooth,\n chevronDown: Constants.chevronDown,\n resize: Constants.resize,\n target: 'target',\n downArrow: 'downArrow'\n});\n\nexport const ComponentFactoryConstants = Object.freeze({\n Zone: 'Zone',\n Layout: 'Layout',\n Content: 'ContentBlock',\n ContentVideo: 'contentVideo',\n RichText: 'richTextBlock',\n RichTextLink: 'link',\n MarkdownText: 'markdownTextBlock',\n MainMenu: 'mainMenuBlock',\n Footer: 'footerBlock',\n LanguageSelection: 'languageSelectionBlock',\n PageNavigation: 'pageNavigationBlock',\n TabbedContent: 'tabbedContentBlock',\n AnnouncementBar: 'announcementBarBlock',\n SideBySideContainer: 'sideBySideContainerBlock',\n SeriesSelector: 'seriesSelectorBlock',\n MiniNavigation: 'miniNavigationBlock',\n PromoBlock: 'promoBlock',\n SpotlightSlider: 'spotlightSlider',\n SpotlightContentVideo: 'spotlightContentVideo',\n SpotlightContentBlock: 'spotlightContentBlock',\n SpotlightStickyBar: 'spotlightStickyBarBlock',\n InTheBoxBlock: 'inTheBoxBlock',\n ProductGridBlock: 'productGridBlock',\n CollectionTabsBlock: 'collectionTabsBlock',\n ProductHighlights: 'productHighlightBlock',\n FeaturesTabBlock: 'featuresTabBlock',\n BrandGuaranteeBlock: 'brandGuaranteeBlock',\n GalleryBlock: 'galleryBlock',\n FAQBlock: 'faqBlock',\n BrushConfigurator: 'brushConfiguratorBlock',\n ComparisonChartBlock: 'comparisonChartBlock',\n UserQuoteBlock: 'userQuoteBlock',\n SpotlightWaitlistBlock: 'spotlightWaitlistBlock',\n SpotlightPreorderBlock: 'spotlightPreOrderBlock',\n CollectionTabsDropdown: 'collectionSegmentTabsDropdownBlock',\n ProductSubNav: 'productSubNav',\n CharacterBlock: 'characterBlock',\n ProductRecommenderBlock: 'productRecommenderBlock',\n ShowcaseBlock: 'showcaseBlock',\n ArticleHeroBlock: 'articleHeroBlock',\n SkipNavigationBlock: 'skipNavigationBlock',\n AppDownloadBlock: 'appDownloadBlock',\n ArticleCategoryHeroBlock: 'articleCategoryHeroBlock',\n RecentlyViewedProductsBlock: 'recentlyViewedProductsBlock',\n AdditionalReadingBlock: 'additionalReadingBlock',\n ProductOverlay: 'productOverlay',\n ErrorBlock: 'errorBlock',\n ArticleBody: 'articleBody',\n CloudinaryImage: 'cloudinaryImage',\n YoutubeVideo: 'youtubeVideoBlock',\n ResponsiveImage: 'responsiveImageBlock',\n ContactUsBlock: 'contacUsBlock',\n LoginBlock: 'loginBlock',\n ForgotPasswordBlock: 'forgotPasswordBlock',\n ResetPasswordBlock: 'resetPasswordBlock',\n CreateAccountBlock: 'createAccountBlock',\n RegisterTypeCodeBlock: 'blockRegisterTypeCode',\n PypestreamChat: 'pypestreamChat',\n SearchBlock: 'search',\n PressQuoteBlock: 'pressQuoteBlock',\n RegisterProductBlock: 'registerProductBlock',\n CongratulationsBlock: 'congratulationBlock',\n ProfileBlock: 'profileBlock',\n ChangePasswordBlock: 'changePasswordBlock',\n Awards: 'awardsBlock',\n LoginNavigationBlock: 'loginNavigationBlock',\n DesignedByDentist: 'designedByDentistBlock',\n LegacyArticleHeroBlock: 'legacyArticleHeroBlock',\n ContentDetailsBlock: 'contentDetailsBlock',\n ConsentBlock: 'ConsentBlock',\n ThreeColumnsUserQuoteBlock: 'threeColumnsQuoteBlock',\n ArticlePopUp: 'articlePopUp',\n ArticleShare: 'articleShareBlock',\n LegacyProductHighlightBlock: 'legacyProductHighlightBlock',\n ArticleListBlock: 'articleListBlock',\n ArticleTableBlock: 'articleTableBlock',\n SpotlightContestBlock: 'spotlightContestBlock',\n SpotlightContestThankYouBlock: 'spotlightContestThankYouBlock',\n ProductLegacyBody: 'productLegacyBody',\n FaqDetailsBlock: 'faqDetailsBlock',\n Disclaimer: 'disclaimer',\n ProductVariantsRecommanderBlock: 'productVariantsRecommanderBlock',\n SitemapBlock: 'sitemapBlock',\n SitemapPage: 'SitemapPage',\n HTMLBlock: 'htmlBlock',\n SpotlightExperienceBlock: 'spotlightExperienceBlock',\n DoubleOptInVerificationBlock: 'doubleOptInVerificationBlock',\n articleLink: 'article link',\n blue: 'blue',\n chevronRight: 'chevronRight',\n mediaUpper: '(min-width: 1200px)',\n mediaLower: '(min-width: 426px)',\n dprUpper: 'q=100&f=center&fit=fill&w=460&h=260',\n dprMedium: 'q=100&f=center&fit=fill&w=272&h=150',\n dprLower: 'q=100&f=center&fit=fill&w=124&h=150',\n BreadCrumbs: 'breadCrumbs',\n CarouselBlock: 'blockCarouselBlock',\n AccordionBlock: 'accordionBlock',\n SwitchTab: 'switchTabs',\n DragSlider: 'dragSlider',\n MiniContentBlock: 'blockMiniContentBlock',\n ExpandableHierarchy: 'blockExpandableHierarchy',\n ContentAndCarouselBlock: 'blockContentAndCarousel',\n mainHeading: 'mainHeading',\n DentistContacts: 'dentistContacts',\n imageContentDetailsBlock: 'blockImageContentDetailsBlock',\n videoPromoBlock: 'blockVideoPromoBlock',\n ProductRecommenderABtest: 'productRecommendBlockABtest',\n DropDownSelector: 'DropDownSelector'\n});\n\nexport const ZoneConstants = Object.freeze({\n zone: 'zone ',\n classNames: Constants.classNames,\n role: 'role',\n ariaLabel: 'ariaLabel',\n backgroundImage: Constants.backgroundImage,\n id: 'id',\n zoneSpotlightSliderBodyClassname: 'spotlight-body-zone',\n zoneSpotlightContestClassname: 'spotlight-zone-contest',\n});\n\nexport const YoutubeVideoConstants = Object.freeze({\n percent: '%',\n title: 'Youtube',\n url: 'https://www.youtube-nocookie.com/embed/',\n youTubeUrl: 'https://www.youtube.com/'\n});\n\nexport const VideoPlayerConstants = Object.freeze({\n id: 'video-player',\n videoRecommendations: 'Video Recommendations overlay item information',\n videoRatioVolume: 0.3,\n descriptionButtonLowOpacity : 0.5,\n descriptionButtonHighOpacity : 1,\n domainHttp : 'https:',\n audioDescriptionClassName: 'vjs-icon-audio-description',\n firstAudioFileId: 'firstAudiofile',\n secondAudioFileId: 'secondAudiofile',\n firstAudio: 'firstAudio',\n secondAudio: 'secondAudio'\n});\n\nexport const UserQuoteConstants = Object.freeze({\n classNames: Constants.classNames,\n title: Constants.title,\n mainAsset: Constants.mainAsset,\n name: Constants.name,\n disclaimer: Constants.disclaimer,\n authorName: 'authorName',\n quote: 'quote',\n starRating: 'starRating',\n writeAReviewLabel: 'writeAReviewLabel',\n ratingSummary: Constants.ratingSummary,\n reviews: 'reviews',\n questions: 'questions',\n h1: Constants.h1,\n h2: Constants.h2,\n itemType: Constants.itemType,\n itemProp: Constants.name,\n displayUserReviews: 'displayUserReviews'\n});\n\nexport const UnderlineTabsNavigationConstants = Object.freeze({\n resize: Constants.resize,\n childLabel: 'Child Product Category',\n tabList: 'tablist',\n tab: 'tab'\n});\n\nexport const TabbedContentConstants = Object.freeze({\n empty: Constants.empty,\n anchorName: 'anchorName',\n chevronDown: Constants.chevronDown,\n tab: 'tab-',\n blocks: Constants.blocks\n});\n\nexport const StarRatingConstants = Object.freeze({\n star: 'star',\n starEmpty: 'starEmpty',\n starHalf: 'starHalf',\n});\n\nexport const SpotlightWaitlistConstants = Object.freeze({\n error: 'An error occured',\n failedToRegister: ': Registration failed',\n title: Constants.title,\n body: Constants.body,\n callToActionLabel: 'callToActionLabel',\n legalText: 'legalText',\n emailLimitExceedLabel: 'emailLimitExceedLabel',\n invalidLocaleLabel: 'invalidLocaleLabel',\n serviceUnavailableLabel: 'serviceUnavailableLabel',\n formLabels: 'formLabels',\n classNames: Constants.classNames,\n anchorId: Constants.anchorId,\n backgroundAsset: Constants.backgroundAsset,\n mobileBackgroundAsset: Constants.mobileBackgroundAsset,\n thankYouTitleLabel: 'thankYouTitleLabel',\n thankYouBackgroundAsset: 'thankYouBackgroundAsset',\n thankYouDescriptionLabel: 'thankYouDescriptionLabel',\n thankYouCallToAction: 'thankYouCallToAction',\n thankYouCallToActionLink: 'thankYouCallToActionLink',\n thankYouCallToActionIconName: 'thankYouCallToActionIconName',\n closeModalLabel: 'closeModalLabel',\n numberOfErrorsLabel: 'numberOfErrorsLabel',\n submit: Constants.submit,\n close: Constants.close,\n gcsCampaignParam: 'campaignId',\n gcsLocaleParam: 'locale',\n contentType: 'Content-Type',\n json: Constants.json,\n accessToken: 'access_token',\n system: 'GCS',\n chevronDown: Constants.chevronDown,\n countrySelectLabel: 'countrySelectLabel',\n countrySelectList: 'countrySelectList',\n countrySelectListDefaultOption: 'countrySelectListDefaultOption',\n countrySelectErrorMessage: 'countrySelectErrorMessage',\n countrySelectMention: 'countrySelectMention',\n modalLabelFirst: 'modalLabelFirst',\n modalLabelSecond: 'modalLabelSecond',\n addressTypeCode: 'addressTypeCode',\n alternateThankYouTitleLabel: 'alternateThankYouTitleLabel',\n alternateThankYouDescriptionLabel: 'alternateThankYouDescriptionLabel',\n callToPreOrderActionLabel: 'callToPreOrderActionLabel',\n callToPreOrderActionLink: 'callToPreOrderActionLink',\n isiO10camapign:'isiO10camapign',\n TermConditions:'Term&Conditions',\n email:'Email',\n topicList:'topicList',\n fromSource:'iO10 Spotlight Campaign',\n topicTitle:'topicTitle',\n otherProps:'otherProps',\n loader: '/static/images/loader.gif',\n});\nexport const CampaignIframeOverlayConstants = Object.freeze({\n localStorageIntersistialPopUp: 'disableIntersistialPopUp',\n isEnableCampaignOverlay: 'isEnableCampaignOverlay',\n email:'Email',\n interestitialUserDetail: 'interestitialUserDetail',\n expiryHours: 'expiryHours',\n disableIntersistialPopUpCookieApp: 'disableIntersistialPopUpApp'\n});\n\nexport const SpotlightContestConstants = Object.freeze({\n error: 'An error occured',\n failedToRegister: ': Sign up failed',\n title: Constants.title,\n contestTitle: 'contestTitle',\n signUpCallToActionLabel: 'signUpCallToActionLabel',\n emailLimitExceedLabel: 'emailLimitExceedLabel',\n invalidLocaleLabel: 'invalidLocaleLabel',\n serviceUnavailableLabel: 'serviceUnavailableLabel',\n formFields: 'formFields',\n classNames: Constants.classNames,\n anchorId: Constants.anchorId,\n backgroundAsset: Constants.backgroundAsset,\n mobileBackgroundAsset: Constants.mobileBackgroundAsset,\n oralBLogoAsset: 'oralBLogo',\n backToOralbLink: 'backToOralbLink',\n ioLogoAsset: 'ioLogo',\n formOptinInputText: 'formOptinInputText',\n formOwnETBInputText: 'formOwnETBInputText',\n formLegalText: 'formLegalText',\n socialLinks: 'socialLinks',\n redirectDestination: 'redirectDestination',\n copyrightLabel: 'copyrightLabel',\n thankYouTitleLabel: 'thankYouTitleLabel',\n thankYouBackgroundAsset: 'thankYouBackgroundAsset',\n thankYouDescriptionLabel: 'thankYouDescriptionLabel',\n thankYouCallToAction: 'thankYouCallToAction',\n thankYouCallToActionLink: 'thankYouCallToActionLink',\n thankYouCallToActionIconName: 'thankYouCallToActionIconName',\n numberOfErrorsLabel: 'numberOfErrorsLabel',\n submit: Constants.submit,\n close: Constants.close,\n GcsURL: '/registration?access_token=',\n gcsCampaignParam: 'campaignId',\n gcsLocaleParam: 'locale',\n contentType: 'Content-Type',\n json: Constants.json,\n accessToken: 'access_token',\n system: 'GCS',\n chevronDown: Constants.thinChevronDown,\n modalLabelFirst: 'modalLabelFirst',\n modalLabelSecond: 'modalLabelSecond',\n addressTypeCode: 'addressTypeCode',\n alternateThankYouTitleLabel: 'alternateThankYouTitleLabel',\n alternateThankYouDescriptionLabel: 'alternateThankYouDescriptionLabel',\n continueReading: 'Continue reading',\n});\n\nexport const SpotlightVideoPlayerConstants = Object.freeze({\n pgone: 'pgone',\n cloudinaryVideoPlayer: 'cloudinary-video-player',\n cloudinaryCore: 'cloudinary-core',\n inherit: 'inherit',\n never: 'never',\n sourceTypes: ['hls', 'mp4', 'ogg', 'webm'],\n});\n\nexport const SpotlightStickyBarConstants = Object.freeze({\n stickyBarClassName: 'ob-SpotlightStickyBar',\n scrollTo: 'scrollTo',\n callToActionLink: Constants.callToActionLink,\n logoLink: 'logoLink',\n logo: 'logo',\n name: Constants.name,\n title: Constants.title,\n medium: Constants.medium,\n SignUp: 'Sign up',\n callToActionLabel: Constants.callToActionLabel,\n CallToActionLabel: 'CallToActionLabel',\n});\n\nexport const SpotlightSliderConstants = Object.freeze({\n scrollerContainer: 'scroller-container ',\n classNames: Constants.classNames,\n continueReadingLabel: 'continueReadingLabel',\n main: 'main',\n});\n\nexport const SpotlightPreorderConstants = Object.freeze({\n body: Constants.body,\n title: Constants.title,\n anchorId: Constants.anchorId,\n classNames: Constants.classNames,\n backgroundAsset: Constants.backgroundAsset,\n preOrderButtonLabel: 'preOrderButtonLabel',\n preOrderCallToAction: 'preOrderCallToAction',\n mobileBackgroundAsset: 'mobileBackgroundAsset',\n});\n\nexport const SpotlightExperienceConstants = Object.freeze({\n description: Constants.description,\n title: Constants.title,\n anchorId: Constants.anchorId,\n classNames: Constants.classNames,\n backgroundAsset: Constants.backgroundAsset,\n callToActionLabel: 'callToActionLabel',\n callToActionLink: 'callToActionLink',\n experienceTitle: 'experienceTitle',\n experienceFeatures: 'experienceFeatures',\n closeLabel: 'closeLabel',\n chevronDown: Constants.chevronDown,\n countrySelectLabel: 'countrySelectLabel',\n countrySelectList: 'countrySelectList'\n});\n\nexport const SpotlightExperienceProductConstants = Object.freeze({\n itemType: Constants.itemType,\n ProductName: 'ProductName',\n ratingSummary: 'inline_rating',\n button: Constants.button,\n});\n\n\nexport const SpotlightContentVideoConstants = Object.freeze({\n introText: 'introText',\n introLogo: 'introLogo',\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n defaultRight:\"-720px\",\n defaultBottom:\"-170px\",\n displaynone: \"none\",\n nextFrameOnVideoEnd: 'nextFrameOnVideoEnd',\n introDurationSecond: 'introDurationSecond',\n playButtonColor: 'playButtonColor',\n white: Constants.white,\n mobileFullSize: 'mobileFullSize',\n playLabel: 'playLabel',\n pauseLabel: 'pauseLabel',\n resetLabel: 'resetLabel',\n paused: 'paused',\n played: 'played',\n openTranscriptLabel: 'openTranscriptLabel',\n closeTranscriptLabel: 'closeTranscriptLabel',\n content: Constants.content,\n classNames: Constants.classNames,\n textContainerHasPadding: 'textContainerHasPadding',\n hide: 'hide',\n auto: 'auto',\n none: 'none',\n description: Constants.description,\n VideoId: 'VideoId',\n spotlightPause: 'spotlightPause',\n spotlightPlay: 'spotlightPlay',\n spotlightReplay: 'spotlightReplay',\n spotlightTranscript: 'spotlightTranscript',\n close: Constants.close,\n});\n\nexport const SpotlightContentBlockConstants = Object.freeze({\n devicesConfigurations: 'devicesConfigurations',\n textAlign: 'textAlign',\n empty: Constants.empty,\n textAlignment: 'textAlignment',\n textContainerVerticalAlignment: 'textContainerVerticalAlignment',\n textContainerOffset: 'textContainerOffset',\n textContainerMarginRight: 'textContainerMarginRight',\n textContainerMarginLeft: 'textContainerMarginLeft',\n mainAsset: Constants.mainAsset,\n mainAssetHorizontalAlignment: 'mainAssetHorizontalAlignment',\n mainAssetMaxWidth: 'mainAssetMaxWidth',\n mainAssetMarginTop: 'mainAssetMarginTop',\n mainAssetMarginRight: 'mainAssetMarginRight',\n mainAssetOffsetBottom: 'mainAssetOffsetBottom',\n mainAssetOffsetLeft: 'mainAssetOffsetLeft',\n secondaryAsset: 'secondaryAsset',\n additionalAssetList: 'additionalAssetList',\n backgroundAsset: Constants.backgroundAsset,\n mainAssetScale: 'mainAssetScale',\n textFadeIn: 'textFadeIn',\n refreshImageOnFrameChange: 'refreshImageOnFrameChange',\n content: Constants.content,\n classNames: Constants.classNames,\n whiteText: Constants.whiteText,\n hasLink: 'hasLink',\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n textImage: 'textImage',\n textImageMobile: 'textImageMobile',\n textImagePosition: 'textImagePosition',\n top: Constants.top,\n textContainerBackgroundColor: 'textContainerBackgroundColor',\n textContainerHasPadding: 'textContainerHasPadding',\n surtitle: 'surtitle',\n textContent: 'textContent',\n bottom: 'bottom',\n callToActionLink: Constants.callToActionLink,\n white: Constants.white,\n chevronRight: Constants.chevronRight,\n blue: Constants.blue,\n callToActionLabel: Constants.callToActionLabel,\n});\n\nexport const SkipNavigationBlockConstants = Object.freeze({\n label: 'label',\n targetID: 'targetID',\n roleMain: '[role=\"main\"]',\n});\n\nexport const SideBySideContainerConstants = Object.freeze({\n anchorId: Constants.anchorId,\n name: Constants.name,\n left: 'left',\n right: 'right',\n sideBySide: 'side-by-side-',\n hasDivider: 'hasDivider',\n flipOnMobile: 'flipOnMobile',\n disclaimer: Constants.disclaimer,\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n description: Constants.description,\n blocks: Constants.blocks,\n});\n\nexport const ShowcaseBlockConstants = Object.freeze({\n classNames: Constants.classNames,\n title: Constants.title,\n description: Constants.description,\n sideImage: 'sideImage',\n});\n\nexport const SeriesSelectorConstants = Object.freeze({\n master: 'master_',\n media: '(min-width: 768px)',\n dpr: 'f_auto,q_auto,w_398',\n empty: Constants.empty,\n ratingSummary: 'inline_rating',\n reviews: 'reviews',\n productRating: 'rating'\n});\n\nexport const ProductOverviewConstant = Object.freeze({\n link: 'Link'\n});\n\nexport const SingleProductRecommenderConstant = Object.freeze({\n title: 'title'\n});\n\nexport const MultipleProductRecommenderConstant = Object.freeze({\n title: 'title'\n});\n\nexport const SeriesTabsConstants = Object.freeze({\n button: Constants.button,\n true: 'true',\n false: 'false',\n chevronDown: Constants.chevronDown,\n buttonRole: 'button',\n page: 'page'\n});\nexport const BuySeriesConstants = Object.freeze({\n chevronRight: Constants.chevronRight,\n});\n\nexport const SeriesComparisonItemConstants = Object.freeze({\n itemType: Constants.itemType,\n ProductName: 'ProductName',\n ratingSummary: 'inline_rating',\n button: Constants.button,\n comingSoonText: 'comingSoonText',\n commingSoonItem: 'coparison-item',\n productRating: 'rating'\n});\n\nexport const SeeMoreButtonConstants = Object.freeze({\n blue: Constants.blue,\n chevronLeft: 'chevronLeft',\n chevronRight: Constants.chevronRight,\n button: Constants.button,\n});\n\nexport const AlgoliaConstants = Object.freeze({\n errorMsg: 'Cannot create algolia search client: ALGOLIA_APP_ID or ALGOLIA_APP_SEARCH_KEY envs are empty',\n crawlerTriggeredMsg:'Algolia crawler triggered!!'\n});\n\nexport const algoliaReducerConstants = Object.freeze({\n SearchClicked : 'SearchClicked',\n queryParm : 'queryParm',\n searchStaticContent : 'searchStaticContent',\n hitsResponse : 'hitsResponse',\n filerClicked : 'filerClicked',\n pageNoClicked : 'pageNoClicked',\n showAutocomplete : 'showAutocomplete',\n searchValue : 'searchValue',\n isSpinning : 'isSpinning',\n totalPageNumber : 'totalPageNumber',\n filterItems : 'filterItems',\n nbHits : 'nbHits',\n nbPages : 'nbPages'\n});\n\nexport const SearchBarConstants = Object.freeze({\n text: Constants.text,\n submit: Constants.submit,\n searchText: 'searchText',\n search: 'search',\n list: 'list',\n maximumAutocompleteResults: 10,\n searchTitle: 'searchTitle',\n common_search : 'COMMOM SEARCH',\n SearchClicked: 'SearchClicked',\n queryParm: 'queryParm',\n searchStaticContent: 'searchStaticContent',\n hitsResponse: 'hitsResponse',\n filerClicked: 'filerClicked',\n SearchSuggestions: 'SearchSuggestions',\n pageNoClicked: 'pageNoClicked',\n showAutocomplete: 'showAutocomplete',\n searchValue:'searchValue',\n isSpinning:'isSpinning',\n eventCategory: 'event_informational_action',\n eventAction: 'event_search',\n});\n\nexport const RotationConstants = Object.freeze({\n mouseup: 'mouseup',\n grabbing: 'grabbing',\n number: 'number',\n grab: 'grab',\n match: 'TEXTAREA|INPUT|SELECT',\n touch: 'touch',\n});\n\nexport const RichTextConstants = Object.freeze({\n text: Constants.text,\n classNames: Constants.classNames,\n anchorId: Constants.anchorId,\n});\n\nexport const ResponsiveImageConstants = Object.freeze({\n tiny: 'tiny',\n mobile: 'mobile',\n tablet: 'tablet',\n desktop: 'desktop',\n});\n\nexport const RecentlyViewedProductsBlockConstants = Object.freeze({\n show: 'show',\n fetch: '/_next/static/products/',\n json: '.json',\n four: '4',\n});\n\nexport const HierarchyUtilsConstants = Object.freeze({\n menu: 'MENU'\n})\n\nexport const PromoConstants = Object.freeze({\n promo: 'promo ',\n classNames: Constants.classNames,\n whiteText: Constants.whiteText,\n subtitle: 'subtitle',\n description: Constants.description,\n retailerText: 'retailerText',\n mobileBackgroundAsset: Constants.mobileBackgroundAsset,\n backgroundAsset: Constants.backgroundAsset,\n titleLevel: Constants.titleLevel,\n title: Constants.title,\n retailerLogo: 'retailerLogo',\n callToActionLink: Constants.callToActionLink,\n callToActionLabel: Constants.callToActionLabel,\n horizontalAlignment: 'horizontalAlignment',\n large: Constants.large,\n});\n\nexport const ProductSubNavConstants = Object.freeze({\n classNames: Constants.classNames,\n scroll: Constants.scroll,\n anchorClick: 'anchorClick',\n resize: Constants.resize,\n wheel: 'wheel',\n touchmove: Constants.touchmove,\n top: Constants.top,\n undefined: 'undefined',\n Collapsed: 'COLLAPSED',\n Collapsing: 'COLLAPSING',\n chevronDown: Constants.chevronDown,\n chevronTop: Constants.chevronTop,\n medium: Constants.medium,\n blank: '_blank',\n links: 'links',\n h1: Constants.h1,\n h2: Constants.h2,\n small: Constants.small,\n mediumLong: Constants.mediumLong,\n initialLoad: 'initialLoad'\n});\n\nexport const ProductOverlayConstants = Object.freeze({\n closeOverlayLabel: 'closeOverlayLabel',\n empty: Constants.empty,\n classNames: Constants.classNames,\n keydown: Constants.keydown,\n noScroll: 'noScroll',\n scroll: Constants.scroll,\n isActive: 'is-active',\n querySelectorAll: 'button:not([disabled]), a[href]:not([disabled])',\n Tab: Constants.Tab,\n Escape: Constants.Escape,\n close: Constants.close,\n priceSpiderSource: '//cdn.pricespider.com/1/lib/ps-widget.js',\n priceSpiderConsoleLogMessageError: 'pricespider script not loaded',\n buyNowLiteErrorLabel: 'buyNowLiteErrorLabel',\n activateBuyNowLite: 'activateBuyNowLite'\n});\n\nexport const ProductHighlightsConstants = Object.freeze({\n isActive: 'is-active',\n empty: Constants.empty,\n minus6: 'minus6',\n blue: Constants.blue,\n button: Constants.button,\n plus: 'plus',\n seeLess: 'SEE LESS',\n seeMore: 'SEE MORE',\n highlights: ' highlights',\n undefinedStr: 'undefined',\n iconArrowRight: 'chevronRight',\n arrowDown: 'ArrowDown',\n learnMore: 'Learn More',\n whyOralBHash: '#wiesooralb',\n innerWidth_4600: 4600,\n innerWidth_3000: 3000,\n innerWidth_2300: 2300,\n innerWidth_2000: 2000,\n innerWidth_1900: 1900,\n innerWidth_1700: 1700,\n innerWidth_1500: 1500,\n innerWidth_1200: 1200,\n innerWidth_380: 380,\n offset_10000: 10000,\n offset_7100: 7100,\n offset_5600: 5600,\n offset_5100: 5100,\n offset_4800: 4800,\n offset_4500: 4500,\n offset_4200: 4200,\n offset_3700: 3700,\n offset_5000: 5000,\n productRating: 'rating'\n});\n\nexport const ProductGridBlockConstants = Object.freeze({\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n one: '1',\n two: '2',\n classNames: Constants.classNames,\n anchorId: Constants.anchorId,\n eyebrow: Constants.eyebrow,\n body: Constants.body,\n disclaimer: Constants.disclaimer,\n seeMoreLabel: 'seeMoreLabel',\n seeLessLabel: 'seeLessLabel',\n maxNumberInlineItems: 'maxNumberInlineItems',\n whiteText: Constants.whiteText,\n radialBackground: 'radialBackground',\n background: 'background',\n removeLazyLoad: 'removeLazyLoad',\n});\n\nexport const PageNavigationConstants = Object.freeze({\n classNames: Constants.classNames,\n pageNavigation: 'page-navigation--underlined',\n placeholderTitleLabel: 'placeholderTitleLabel',\n smooth: Constants.smooth,\n empty: Constants.empty,\n chevronDown: Constants.chevronDown,\n blocks: Constants.blocks,\n});\n\nexport const OnePageScrollConstants = Object.freeze({\n scrollDisabled: 'scroll--disabled',\n onePageScrollWrapper: 'one-page-scroll-wrapper',\n easeInOut: 'ease-in-out',\n resize: Constants.resize,\n hashChange: Constants.hashChange,\n touchmove: Constants.touchmove,\n keydown: Constants.keydown,\n container: 'container_',\n polite: 'polite',\n smooth: Constants.smooth,\n thinChevronDown: 'thinChevronDown',\n querySelector: '[data-isactiveblock=\"true\"]',\n scrollDown: 'Scroll down'\n});\n\nexport const BazaarVoiceConstants = Object.freeze({\n masterProductIdPrefix: 'master_',\n masterProductNamePrefix: 'master_product_'\n});\n\nexport const ArticleShareConstants = Object.freeze({\n facebookAlt: 'Share on Facebook',\n twitterAlt: 'Share on Twitter',\n shareTitle: 'Share',\n button: 'button',\n facebookIcon: '/static/images/facebook.png',\n twitterIcon:'/static/images/twitter.png'\n});\n\nexport const PypestreamChatConstants = Object.freeze({\n persistentChatTriggered: 'persistentChatTriggered_',\n});\n\nexport const PressQuoteBlockConstants = Object.freeze({\n pressQuotes: 'pressQuotes',\n pressLogo: 'pressLogo',\n quote: 'quote',\n starRating: 'reviewStars',\n animationGifAsset: 'animationGifAsset',\n callToActionLabel: 'ctaLabel',\n callToActionLink: 'ctaLink',\n iconArrowLeft: 'chevronLeft',\n iconArrowRight: 'chevronRight',\n previousLabel: 'previousLabel',\n nextLabel: 'nextLabel',\n transparentWithBorders: 'Transparent with Borders',\n ariaLabel:'ariaLabel'\n});\n\nexport const SearchBlockConstants = Object.freeze({\n queryHashName: 'query',\n queryHashEqual: '=',\n faqStylePageLinks: 'Page Links',\n faqStyleDropdown: 'Dropdown',\n allResultsCategory: 'All',\n pageCategory: 'Page',\n collectionCategory: 'Collection',\n productCategory: 'Product',\n articleCategory: 'Article',\n searchText: 'searchText',\n faqCategory: 'FAQ'\n});\n\nexport const CountryCode = Object.freeze({\n Belgique: 'BEL',\n France:'FRA',\n Deutschland: 'DEU',\n Schweiz:'CHE',\n 'Österreich':'AUT',\n Nederland:'NLD',\n Belgie:'BEL',\n 'United Kingdom':'GBR',\n 'Ireland':'IRL'\n});\n\nexport const SearchServiceConstants = Object.freeze({\n contentType: 'Content-Type',\n json: Constants.json,\n swiftypeBaseUrl: 'https://api.swiftype.com/api/v1',\n swiftypePath: '/public/engines/search',\n swiftypeAutocompleteUrl: 'https://search-api.swiftype.com/api/v1/public/engines/suggest.json'\n});\n\nexport const JanrainConstants = Object.freeze({\n productListLocalStorageKeyPrefix: 'oralbProductList-',\n benefitListLocalStorageKeyPrefix: 'oralbBenefitPreferenceList-'\n});\n\nexport const SvcApiConstants = Object.freeze({\n contentType: 'Content-Type',\n ciamInstanceId: 'CiamInstanceId',\n resendVerificationForm: 'resendVerificationForm',\n unknownAccessToken: 'unknown access token'\n});\n\nexport const WarrantyExtensionConstants = Object.freeze({\n contentType: 'Content-Type',\n json: Constants.json,\n accessToken: 'access_token',\n oneCPId: 'oneCPId',\n UUID: 'UUID',\n programIdParam: 'programId=',\n categoryIdParam: 'categoryId=',\n localeParam: 'locale=',\n productId: 0, // based on the API team request while doing warenty extension rewamp\n internGroupValue: 'OC',\n addressTypeCode: 'INVOICE_ADDRESS',\n warrantyExtensionPath: 'warrantyextension',\n getConsumerPath: 'consumer/getConsumer',\n getProductsByTypeCodePath: 'products/productByGas',\n getCampaignInfoMaster: 'program',\n getproductListBySeries: 'products/productListBySeries',\n gasPrimaryProductDetailKey: 'gasPrimaryProductDetail',\n gasSecondaryProductDetailKey: 'gasSecondaryProductDetail',\n primaryProductIndex: 0,\n comboProductIndex: 1,\n janrinProductIdDelimiter: '_',\n janrinProfileOldestProductIndex: 0\n});\n\nexport const FaqDetailsBlockConstants = Object.freeze({\n classNames: 'classNames',\n anchorId: 'anchorId',\n baseClass: 'ob-faq-details-block '\n});\n\nexport const CarouselBlockConstants = Object.freeze({\n productCard : 'productCard',\n cloudinaryVideo:'cloudinaryVideo',\n chevronRight: Constants.chevronRight,\n articleProductCard: 'articleProductCard',\n htmlBlock: 'htmlBlock',\n contentBlock: 'contentBlock',\n rightArrow: 'Å¡ipka vpravo', \n leftArrow: 'Å¡ipka vlevo',\n miniContentBlock: 'blockMiniContentBlock',\n carouselTabItem: 'carouselTabItem',\n miniContentBlock: 'blockMiniContentBlock',\n});\n\nexport const IndexationUrlFactoryConstants = Object.freeze( {\n swiftypeBaseUrl: 'https://api.swiftype.com/api/v1/engines/',\n swiftypeDocumentTypes: '/document_types/',\n swiftypeAuth: '?auth_token=',\n json: '.json',\n specificSwiftypeDocument: '/documents/',\n generalSwiftypeDocument: '/documents'\n});\n\nexport const RichTextLinkBlockConstants = Object.freeze({\n classNames: 'classNames',\n image: 'image',\n url: 'url',\n linkType: 'type',\n title: 'title',\n});\n\nexport const BuyNowLiteConstants = Object.freeze({\n accessControlAllowOrigin: 'Access-Control-Allow-Origin',\n xFunctionKey: 'x-functions-key',\n passKey: 'passkey',\n ocpApimSubscriptionKey: 'Ocp-Apim-Subscription-Key',\n image: 'image',\n url: 'url',\n linkType: 'type',\n title: 'title',\n});\n\nexport const ImageContenfullConstants = Object.freeze({\n defaultImageWindWidth: 450,\n defaultWidth: 400,\n defaultDesktopWidth:768,\n dpr_1440: 'f=center&q=100&w=1440',\n product: 'product'\n});\n\nexport const ContentSeriesSelectorConstants = Object.freeze({\n master: 'master_',\n media: '(min-width: 768px)',\n dpr: 'f=center&q=100&w=398',\n empty: Constants.empty,\n ratingSummary: 'inline_rating',\n reviews: 'reviews',\n});\nexport const FileTypeConstants = Object.freeze({\n mp4: 'audio/mp4',\n mp3: 'audio/mp3',\n m4a: 'audio/mpeg'\n});\nexport const miniContentBlockConstants = Object.freeze({\n blueCtaColorValue: 'blue',\n whiteCtaColorValue: 'white',\n blueCtaColor: '#002D72',\n whiteCtaColor: '#fff'\n})\n\nexport const dentistContacts = Object.freeze({\n https: 'https://',\n http: 'http://',\n www: 'www.',\n allDentist: 'All Individuals / Practices',\n individuals: 'Individuals',\n practices: 'Practices'\n});\n\nexport const metaConstant = Object.freeze({\n instances: ['localhost', 'dev', 'preview', 'stage', 'canary']\n});","import React, { createContext, useContext, useState, useEffect, Children } from 'react';\n\nconst DomainNameContext = createContext();\n\nexport const useDomain = () => useContext(DomainNameContext);\n\nexport const DomainNameProvider = ({children}) => {\n const [domain, setDomain] = useState('');\n\n useEffect(() => {\n const currentDomain = window.location.hostname;\n setDomain(currentDomain);\n }, []);\n\n return (\n \n {children}\n \n );\n}","import React, { createContext, useState, useContext } from 'react';\n\nconst TabContext = createContext();\nexport const TabProvider = ({ children }) => {\n const [activeTabIndex, setActiveTabIndex] = useState(0);\n return (\n \n {children}\n \n );\n};\nexport const useTabContext = () => useContext(TabContext);","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _async_to_generator = require(\"@swc/helpers/lib/_async_to_generator.js\").default;\nvar _interop_require_default = require(\"@swc/helpers/lib/_interop_require_default.js\").default;\nvar _react = _interop_require_default(require(\"react\"));\nvar _utils = require(\"../shared/lib/utils\");\nfunction appGetInitialProps(_) {\n return _appGetInitialProps.apply(this, arguments);\n}\nfunction _appGetInitialProps() {\n _appGetInitialProps = /**\n * `App` component is used for initialize of pages. It allows for overwriting and full control of the `page` initialization.\n * This allows for keeping state between navigation, custom error handling, injecting additional data.\n */ _async_to_generator(function*({ Component , ctx }) {\n const pageProps = yield (0, _utils).loadGetInitialProps(Component, ctx);\n return {\n pageProps\n };\n });\n return _appGetInitialProps.apply(this, arguments);\n}\nvar _Component;\nclass App extends (_Component = _react.default.Component) {\n render() {\n const { Component , pageProps } = this.props;\n return /*#__PURE__*/ _react.default.createElement(Component, Object.assign({}, pageProps));\n }\n}\nApp.origGetInitialProps = appGetInitialProps;\nApp.getInitialProps = appGetInitialProps;\nexports.default = App;\n\n//# sourceMappingURL=_app.js.map","import React from 'react';\nimport App from 'next/app';\nimport { InstantSearch } from 'react-instantsearch-dom';\nimport { getSearchClient } from '../adapters/algolia/client';\nimport { TabProvider } from '../components/TabContext';\nimport '../styles/index.scss';\nimport { DomainNameProvider } from '../components/Core/DynamicPage/DomainNameContext';\n\nclass CustomApp extends App {\n render() {\n const { Component, pageProps } = this.props;\n const searchClient = getSearchClient();\n return (\n \n \n \n \n \n \n \n )\n }\n}\n\nexport default CustomApp;\n","\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/_app\",\n function () {\n return require(\"private-next-pages/_app.js\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/_app\"])\n });\n }\n ","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","// extracted by mini-css-extract-plugin","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim\n };\n\n ReactPropTypes.checkPropTypes = emptyFunction;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n Symbol.for &&\n Symbol.for('react.element')) ||\n 0xeac7;\n\n var isValidElement = function(object) {\n return typeof object === 'object' &&\n object !== null &&\n object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.3\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n // START: Modifications:\n // Apply guards for `Object.create(null)` handling. See:\n // - https://github.com/FormidableLabs/react-fast-compare/issues/64\n // - https://github.com/epoberezkin/fast-deep-equal/issues/49\n if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString();\n // END: Modifications\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React/Preact\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n","import { createContext } from 'react';\nexport var instantSearchContext = /*#__PURE__*/createContext({\n onInternalStateUpdate: function onInternalStateUpdate() {\n return undefined;\n },\n createHrefForState: function createHrefForState() {\n return '#';\n },\n onSearchForFacetValues: function onSearchForFacetValues() {\n return undefined;\n },\n onSearchStateChange: function onSearchStateChange() {\n return undefined;\n },\n onSearchParameters: function onSearchParameters() {\n return undefined;\n },\n store: {},\n widgetsManager: {},\n mainTargetedIndex: ''\n});\nvar InstantSearchConsumer = instantSearchContext.Consumer,\n InstantSearchProvider = instantSearchContext.Provider;\nexport { InstantSearchConsumer, InstantSearchProvider };\nvar _createContext = /*#__PURE__*/createContext(undefined),\n IndexConsumer = _createContext.Consumer,\n IndexProvider = _createContext.Provider;\nexport { IndexConsumer, IndexProvider };","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { omit } from \"./utils.js\";\nexport function getIndexId(context) {\n return hasMultipleIndices(context) ? context.multiIndexContext.targetedIndex : context.ais.mainTargetedIndex;\n}\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @returns {import('algoliasearch-helper').SearchResults} results\n */\nexport function getResults(searchResults, context) {\n if (searchResults.results) {\n if (searchResults.results.hits) {\n return searchResults.results;\n }\n var indexId = getIndexId(context);\n if (searchResults.results[indexId]) {\n return searchResults.results[indexId];\n }\n }\n return null;\n}\nexport function hasMultipleIndices(context) {\n return context && context.multiIndexContext;\n}\nexport function refineValue(searchState, nextRefinement, context, resetPage, namespace) {\n if (hasMultipleIndices(context)) {\n var indexId = getIndexId(context);\n return namespace ? refineMultiIndexWithNamespace(searchState, nextRefinement, indexId, resetPage, namespace) : refineMultiIndex(searchState, nextRefinement, indexId, resetPage);\n } else {\n // When we have a multi index page with shared widgets we should also\n // reset their page to 1 if the resetPage is provided. Otherwise the\n // indices will always be reset\n // see: https://github.com/algolia/react-instantsearch/issues/310\n // see: https://github.com/algolia/react-instantsearch/issues/637\n if (searchState.indices && resetPage) {\n Object.keys(searchState.indices).forEach(function (targetedIndex) {\n searchState = refineValue(searchState, {\n page: 1\n }, {\n multiIndexContext: {\n targetedIndex: targetedIndex\n }\n }, true, namespace);\n });\n }\n return namespace ? refineSingleIndexWithNamespace(searchState, nextRefinement, resetPage, namespace) : refineSingleIndex(searchState, nextRefinement, resetPage);\n }\n}\nfunction refineMultiIndex(searchState, nextRefinement, indexId, resetPage) {\n var page = resetPage ? {\n page: 1\n } : undefined;\n var state = searchState.indices && searchState.indices[indexId] ? _objectSpread(_objectSpread({}, searchState.indices), {}, _defineProperty({}, indexId, _objectSpread(_objectSpread(_objectSpread({}, searchState.indices[indexId]), nextRefinement), page))) : _objectSpread(_objectSpread({}, searchState.indices), {}, _defineProperty({}, indexId, _objectSpread(_objectSpread({}, nextRefinement), page)));\n return _objectSpread(_objectSpread({}, searchState), {}, {\n indices: state\n });\n}\nfunction refineSingleIndex(searchState, nextRefinement, resetPage) {\n var page = resetPage ? {\n page: 1\n } : undefined;\n return _objectSpread(_objectSpread(_objectSpread({}, searchState), nextRefinement), page);\n}\nfunction refineMultiIndexWithNamespace(searchState, nextRefinement, indexId, resetPage, namespace) {\n var _objectSpread4;\n var page = resetPage ? {\n page: 1\n } : undefined;\n var state = searchState.indices && searchState.indices[indexId] ? _objectSpread(_objectSpread({}, searchState.indices), {}, _defineProperty({}, indexId, _objectSpread(_objectSpread({}, searchState.indices[indexId]), {}, (_objectSpread4 = {}, _defineProperty(_objectSpread4, namespace, _objectSpread(_objectSpread({}, searchState.indices[indexId][namespace]), nextRefinement)), _defineProperty(_objectSpread4, \"page\", 1), _objectSpread4)))) : _objectSpread(_objectSpread({}, searchState.indices), {}, _defineProperty({}, indexId, _objectSpread(_defineProperty({}, namespace, nextRefinement), page)));\n return _objectSpread(_objectSpread({}, searchState), {}, {\n indices: state\n });\n}\nfunction refineSingleIndexWithNamespace(searchState, nextRefinement, resetPage, namespace) {\n var page = resetPage ? {\n page: 1\n } : undefined;\n return _objectSpread(_objectSpread({}, searchState), {}, _defineProperty({}, namespace, _objectSpread(_objectSpread({}, searchState[namespace]), nextRefinement)), page);\n}\nfunction getNamespaceAndAttributeName(id) {\n var parts = id.match(/^([^.]*)\\.(.*)/);\n var namespace = parts && parts[1];\n var attributeName = parts && parts[2];\n return {\n namespace: namespace,\n attributeName: attributeName\n };\n}\nfunction hasRefinements(_ref) {\n var multiIndex = _ref.multiIndex,\n indexId = _ref.indexId,\n namespace = _ref.namespace,\n attributeName = _ref.attributeName,\n id = _ref.id,\n searchState = _ref.searchState;\n if (multiIndex && namespace) {\n return searchState.indices && searchState.indices[indexId] && searchState.indices[indexId][namespace] && Object.hasOwnProperty.call(searchState.indices[indexId][namespace], attributeName);\n }\n if (multiIndex) {\n return searchState.indices && searchState.indices[indexId] && Object.hasOwnProperty.call(searchState.indices[indexId], id);\n }\n if (namespace) {\n return searchState[namespace] && Object.hasOwnProperty.call(searchState[namespace], attributeName);\n }\n return Object.hasOwnProperty.call(searchState, id);\n}\nfunction getRefinements(_ref2) {\n var multiIndex = _ref2.multiIndex,\n indexId = _ref2.indexId,\n namespace = _ref2.namespace,\n attributeName = _ref2.attributeName,\n id = _ref2.id,\n searchState = _ref2.searchState;\n if (multiIndex && namespace) {\n return searchState.indices[indexId][namespace][attributeName];\n }\n if (multiIndex) {\n return searchState.indices[indexId][id];\n }\n if (namespace) {\n return searchState[namespace][attributeName];\n }\n return searchState[id];\n}\nexport function getCurrentRefinementValue(props, searchState, context, id, defaultValue) {\n var indexId = getIndexId(context);\n var _getNamespaceAndAttri = getNamespaceAndAttributeName(id),\n namespace = _getNamespaceAndAttri.namespace,\n attributeName = _getNamespaceAndAttri.attributeName;\n var multiIndex = hasMultipleIndices(context);\n var args = {\n multiIndex: multiIndex,\n indexId: indexId,\n namespace: namespace,\n attributeName: attributeName,\n id: id,\n searchState: searchState\n };\n var hasRefinementsValue = hasRefinements(args);\n if (hasRefinementsValue) {\n return getRefinements(args);\n }\n if (props.defaultRefinement) {\n return props.defaultRefinement;\n }\n return defaultValue;\n}\nexport function cleanUpValue(searchState, context, id) {\n var indexId = getIndexId(context);\n var _getNamespaceAndAttri2 = getNamespaceAndAttributeName(id),\n namespace = _getNamespaceAndAttri2.namespace,\n attributeName = _getNamespaceAndAttri2.attributeName;\n if (hasMultipleIndices(context) && Boolean(searchState.indices)) {\n return cleanUpValueWithMultiIndex({\n attribute: attributeName,\n searchState: searchState,\n indexId: indexId,\n id: id,\n namespace: namespace\n });\n }\n return cleanUpValueWithSingleIndex({\n attribute: attributeName,\n searchState: searchState,\n id: id,\n namespace: namespace\n });\n}\nfunction cleanUpValueWithSingleIndex(_ref3) {\n var searchState = _ref3.searchState,\n id = _ref3.id,\n namespace = _ref3.namespace,\n attribute = _ref3.attribute;\n if (namespace) {\n return _objectSpread(_objectSpread({}, searchState), {}, _defineProperty({}, namespace, omit(searchState[namespace], [attribute])));\n }\n return omit(searchState, [id]);\n}\nfunction cleanUpValueWithMultiIndex(_ref4) {\n var searchState = _ref4.searchState,\n indexId = _ref4.indexId,\n id = _ref4.id,\n namespace = _ref4.namespace,\n attribute = _ref4.attribute;\n var indexSearchState = searchState.indices[indexId];\n if (namespace && indexSearchState) {\n return _objectSpread(_objectSpread({}, searchState), {}, {\n indices: _objectSpread(_objectSpread({}, searchState.indices), {}, _defineProperty({}, indexId, _objectSpread(_objectSpread({}, indexSearchState), {}, _defineProperty({}, namespace, omit(indexSearchState[namespace], [attribute])))))\n });\n }\n if (indexSearchState) {\n return _objectSpread(_objectSpread({}, searchState), {}, {\n indices: _objectSpread(_objectSpread({}, searchState.indices), {}, _defineProperty({}, indexId, omit(indexSearchState, [id])))\n });\n }\n return searchState;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n// eslint-disable-next-line @typescript-eslint/unbound-method\nvar hasOwn = Object.prototype.hasOwnProperty;\n\n// From https://github.com/reactjs/react-redux/blob/master/src/utils/shallowEqual.js\nexport var shallowEqual = function shallowEqual(objA, objB) {\n if (objA === objB) {\n return true;\n }\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwn.call(objB, keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {\n return false;\n }\n }\n return true;\n};\nexport var getDisplayName = function getDisplayName(Component) {\n return Component.displayName || Component.name || 'UnknownComponent';\n};\nvar resolved = Promise.resolve();\nexport var defer = function defer(f) {\n resolved.then(f);\n};\nvar isPlainObject = function isPlainObject(value) {\n return _typeof(value) === 'object' && value !== null && !Array.isArray(value);\n};\nexport var removeEmptyKey = function removeEmptyKey(obj) {\n Object.keys(obj).forEach(function (key) {\n var value = obj[key];\n if (!isPlainObject(value)) {\n return;\n }\n if (!objectHasKeys(value)) {\n delete obj[key];\n } else {\n removeEmptyKey(value);\n }\n });\n return obj;\n};\nexport var removeEmptyArraysFromObject = function removeEmptyArraysFromObject(obj) {\n Object.keys(obj).forEach(function (key) {\n var value = obj[key];\n if (Array.isArray(value) && value.length === 0) {\n delete obj[key];\n }\n });\n return obj;\n};\nexport function addAbsolutePositions(hits, hitsPerPage, page) {\n return hits.map(function (hit, index) {\n return _objectSpread(_objectSpread({}, hit), {}, {\n __position: hitsPerPage * page + index + 1\n });\n });\n}\nexport function addQueryID(hits, queryID) {\n if (!queryID) {\n return hits;\n }\n return hits.map(function (hit) {\n return _objectSpread(_objectSpread({}, hit), {}, {\n __queryID: queryID\n });\n });\n}\nexport function find(array, comparator) {\n if (!Array.isArray(array)) {\n return undefined;\n }\n for (var i = 0; i < array.length; i++) {\n if (comparator(array[i])) {\n return array[i];\n }\n }\n return undefined;\n}\nexport function objectHasKeys(object) {\n return object && Object.keys(object).length > 0;\n}\n\n// https://github.com/babel/babel/blob/3aaafae053fa75febb3aa45d45b6f00646e30ba4/packages/babel-helpers/src/helpers.js#L604-L620\nexport function omit(source, excluded) {\n if (source === null || source === undefined) {\n return {};\n }\n var target = {};\n var sourceKeys = Object.keys(source);\n for (var i = 0; i < sourceKeys.length; i++) {\n var key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) {\n // eslint-disable-next-line no-continue\n continue;\n }\n target[key] = source[key];\n }\n return target;\n}\n\n/**\n * Retrieve the value at a path of the object:\n *\n * @example\n * getPropertyByPath(\n * { test: { this: { function: [{ now: { everyone: true } }] } } },\n * 'test.this.function[0].now.everyone'\n * ); // true\n *\n * getPropertyByPath(\n * { test: { this: { function: [{ now: { everyone: true } }] } } },\n * ['test', 'this', 'function', 0, 'now', 'everyone']\n * ); // true\n *\n * @param object Source object to query\n * @param path either an array of properties, or a string form of the properties, separated by .\n */\nexport var getPropertyByPath = function getPropertyByPath(object, path) {\n return (Array.isArray(path) ? path : path.replace(/\\[(\\d+)]/g, '.$1').split('.')).reduce(function (current, key) {\n return current ? current[key] : undefined;\n }, object);\n};\nexport function getObjectType(object) {\n return Object.prototype.toString.call(object).slice(8, -1);\n}\nexport function unescapeFacetValue(value) {\n return value.replace(/^\\\\-/, '-');\n}","import { defer } from \"./utils.js\";\nexport default function createWidgetsManager(onWidgetsUpdate) {\n var widgets = [];\n // Is an update scheduled?\n var scheduled = false;\n\n // The state manager's updates need to be batched since more than one\n // component can register or unregister widgets during the same tick.\n function scheduleUpdate() {\n if (scheduled) {\n return;\n }\n scheduled = true;\n defer(function () {\n scheduled = false;\n onWidgetsUpdate();\n });\n }\n return {\n registerWidget: function registerWidget(widget) {\n widgets.push(widget);\n scheduleUpdate();\n return function unregisterWidget() {\n widgets.splice(widgets.indexOf(widget), 1);\n scheduleUpdate();\n };\n },\n update: scheduleUpdate,\n getWidgets: function getWidgets() {\n return widgets;\n }\n };\n}","export default function createStore(initialState) {\n var state = initialState;\n var listeners = [];\n return {\n getState: function getState() {\n return state;\n },\n setState: function setState(nextState) {\n state = nextState;\n listeners.forEach(function (listener) {\n return listener();\n });\n },\n subscribe: function subscribe(listener) {\n listeners.push(listener);\n return function unsubscribe() {\n listeners.splice(listeners.indexOf(listener), 1);\n };\n }\n };\n}","import { getPropertyByPath } from \"./utils.js\";\nexport var HIGHLIGHT_TAGS = {\n highlightPreTag: \"\",\n highlightPostTag: \"\"\n};\n\n/**\n * Parses an highlighted attribute into an array of objects with the string value, and\n * a boolean that indicated if this part is highlighted.\n *\n * @param {string} preTag - string used to identify the start of an highlighted value\n * @param {string} postTag - string used to identify the end of an highlighted value\n * @param {string} highlightedValue - highlighted attribute as returned by Algolia highlight feature\n * @return {object[]} - An array of {value: string, isHighlighted: boolean}.\n */\nfunction parseHighlightedAttribute(_ref) {\n var preTag = _ref.preTag,\n postTag = _ref.postTag,\n _ref$highlightedValue = _ref.highlightedValue,\n highlightedValue = _ref$highlightedValue === void 0 ? '' : _ref$highlightedValue;\n var splitByPreTag = highlightedValue.split(preTag);\n var firstValue = splitByPreTag.shift();\n var elements = firstValue === '' ? [] : [{\n value: firstValue,\n isHighlighted: false\n }];\n if (postTag === preTag) {\n var isHighlighted = true;\n splitByPreTag.forEach(function (split) {\n elements.push({\n value: split,\n isHighlighted: isHighlighted\n });\n isHighlighted = !isHighlighted;\n });\n } else {\n splitByPreTag.forEach(function (split) {\n var splitByPostTag = split.split(postTag);\n elements.push({\n value: splitByPostTag[0],\n isHighlighted: true\n });\n if (splitByPostTag[1] !== '') {\n elements.push({\n value: splitByPostTag[1],\n isHighlighted: false\n });\n }\n });\n }\n return elements;\n}\n\n/**\n * Find an highlighted attribute given an `attribute` and an `highlightProperty`, parses it,\n * and provided an array of objects with the string value and a boolean if this\n * value is highlighted.\n *\n * In order to use this feature, highlight must be activated in the configuration of\n * the index. The `preTag` and `postTag` attributes are respectively highlightPreTag and\n * highlightPostTag in Algolia configuration.\n *\n * @param {string} preTag - string used to identify the start of an highlighted value\n * @param {string} postTag - string used to identify the end of an highlighted value\n * @param {string} highlightProperty - the property that contains the highlight structure in the results\n * @param {string} attribute - the highlighted attribute to look for\n * @param {object} hit - the actual hit returned by Algolia.\n * @return {object[]} - An array of {value: string, isHighlighted: boolean}.\n */\nexport function parseAlgoliaHit(_ref2) {\n var _ref2$preTag = _ref2.preTag,\n preTag = _ref2$preTag === void 0 ? '' : _ref2$preTag,\n _ref2$postTag = _ref2.postTag,\n postTag = _ref2$postTag === void 0 ? '' : _ref2$postTag,\n highlightProperty = _ref2.highlightProperty,\n attribute = _ref2.attribute,\n hit = _ref2.hit;\n if (!hit) throw new Error('`hit`, the matching record, must be provided');\n var highlightObject = getPropertyByPath(hit[highlightProperty], attribute) || {};\n if (Array.isArray(highlightObject)) {\n return highlightObject.map(function (item) {\n return parseHighlightedAttribute({\n preTag: preTag,\n postTag: postTag,\n highlightedValue: item.value\n });\n });\n }\n return parseHighlightedAttribute({\n preTag: preTag,\n postTag: postTag,\n highlightedValue: highlightObject.value\n });\n}","export default '6.40.1';","var _excluded = [\"resultsFacetValues\"],\n _excluded2 = [\"resultsFacetValues\"],\n _excluded3 = [\"resultsFacetValues\"];\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport algoliasearchHelper from 'algoliasearch-helper';\nimport createWidgetsManager from \"./createWidgetsManager.js\";\nimport createStore from \"./createStore.js\";\nimport { HIGHLIGHT_TAGS } from \"./highlight.js\";\nimport { hasMultipleIndices } from \"./indexUtils.js\";\nimport { version as ReactVersion } from 'react';\nimport version from \"./version.js\";\nfunction addAlgoliaAgents(searchClient) {\n if (typeof searchClient.addAlgoliaAgent === 'function') {\n searchClient.addAlgoliaAgent(\"react (\".concat(ReactVersion, \")\"));\n searchClient.addAlgoliaAgent(\"react-instantsearch (\".concat(version, \")\"));\n }\n}\nvar isMultiIndexContext = function isMultiIndexContext(widget) {\n return hasMultipleIndices({\n ais: widget.props.contextValue,\n multiIndexContext: widget.props.indexContextValue\n });\n};\nvar isTargetedIndexEqualIndex = function isTargetedIndexEqualIndex(widget, indexId) {\n return widget.props.indexContextValue.targetedIndex === indexId;\n};\n\n// Relying on the `indexId` is a bit brittle to detect the `Index` widget.\n// Since it's a class we could rely on `instanceof` or similar. We never\n// had an issue though. Works for now.\nvar isIndexWidget = function isIndexWidget(widget) {\n return Boolean(widget.props.indexId);\n};\nvar isIndexWidgetEqualIndex = function isIndexWidgetEqualIndex(widget, indexId) {\n return widget.props.indexId === indexId;\n};\nvar sortIndexWidgetsFirst = function sortIndexWidgetsFirst(firstWidget, secondWidget) {\n var isFirstWidgetIndex = isIndexWidget(firstWidget);\n var isSecondWidgetIndex = isIndexWidget(secondWidget);\n if (isFirstWidgetIndex && !isSecondWidgetIndex) {\n return -1;\n }\n if (!isFirstWidgetIndex && isSecondWidgetIndex) {\n return 1;\n }\n return 0;\n};\n\n// This function is copied from the algoliasearch v4 API Client. If modified,\n// consider updating it also in `serializeQueryParameters` from `@algolia/transporter`.\nfunction serializeQueryParameters(parameters) {\n var isObjectOrArray = function isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Object.prototype.toString.call(value) === '[object Array]';\n };\n var encode = function encode(format) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n var i = 0;\n return format.replace(/%s/g, function () {\n return encodeURIComponent(args[i++]);\n });\n };\n return Object.keys(parameters).map(function (key) {\n return encode('%s=%s', key, isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key]);\n }).join('&');\n}\n\n/**\n * Creates a new instance of the InstantSearchManager which controls the widgets and\n * trigger the search when the widgets are updated.\n * @param {string} indexName - the main index name\n * @param {object} initialState - initial widget state\n * @param {object} SearchParameters - optional additional parameters to send to the algolia API\n * @param {number} stalledSearchDelay - time (in ms) after the search is stalled\n * @return {InstantSearchManager} a new instance of InstantSearchManager\n */\nexport default function createInstantSearchManager(_ref) {\n var indexName = _ref.indexName,\n _ref$initialState = _ref.initialState,\n initialState = _ref$initialState === void 0 ? {} : _ref$initialState,\n searchClient = _ref.searchClient,\n resultsState = _ref.resultsState,\n stalledSearchDelay = _ref.stalledSearchDelay;\n var helper = algoliasearchHelper(searchClient, indexName, _objectSpread({}, HIGHLIGHT_TAGS));\n addAlgoliaAgents(searchClient);\n helper.on('search', handleNewSearch).on('result', handleSearchSuccess({\n indexId: indexName\n })).on('error', handleSearchError);\n var skip = false;\n var stalledSearchTimer = null;\n var initialSearchParameters = helper.state;\n var searchCounter;\n var widgetsManager = createWidgetsManager(onWidgetsUpdate);\n hydrateSearchClient(searchClient, resultsState);\n var store = createStore({\n widgets: initialState,\n metadata: hydrateMetadata(resultsState),\n results: hydrateResultsState(resultsState),\n error: null,\n searching: false,\n isSearchStalled: true,\n searchingForFacetValues: false\n });\n function skipSearch() {\n skip = true;\n }\n function updateClient(client) {\n addAlgoliaAgents(client);\n helper.setClient(client);\n search();\n }\n function clearCache() {\n helper.clearCache();\n search();\n }\n function getMetadata(state) {\n return widgetsManager.getWidgets().filter(function (widget) {\n return Boolean(widget.getMetadata);\n }).map(function (widget) {\n return widget.getMetadata(state);\n });\n }\n function getSearchParameters() {\n var sharedParameters = widgetsManager.getWidgets().filter(function (widget) {\n return Boolean(widget.getSearchParameters);\n }).filter(function (widget) {\n return !isMultiIndexContext(widget) && !isIndexWidget(widget);\n }).reduce(function (res, widget) {\n return widget.getSearchParameters(res);\n }, initialSearchParameters);\n var mainParameters = widgetsManager.getWidgets().filter(function (widget) {\n return Boolean(widget.getSearchParameters);\n }).filter(function (widget) {\n var targetedIndexEqualMainIndex = isMultiIndexContext(widget) && isTargetedIndexEqualIndex(widget, indexName);\n var subIndexEqualMainIndex = isIndexWidget(widget) && isIndexWidgetEqualIndex(widget, indexName);\n return targetedIndexEqualMainIndex || subIndexEqualMainIndex;\n })\n // We have to sort the `Index` widgets first so the `index` parameter\n // is correctly set in the `reduce` function for the following widgets\n .sort(sortIndexWidgetsFirst).reduce(function (res, widget) {\n return widget.getSearchParameters(res);\n }, sharedParameters);\n var derivedIndices = widgetsManager.getWidgets().filter(function (widget) {\n return Boolean(widget.getSearchParameters);\n }).filter(function (widget) {\n var targetedIndexNotEqualMainIndex = isMultiIndexContext(widget) && !isTargetedIndexEqualIndex(widget, indexName);\n var subIndexNotEqualMainIndex = isIndexWidget(widget) && !isIndexWidgetEqualIndex(widget, indexName);\n return targetedIndexNotEqualMainIndex || subIndexNotEqualMainIndex;\n })\n // We have to sort the `Index` widgets first so the `index` parameter\n // is correctly set in the `reduce` function for the following widgets\n .sort(sortIndexWidgetsFirst).reduce(function (indices, widget) {\n var indexId = isMultiIndexContext(widget) ? widget.props.indexContextValue.targetedIndex : widget.props.indexId;\n var widgets = indices[indexId] || [];\n return _objectSpread(_objectSpread({}, indices), {}, _defineProperty({}, indexId, widgets.concat(widget)));\n }, {});\n var derivedParameters = Object.keys(derivedIndices).map(function (indexId) {\n return {\n parameters: derivedIndices[indexId].reduce(function (res, widget) {\n return widget.getSearchParameters(res);\n }, sharedParameters),\n indexId: indexId\n };\n });\n return {\n mainParameters: mainParameters,\n derivedParameters: derivedParameters\n };\n }\n function search() {\n if (!skip) {\n var _getSearchParameters = getSearchParameters(helper.state),\n mainParameters = _getSearchParameters.mainParameters,\n derivedParameters = _getSearchParameters.derivedParameters;\n searchCounter = derivedParameters.length + 1;\n\n // We have to call `slice` because the method `detach` on the derived\n // helpers mutates the value `derivedHelpers`. The `forEach` loop does\n // not iterate on each value and we're not able to correctly clear the\n // previous derived helpers (memory leak + useless requests).\n helper.derivedHelpers.slice().forEach(function (derivedHelper) {\n // Since we detach the derived helpers on **every** new search they\n // won't receive intermediate results in case of a stalled search.\n // Only the last result is dispatched by the derived helper because\n // they are not detached yet:\n //\n // - a -> main helper receives results\n // - ap -> main helper receives results\n // - app -> main helper + derived helpers receive results\n //\n // The quick fix is to avoid to detach them on search but only once they\n // received the results. But it means that in case of a stalled search\n // all the derived helpers not detached yet register a new search inside\n // the helper. The number grows fast in case of a bad network and it's\n // not deterministic.\n derivedHelper.detach();\n });\n derivedParameters.forEach(function (_ref2) {\n var indexId = _ref2.indexId,\n parameters = _ref2.parameters;\n var derivedHelper = helper.derive(function () {\n return parameters;\n });\n derivedHelper.on('result', handleSearchSuccess({\n indexId: indexId\n })).on('error', handleSearchError);\n });\n helper.setState(mainParameters);\n helper.search();\n }\n }\n function handleSearchSuccess(_ref3) {\n var indexId = _ref3.indexId;\n return function (event) {\n searchCounter--;\n var state = store.getState();\n var isDerivedHelpersEmpty = !helper.derivedHelpers.length;\n var results = state.results ? state.results : {};\n\n // Switching from mono index to multi index and vice versa must reset the\n // results to an empty object, otherwise we keep reference of stalled and\n // unused results.\n results = !isDerivedHelpersEmpty && results.getFacetByName ? {} : results;\n if (!isDerivedHelpersEmpty) {\n results = _objectSpread(_objectSpread({}, results), {}, _defineProperty({}, indexId, event.results));\n } else {\n results = event.results;\n }\n var currentState = store.getState();\n var nextIsSearchStalled = currentState.isSearchStalled;\n if (!helper.hasPendingRequests()) {\n clearTimeout(stalledSearchTimer);\n stalledSearchTimer = null;\n nextIsSearchStalled = false;\n }\n var resultsFacetValues = currentState.resultsFacetValues,\n partialState = _objectWithoutProperties(currentState, _excluded);\n store.setState(_objectSpread(_objectSpread({}, partialState), {}, {\n results: results,\n isSearchStalled: nextIsSearchStalled,\n searching: searchCounter > 0,\n error: null\n }));\n };\n }\n function handleSearchError(_ref4) {\n var error = _ref4.error;\n var currentState = store.getState();\n var nextIsSearchStalled = currentState.isSearchStalled;\n if (!helper.hasPendingRequests()) {\n clearTimeout(stalledSearchTimer);\n nextIsSearchStalled = false;\n }\n var resultsFacetValues = currentState.resultsFacetValues,\n partialState = _objectWithoutProperties(currentState, _excluded2);\n store.setState(_objectSpread(_objectSpread({}, partialState), {}, {\n isSearchStalled: nextIsSearchStalled,\n error: error,\n searching: false\n }));\n }\n function handleNewSearch() {\n if (!stalledSearchTimer) {\n stalledSearchTimer = setTimeout(function () {\n var _store$getState = store.getState(),\n resultsFacetValues = _store$getState.resultsFacetValues,\n partialState = _objectWithoutProperties(_store$getState, _excluded3);\n store.setState(_objectSpread(_objectSpread({}, partialState), {}, {\n isSearchStalled: true\n }));\n }, stalledSearchDelay);\n }\n }\n function hydrateSearchClient(client, results) {\n if (!results) {\n return;\n }\n\n // Disable cache hydration on:\n // - Algoliasearch API Client < v4 with cache disabled\n // - Third party clients (detected by the `addAlgoliaAgent` function missing)\n\n if ((!client.transporter || client._cacheHydrated) && (!client._useCache || typeof client.addAlgoliaAgent !== 'function')) {\n return;\n }\n\n // Algoliasearch API Client >= v4\n // To hydrate the client we need to populate the cache with the data from\n // the server (done in `hydrateSearchClientWithMultiIndexRequest` or\n // `hydrateSearchClientWithSingleIndexRequest`). But since there is no way\n // for us to compute the key the same way as `algoliasearch-client` we need\n // to populate it on a custom key and override the `search` method to\n // search on it first.\n if (client.transporter && !client._cacheHydrated) {\n client._cacheHydrated = true;\n var baseMethod = client.search;\n client.search = function (requests) {\n for (var _len2 = arguments.length, methodArgs = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n methodArgs[_key2 - 1] = arguments[_key2];\n }\n var requestsWithSerializedParams = requests.map(function (request) {\n return _objectSpread(_objectSpread({}, request), {}, {\n params: serializeQueryParameters(request.params)\n });\n });\n return client.transporter.responsesCache.get({\n method: 'search',\n args: [requestsWithSerializedParams].concat(methodArgs)\n }, function () {\n return baseMethod.apply(void 0, [requests].concat(methodArgs));\n });\n };\n }\n if (Array.isArray(results.results)) {\n hydrateSearchClientWithMultiIndexRequest(client, results.results);\n return;\n }\n hydrateSearchClientWithSingleIndexRequest(client, results);\n }\n function hydrateSearchClientWithMultiIndexRequest(client, results) {\n // Algoliasearch API Client >= v4\n // Populate the cache with the data from the server\n if (client.transporter) {\n client.transporter.responsesCache.set({\n method: 'search',\n args: [results.reduce(function (acc, result) {\n return acc.concat(result.rawResults.map(function (request) {\n return {\n indexName: request.index,\n params: request.params\n };\n }));\n }, [])]\n }, {\n results: results.reduce(function (acc, result) {\n return acc.concat(result.rawResults);\n }, [])\n });\n return;\n }\n\n // Algoliasearch API Client < v4\n // Prior to client v4 we didn't have a proper API to hydrate the client\n // cache from the outside. The following code populates the cache with\n // a single-index result. You can find more information about the\n // computation of the key inside the client (see link below).\n // https://github.com/algolia/algoliasearch-client-javascript/blob/c27e89ff92b2a854ae6f40dc524bffe0f0cbc169/src/AlgoliaSearchCore.js#L232-L240\n var key = \"/1/indexes/*/queries_body_\".concat(JSON.stringify({\n requests: results.reduce(function (acc, result) {\n return acc.concat(result.rawResults.map(function (request) {\n return {\n indexName: request.index,\n params: request.params\n };\n }));\n }, [])\n }));\n client.cache = _objectSpread(_objectSpread({}, client.cache), {}, _defineProperty({}, key, JSON.stringify({\n results: results.reduce(function (acc, result) {\n return acc.concat(result.rawResults);\n }, [])\n })));\n }\n function hydrateSearchClientWithSingleIndexRequest(client, results) {\n // Algoliasearch API Client >= v4\n // Populate the cache with the data from the server\n if (client.transporter) {\n client.transporter.responsesCache.set({\n method: 'search',\n args: [results.rawResults.map(function (request) {\n return {\n indexName: request.index,\n params: request.params\n };\n })]\n }, {\n results: results.rawResults\n });\n return;\n }\n // Algoliasearch API Client < v4\n // Prior to client v4 we didn't have a proper API to hydrate the client\n // cache from the outside. The following code populates the cache with\n // a single-index result. You can find more information about the\n // computation of the key inside the client (see link below).\n // https://github.com/algolia/algoliasearch-client-javascript/blob/c27e89ff92b2a854ae6f40dc524bffe0f0cbc169/src/AlgoliaSearchCore.js#L232-L240\n var key = \"/1/indexes/*/queries_body_\".concat(JSON.stringify({\n requests: results.rawResults.map(function (request) {\n return {\n indexName: request.index,\n params: request.params\n };\n })\n }));\n client.cache = _objectSpread(_objectSpread({}, client.cache), {}, _defineProperty({}, key, JSON.stringify({\n results: results.rawResults\n })));\n }\n function hydrateResultsState(results) {\n if (!results) {\n return null;\n }\n if (Array.isArray(results.results)) {\n return results.results.reduce(function (acc, result) {\n return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, result._internalIndexId, new algoliasearchHelper.SearchResults(new algoliasearchHelper.SearchParameters(result.state), result.rawResults)));\n }, {});\n }\n return new algoliasearchHelper.SearchResults(new algoliasearchHelper.SearchParameters(results.state), results.rawResults);\n }\n\n // Called whenever a widget has been rendered with new props.\n function onWidgetsUpdate() {\n var metadata = getMetadata(store.getState().widgets);\n store.setState(_objectSpread(_objectSpread({}, store.getState()), {}, {\n metadata: metadata,\n searching: true\n }));\n\n // Since the `getSearchParameters` method of widgets also depends on props,\n // the result search parameters might have changed.\n search();\n }\n function transitionState(nextSearchState) {\n var searchState = store.getState().widgets;\n return widgetsManager.getWidgets().filter(function (widget) {\n return Boolean(widget.transitionState);\n }).reduce(function (res, widget) {\n return widget.transitionState(searchState, res);\n }, nextSearchState);\n }\n function onExternalStateUpdate(nextSearchState) {\n var metadata = getMetadata(nextSearchState);\n store.setState(_objectSpread(_objectSpread({}, store.getState()), {}, {\n widgets: nextSearchState,\n metadata: metadata,\n searching: true\n }));\n search();\n }\n function onSearchForFacetValues(_ref5) {\n var facetName = _ref5.facetName,\n query = _ref5.query,\n _ref5$maxFacetHits = _ref5.maxFacetHits,\n maxFacetHits = _ref5$maxFacetHits === void 0 ? 10 : _ref5$maxFacetHits;\n // The values 1, 100 are the min / max values that the engine accepts.\n // see: https://www.algolia.com/doc/api-reference/api-parameters/maxFacetHits\n var maxFacetHitsWithinRange = Math.max(1, Math.min(maxFacetHits, 100));\n store.setState(_objectSpread(_objectSpread({}, store.getState()), {}, {\n searchingForFacetValues: true\n }));\n helper.searchForFacetValues(facetName, query, maxFacetHitsWithinRange).then(function (content) {\n var _objectSpread7;\n store.setState(_objectSpread(_objectSpread({}, store.getState()), {}, {\n error: null,\n searchingForFacetValues: false,\n resultsFacetValues: _objectSpread(_objectSpread({}, store.getState().resultsFacetValues), {}, (_objectSpread7 = {}, _defineProperty(_objectSpread7, facetName, content.facetHits), _defineProperty(_objectSpread7, \"query\", query), _objectSpread7))\n }));\n }, function (error) {\n store.setState(_objectSpread(_objectSpread({}, store.getState()), {}, {\n searchingForFacetValues: false,\n error: error\n }));\n }).catch(function (error) {\n // Since setState is synchronous, any error that occurs in the render of a\n // component will be swallowed by this promise.\n // This is a trick to make the error show up correctly in the console.\n // See http://stackoverflow.com/a/30741722/969302\n setTimeout(function () {\n throw error;\n });\n });\n }\n function updateIndex(newIndex) {\n initialSearchParameters = initialSearchParameters.setIndex(newIndex);\n // No need to trigger a new search here as the widgets will also update and trigger it if needed.\n }\n\n function getWidgetsIds() {\n return store.getState().metadata.reduce(function (res, meta) {\n return typeof meta.id !== 'undefined' ? res.concat(meta.id) : res;\n }, []);\n }\n return {\n store: store,\n widgetsManager: widgetsManager,\n getWidgetsIds: getWidgetsIds,\n getSearchParameters: getSearchParameters,\n onSearchForFacetValues: onSearchForFacetValues,\n onExternalStateUpdate: onExternalStateUpdate,\n transitionState: transitionState,\n updateClient: updateClient,\n updateIndex: updateIndex,\n clearCache: clearCache,\n skipSearch: skipSearch\n };\n}\nfunction hydrateMetadata(resultsState) {\n if (!resultsState) {\n return [];\n }\n\n // add a value noop, which gets replaced once the widgets are mounted\n return resultsState.metadata.map(function (datum) {\n return _objectSpread(_objectSpread({\n value: function value() {\n return {};\n }\n }, datum), {}, {\n items: datum.items && datum.items.map(function (item) {\n return _objectSpread(_objectSpread({\n value: function value() {\n return {};\n }\n }, item), {}, {\n items: item.items && item.items.map(function (nestedItem) {\n return _objectSpread({\n value: function value() {\n return {};\n }\n }, nestedItem);\n })\n });\n })\n });\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nexport function isMetadataEnabled() {\n return (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === 'object' && _typeof(window.navigator) === 'object' && typeof window.navigator.userAgent === 'string' && window.navigator.userAgent.includes('Algolia Crawler') && _typeof(window.document) === 'object';\n}\nexport function getMetadataPayload(widgets, searchClient) {\n var internalProps = ['contextValue', 'indexContextValue'];\n var widgetsPayload = widgets.map(function (_ref) {\n var props = _ref.props,\n constructor = _ref.constructor;\n var _ref2 = constructor._connectorDesc || {},\n _ref2$defaultProps = _ref2.defaultProps,\n defaultProps = _ref2$defaultProps === void 0 ? {} : _ref2$defaultProps,\n _ref2$displayName = _ref2.displayName,\n displayName = _ref2$displayName === void 0 ? constructor.displayName : _ref2$displayName;\n return {\n displayName: displayName,\n $$type: constructor.$$type,\n $$widgetType: constructor.$$widgetType,\n params: Object.keys(props).filter(function (prop) {\n return !internalProps.includes(prop) && defaultProps[prop] !== props[prop] && props[prop] !== undefined;\n })\n };\n });\n var client = searchClient;\n var ua = client.transporter && client.transporter.userAgent ? client.transporter.userAgent.value : client._ua;\n return {\n ua: ua,\n widgets: widgetsPayload\n };\n}\nexport function injectMetadata(widgets, searchClient) {\n var payloadContainer = document.createElement('meta');\n var refNode = document.querySelector('head');\n payloadContainer.name = 'algolia:metadata';\n var payload = getMetadataPayload(widgets, searchClient);\n payloadContainer.content = JSON.stringify(payload);\n refNode.appendChild(payloadContainer);\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component, Children } from 'react';\nimport isEqual from 'react-fast-compare';\nimport PropTypes from 'prop-types';\nimport createInstantSearchManager from \"../core/createInstantSearchManager.js\";\nimport { InstantSearchProvider } from \"../core/context.js\";\nimport { isMetadataEnabled, injectMetadata } from \"../core/metadata.js\";\nfunction isControlled(props) {\n return Boolean(props.searchState);\n}\n\n/**\n * @description\n * `` is the root component of all React InstantSearch implementations.\n * It provides all the connected components (aka widgets) a means to interact\n * with the searchState.\n * @kind widget\n * @name \n * @requirements You will need to have an Algolia account to be able to use this widget.\n * [Create one now](https://www.algolia.com/users/sign_up).\n * @propType {string} indexName - Main index in which to search.\n * @propType {boolean} [refresh=false] - Flag to activate when the cache needs to be cleared so that the front-end is updated when a change occurs in the index.\n * @propType {object} [searchClient] - Provide a custom search client.\n * @propType {func} [onSearchStateChange] - Function to be called everytime a new search is done. Useful for [URL Routing](guide/Routing.html).\n * @propType {object} [searchState] - Object to inject some search state. Switches the InstantSearch component in controlled mode. Useful for [URL Routing](guide/Routing.html).\n * @propType {func} [createURL] - Function to call when creating links, useful for [URL Routing](guide/Routing.html).\n * @propType {SearchResults|SearchResults[]} [resultsState] - Use this to inject the results that will be used at first rendering. Those results are found by using the `findResultsState` function. Useful for [Server Side Rendering](guide/Server-side_rendering.html).\n * @propType {number} [stalledSearchDelay=200] - The amount of time before considering that the search takes too much time. The time is expressed in milliseconds.\n * @propType {{ Root: string|function, props: object }} [root] - Use this to customize the root element. Default value: `{ Root: 'div' }`\n * @example\n * import React from 'react';\n * import algoliasearch from 'algoliasearch/lite';\n * import { InstantSearch, SearchBox, Hits } from 'react-instantsearch-dom';\n *\n * const searchClient = algoliasearch(\n * 'latency',\n * '6be0576ff61c053d5f9a3225e2a90f76'\n * );\n *\n * const App = () => (\n * \n * \n * \n * \n * );\n */\nvar InstantSearch = /*#__PURE__*/function (_Component) {\n _inherits(InstantSearch, _Component);\n var _super = _createSuper(InstantSearch);\n function InstantSearch(props) {\n var _this;\n _classCallCheck(this, InstantSearch);\n _this = _super.call(this, props);\n _defineProperty(_assertThisInitialized(_this), \"cleanupTimerRef\", null);\n _defineProperty(_assertThisInitialized(_this), \"isUnmounting\", false);\n var instantSearchManager = createInstantSearchManager({\n indexName: _this.props.indexName,\n searchClient: _this.props.searchClient,\n initialState: _this.props.searchState || {},\n resultsState: _this.props.resultsState,\n stalledSearchDelay: _this.props.stalledSearchDelay\n });\n var contextValue = {\n store: instantSearchManager.store,\n widgetsManager: instantSearchManager.widgetsManager,\n mainTargetedIndex: _this.props.indexName,\n onInternalStateUpdate: _this.onWidgetsInternalStateUpdate.bind(_assertThisInitialized(_this)),\n createHrefForState: _this.createHrefForState.bind(_assertThisInitialized(_this)),\n onSearchForFacetValues: _this.onSearchForFacetValues.bind(_assertThisInitialized(_this)),\n onSearchStateChange: _this.onSearchStateChange.bind(_assertThisInitialized(_this)),\n onSearchParameters: _this.onSearchParameters.bind(_assertThisInitialized(_this))\n };\n _this.state = {\n isControlled: isControlled(_this.props),\n instantSearchManager: instantSearchManager,\n contextValue: contextValue\n };\n return _this;\n }\n _createClass(InstantSearch, [{\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var prevIsControlled = isControlled(prevProps);\n if (prevIsControlled && !this.state.isControlled) {\n throw new Error(\"You can't switch from being controlled to uncontrolled\");\n }\n if (!prevIsControlled && this.state.isControlled) {\n throw new Error(\"You can't switch from being uncontrolled to controlled\");\n }\n if (this.props.refresh !== prevProps.refresh && this.props.refresh) {\n this.state.instantSearchManager.clearCache();\n }\n if (prevProps.indexName !== this.props.indexName) {\n this.state.instantSearchManager.updateIndex(this.props.indexName);\n }\n if (prevProps.searchClient !== this.props.searchClient) {\n this.state.instantSearchManager.updateClient(this.props.searchClient);\n }\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (this.cleanupTimerRef) {\n clearTimeout(this.cleanupTimerRef);\n this.cleanupTimerRef = null;\n }\n if (isMetadataEnabled()) {\n injectMetadata(this.state.instantSearchManager.widgetsManager.getWidgets(), this.props.searchClient);\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n var _this2 = this;\n this.cleanupTimerRef = setTimeout(function () {\n _this2.isUnmounting = true;\n _this2.state.instantSearchManager.skipSearch();\n });\n }\n }, {\n key: \"createHrefForState\",\n value: function createHrefForState(searchState) {\n searchState = this.state.instantSearchManager.transitionState(searchState);\n return this.state.isControlled && this.props.createURL ? this.props.createURL(searchState, this.getKnownKeys()) : '#';\n }\n }, {\n key: \"onWidgetsInternalStateUpdate\",\n value: function onWidgetsInternalStateUpdate(searchState) {\n searchState = this.state.instantSearchManager.transitionState(searchState);\n this.onSearchStateChange(searchState);\n if (!this.state.isControlled) {\n this.state.instantSearchManager.onExternalStateUpdate(searchState);\n }\n }\n }, {\n key: \"onSearchStateChange\",\n value: function onSearchStateChange(searchState) {\n if (this.props.onSearchStateChange && !this.isUnmounting) {\n this.props.onSearchStateChange(searchState);\n }\n }\n }, {\n key: \"onSearchParameters\",\n value: function onSearchParameters(getSearchParameters, context, props, getMetadata, displayName) {\n if (this.props.onSearchParameters) {\n var _searchState = this.props.searchState ? this.props.searchState : {};\n this.props.onSearchParameters(getSearchParameters, context, props, _searchState);\n }\n if (this.props.widgetsCollector) {\n var _searchState2 = this.props.searchState ? this.props.searchState : {};\n this.props.widgetsCollector({\n getSearchParameters: getSearchParameters,\n getMetadata: getMetadata,\n context: context,\n props: props,\n searchState: _searchState2,\n displayName: displayName\n });\n }\n }\n }, {\n key: \"onSearchForFacetValues\",\n value: function onSearchForFacetValues(searchState) {\n this.state.instantSearchManager.onSearchForFacetValues(searchState);\n }\n }, {\n key: \"getKnownKeys\",\n value: function getKnownKeys() {\n return this.state.instantSearchManager.getWidgetsIds();\n }\n }, {\n key: \"render\",\n value: function render() {\n if (Children.count(this.props.children) === 0) {\n return null;\n }\n return /*#__PURE__*/React.createElement(InstantSearchProvider, {\n value: this.state.contextValue\n }, this.props.children);\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n var nextIsControlled = isControlled(nextProps);\n var previousSearchState = prevState.instantSearchManager.store.getState().widgets;\n var nextSearchState = nextProps.searchState;\n if (nextIsControlled && !isEqual(previousSearchState, nextSearchState)) {\n prevState.instantSearchManager.onExternalStateUpdate(nextProps.searchState);\n }\n return {\n isControlled: nextIsControlled,\n contextValue: _objectSpread(_objectSpread({}, prevState.contextValue), {}, {\n mainTargetedIndex: nextProps.indexName\n })\n };\n }\n }]);\n return InstantSearch;\n}(Component);\n_defineProperty(InstantSearch, \"defaultProps\", {\n stalledSearchDelay: 200,\n refresh: false\n});\n_defineProperty(InstantSearch, \"propTypes\", {\n // @TODO: These props are currently constant.\n indexName: PropTypes.string.isRequired,\n searchClient: PropTypes.shape({\n search: PropTypes.func.isRequired,\n searchForFacetValues: PropTypes.func,\n addAlgoliaAgent: PropTypes.func,\n clearCache: PropTypes.func\n }).isRequired,\n createURL: PropTypes.func,\n refresh: PropTypes.bool,\n searchState: PropTypes.object,\n onSearchStateChange: PropTypes.func,\n onSearchParameters: PropTypes.func,\n widgetsCollector: PropTypes.func,\n resultsState: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),\n children: PropTypes.node,\n stalledSearchDelay: PropTypes.number\n});\nexport default InstantSearch;","(self[\"webpackChunk_N_E\"] = self[\"webpackChunk_N_E\"] || []).push([[2888,1203],{\n\n/***/ 17331:\n/***/ (function(module) {\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\n// EventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n\n\n/***/ }),\n\n/***/ 8131:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar AlgoliaSearchHelper = __webpack_require__(49374);\nvar RecommendParameters = __webpack_require__(67450);\nvar RecommendResults = __webpack_require__(43650);\nvar SearchParameters = __webpack_require__(17775);\nvar SearchResults = __webpack_require__(23076);\n\n/**\n * The algoliasearchHelper module is the function that will let its\n * contains everything needed to use the Algoliasearch\n * Helper. It is a also a function that instanciate the helper.\n * To use the helper, you also need the Algolia JS client v3.\n * @example\n * //using the UMD build\n * var client = algoliasearch('latency', '6be0576ff61c053d5f9a3225e2a90f76');\n * var helper = algoliasearchHelper(client, 'bestbuy', {\n * facets: ['shipping'],\n * disjunctiveFacets: ['category']\n * });\n * helper.on('result', function(event) {\n * console.log(event.results);\n * });\n * helper\n * .toggleFacetRefinement('category', 'Movies & TV Shows')\n * .toggleFacetRefinement('shipping', 'Free shipping')\n * .search();\n * @example\n * // The helper is an event emitter using the node API\n * helper.on('result', updateTheResults);\n * helper.once('result', updateTheResults);\n * helper.removeListener('result', updateTheResults);\n * helper.removeAllListeners('result');\n * @module algoliasearchHelper\n * @param {AlgoliaSearch} client an AlgoliaSearch client\n * @param {string} index the name of the index to query\n * @param {SearchParameters|object} opts an object defining the initial config of the search. It doesn't have to be a {SearchParameters}, just an object containing the properties you need from it.\n * @param {SearchResultsOptions|object} searchResultsOptions an object defining the options to use when creating the search results.\n * @return {AlgoliaSearchHelper} The helper instance\n */\nfunction algoliasearchHelper(client, index, opts, searchResultsOptions) {\n return new AlgoliaSearchHelper(client, index, opts, searchResultsOptions);\n}\n\n/**\n * The version currently used\n * @member module:algoliasearchHelper.version\n * @type {number}\n */\nalgoliasearchHelper.version = __webpack_require__(24336);\n\n/**\n * Constructor for the Helper.\n * @member module:algoliasearchHelper.AlgoliaSearchHelper\n * @type {AlgoliaSearchHelper}\n */\nalgoliasearchHelper.AlgoliaSearchHelper = AlgoliaSearchHelper;\n\n/**\n * Constructor for the object containing all the parameters of the search.\n * @member module:algoliasearchHelper.SearchParameters\n * @type {SearchParameters}\n */\nalgoliasearchHelper.SearchParameters = SearchParameters;\n\n/**\n * Constructor for the object containing all the parameters for Recommend.\n * @member module:algoliasearchHelper.RecommendParameters\n * @type {RecommendParameters}\n */\nalgoliasearchHelper.RecommendParameters = RecommendParameters;\n\n/**\n * Constructor for the object containing the results of the search.\n * @member module:algoliasearchHelper.SearchResults\n * @type {SearchResults}\n */\nalgoliasearchHelper.SearchResults = SearchResults;\n\n/**\n * Constructor for the object containing the results for Recommend.\n * @member module:algoliasearchHelper.RecommendResults\n * @type {RecommendResults}\n */\nalgoliasearchHelper.RecommendResults = RecommendResults;\n\nmodule.exports = algoliasearchHelper;\n\n\n/***/ }),\n\n/***/ 68078:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar EventEmitter = __webpack_require__(17331);\n\nvar inherits = __webpack_require__(14853);\n\n/**\n * A DerivedHelper is a way to create sub requests to\n * Algolia from a main helper.\n * @class\n * @classdesc The DerivedHelper provides an event based interface for search callbacks:\n * - search: when a search is triggered using the `search()` method.\n * - result: when the response is retrieved from Algolia and is processed.\n * This event contains a {@link SearchResults} object and the\n * {@link SearchParameters} corresponding to this answer.\n * @param {AlgoliaSearchHelper} mainHelper the main helper\n * @param {function} fn the function to create the derived state for search\n * @param {function} recommendFn the function to create the derived state for recommendations\n */\nfunction DerivedHelper(mainHelper, fn, recommendFn) {\n this.main = mainHelper;\n this.fn = fn;\n this.recommendFn = recommendFn;\n this.lastResults = null;\n this.lastRecommendResults = null;\n}\n\ninherits(DerivedHelper, EventEmitter);\n\n/**\n * Detach this helper from the main helper\n * @return {undefined}\n * @throws Error if the derived helper is already detached\n */\nDerivedHelper.prototype.detach = function () {\n this.removeAllListeners();\n this.main.detachDerivedHelper(this);\n};\n\nDerivedHelper.prototype.getModifiedState = function (parameters) {\n return this.fn(parameters);\n};\n\nDerivedHelper.prototype.getModifiedRecommendState = function (parameters) {\n return this.recommendFn(parameters);\n};\n\nmodule.exports = DerivedHelper;\n\n\n/***/ }),\n\n/***/ 67450:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n/**\n * RecommendParameters is the data structure that contains all the information\n * usable for getting recommendations from the Algolia API. It doesn't do the\n * search itself, nor does it contains logic about the parameters.\n * It is an immutable object, therefore it has been created in a way that each\n * changes does not change the object itself but returns a copy with the\n * modification.\n * This object should probably not be instantiated outside of the helper. It\n * will be provided when needed.\n * @constructor\n * @classdesc contains all the parameters for recommendations\n * @param {RecommendParametersOptions} opts the options to create the object\n */\nfunction RecommendParameters(opts) {\n opts = opts || {};\n this.params = opts.params || [];\n}\n\nRecommendParameters.prototype = {\n constructor: RecommendParameters,\n\n addParams: function (params) {\n var newParams = this.params.slice();\n\n newParams.push(params);\n\n return new RecommendParameters({ params: newParams });\n },\n\n removeParams: function (id) {\n return new RecommendParameters({\n params: this.params.filter(function (param) {\n return param.$$id !== id;\n }),\n });\n },\n\n addFrequentlyBoughtTogether: function (params) {\n return this.addParams(\n Object.assign({}, params, { model: 'bought-together' })\n );\n },\n\n addRelatedProducts: function (params) {\n return this.addParams(\n Object.assign({}, params, { model: 'related-products' })\n );\n },\n\n addTrendingItems: function (params) {\n return this.addParams(\n Object.assign({}, params, { model: 'trending-items' })\n );\n },\n\n addTrendingFacets: function (params) {\n return this.addParams(\n Object.assign({}, params, { model: 'trending-facets' })\n );\n },\n\n addLookingSimilar: function (params) {\n return this.addParams(\n Object.assign({}, params, { model: 'looking-similar' })\n );\n },\n\n _buildQueries: function (indexName, cache) {\n return this.params\n .filter(function (params) {\n return cache[params.$$id] === undefined;\n })\n .map(function (params) {\n var query = Object.assign({}, params, {\n indexName: indexName,\n // @TODO: remove this if it ever gets handled by the API\n threshold: params.threshold || 0,\n });\n delete query.$$id;\n\n return query;\n });\n },\n};\n\nmodule.exports = RecommendParameters;\n\n\n/***/ }),\n\n/***/ 43650:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n/**\n * Constructor for SearchResults\n * @class\n * @classdesc SearchResults contains the results of a query to Algolia using the\n * {@link AlgoliaSearchHelper}.\n * @param {RecommendParameters} state state that led to the response\n * @param {Record} results the results from algolia client\n **/\nfunction RecommendResults(state, results) {\n this._state = state;\n this._rawResults = {};\n\n // eslint-disable-next-line consistent-this\n var self = this;\n\n state.params.forEach(function (param) {\n var id = param.$$id;\n self[id] = results[id];\n self._rawResults[id] = results[id];\n });\n}\n\nRecommendResults.prototype = {\n constructor: RecommendResults,\n};\n\nmodule.exports = RecommendResults;\n\n\n/***/ }),\n\n/***/ 82437:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Functions to manipulate refinement lists\n *\n * The RefinementList is not formally defined through a prototype but is based\n * on a specific structure.\n *\n * @module SearchParameters.refinementList\n *\n * @typedef {string[]} SearchParameters.refinementList.Refinements\n * @typedef {Object.} SearchParameters.refinementList.RefinementList\n */\n\nvar defaultsPure = __webpack_require__(52344);\nvar objectHasKeys = __webpack_require__(90116);\nvar omit = __webpack_require__(49803);\n\nvar lib = {\n /**\n * Adds a refinement to a RefinementList\n * @param {RefinementList} refinementList the initial list\n * @param {string} attribute the attribute to refine\n * @param {string} value the value of the refinement, if the value is not a string it will be converted\n * @return {RefinementList} a new and updated refinement list\n */\n addRefinement: function addRefinement(refinementList, attribute, value) {\n if (lib.isRefined(refinementList, attribute, value)) {\n return refinementList;\n }\n\n var valueAsString = '' + value;\n\n var facetRefinement = !refinementList[attribute]\n ? [valueAsString]\n : refinementList[attribute].concat(valueAsString);\n\n var mod = {};\n\n mod[attribute] = facetRefinement;\n\n return defaultsPure(mod, refinementList);\n },\n /**\n * Removes refinement(s) for an attribute:\n * - if the value is specified removes the refinement for the value on the attribute\n * - if no value is specified removes all the refinements for this attribute\n * @param {RefinementList} refinementList the initial list\n * @param {string} attribute the attribute to refine\n * @param {string} [value] the value of the refinement\n * @return {RefinementList} a new and updated refinement lst\n */\n removeRefinement: function removeRefinement(\n refinementList,\n attribute,\n value\n ) {\n if (value === undefined) {\n // we use the \"filter\" form of clearRefinement, since it leaves empty values as-is\n // the form with a string will remove the attribute completely\n return lib.clearRefinement(refinementList, function (v, f) {\n return attribute === f;\n });\n }\n\n var valueAsString = '' + value;\n\n return lib.clearRefinement(refinementList, function (v, f) {\n return attribute === f && valueAsString === v;\n });\n },\n /**\n * Toggles the refinement value for an attribute.\n * @param {RefinementList} refinementList the initial list\n * @param {string} attribute the attribute to refine\n * @param {string} value the value of the refinement\n * @return {RefinementList} a new and updated list\n */\n toggleRefinement: function toggleRefinement(\n refinementList,\n attribute,\n value\n ) {\n if (value === undefined)\n throw new Error('toggleRefinement should be used with a value');\n\n if (lib.isRefined(refinementList, attribute, value)) {\n return lib.removeRefinement(refinementList, attribute, value);\n }\n\n return lib.addRefinement(refinementList, attribute, value);\n },\n /**\n * Clear all or parts of a RefinementList. Depending on the arguments, three\n * kinds of behavior can happen:\n * - if no attribute is provided: clears the whole list\n * - if an attribute is provided as a string: clears the list for the specific attribute\n * - if an attribute is provided as a function: discards the elements for which the function returns true\n * @param {RefinementList} refinementList the initial list\n * @param {string} [attribute] the attribute or function to discard\n * @param {string} [refinementType] optional parameter to give more context to the attribute function\n * @return {RefinementList} a new and updated refinement list\n */\n clearRefinement: function clearRefinement(\n refinementList,\n attribute,\n refinementType\n ) {\n if (attribute === undefined) {\n // return the same object if the list is already empty\n // this is mainly for tests, as it doesn't have much impact on performance\n if (!objectHasKeys(refinementList)) {\n return refinementList;\n }\n return {};\n } else if (typeof attribute === 'string') {\n return omit(refinementList, [attribute]);\n } else if (typeof attribute === 'function') {\n var hasChanged = false;\n\n var newRefinementList = Object.keys(refinementList).reduce(function (\n memo,\n key\n ) {\n var values = refinementList[key] || [];\n var facetList = values.filter(function (value) {\n return !attribute(value, key, refinementType);\n });\n\n if (facetList.length !== values.length) {\n hasChanged = true;\n }\n\n memo[key] = facetList;\n\n return memo;\n },\n {});\n\n if (hasChanged) return newRefinementList;\n return refinementList;\n }\n\n // We return nothing if the attribute is not undefined, a string or a function,\n // as it is not a valid value for a refinement\n return undefined;\n },\n /**\n * Test if the refinement value is used for the attribute. If no refinement value\n * is provided, test if the refinementList contains any refinement for the\n * given attribute.\n * @param {RefinementList} refinementList the list of refinement\n * @param {string} attribute name of the attribute\n * @param {string} [refinementValue] value of the filter/refinement\n * @return {boolean} true if the attribute is refined, false otherwise\n */\n isRefined: function isRefined(refinementList, attribute, refinementValue) {\n var containsRefinements =\n Boolean(refinementList[attribute]) &&\n refinementList[attribute].length > 0;\n\n if (refinementValue === undefined || !containsRefinements) {\n return containsRefinements;\n }\n\n var refinementValueAsString = '' + refinementValue;\n\n return refinementList[attribute].indexOf(refinementValueAsString) !== -1;\n },\n};\n\nmodule.exports = lib;\n\n\n/***/ }),\n\n/***/ 17775:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar defaultsPure = __webpack_require__(52344);\nvar find = __webpack_require__(7888);\nvar intersection = __webpack_require__(22686);\nvar merge = __webpack_require__(60185);\nvar objectHasKeys = __webpack_require__(90116);\nvar omit = __webpack_require__(49803);\nvar valToNumber = __webpack_require__(28023);\nvar isValidUserToken = __webpack_require__(46801);\n\nvar RefinementList = __webpack_require__(82437);\n\n/**\n * isEqual, but only for numeric refinement values, possible values:\n * - 5\n * - [5]\n * - [[5]]\n * - [[5,5],[4]]\n * @param {any} a numeric refinement value\n * @param {any} b numeric refinement value\n * @return {boolean} true if the values are equal\n */\nfunction isEqualNumericRefinement(a, b) {\n if (Array.isArray(a) && Array.isArray(b)) {\n return (\n a.length === b.length &&\n a.every(function (el, i) {\n return isEqualNumericRefinement(b[i], el);\n })\n );\n }\n return a === b;\n}\n\n/**\n * like _.find but using deep equality to be able to use it\n * to find arrays.\n * @private\n * @param {any[]} array array to search into (elements are base or array of base)\n * @param {any} searchedValue the value we're looking for (base or array of base)\n * @return {any} the searched value or undefined\n */\nfunction findArray(array, searchedValue) {\n return find(array, function (currentValue) {\n return isEqualNumericRefinement(currentValue, searchedValue);\n });\n}\n\n/**\n * The facet list is the structure used to store the list of values used to\n * filter a single attribute.\n * @typedef {string[]} SearchParameters.FacetList\n */\n\n/**\n * Structure to store numeric filters with the operator as the key. The supported operators\n * are `=`, `>`, `<`, `>=`, `<=` and `!=`.\n * @typedef {Object.>} SearchParameters.OperatorList\n */\n\n/**\n * SearchParameters is the data structure that contains all the information\n * usable for making a search to Algolia API. It doesn't do the search itself,\n * nor does it contains logic about the parameters.\n * It is an immutable object, therefore it has been created in a way that each\n * changes does not change the object itself but returns a copy with the\n * modification.\n * This object should probably not be instantiated outside of the helper. It will\n * be provided when needed. This object is documented for reference as you'll\n * get it from events generated by the {@link AlgoliaSearchHelper}.\n * If need be, instantiate the Helper from the factory function {@link SearchParameters.make}\n * @constructor\n * @classdesc contains all the parameters of a search\n * @param {object|SearchParameters} newParameters existing parameters or partial object\n * for the properties of a new SearchParameters\n * @see SearchParameters.make\n * @example SearchParameters of the first query in\n * the instant search demo\n{\n \"query\": \"\",\n \"disjunctiveFacets\": [\n \"customerReviewCount\",\n \"category\",\n \"salePrice_range\",\n \"manufacturer\"\n ],\n \"maxValuesPerFacet\": 30,\n \"page\": 0,\n \"hitsPerPage\": 10,\n \"facets\": [\n \"type\",\n \"shipping\"\n ]\n}\n */\nfunction SearchParameters(newParameters) {\n var params = newParameters\n ? SearchParameters._parseNumbers(newParameters)\n : {};\n\n if (params.userToken !== undefined && !isValidUserToken(params.userToken)) {\n // eslint-disable-next-line no-console\n console.warn(\n '[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\\n - Format: [a-zA-Z0-9_-]{1,64}'\n );\n }\n /**\n * This attribute contains the list of all the conjunctive facets\n * used. This list will be added to requested facets in the\n * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n * @member {string[]}\n */\n this.facets = params.facets || [];\n /**\n * This attribute contains the list of all the disjunctive facets\n * used. This list will be added to requested facets in the\n * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n * @member {string[]}\n */\n this.disjunctiveFacets = params.disjunctiveFacets || [];\n /**\n * This attribute contains the list of all the hierarchical facets\n * used. This list will be added to requested facets in the\n * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n * Hierarchical facets are a sub type of disjunctive facets that\n * let you filter faceted attributes hierarchically.\n * @member {string[]|object[]}\n */\n this.hierarchicalFacets = params.hierarchicalFacets || [];\n\n // Refinements\n /**\n * This attribute contains all the filters that need to be\n * applied on the conjunctive facets. Each facet must be properly\n * defined in the `facets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters selected for the associated facet name.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.facetsRefinements = params.facetsRefinements || {};\n /**\n * This attribute contains all the filters that need to be\n * excluded from the conjunctive facets. Each facet must be properly\n * defined in the `facets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters excluded for the associated facet name.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.facetsExcludes = params.facetsExcludes || {};\n /**\n * This attribute contains all the filters that need to be\n * applied on the disjunctive facets. Each facet must be properly\n * defined in the `disjunctiveFacets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters selected for the associated facet name.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.disjunctiveFacetsRefinements = params.disjunctiveFacetsRefinements || {};\n /**\n * This attribute contains all the filters that need to be\n * applied on the numeric attributes.\n *\n * The key is the name of the attribute, and the value is the\n * filters to apply to this attribute.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `numericFilters` attribute.\n * @member {Object.}\n */\n this.numericRefinements = params.numericRefinements || {};\n /**\n * This attribute contains all the tags used to refine the query.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `tagFilters` attribute.\n * @member {string[]}\n */\n this.tagRefinements = params.tagRefinements || [];\n /**\n * This attribute contains all the filters that need to be\n * applied on the hierarchical facets. Each facet must be properly\n * defined in the `hierarchicalFacets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters selected for the associated facet name. The FacetList values\n * are structured as a string that contain the values for each level\n * separated by the configured separator.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.hierarchicalFacetsRefinements =\n params.hierarchicalFacetsRefinements || {};\n\n // eslint-disable-next-line consistent-this\n var self = this;\n Object.keys(params).forEach(function (paramName) {\n var isKeyKnown = SearchParameters.PARAMETERS.indexOf(paramName) !== -1;\n var isValueDefined = params[paramName] !== undefined;\n\n if (!isKeyKnown && isValueDefined) {\n self[paramName] = params[paramName];\n }\n });\n}\n\n/**\n * List all the properties in SearchParameters and therefore all the known Algolia properties\n * This doesn't contain any beta/hidden features.\n * @private\n */\nSearchParameters.PARAMETERS = Object.keys(new SearchParameters());\n\n/**\n * @private\n * @param {object} partialState full or part of a state\n * @return {object} a new object with the number keys as number\n */\nSearchParameters._parseNumbers = function (partialState) {\n // Do not parse numbers again in SearchParameters, they ought to be parsed already\n if (partialState instanceof SearchParameters) return partialState;\n\n var numbers = {};\n\n var numberKeys = [\n 'aroundPrecision',\n 'aroundRadius',\n 'getRankingInfo',\n 'minWordSizefor2Typos',\n 'minWordSizefor1Typo',\n 'page',\n 'maxValuesPerFacet',\n 'distinct',\n 'minimumAroundRadius',\n 'hitsPerPage',\n 'minProximity',\n ];\n\n numberKeys.forEach(function (k) {\n var value = partialState[k];\n if (typeof value === 'string') {\n var parsedValue = parseFloat(value);\n // global isNaN is ok to use here, value is only number or NaN\n numbers[k] = isNaN(parsedValue) ? value : parsedValue;\n }\n });\n\n // there's two formats of insideBoundingBox, we need to parse\n // the one which is an array of float geo rectangles\n if (Array.isArray(partialState.insideBoundingBox)) {\n numbers.insideBoundingBox = partialState.insideBoundingBox.map(function (\n geoRect\n ) {\n if (Array.isArray(geoRect)) {\n return geoRect.map(function (value) {\n return parseFloat(value);\n });\n }\n return geoRect;\n });\n }\n\n if (partialState.numericRefinements) {\n var numericRefinements = {};\n Object.keys(partialState.numericRefinements).forEach(function (attribute) {\n var operators = partialState.numericRefinements[attribute] || {};\n numericRefinements[attribute] = {};\n Object.keys(operators).forEach(function (operator) {\n var values = operators[operator];\n var parsedValues = values.map(function (v) {\n if (Array.isArray(v)) {\n return v.map(function (vPrime) {\n if (typeof vPrime === 'string') {\n return parseFloat(vPrime);\n }\n return vPrime;\n });\n } else if (typeof v === 'string') {\n return parseFloat(v);\n }\n return v;\n });\n numericRefinements[attribute][operator] = parsedValues;\n });\n });\n numbers.numericRefinements = numericRefinements;\n }\n\n return merge(partialState, numbers);\n};\n\n/**\n * Factory for SearchParameters\n * @param {object|SearchParameters} newParameters existing parameters or partial\n * object for the properties of a new SearchParameters\n * @return {SearchParameters} frozen instance of SearchParameters\n */\nSearchParameters.make = function makeSearchParameters(newParameters) {\n var instance = new SearchParameters(newParameters);\n\n var hierarchicalFacets = newParameters.hierarchicalFacets || [];\n hierarchicalFacets.forEach(function (facet) {\n if (facet.rootPath) {\n var currentRefinement = instance.getHierarchicalRefinement(facet.name);\n\n if (\n currentRefinement.length > 0 &&\n currentRefinement[0].indexOf(facet.rootPath) !== 0\n ) {\n instance = instance.clearRefinements(facet.name);\n }\n\n // get it again in case it has been cleared\n currentRefinement = instance.getHierarchicalRefinement(facet.name);\n if (currentRefinement.length === 0) {\n instance = instance.toggleHierarchicalFacetRefinement(\n facet.name,\n facet.rootPath\n );\n }\n }\n });\n\n return instance;\n};\n\n/**\n * Validates the new parameters based on the previous state\n * @param {SearchParameters} currentState the current state\n * @param {object|SearchParameters} parameters the new parameters to set\n * @return {Error|null} Error if the modification is invalid, null otherwise\n */\nSearchParameters.validate = function (currentState, parameters) {\n var params = parameters || {};\n\n if (\n currentState.tagFilters &&\n params.tagRefinements &&\n params.tagRefinements.length > 0\n ) {\n return new Error(\n '[Tags] Cannot switch from the managed tag API to the advanced API. It is probably ' +\n 'an error, if it is really what you want, you should first clear the tags with clearTags method.'\n );\n }\n\n if (currentState.tagRefinements.length > 0 && params.tagFilters) {\n return new Error(\n '[Tags] Cannot switch from the advanced tag API to the managed API. It is probably ' +\n 'an error, if it is not, you should first clear the tags with clearTags method.'\n );\n }\n\n if (\n currentState.numericFilters &&\n params.numericRefinements &&\n objectHasKeys(params.numericRefinements)\n ) {\n return new Error(\n \"[Numeric filters] Can't switch from the advanced to the managed API. It\" +\n ' is probably an error, if this is really what you want, you have to first' +\n ' clear the numeric filters.'\n );\n }\n\n if (objectHasKeys(currentState.numericRefinements) && params.numericFilters) {\n return new Error(\n \"[Numeric filters] Can't switch from the managed API to the advanced. It\" +\n ' is probably an error, if this is really what you want, you have to first' +\n ' clear the numeric filters.'\n );\n }\n\n return null;\n};\n\nSearchParameters.prototype = {\n constructor: SearchParameters,\n\n /**\n * Remove all refinements (disjunctive + conjunctive + excludes + numeric filters)\n * @method\n * @param {undefined|string|SearchParameters.clearCallback} [attribute] optional string or function\n * - If not given, means to clear all the filters.\n * - If `string`, means to clear all refinements for the `attribute` named filter.\n * - If `function`, means to clear all the refinements that return truthy values.\n * @return {SearchParameters} new instance with filters cleared\n */\n clearRefinements: function clearRefinements(attribute) {\n var patch = {\n numericRefinements: this._clearNumericRefinements(attribute),\n facetsRefinements: RefinementList.clearRefinement(\n this.facetsRefinements,\n attribute,\n 'conjunctiveFacet'\n ),\n facetsExcludes: RefinementList.clearRefinement(\n this.facetsExcludes,\n attribute,\n 'exclude'\n ),\n disjunctiveFacetsRefinements: RefinementList.clearRefinement(\n this.disjunctiveFacetsRefinements,\n attribute,\n 'disjunctiveFacet'\n ),\n hierarchicalFacetsRefinements: RefinementList.clearRefinement(\n this.hierarchicalFacetsRefinements,\n attribute,\n 'hierarchicalFacet'\n ),\n };\n if (\n patch.numericRefinements === this.numericRefinements &&\n patch.facetsRefinements === this.facetsRefinements &&\n patch.facetsExcludes === this.facetsExcludes &&\n patch.disjunctiveFacetsRefinements ===\n this.disjunctiveFacetsRefinements &&\n patch.hierarchicalFacetsRefinements === this.hierarchicalFacetsRefinements\n ) {\n return this;\n }\n return this.setQueryParameters(patch);\n },\n /**\n * Remove all the refined tags from the SearchParameters\n * @method\n * @return {SearchParameters} new instance with tags cleared\n */\n clearTags: function clearTags() {\n if (this.tagFilters === undefined && this.tagRefinements.length === 0)\n return this;\n\n return this.setQueryParameters({\n tagFilters: undefined,\n tagRefinements: [],\n });\n },\n /**\n * Set the index.\n * @method\n * @param {string} index the index name\n * @return {SearchParameters} new instance\n */\n setIndex: function setIndex(index) {\n if (index === this.index) return this;\n\n return this.setQueryParameters({\n index: index,\n });\n },\n /**\n * Query setter\n * @method\n * @param {string} newQuery value for the new query\n * @return {SearchParameters} new instance\n */\n setQuery: function setQuery(newQuery) {\n if (newQuery === this.query) return this;\n\n return this.setQueryParameters({\n query: newQuery,\n });\n },\n /**\n * Page setter\n * @method\n * @param {number} newPage new page number\n * @return {SearchParameters} new instance\n */\n setPage: function setPage(newPage) {\n if (newPage === this.page) return this;\n\n return this.setQueryParameters({\n page: newPage,\n });\n },\n /**\n * Facets setter\n * The facets are the simple facets, used for conjunctive (and) faceting.\n * @method\n * @param {string[]} facets all the attributes of the algolia records used for conjunctive faceting\n * @return {SearchParameters} new instance\n */\n setFacets: function setFacets(facets) {\n return this.setQueryParameters({\n facets: facets,\n });\n },\n /**\n * Disjunctive facets setter\n * Change the list of disjunctive (or) facets the helper chan handle.\n * @method\n * @param {string[]} facets all the attributes of the algolia records used for disjunctive faceting\n * @return {SearchParameters} new instance\n */\n setDisjunctiveFacets: function setDisjunctiveFacets(facets) {\n return this.setQueryParameters({\n disjunctiveFacets: facets,\n });\n },\n /**\n * HitsPerPage setter\n * Hits per page represents the number of hits retrieved for this query\n * @method\n * @param {number} n number of hits retrieved per page of results\n * @return {SearchParameters} new instance\n */\n setHitsPerPage: function setHitsPerPage(n) {\n if (this.hitsPerPage === n) return this;\n\n return this.setQueryParameters({\n hitsPerPage: n,\n });\n },\n /**\n * typoTolerance setter\n * Set the value of typoTolerance\n * @method\n * @param {string} typoTolerance new value of typoTolerance (\"true\", \"false\", \"min\" or \"strict\")\n * @return {SearchParameters} new instance\n */\n setTypoTolerance: function setTypoTolerance(typoTolerance) {\n if (this.typoTolerance === typoTolerance) return this;\n\n return this.setQueryParameters({\n typoTolerance: typoTolerance,\n });\n },\n /**\n * Add a numeric filter for a given attribute\n * When value is an array, they are combined with OR\n * When value is a single value, it will combined with AND\n * @method\n * @param {string} attribute attribute to set the filter on\n * @param {string} operator operator of the filter (possible values: =, >, >=, <, <=, !=)\n * @param {number | number[]} value value of the filter\n * @return {SearchParameters} new instance\n * @example\n * // for price = 50 or 40\n * state.addNumericRefinement('price', '=', [50, 40]);\n * @example\n * // for size = 38 and 40\n * state.addNumericRefinement('size', '=', 38);\n * state.addNumericRefinement('size', '=', 40);\n */\n addNumericRefinement: function (attribute, operator, value) {\n var val = valToNumber(value);\n\n if (this.isNumericRefined(attribute, operator, val)) return this;\n\n var mod = merge({}, this.numericRefinements);\n\n mod[attribute] = merge({}, mod[attribute]);\n\n if (mod[attribute][operator]) {\n // Array copy\n mod[attribute][operator] = mod[attribute][operator].slice();\n // Add the element. Concat can't be used here because value can be an array.\n mod[attribute][operator].push(val);\n } else {\n mod[attribute][operator] = [val];\n }\n\n return this.setQueryParameters({\n numericRefinements: mod,\n });\n },\n /**\n * Get the list of conjunctive refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getConjunctiveRefinements: function (facetName) {\n if (!this.isConjunctiveFacet(facetName)) {\n return [];\n }\n return this.facetsRefinements[facetName] || [];\n },\n /**\n * Get the list of disjunctive refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getDisjunctiveRefinements: function (facetName) {\n if (!this.isDisjunctiveFacet(facetName)) {\n return [];\n }\n return this.disjunctiveFacetsRefinements[facetName] || [];\n },\n /**\n * Get the list of hierarchical refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getHierarchicalRefinement: function (facetName) {\n // we send an array but we currently do not support multiple\n // hierarchicalRefinements for a hierarchicalFacet\n return this.hierarchicalFacetsRefinements[facetName] || [];\n },\n /**\n * Get the list of exclude refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getExcludeRefinements: function (facetName) {\n if (!this.isConjunctiveFacet(facetName)) {\n return [];\n }\n return this.facetsExcludes[facetName] || [];\n },\n\n /**\n * Remove all the numeric filter for a given (attribute, operator)\n * @method\n * @param {string} attribute attribute to set the filter on\n * @param {string} [operator] operator of the filter (possible values: =, >, >=, <, <=, !=)\n * @param {number} [number] the value to be removed\n * @return {SearchParameters} new instance\n */\n removeNumericRefinement: function (attribute, operator, number) {\n var paramValue = number;\n if (paramValue !== undefined) {\n if (!this.isNumericRefined(attribute, operator, paramValue)) {\n return this;\n }\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function (\n value,\n key\n ) {\n return (\n key === attribute &&\n value.op === operator &&\n isEqualNumericRefinement(value.val, valToNumber(paramValue))\n );\n }),\n });\n } else if (operator !== undefined) {\n if (!this.isNumericRefined(attribute, operator)) return this;\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function (\n value,\n key\n ) {\n return key === attribute && value.op === operator;\n }),\n });\n }\n\n if (!this.isNumericRefined(attribute)) return this;\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function (value, key) {\n return key === attribute;\n }),\n });\n },\n /**\n * Get the list of numeric refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {SearchParameters.OperatorList} list of refinements\n */\n getNumericRefinements: function (facetName) {\n return this.numericRefinements[facetName] || {};\n },\n /**\n * Return the current refinement for the (attribute, operator)\n * @param {string} attribute attribute in the record\n * @param {string} operator operator applied on the refined values\n * @return {Array.} refined values\n */\n getNumericRefinement: function (attribute, operator) {\n return (\n this.numericRefinements[attribute] &&\n this.numericRefinements[attribute][operator]\n );\n },\n /**\n * Clear numeric filters.\n * @method\n * @private\n * @param {string|SearchParameters.clearCallback} [attribute] optional string or function\n * - If not given, means to clear all the filters.\n * - If `string`, means to clear all refinements for the `attribute` named filter.\n * - If `function`, means to clear all the refinements that return truthy values.\n * @return {Object.} new numeric refinements\n */\n _clearNumericRefinements: function _clearNumericRefinements(attribute) {\n if (attribute === undefined) {\n if (!objectHasKeys(this.numericRefinements)) {\n return this.numericRefinements;\n }\n return {};\n } else if (typeof attribute === 'string') {\n return omit(this.numericRefinements, [attribute]);\n } else if (typeof attribute === 'function') {\n var hasChanged = false;\n var numericRefinements = this.numericRefinements;\n var newNumericRefinements = Object.keys(numericRefinements).reduce(\n function (memo, key) {\n var operators = numericRefinements[key];\n var operatorList = {};\n\n operators = operators || {};\n Object.keys(operators).forEach(function (operator) {\n var values = operators[operator] || [];\n var outValues = [];\n values.forEach(function (value) {\n var predicateResult = attribute(\n { val: value, op: operator },\n key,\n 'numeric'\n );\n if (!predicateResult) outValues.push(value);\n });\n if (outValues.length !== values.length) {\n hasChanged = true;\n }\n operatorList[operator] = outValues;\n });\n\n memo[key] = operatorList;\n\n return memo;\n },\n {}\n );\n\n if (hasChanged) return newNumericRefinements;\n return this.numericRefinements;\n }\n\n // We return nothing if the attribute is not undefined, a string or a function,\n // as it is not a valid value for a refinement\n return undefined;\n },\n /**\n * Add a facet to the facets attribute of the helper configuration, if it\n * isn't already present.\n * @method\n * @param {string} facet facet name to add\n * @return {SearchParameters} new instance\n */\n addFacet: function addFacet(facet) {\n if (this.isConjunctiveFacet(facet)) {\n return this;\n }\n\n return this.setQueryParameters({\n facets: this.facets.concat([facet]),\n });\n },\n /**\n * Add a disjunctive facet to the disjunctiveFacets attribute of the helper\n * configuration, if it isn't already present.\n * @method\n * @param {string} facet disjunctive facet name to add\n * @return {SearchParameters} new instance\n */\n addDisjunctiveFacet: function addDisjunctiveFacet(facet) {\n if (this.isDisjunctiveFacet(facet)) {\n return this;\n }\n\n return this.setQueryParameters({\n disjunctiveFacets: this.disjunctiveFacets.concat([facet]),\n });\n },\n /**\n * Add a hierarchical facet to the hierarchicalFacets attribute of the helper\n * configuration.\n * @method\n * @param {object} hierarchicalFacet hierarchical facet to add\n * @return {SearchParameters} new instance\n * @throws will throw an error if a hierarchical facet with the same name was already declared\n */\n addHierarchicalFacet: function addHierarchicalFacet(hierarchicalFacet) {\n if (this.isHierarchicalFacet(hierarchicalFacet.name)) {\n throw new Error(\n 'Cannot declare two hierarchical facets with the same name: `' +\n hierarchicalFacet.name +\n '`'\n );\n }\n\n return this.setQueryParameters({\n hierarchicalFacets: this.hierarchicalFacets.concat([hierarchicalFacet]),\n });\n },\n /**\n * Add a refinement on a \"normal\" facet\n * @method\n * @param {string} facet attribute to apply the faceting on\n * @param {string} value value of the attribute (will be converted to string)\n * @return {SearchParameters} new instance\n */\n addFacetRefinement: function addFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n if (RefinementList.isRefined(this.facetsRefinements, facet, value))\n return this;\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.addRefinement(\n this.facetsRefinements,\n facet,\n value\n ),\n });\n },\n /**\n * Exclude a value from a \"normal\" facet\n * @method\n * @param {string} facet attribute to apply the exclusion on\n * @param {string} value value of the attribute (will be converted to string)\n * @return {SearchParameters} new instance\n */\n addExcludeRefinement: function addExcludeRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n if (RefinementList.isRefined(this.facetsExcludes, facet, value))\n return this;\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.addRefinement(\n this.facetsExcludes,\n facet,\n value\n ),\n });\n },\n /**\n * Adds a refinement on a disjunctive facet.\n * @method\n * @param {string} facet attribute to apply the faceting on\n * @param {string} value value of the attribute (will be converted to string)\n * @return {SearchParameters} new instance\n */\n addDisjunctiveFacetRefinement: function addDisjunctiveFacetRefinement(\n facet,\n value\n ) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the disjunctiveFacets attribute of the helper configuration'\n );\n }\n\n if (\n RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)\n )\n return this;\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.addRefinement(\n this.disjunctiveFacetsRefinements,\n facet,\n value\n ),\n });\n },\n /**\n * addTagRefinement adds a tag to the list used to filter the results\n * @param {string} tag tag to be added\n * @return {SearchParameters} new instance\n */\n addTagRefinement: function addTagRefinement(tag) {\n if (this.isTagRefined(tag)) return this;\n\n var modification = {\n tagRefinements: this.tagRefinements.concat(tag),\n };\n\n return this.setQueryParameters(modification);\n },\n /**\n * Remove a facet from the facets attribute of the helper configuration, if it\n * is present.\n * @method\n * @param {string} facet facet name to remove\n * @return {SearchParameters} new instance\n */\n removeFacet: function removeFacet(facet) {\n if (!this.isConjunctiveFacet(facet)) {\n return this;\n }\n\n return this.clearRefinements(facet).setQueryParameters({\n facets: this.facets.filter(function (f) {\n return f !== facet;\n }),\n });\n },\n /**\n * Remove a disjunctive facet from the disjunctiveFacets attribute of the\n * helper configuration, if it is present.\n * @method\n * @param {string} facet disjunctive facet name to remove\n * @return {SearchParameters} new instance\n */\n removeDisjunctiveFacet: function removeDisjunctiveFacet(facet) {\n if (!this.isDisjunctiveFacet(facet)) {\n return this;\n }\n\n return this.clearRefinements(facet).setQueryParameters({\n disjunctiveFacets: this.disjunctiveFacets.filter(function (f) {\n return f !== facet;\n }),\n });\n },\n /**\n * Remove a hierarchical facet from the hierarchicalFacets attribute of the\n * helper configuration, if it is present.\n * @method\n * @param {string} facet hierarchical facet name to remove\n * @return {SearchParameters} new instance\n */\n removeHierarchicalFacet: function removeHierarchicalFacet(facet) {\n if (!this.isHierarchicalFacet(facet)) {\n return this;\n }\n\n return this.clearRefinements(facet).setQueryParameters({\n hierarchicalFacets: this.hierarchicalFacets.filter(function (f) {\n return f.name !== facet;\n }),\n });\n },\n /**\n * Remove a refinement set on facet. If a value is provided, it will clear the\n * refinement for the given value, otherwise it will clear all the refinement\n * values for the faceted attribute.\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {string} [value] value used to filter\n * @return {SearchParameters} new instance\n */\n removeFacetRefinement: function removeFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n if (!RefinementList.isRefined(this.facetsRefinements, facet, value))\n return this;\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.removeRefinement(\n this.facetsRefinements,\n facet,\n value\n ),\n });\n },\n /**\n * Remove a negative refinement on a facet\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {string} value value used to filter\n * @return {SearchParameters} new instance\n */\n removeExcludeRefinement: function removeExcludeRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n if (!RefinementList.isRefined(this.facetsExcludes, facet, value))\n return this;\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.removeRefinement(\n this.facetsExcludes,\n facet,\n value\n ),\n });\n },\n /**\n * Remove a refinement on a disjunctive facet\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {string} value value used to filter\n * @return {SearchParameters} new instance\n */\n removeDisjunctiveFacetRefinement: function removeDisjunctiveFacetRefinement(\n facet,\n value\n ) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the disjunctiveFacets attribute of the helper configuration'\n );\n }\n if (\n !RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)\n )\n return this;\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.removeRefinement(\n this.disjunctiveFacetsRefinements,\n facet,\n value\n ),\n });\n },\n /**\n * Remove a tag from the list of tag refinements\n * @method\n * @param {string} tag the tag to remove\n * @return {SearchParameters} new instance\n */\n removeTagRefinement: function removeTagRefinement(tag) {\n if (!this.isTagRefined(tag)) return this;\n\n var modification = {\n tagRefinements: this.tagRefinements.filter(function (t) {\n return t !== tag;\n }),\n };\n\n return this.setQueryParameters(modification);\n },\n /**\n * Generic toggle refinement method to use with facet, disjunctive facets\n * and hierarchical facets\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {SearchParameters} new instance\n * @throws will throw an error if the facet is not declared in the settings of the helper\n * @deprecated since version 2.19.0, see {@link SearchParameters#toggleFacetRefinement}\n */\n toggleRefinement: function toggleRefinement(facet, value) {\n return this.toggleFacetRefinement(facet, value);\n },\n /**\n * Generic toggle refinement method to use with facet, disjunctive facets\n * and hierarchical facets\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {SearchParameters} new instance\n * @throws will throw an error if the facet is not declared in the settings of the helper\n */\n toggleFacetRefinement: function toggleFacetRefinement(facet, value) {\n if (this.isHierarchicalFacet(facet)) {\n return this.toggleHierarchicalFacetRefinement(facet, value);\n } else if (this.isConjunctiveFacet(facet)) {\n return this.toggleConjunctiveFacetRefinement(facet, value);\n } else if (this.isDisjunctiveFacet(facet)) {\n return this.toggleDisjunctiveFacetRefinement(facet, value);\n }\n\n throw new Error(\n 'Cannot refine the undeclared facet ' +\n facet +\n '; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets'\n );\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters} new instance\n */\n toggleConjunctiveFacetRefinement: function toggleConjunctiveFacetRefinement(\n facet,\n value\n ) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.toggleRefinement(\n this.facetsRefinements,\n facet,\n value\n ),\n });\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters} new instance\n */\n toggleExcludeFacetRefinement: function toggleExcludeFacetRefinement(\n facet,\n value\n ) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.toggleRefinement(\n this.facetsExcludes,\n facet,\n value\n ),\n });\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters} new instance\n */\n toggleDisjunctiveFacetRefinement: function toggleDisjunctiveFacetRefinement(\n facet,\n value\n ) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the disjunctiveFacets attribute of the helper configuration'\n );\n }\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.toggleRefinement(\n this.disjunctiveFacetsRefinements,\n facet,\n value\n ),\n });\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters} new instance\n */\n toggleHierarchicalFacetRefinement: function toggleHierarchicalFacetRefinement(\n facet,\n value\n ) {\n if (!this.isHierarchicalFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the hierarchicalFacets attribute of the helper configuration'\n );\n }\n\n var separator = this._getHierarchicalFacetSeparator(\n this.getHierarchicalFacetByName(facet)\n );\n\n var mod = {};\n\n var upOneOrMultipleLevel =\n this.hierarchicalFacetsRefinements[facet] !== undefined &&\n this.hierarchicalFacetsRefinements[facet].length > 0 &&\n // remove current refinement:\n // refinement was 'beer > IPA', call is toggleRefine('beer > IPA'), refinement should be `beer`\n (this.hierarchicalFacetsRefinements[facet][0] === value ||\n // remove a parent refinement of the current refinement:\n // - refinement was 'beer > IPA > Flying dog'\n // - call is toggleRefine('beer > IPA')\n // - refinement should be `beer`\n this.hierarchicalFacetsRefinements[facet][0].indexOf(\n value + separator\n ) === 0);\n\n if (upOneOrMultipleLevel) {\n if (value.indexOf(separator) === -1) {\n // go back to root level\n mod[facet] = [];\n } else {\n mod[facet] = [value.slice(0, value.lastIndexOf(separator))];\n }\n } else {\n mod[facet] = [value];\n }\n\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaultsPure(\n mod,\n this.hierarchicalFacetsRefinements\n ),\n });\n },\n\n /**\n * Adds a refinement on a hierarchical facet.\n * @param {string} facet the facet name\n * @param {string} path the hierarchical facet path\n * @return {SearchParameter} the new state\n * @throws Error if the facet is not defined or if the facet is refined\n */\n addHierarchicalFacetRefinement: function (facet, path) {\n if (this.isHierarchicalFacetRefined(facet)) {\n throw new Error(facet + ' is already refined.');\n }\n if (!this.isHierarchicalFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the hierarchicalFacets attribute of the helper configuration.'\n );\n }\n var mod = {};\n mod[facet] = [path];\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaultsPure(\n mod,\n this.hierarchicalFacetsRefinements\n ),\n });\n },\n\n /**\n * Removes the refinement set on a hierarchical facet.\n * @param {string} facet the facet name\n * @return {SearchParameter} the new state\n * @throws Error if the facet is not defined or if the facet is not refined\n */\n removeHierarchicalFacetRefinement: function (facet) {\n if (!this.isHierarchicalFacetRefined(facet)) {\n return this;\n }\n var mod = {};\n mod[facet] = [];\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaultsPure(\n mod,\n this.hierarchicalFacetsRefinements\n ),\n });\n },\n /**\n * Switch the tag refinement\n * @method\n * @param {string} tag the tag to remove or add\n * @return {SearchParameters} new instance\n */\n toggleTagRefinement: function toggleTagRefinement(tag) {\n if (this.isTagRefined(tag)) {\n return this.removeTagRefinement(tag);\n }\n\n return this.addTagRefinement(tag);\n },\n /**\n * Test if the facet name is from one of the disjunctive facets\n * @method\n * @param {string} facet facet name to test\n * @return {boolean} true if facet is a disjunctive facet\n */\n isDisjunctiveFacet: function (facet) {\n return this.disjunctiveFacets.indexOf(facet) > -1;\n },\n /**\n * Test if the facet name is from one of the hierarchical facets\n * @method\n * @param {string} facetName facet name to test\n * @return {boolean} true if facetName is a hierarchical facet\n */\n isHierarchicalFacet: function (facetName) {\n return this.getHierarchicalFacetByName(facetName) !== undefined;\n },\n /**\n * Test if the facet name is from one of the conjunctive/normal facets\n * @method\n * @param {string} facet facet name to test\n * @return {boolean} true if facet is a conjunctive facet\n */\n isConjunctiveFacet: function (facet) {\n return this.facets.indexOf(facet) > -1;\n },\n /**\n * Returns true if the facet is refined, either for a specific value or in\n * general.\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} value, optional value. If passed will test that this value\n * is filtering the given facet.\n * @return {boolean} returns true if refined\n */\n isFacetRefined: function isFacetRefined(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n return false;\n }\n return RefinementList.isRefined(this.facetsRefinements, facet, value);\n },\n /**\n * Returns true if the facet contains exclusions or if a specific value is\n * excluded.\n *\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} [value] optional value. If passed will test that this value\n * is filtering the given facet.\n * @return {boolean} returns true if refined\n */\n isExcludeRefined: function isExcludeRefined(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n return false;\n }\n return RefinementList.isRefined(this.facetsExcludes, facet, value);\n },\n /**\n * Returns true if the facet contains a refinement, or if a value passed is a\n * refinement for the facet.\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} value optional, will test if the value is used for refinement\n * if there is one, otherwise will test if the facet contains any refinement\n * @return {boolean} true if the facet is refined\n */\n isDisjunctiveFacetRefined: function isDisjunctiveFacetRefined(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n return false;\n }\n return RefinementList.isRefined(\n this.disjunctiveFacetsRefinements,\n facet,\n value\n );\n },\n /**\n * Returns true if the facet contains a refinement, or if a value passed is a\n * refinement for the facet.\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} value optional, will test if the value is used for refinement\n * if there is one, otherwise will test if the facet contains any refinement\n * @return {boolean} true if the facet is refined\n */\n isHierarchicalFacetRefined: function isHierarchicalFacetRefined(\n facet,\n value\n ) {\n if (!this.isHierarchicalFacet(facet)) {\n return false;\n }\n\n var refinements = this.getHierarchicalRefinement(facet);\n\n if (!value) {\n return refinements.length > 0;\n }\n\n return refinements.indexOf(value) !== -1;\n },\n /**\n * Test if the triple (attribute, operator, value) is already refined.\n * If only the attribute and the operator are provided, it tests if the\n * contains any refinement value.\n * @method\n * @param {string} attribute attribute for which the refinement is applied\n * @param {string} [operator] operator of the refinement\n * @param {string} [value] value of the refinement\n * @return {boolean} true if it is refined\n */\n isNumericRefined: function isNumericRefined(attribute, operator, value) {\n if (value === undefined && operator === undefined) {\n return Boolean(this.numericRefinements[attribute]);\n }\n\n var isOperatorDefined =\n this.numericRefinements[attribute] &&\n this.numericRefinements[attribute][operator] !== undefined;\n\n if (value === undefined || !isOperatorDefined) {\n return isOperatorDefined;\n }\n\n var parsedValue = valToNumber(value);\n var isAttributeValueDefined =\n findArray(this.numericRefinements[attribute][operator], parsedValue) !==\n undefined;\n\n return isOperatorDefined && isAttributeValueDefined;\n },\n /**\n * Returns true if the tag refined, false otherwise\n * @method\n * @param {string} tag the tag to check\n * @return {boolean} true if tag is refined\n */\n isTagRefined: function isTagRefined(tag) {\n return this.tagRefinements.indexOf(tag) !== -1;\n },\n /**\n * Returns the list of all disjunctive facets refined\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {string[]} returns the list of refinements\n */\n getRefinedDisjunctiveFacets: function getRefinedDisjunctiveFacets() {\n // eslint-disable-next-line consistent-this\n var self = this;\n\n // attributes used for numeric filter can also be disjunctive\n var disjunctiveNumericRefinedFacets = intersection(\n Object.keys(this.numericRefinements).filter(function (facet) {\n return Object.keys(self.numericRefinements[facet]).length > 0;\n }),\n this.disjunctiveFacets\n );\n\n return Object.keys(this.disjunctiveFacetsRefinements)\n .filter(function (facet) {\n return self.disjunctiveFacetsRefinements[facet].length > 0;\n })\n .concat(disjunctiveNumericRefinedFacets)\n .concat(this.getRefinedHierarchicalFacets())\n .sort();\n },\n /**\n * Returns the list of all disjunctive facets refined\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {string[]} returns the list of refinements\n */\n getRefinedHierarchicalFacets: function getRefinedHierarchicalFacets() {\n // eslint-disable-next-line consistent-this\n var self = this;\n return intersection(\n // enforce the order between the two arrays,\n // so that refinement name index === hierarchical facet index\n this.hierarchicalFacets.map(function (facet) {\n return facet.name;\n }),\n Object.keys(this.hierarchicalFacetsRefinements).filter(function (facet) {\n return self.hierarchicalFacetsRefinements[facet].length > 0;\n })\n ).sort();\n },\n /**\n * Returned the list of all disjunctive facets not refined\n * @method\n * @return {string[]} returns the list of facets that are not refined\n */\n getUnrefinedDisjunctiveFacets: function () {\n var refinedFacets = this.getRefinedDisjunctiveFacets();\n\n return this.disjunctiveFacets.filter(function (f) {\n return refinedFacets.indexOf(f) === -1;\n });\n },\n\n managedParameters: [\n 'index',\n\n 'facets',\n 'disjunctiveFacets',\n 'facetsRefinements',\n 'hierarchicalFacets',\n 'facetsExcludes',\n\n 'disjunctiveFacetsRefinements',\n 'numericRefinements',\n 'tagRefinements',\n 'hierarchicalFacetsRefinements',\n ],\n\n getQueryParams: function getQueryParams() {\n var managedParameters = this.managedParameters;\n\n var queryParams = {};\n\n // eslint-disable-next-line consistent-this\n var self = this;\n Object.keys(this).forEach(function (paramName) {\n var paramValue = self[paramName];\n if (\n managedParameters.indexOf(paramName) === -1 &&\n paramValue !== undefined\n ) {\n queryParams[paramName] = paramValue;\n }\n });\n\n return queryParams;\n },\n /**\n * Let the user set a specific value for a given parameter. Will return the\n * same instance if the parameter is invalid or if the value is the same as the\n * previous one.\n * @method\n * @param {string} parameter the parameter name\n * @param {any} value the value to be set, must be compliant with the definition\n * of the attribute on the object\n * @return {SearchParameters} the updated state\n */\n setQueryParameter: function setParameter(parameter, value) {\n if (this[parameter] === value) return this;\n\n var modification = {};\n\n modification[parameter] = value;\n\n return this.setQueryParameters(modification);\n },\n /**\n * Let the user set any of the parameters with a plain object.\n * @method\n * @param {object} params all the keys and the values to be updated\n * @return {SearchParameters} a new updated instance\n */\n setQueryParameters: function setQueryParameters(params) {\n if (!params) return this;\n\n var error = SearchParameters.validate(this, params);\n\n if (error) {\n throw error;\n }\n\n // eslint-disable-next-line consistent-this\n var self = this;\n var nextWithNumbers = SearchParameters._parseNumbers(params);\n var previousPlainObject = Object.keys(this).reduce(function (acc, key) {\n acc[key] = self[key];\n return acc;\n }, {});\n\n var nextPlainObject = Object.keys(nextWithNumbers).reduce(function (\n previous,\n key\n ) {\n var isPreviousValueDefined = previous[key] !== undefined;\n var isNextValueDefined = nextWithNumbers[key] !== undefined;\n\n if (isPreviousValueDefined && !isNextValueDefined) {\n return omit(previous, [key]);\n }\n\n if (isNextValueDefined) {\n previous[key] = nextWithNumbers[key];\n }\n\n return previous;\n },\n previousPlainObject);\n\n return new this.constructor(nextPlainObject);\n },\n\n /**\n * Returns a new instance with the page reset. Two scenarios possible:\n * the page is omitted -> return the given instance\n * the page is set -> return a new instance with a page of 0\n * @return {SearchParameters} a new updated instance\n */\n resetPage: function () {\n if (this.page === undefined) {\n return this;\n }\n\n return this.setPage(0);\n },\n\n /**\n * Helper function to get the hierarchicalFacet separator or the default one (`>`)\n * @param {object} hierarchicalFacet the hierarchicalFacet object\n * @return {string} returns the hierarchicalFacet.separator or `>` as default\n */\n _getHierarchicalFacetSortBy: function (hierarchicalFacet) {\n return hierarchicalFacet.sortBy || ['isRefined:desc', 'name:asc'];\n },\n\n /**\n * Helper function to get the hierarchicalFacet separator or the default one (`>`)\n * @private\n * @param {object} hierarchicalFacet the hierarchicalFacet object\n * @return {string} returns the hierarchicalFacet.separator or `>` as default\n */\n _getHierarchicalFacetSeparator: function (hierarchicalFacet) {\n return hierarchicalFacet.separator || ' > ';\n },\n\n /**\n * Helper function to get the hierarchicalFacet prefix path or null\n * @private\n * @param {object} hierarchicalFacet the hierarchicalFacet object\n * @return {string} returns the hierarchicalFacet.rootPath or null as default\n */\n _getHierarchicalRootPath: function (hierarchicalFacet) {\n return hierarchicalFacet.rootPath || null;\n },\n\n /**\n * Helper function to check if we show the parent level of the hierarchicalFacet\n * @private\n * @param {object} hierarchicalFacet the hierarchicalFacet object\n * @return {string} returns the hierarchicalFacet.showParentLevel or true as default\n */\n _getHierarchicalShowParentLevel: function (hierarchicalFacet) {\n if (typeof hierarchicalFacet.showParentLevel === 'boolean') {\n return hierarchicalFacet.showParentLevel;\n }\n return true;\n },\n\n /**\n * Helper function to get the hierarchicalFacet by it's name\n * @param {string} hierarchicalFacetName the hierarchicalFacet name\n * @return {object} a hierarchicalFacet\n */\n getHierarchicalFacetByName: function (hierarchicalFacetName) {\n return find(this.hierarchicalFacets, function (f) {\n return f.name === hierarchicalFacetName;\n });\n },\n\n /**\n * Get the current breadcrumb for a hierarchical facet, as an array\n * @param {string} facetName Hierarchical facet name\n * @return {array.} the path as an array of string\n */\n getHierarchicalFacetBreadcrumb: function (facetName) {\n if (!this.isHierarchicalFacet(facetName)) {\n return [];\n }\n\n var refinement = this.getHierarchicalRefinement(facetName)[0];\n if (!refinement) return [];\n\n var separator = this._getHierarchicalFacetSeparator(\n this.getHierarchicalFacetByName(facetName)\n );\n var path = refinement.split(separator);\n return path.map(function (part) {\n return part.trim();\n });\n },\n\n toString: function () {\n return JSON.stringify(this, null, 2);\n },\n};\n\n/**\n * Callback used for clearRefinement method\n * @callback SearchParameters.clearCallback\n * @param {OperatorList|FacetList} value the value of the filter\n * @param {string} key the current attribute name\n * @param {string} type `numeric`, `disjunctiveFacet`, `conjunctiveFacet`, `hierarchicalFacet` or `exclude`\n * depending on the type of facet\n * @return {boolean} `true` if the element should be removed. `false` otherwise.\n */\nmodule.exports = SearchParameters;\n\n\n/***/ }),\n\n/***/ 10210:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = generateTrees;\n\nvar fv = __webpack_require__(94039);\nvar find = __webpack_require__(7888);\nvar prepareHierarchicalFacetSortBy = __webpack_require__(82293);\nvar orderBy = __webpack_require__(42148);\nvar escapeFacetValue = fv.escapeFacetValue;\nvar unescapeFacetValue = fv.unescapeFacetValue;\n\nfunction generateTrees(state) {\n return function generate(hierarchicalFacetResult, hierarchicalFacetIndex) {\n var hierarchicalFacet = state.hierarchicalFacets[hierarchicalFacetIndex];\n var hierarchicalFacetRefinement =\n (state.hierarchicalFacetsRefinements[hierarchicalFacet.name] &&\n state.hierarchicalFacetsRefinements[hierarchicalFacet.name][0]) ||\n '';\n var hierarchicalSeparator =\n state._getHierarchicalFacetSeparator(hierarchicalFacet);\n var hierarchicalRootPath =\n state._getHierarchicalRootPath(hierarchicalFacet);\n var hierarchicalShowParentLevel =\n state._getHierarchicalShowParentLevel(hierarchicalFacet);\n var sortBy = prepareHierarchicalFacetSortBy(\n state._getHierarchicalFacetSortBy(hierarchicalFacet)\n );\n\n var rootExhaustive = hierarchicalFacetResult.every(function (facetResult) {\n return facetResult.exhaustive;\n });\n\n var generateTreeFn = generateHierarchicalTree(\n sortBy,\n hierarchicalSeparator,\n hierarchicalRootPath,\n hierarchicalShowParentLevel,\n hierarchicalFacetRefinement\n );\n\n var results = hierarchicalFacetResult;\n\n if (hierarchicalRootPath) {\n results = hierarchicalFacetResult.slice(\n hierarchicalRootPath.split(hierarchicalSeparator).length\n );\n }\n\n return results.reduce(generateTreeFn, {\n name: state.hierarchicalFacets[hierarchicalFacetIndex].name,\n count: null, // root level, no count\n isRefined: true, // root level, always refined\n path: null, // root level, no path\n escapedValue: null,\n exhaustive: rootExhaustive,\n data: null,\n });\n };\n}\n\nfunction generateHierarchicalTree(\n sortBy,\n hierarchicalSeparator,\n hierarchicalRootPath,\n hierarchicalShowParentLevel,\n currentRefinement\n) {\n return function generateTree(\n hierarchicalTree,\n hierarchicalFacetResult,\n currentHierarchicalLevel\n ) {\n var parent = hierarchicalTree;\n\n if (currentHierarchicalLevel > 0) {\n var level = 0;\n\n parent = hierarchicalTree;\n\n while (level < currentHierarchicalLevel) {\n /**\n * @type {object[]]} hierarchical data\n */\n var data = parent && Array.isArray(parent.data) ? parent.data : [];\n parent = find(data, function (subtree) {\n return subtree.isRefined;\n });\n level++;\n }\n }\n\n // we found a refined parent, let's add current level data under it\n if (parent) {\n // filter values in case an object has multiple categories:\n // {\n // categories: {\n // level0: ['beers', 'bières'],\n // level1: ['beers > IPA', 'bières > Belges']\n // }\n // }\n //\n // If parent refinement is `beers`, then we do not want to have `bières > Belges`\n // showing up\n\n var picked = Object.keys(hierarchicalFacetResult.data)\n .map(function (facetValue) {\n return [facetValue, hierarchicalFacetResult.data[facetValue]];\n })\n .filter(function (tuple) {\n var facetValue = tuple[0];\n return onlyMatchingTree(\n facetValue,\n parent.path || hierarchicalRootPath,\n currentRefinement,\n hierarchicalSeparator,\n hierarchicalRootPath,\n hierarchicalShowParentLevel\n );\n });\n\n parent.data = orderBy(\n picked.map(function (tuple) {\n var facetValue = tuple[0];\n var facetCount = tuple[1];\n\n return format(\n facetCount,\n facetValue,\n hierarchicalSeparator,\n unescapeFacetValue(currentRefinement),\n hierarchicalFacetResult.exhaustive\n );\n }),\n sortBy[0],\n sortBy[1]\n );\n }\n\n return hierarchicalTree;\n };\n}\n\n// eslint-disable-next-line max-params\nfunction onlyMatchingTree(\n facetValue,\n parentPath,\n currentRefinement,\n hierarchicalSeparator,\n hierarchicalRootPath,\n hierarchicalShowParentLevel\n) {\n // we want the facetValue is a child of hierarchicalRootPath\n if (\n hierarchicalRootPath &&\n (facetValue.indexOf(hierarchicalRootPath) !== 0 ||\n hierarchicalRootPath === facetValue)\n ) {\n return false;\n }\n\n // we always want root levels (only when there is no prefix path)\n return (\n (!hierarchicalRootPath &&\n facetValue.indexOf(hierarchicalSeparator) === -1) ||\n // if there is a rootPath, being root level mean 1 level under rootPath\n (hierarchicalRootPath &&\n facetValue.split(hierarchicalSeparator).length -\n hierarchicalRootPath.split(hierarchicalSeparator).length ===\n 1) ||\n // if current refinement is a root level and current facetValue is a root level,\n // keep the facetValue\n (facetValue.indexOf(hierarchicalSeparator) === -1 &&\n currentRefinement.indexOf(hierarchicalSeparator) === -1) ||\n // currentRefinement is a child of the facet value\n currentRefinement.indexOf(facetValue) === 0 ||\n // facetValue is a child of the current parent, add it\n (facetValue.indexOf(parentPath + hierarchicalSeparator) === 0 &&\n (hierarchicalShowParentLevel ||\n facetValue.indexOf(currentRefinement) === 0))\n );\n}\n\nfunction format(\n facetCount,\n facetValue,\n hierarchicalSeparator,\n currentRefinement,\n exhaustive\n) {\n var parts = facetValue.split(hierarchicalSeparator);\n return {\n name: parts[parts.length - 1].trim(),\n path: facetValue,\n escapedValue: escapeFacetValue(facetValue),\n count: facetCount,\n isRefined:\n currentRefinement === facetValue ||\n currentRefinement.indexOf(facetValue + hierarchicalSeparator) === 0,\n exhaustive: exhaustive,\n data: null,\n };\n}\n\n\n/***/ }),\n\n/***/ 23076:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar compact = __webpack_require__(74587);\nvar defaultsPure = __webpack_require__(52344);\nvar fv = __webpack_require__(94039);\nvar find = __webpack_require__(7888);\nvar findIndex = __webpack_require__(69725);\nvar formatSort = __webpack_require__(82293);\nvar mergeNumericMax = __webpack_require__(23034);\nvar orderBy = __webpack_require__(42148);\nvar escapeFacetValue = fv.escapeFacetValue;\nvar unescapeFacetValue = fv.unescapeFacetValue;\n\nvar generateHierarchicalTree = __webpack_require__(10210);\n\n/**\n * @typedef SearchResults.Facet\n * @type {object}\n * @property {string} name name of the attribute in the record\n * @property {object} data the faceting data: value, number of entries\n * @property {object} stats undefined unless facet_stats is retrieved from algolia\n */\n\n/**\n * @typedef SearchResults.HierarchicalFacet\n * @type {object}\n * @property {string} name name of the current value given the hierarchical level, trimmed.\n * If root node, you get the facet name\n * @property {number} count number of objects matching this hierarchical value\n * @property {string} path the current hierarchical value full path\n * @property {boolean} isRefined `true` if the current value was refined, `false` otherwise\n * @property {HierarchicalFacet[]} data sub values for the current level\n */\n\n/**\n * @typedef SearchResults.FacetValue\n * @type {object}\n * @property {string} name the facet value itself\n * @property {number} count times this facet appears in the results\n * @property {boolean} isRefined is the facet currently selected\n * @property {boolean} isExcluded is the facet currently excluded (only for conjunctive facets)\n */\n\n/**\n * @typedef Refinement\n * @type {object}\n * @property {string} type the type of filter used:\n * `numeric`, `facet`, `exclude`, `disjunctive`, `hierarchical`\n * @property {string} attributeName name of the attribute used for filtering\n * @property {string} name the value of the filter\n * @property {number} numericValue the value as a number. Only for numeric filters.\n * @property {string} operator the operator used. Only for numeric filters.\n * @property {number} count the number of computed hits for this filter. Only on facets.\n * @property {boolean} exhaustive if the count is exhaustive\n */\n\n/**\n * Turn an array of attributes in an object of attributes with their position in the array as value\n * @param {string[]} attributes the list of attributes in the record\n * @return {object} the list of attributes indexed by attribute name\n */\nfunction getIndices(attributes) {\n var indices = {};\n\n attributes.forEach(function (val, idx) {\n indices[val] = idx;\n });\n\n return indices;\n}\n\nfunction assignFacetStats(dest, facetStats, key) {\n if (facetStats && facetStats[key]) {\n dest.stats = facetStats[key];\n }\n}\n\n/**\n * @typedef {Object} HierarchicalFacet\n * @property {string} name\n * @property {string[]} attributes\n */\n\n/**\n * @param {HierarchicalFacet[]} hierarchicalFacets All hierarchical facets\n * @param {string} hierarchicalAttributeName The name of the hierarchical attribute\n * @return {HierarchicalFacet} The hierarchical facet matching the attribute name\n */\nfunction findMatchingHierarchicalFacetFromAttributeName(\n hierarchicalFacets,\n hierarchicalAttributeName\n) {\n return find(\n hierarchicalFacets,\n function facetKeyMatchesAttribute(hierarchicalFacet) {\n var facetNames = hierarchicalFacet.attributes || [];\n return facetNames.indexOf(hierarchicalAttributeName) > -1;\n }\n );\n}\n\n/**\n * Constructor for SearchResults\n * @class\n * @classdesc SearchResults contains the results of a query to Algolia using the\n * {@link AlgoliaSearchHelper}.\n * @param {SearchParameters} state state that led to the response\n * @param {array.} results the results from algolia client\n * @param {object} options options to control results content\n * @example SearchResults of the first query in\n * the instant search demo\n{\n \"hitsPerPage\": 10,\n \"processingTimeMS\": 2,\n \"facets\": [\n {\n \"name\": \"type\",\n \"data\": {\n \"HardGood\": 6627,\n \"BlackTie\": 550,\n \"Music\": 665,\n \"Software\": 131,\n \"Game\": 456,\n \"Movie\": 1571\n },\n \"exhaustive\": false\n },\n {\n \"exhaustive\": false,\n \"data\": {\n \"Free shipping\": 5507\n },\n \"name\": \"shipping\"\n }\n ],\n \"hits\": [\n {\n \"thumbnailImage\": \"http://img.bbystatic.com/BestBuy_US/images/products/1688/1688832_54x108_s.gif\",\n \"_highlightResult\": {\n \"shortDescription\": {\n \"matchLevel\": \"none\",\n \"value\": \"Safeguard your PC, Mac, Android and iOS devices with comprehensive Internet protection\",\n \"matchedWords\": []\n },\n \"category\": {\n \"matchLevel\": \"none\",\n \"value\": \"Computer Security Software\",\n \"matchedWords\": []\n },\n \"manufacturer\": {\n \"matchedWords\": [],\n \"value\": \"Webroot\",\n \"matchLevel\": \"none\"\n },\n \"name\": {\n \"value\": \"Webroot SecureAnywhere Internet Security (3-Device) (1-Year Subscription) - Mac/Windows\",\n \"matchedWords\": [],\n \"matchLevel\": \"none\"\n }\n },\n \"image\": \"http://img.bbystatic.com/BestBuy_US/images/products/1688/1688832_105x210_sc.jpg\",\n \"shipping\": \"Free shipping\",\n \"bestSellingRank\": 4,\n \"shortDescription\": \"Safeguard your PC, Mac, Android and iOS devices with comprehensive Internet protection\",\n \"url\": \"http://www.bestbuy.com/site/webroot-secureanywhere-internet-security-3-devi…d=1219060687969&skuId=1688832&cmp=RMX&ky=2d3GfEmNIzjA0vkzveHdZEBgpPCyMnLTJ\",\n \"name\": \"Webroot SecureAnywhere Internet Security (3-Device) (1-Year Subscription) - Mac/Windows\",\n \"category\": \"Computer Security Software\",\n \"salePrice_range\": \"1 - 50\",\n \"objectID\": \"1688832\",\n \"type\": \"Software\",\n \"customerReviewCount\": 5980,\n \"salePrice\": 49.99,\n \"manufacturer\": \"Webroot\"\n },\n ....\n ],\n \"nbHits\": 10000,\n \"disjunctiveFacets\": [\n {\n \"exhaustive\": false,\n \"data\": {\n \"5\": 183,\n \"12\": 112,\n \"7\": 149,\n ...\n },\n \"name\": \"customerReviewCount\",\n \"stats\": {\n \"max\": 7461,\n \"avg\": 157.939,\n \"min\": 1\n }\n },\n {\n \"data\": {\n \"Printer Ink\": 142,\n \"Wireless Speakers\": 60,\n \"Point & Shoot Cameras\": 48,\n ...\n },\n \"name\": \"category\",\n \"exhaustive\": false\n },\n {\n \"exhaustive\": false,\n \"data\": {\n \"> 5000\": 2,\n \"1 - 50\": 6524,\n \"501 - 2000\": 566,\n \"201 - 500\": 1501,\n \"101 - 200\": 1360,\n \"2001 - 5000\": 47\n },\n \"name\": \"salePrice_range\"\n },\n {\n \"data\": {\n \"Dynexâ„¢\": 202,\n \"Insigniaâ„¢\": 230,\n \"PNY\": 72,\n ...\n },\n \"name\": \"manufacturer\",\n \"exhaustive\": false\n }\n ],\n \"query\": \"\",\n \"nbPages\": 100,\n \"page\": 0,\n \"index\": \"bestbuy\"\n}\n **/\nfunction SearchResults(state, results, options) {\n var mainSubResponse = results[0] || {};\n\n this._rawResults = results;\n\n // eslint-disable-next-line consistent-this\n var self = this;\n\n // https://www.algolia.com/doc/api-reference/api-methods/search/#response\n Object.keys(mainSubResponse).forEach(function (key) {\n self[key] = mainSubResponse[key];\n });\n\n // Make every key of the result options reachable from the instance\n var opts = defaultsPure(options, {\n persistHierarchicalRootCount: false,\n });\n Object.keys(opts).forEach(function (key) {\n self[key] = opts[key];\n });\n\n /**\n * query used to generate the results\n * @name query\n * @member {string}\n * @memberof SearchResults\n * @instance\n */\n /**\n * The query as parsed by the engine given all the rules.\n * @name parsedQuery\n * @member {string}\n * @memberof SearchResults\n * @instance\n */\n /**\n * all the records that match the search parameters. Each record is\n * augmented with a new attribute `_highlightResult`\n * which is an object keyed by attribute and with the following properties:\n * - `value` : the value of the facet highlighted (html)\n * - `matchLevel`: `full`, `partial` or `none`, depending on how the query terms match\n * @name hits\n * @member {object[]}\n * @memberof SearchResults\n * @instance\n */\n /**\n * index where the results come from\n * @name index\n * @member {string}\n * @memberof SearchResults\n * @instance\n */\n /**\n * number of hits per page requested\n * @name hitsPerPage\n * @member {number}\n * @memberof SearchResults\n * @instance\n */\n /**\n * total number of hits of this query on the index\n * @name nbHits\n * @member {number}\n * @memberof SearchResults\n * @instance\n */\n /**\n * total number of pages with respect to the number of hits per page and the total number of hits\n * @name nbPages\n * @member {number}\n * @memberof SearchResults\n * @instance\n */\n /**\n * current page\n * @name page\n * @member {number}\n * @memberof SearchResults\n * @instance\n */\n /**\n * The position if the position was guessed by IP.\n * @name aroundLatLng\n * @member {string}\n * @memberof SearchResults\n * @instance\n * @example \"48.8637,2.3615\",\n */\n /**\n * The radius computed by Algolia.\n * @name automaticRadius\n * @member {string}\n * @memberof SearchResults\n * @instance\n * @example \"126792922\",\n */\n /**\n * String identifying the server used to serve this request.\n *\n * getRankingInfo needs to be set to `true` for this to be returned\n *\n * @name serverUsed\n * @member {string}\n * @memberof SearchResults\n * @instance\n * @example \"c7-use-2.algolia.net\",\n */\n /**\n * Boolean that indicates if the computation of the counts did time out.\n * @deprecated\n * @name timeoutCounts\n * @member {boolean}\n * @memberof SearchResults\n * @instance\n */\n /**\n * Boolean that indicates if the computation of the hits did time out.\n * @deprecated\n * @name timeoutHits\n * @member {boolean}\n * @memberof SearchResults\n * @instance\n */\n /**\n * True if the counts of the facets is exhaustive\n * @name exhaustiveFacetsCount\n * @member {boolean}\n * @memberof SearchResults\n * @instance\n */\n /**\n * True if the number of hits is exhaustive\n * @name exhaustiveNbHits\n * @member {boolean}\n * @memberof SearchResults\n * @instance\n */\n /**\n * Contains the userData if they are set by a [query rule](https://www.algolia.com/doc/guides/query-rules/query-rules-overview/).\n * @name userData\n * @member {object[]}\n * @memberof SearchResults\n * @instance\n */\n /**\n * queryID is the unique identifier of the query used to generate the current search results.\n * This value is only available if the `clickAnalytics` search parameter is set to `true`.\n * @name queryID\n * @member {string}\n * @memberof SearchResults\n * @instance\n */\n\n /**\n * sum of the processing time of all the queries\n * @name processingTimeMS\n * @member {number}\n * @memberof SearchResults\n * @instance\n */\n this.processingTimeMS = results.reduce(function (sum, result) {\n return result.processingTimeMS === undefined\n ? sum\n : sum + result.processingTimeMS;\n }, 0);\n\n /**\n * disjunctive facets results\n * @member {SearchResults.Facet[]}\n */\n this.disjunctiveFacets = [];\n /**\n * disjunctive facets results\n * @member {SearchResults.HierarchicalFacet[]}\n */\n this.hierarchicalFacets = state.hierarchicalFacets.map(\n function initFutureTree() {\n return [];\n }\n );\n /**\n * other facets results\n * @member {SearchResults.Facet[]}\n */\n this.facets = [];\n\n var disjunctiveFacets = state.getRefinedDisjunctiveFacets();\n\n var facetsIndices = getIndices(state.facets);\n var disjunctiveFacetsIndices = getIndices(state.disjunctiveFacets);\n var nextDisjunctiveResult = 1;\n\n // Since we send request only for disjunctive facets that have been refined,\n // we get the facets information from the first, general, response.\n\n var mainFacets = mainSubResponse.facets || {};\n\n Object.keys(mainFacets).forEach(function (facetKey) {\n var facetValueObject = mainFacets[facetKey];\n\n var hierarchicalFacet = findMatchingHierarchicalFacetFromAttributeName(\n state.hierarchicalFacets,\n facetKey\n );\n\n if (hierarchicalFacet) {\n // Place the hierarchicalFacet data at the correct index depending on\n // the attributes order that was defined at the helper initialization\n var facetIndex = hierarchicalFacet.attributes.indexOf(facetKey);\n var idxAttributeName = findIndex(state.hierarchicalFacets, function (f) {\n return f.name === hierarchicalFacet.name;\n });\n self.hierarchicalFacets[idxAttributeName][facetIndex] = {\n attribute: facetKey,\n data: facetValueObject,\n exhaustive: mainSubResponse.exhaustiveFacetsCount,\n };\n } else {\n var isFacetDisjunctive = state.disjunctiveFacets.indexOf(facetKey) !== -1;\n var isFacetConjunctive = state.facets.indexOf(facetKey) !== -1;\n var position;\n\n if (isFacetDisjunctive) {\n position = disjunctiveFacetsIndices[facetKey];\n self.disjunctiveFacets[position] = {\n name: facetKey,\n data: facetValueObject,\n exhaustive: mainSubResponse.exhaustiveFacetsCount,\n };\n assignFacetStats(\n self.disjunctiveFacets[position],\n mainSubResponse.facets_stats,\n facetKey\n );\n }\n if (isFacetConjunctive) {\n position = facetsIndices[facetKey];\n self.facets[position] = {\n name: facetKey,\n data: facetValueObject,\n exhaustive: mainSubResponse.exhaustiveFacetsCount,\n };\n assignFacetStats(\n self.facets[position],\n mainSubResponse.facets_stats,\n facetKey\n );\n }\n }\n });\n\n // Make sure we do not keep holes within the hierarchical facets\n this.hierarchicalFacets = compact(this.hierarchicalFacets);\n\n // aggregate the refined disjunctive facets\n disjunctiveFacets.forEach(function (disjunctiveFacet) {\n var result = results[nextDisjunctiveResult];\n var facets = result && result.facets ? result.facets : {};\n var hierarchicalFacet = state.getHierarchicalFacetByName(disjunctiveFacet);\n\n // There should be only item in facets.\n Object.keys(facets).forEach(function (dfacet) {\n var facetResults = facets[dfacet];\n\n var position;\n\n if (hierarchicalFacet) {\n position = findIndex(state.hierarchicalFacets, function (f) {\n return f.name === hierarchicalFacet.name;\n });\n var attributeIndex = findIndex(\n self.hierarchicalFacets[position],\n function (f) {\n return f.attribute === dfacet;\n }\n );\n\n // previous refinements and no results so not able to find it\n if (attributeIndex === -1) {\n return;\n }\n\n self.hierarchicalFacets[position][attributeIndex].data =\n self.persistHierarchicalRootCount\n ? mergeNumericMax(\n self.hierarchicalFacets[position][attributeIndex].data,\n facetResults\n )\n : defaultsPure(\n facetResults,\n self.hierarchicalFacets[position][attributeIndex].data\n );\n } else {\n position = disjunctiveFacetsIndices[dfacet];\n\n var dataFromMainRequest =\n (mainSubResponse.facets && mainSubResponse.facets[dfacet]) || {};\n\n self.disjunctiveFacets[position] = {\n name: dfacet,\n data: mergeNumericMax(dataFromMainRequest, facetResults),\n exhaustive: result.exhaustiveFacetsCount,\n };\n assignFacetStats(\n self.disjunctiveFacets[position],\n result.facets_stats,\n dfacet\n );\n\n if (state.disjunctiveFacetsRefinements[dfacet]) {\n state.disjunctiveFacetsRefinements[dfacet].forEach(function (\n refinementValue\n ) {\n // add the disjunctive refinements if it is no more retrieved\n if (\n !self.disjunctiveFacets[position].data[refinementValue] &&\n state.disjunctiveFacetsRefinements[dfacet].indexOf(\n unescapeFacetValue(refinementValue)\n ) > -1\n ) {\n self.disjunctiveFacets[position].data[refinementValue] = 0;\n }\n });\n }\n }\n });\n nextDisjunctiveResult++;\n });\n\n // if we have some parent level values for hierarchical facets, merge them\n state.getRefinedHierarchicalFacets().forEach(function (refinedFacet) {\n var hierarchicalFacet = state.getHierarchicalFacetByName(refinedFacet);\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n\n var currentRefinement = state.getHierarchicalRefinement(refinedFacet);\n // if we are already at a root refinement (or no refinement at all), there is no\n // root level values request\n if (\n currentRefinement.length === 0 ||\n currentRefinement[0].split(separator).length < 2\n ) {\n return;\n }\n\n results.slice(nextDisjunctiveResult).forEach(function (result) {\n var facets = result && result.facets ? result.facets : {};\n\n Object.keys(facets).forEach(function (dfacet) {\n var facetResults = facets[dfacet];\n var position = findIndex(state.hierarchicalFacets, function (f) {\n return f.name === hierarchicalFacet.name;\n });\n var attributeIndex = findIndex(\n self.hierarchicalFacets[position],\n function (f) {\n return f.attribute === dfacet;\n }\n );\n\n // previous refinements and no results so not able to find it\n if (attributeIndex === -1) {\n return;\n }\n\n // when we always get root levels, if the hits refinement is `beers > IPA` (count: 5),\n // then the disjunctive values will be `beers` (count: 100),\n // but we do not want to display\n // | beers (100)\n // > IPA (5)\n // We want\n // | beers (5)\n // > IPA (5)\n // @MAJOR: remove this legacy behaviour in next major version\n var defaultData = {};\n\n if (\n currentRefinement.length > 0 &&\n !self.persistHierarchicalRootCount\n ) {\n var root = currentRefinement[0].split(separator)[0];\n defaultData[root] =\n self.hierarchicalFacets[position][attributeIndex].data[root];\n }\n\n self.hierarchicalFacets[position][attributeIndex].data = defaultsPure(\n defaultData,\n facetResults,\n self.hierarchicalFacets[position][attributeIndex].data\n );\n });\n\n nextDisjunctiveResult++;\n });\n });\n\n // add the excludes\n Object.keys(state.facetsExcludes).forEach(function (facetName) {\n var excludes = state.facetsExcludes[facetName];\n var position = facetsIndices[facetName];\n\n self.facets[position] = {\n name: facetName,\n data: mainFacets[facetName],\n exhaustive: mainSubResponse.exhaustiveFacetsCount,\n };\n excludes.forEach(function (facetValue) {\n self.facets[position] = self.facets[position] || { name: facetName };\n self.facets[position].data = self.facets[position].data || {};\n self.facets[position].data[facetValue] = 0;\n });\n });\n\n /**\n * @type {Array}\n */\n this.hierarchicalFacets = this.hierarchicalFacets.map(\n generateHierarchicalTree(state)\n );\n\n /**\n * @type {Array}\n */\n this.facets = compact(this.facets);\n /**\n * @type {Array}\n */\n this.disjunctiveFacets = compact(this.disjunctiveFacets);\n\n this._state = state;\n}\n\n/**\n * Get a facet object with its name\n * @deprecated\n * @param {string} name name of the faceted attribute\n * @return {SearchResults.Facet} the facet object\n */\nSearchResults.prototype.getFacetByName = function (name) {\n function predicate(facet) {\n return facet.name === name;\n }\n\n return (\n find(this.facets, predicate) ||\n find(this.disjunctiveFacets, predicate) ||\n find(this.hierarchicalFacets, predicate)\n );\n};\n\n/**\n * Get the facet values of a specified attribute from a SearchResults object.\n * @private\n * @param {SearchResults} results the search results to search in\n * @param {string} attribute name of the faceted attribute to search for\n * @return {array|object} facet values. For the hierarchical facets it is an object.\n */\nfunction extractNormalizedFacetValues(results, attribute) {\n function predicate(facet) {\n return facet.name === attribute;\n }\n\n if (results._state.isConjunctiveFacet(attribute)) {\n var facet = find(results.facets, predicate);\n if (!facet) return [];\n\n return Object.keys(facet.data).map(function (name) {\n var value = escapeFacetValue(name);\n return {\n name: name,\n escapedValue: value,\n count: facet.data[name],\n isRefined: results._state.isFacetRefined(attribute, value),\n isExcluded: results._state.isExcludeRefined(attribute, name),\n };\n });\n } else if (results._state.isDisjunctiveFacet(attribute)) {\n var disjunctiveFacet = find(results.disjunctiveFacets, predicate);\n if (!disjunctiveFacet) return [];\n\n return Object.keys(disjunctiveFacet.data).map(function (name) {\n var value = escapeFacetValue(name);\n return {\n name: name,\n escapedValue: value,\n count: disjunctiveFacet.data[name],\n isRefined: results._state.isDisjunctiveFacetRefined(attribute, value),\n };\n });\n } else if (results._state.isHierarchicalFacet(attribute)) {\n var hierarchicalFacetValues = find(results.hierarchicalFacets, predicate);\n if (!hierarchicalFacetValues) return hierarchicalFacetValues;\n\n var hierarchicalFacet =\n results._state.getHierarchicalFacetByName(attribute);\n var separator =\n results._state._getHierarchicalFacetSeparator(hierarchicalFacet);\n var currentRefinement = unescapeFacetValue(\n results._state.getHierarchicalRefinement(attribute)[0] || ''\n );\n\n if (currentRefinement.indexOf(hierarchicalFacet.rootPath) === 0) {\n currentRefinement = currentRefinement.replace(\n hierarchicalFacet.rootPath + separator,\n ''\n );\n }\n\n var currentRefinementSplit = currentRefinement.split(separator);\n currentRefinementSplit.unshift(attribute);\n\n setIsRefined(hierarchicalFacetValues, currentRefinementSplit, 0);\n\n return hierarchicalFacetValues;\n }\n\n return undefined;\n}\n\n/**\n * Set the isRefined of a hierarchical facet result based on the current state.\n * @param {SearchResults.HierarchicalFacet} item Hierarchical facet to fix\n * @param {string[]} currentRefinement array of parts of the current hierarchical refinement\n * @param {number} depth recursion depth in the currentRefinement\n * @return {undefined} function mutates the item\n */\nfunction setIsRefined(item, currentRefinement, depth) {\n item.isRefined =\n item.name === (currentRefinement[depth] && currentRefinement[depth].trim());\n if (item.data) {\n item.data.forEach(function (child) {\n setIsRefined(child, currentRefinement, depth + 1);\n });\n }\n}\n\n/**\n * Sort nodes of a hierarchical or disjunctive facet results\n * @private\n * @param {function} sortFn sort function to apply\n * @param {HierarchicalFacet|Array} node node upon which we want to apply the sort\n * @param {string[]} names attribute names\n * @param {number} [level=0] current index in the names array\n * @return {HierarchicalFacet|Array} sorted node\n */\nfunction recSort(sortFn, node, names, level) {\n level = level || 0;\n\n if (Array.isArray(node)) {\n return sortFn(node, names[level]);\n }\n\n if (!node.data || node.data.length === 0) {\n return node;\n }\n\n var children = node.data.map(function (childNode) {\n return recSort(sortFn, childNode, names, level + 1);\n });\n var sortedChildren = sortFn(children, names[level]);\n var newNode = defaultsPure({ data: sortedChildren }, node);\n return newNode;\n}\n\nSearchResults.DEFAULT_SORT = ['isRefined:desc', 'count:desc', 'name:asc'];\n\nfunction vanillaSortFn(order, data) {\n return data.sort(order);\n}\n\n/**\n * @typedef FacetOrdering\n * @type {Object}\n * @property {string[]} [order]\n * @property {'count' | 'alpha' | 'hidden'} [sortRemainingBy]\n */\n\n/**\n * Sorts facet arrays via their facet ordering\n * @param {Array} facetValues the values\n * @param {FacetOrdering} facetOrdering the ordering\n * @returns {Array} the sorted facet values\n */\nfunction sortViaFacetOrdering(facetValues, facetOrdering) {\n var orderedFacets = [];\n var remainingFacets = [];\n var hide = facetOrdering.hide || [];\n var order = facetOrdering.order || [];\n\n /**\n * an object with the keys being the values in order, the values their index:\n * ['one', 'two'] -> { one: 0, two: 1 }\n */\n var reverseOrder = order.reduce(function (acc, name, i) {\n acc[name] = i;\n return acc;\n }, {});\n\n facetValues.forEach(function (item) {\n // hierarchical facets get sorted using their raw name\n var name = item.path || item.name;\n var hidden = hide.indexOf(name) > -1;\n if (!hidden && reverseOrder[name] !== undefined) {\n orderedFacets[reverseOrder[name]] = item;\n } else if (!hidden) {\n remainingFacets.push(item);\n }\n });\n\n orderedFacets = orderedFacets.filter(function (facet) {\n return facet;\n });\n\n var sortRemainingBy = facetOrdering.sortRemainingBy;\n var ordering;\n if (sortRemainingBy === 'hidden') {\n return orderedFacets;\n } else if (sortRemainingBy === 'alpha') {\n ordering = [\n ['path', 'name'],\n ['asc', 'asc'],\n ];\n } else {\n ordering = [['count'], ['desc']];\n }\n\n return orderedFacets.concat(\n orderBy(remainingFacets, ordering[0], ordering[1])\n );\n}\n\n/**\n * @param {SearchResults} results the search results class\n * @param {string} attribute the attribute to retrieve ordering of\n * @returns {FacetOrdering | undefined} the facet ordering\n */\nfunction getFacetOrdering(results, attribute) {\n return (\n results.renderingContent &&\n results.renderingContent.facetOrdering &&\n results.renderingContent.facetOrdering.values &&\n results.renderingContent.facetOrdering.values[attribute]\n );\n}\n\n/**\n * Get a the list of values for a given facet attribute. Those values are sorted\n * refinement first, descending count (bigger value on top), and name ascending\n * (alphabetical order). The sort formula can overridden using either string based\n * predicates or a function.\n *\n * This method will return all the values returned by the Algolia engine plus all\n * the values already refined. This means that it can happen that the\n * `maxValuesPerFacet` [configuration](https://www.algolia.com/doc/rest-api/search#param-maxValuesPerFacet)\n * might not be respected if you have facet values that are already refined.\n * @param {string} attribute attribute name\n * @param {object} opts configuration options.\n * @param {boolean} [opts.facetOrdering]\n * Force the use of facetOrdering from the result if a sortBy is present. If\n * sortBy isn't present, facetOrdering will be used automatically.\n * @param {Array. | function} opts.sortBy\n * When using strings, it consists of\n * the name of the [FacetValue](#SearchResults.FacetValue) or the\n * [HierarchicalFacet](#SearchResults.HierarchicalFacet) attributes with the\n * order (`asc` or `desc`). For example to order the value by count, the\n * argument would be `['count:asc']`.\n *\n * If only the attribute name is specified, the ordering defaults to the one\n * specified in the default value for this attribute.\n *\n * When not specified, the order is\n * ascending. This parameter can also be a function which takes two facet\n * values and should return a number, 0 if equal, 1 if the first argument is\n * bigger or -1 otherwise.\n *\n * The default value for this attribute `['isRefined:desc', 'count:desc', 'name:asc']`\n * @return {FacetValue[]|HierarchicalFacet|undefined} depending on the type of facet of\n * the attribute requested (hierarchical, disjunctive or conjunctive)\n * @example\n * helper.on('result', function(event){\n * //get values ordered only by name ascending using the string predicate\n * event.results.getFacetValues('city', {sortBy: ['name:asc']});\n * //get values ordered only by count ascending using a function\n * event.results.getFacetValues('city', {\n * // this is equivalent to ['count:asc']\n * sortBy: function(a, b) {\n * if (a.count === b.count) return 0;\n * if (a.count > b.count) return 1;\n * if (b.count > a.count) return -1;\n * }\n * });\n * });\n */\nSearchResults.prototype.getFacetValues = function (attribute, opts) {\n var facetValues = extractNormalizedFacetValues(this, attribute);\n if (!facetValues) {\n return undefined;\n }\n\n var options = defaultsPure(opts, {\n sortBy: SearchResults.DEFAULT_SORT,\n // if no sortBy is given, attempt to sort based on facetOrdering\n // if it is given, we still allow to sort via facet ordering first\n facetOrdering: !(opts && opts.sortBy),\n });\n\n // eslint-disable-next-line consistent-this\n var results = this;\n var attributes;\n if (Array.isArray(facetValues)) {\n attributes = [attribute];\n } else {\n var config = results._state.getHierarchicalFacetByName(facetValues.name);\n attributes = config.attributes;\n }\n\n return recSort(\n function (data, facetName) {\n if (options.facetOrdering) {\n var facetOrdering = getFacetOrdering(results, facetName);\n if (facetOrdering) {\n return sortViaFacetOrdering(data, facetOrdering);\n }\n }\n\n if (Array.isArray(options.sortBy)) {\n var order = formatSort(options.sortBy, SearchResults.DEFAULT_SORT);\n return orderBy(data, order[0], order[1]);\n } else if (typeof options.sortBy === 'function') {\n return vanillaSortFn(options.sortBy, data);\n }\n throw new Error(\n 'options.sortBy is optional but if defined it must be ' +\n 'either an array of string (predicates) or a sorting function'\n );\n },\n facetValues,\n attributes\n );\n};\n\n/**\n * Returns the facet stats if attribute is defined and the facet contains some.\n * Otherwise returns undefined.\n * @param {string} attribute name of the faceted attribute\n * @return {object} The stats of the facet\n */\nSearchResults.prototype.getFacetStats = function (attribute) {\n if (this._state.isConjunctiveFacet(attribute)) {\n return getFacetStatsIfAvailable(this.facets, attribute);\n } else if (this._state.isDisjunctiveFacet(attribute)) {\n return getFacetStatsIfAvailable(this.disjunctiveFacets, attribute);\n }\n\n return undefined;\n};\n\n/**\n * @typedef {Object} FacetListItem\n * @property {string} name\n */\n\n/**\n * @param {FacetListItem[]} facetList (has more items, but enough for here)\n * @param {string} facetName The attribute to look for\n * @return {object|undefined} The stats of the facet\n */\nfunction getFacetStatsIfAvailable(facetList, facetName) {\n var data = find(facetList, function (facet) {\n return facet.name === facetName;\n });\n return data && data.stats;\n}\n\n/**\n * Returns all refinements for all filters + tags. It also provides\n * additional information: count and exhaustiveness for each filter.\n *\n * See the [refinement type](#Refinement) for an exhaustive view of the available\n * data.\n *\n * Note that for a numeric refinement, results are grouped per operator, this\n * means that it will return responses for operators which are empty.\n *\n * @return {Array.} all the refinements\n */\nSearchResults.prototype.getRefinements = function () {\n var state = this._state;\n // eslint-disable-next-line consistent-this\n var results = this;\n var res = [];\n\n Object.keys(state.facetsRefinements).forEach(function (attributeName) {\n state.facetsRefinements[attributeName].forEach(function (name) {\n res.push(\n getRefinement(state, 'facet', attributeName, name, results.facets)\n );\n });\n });\n\n Object.keys(state.facetsExcludes).forEach(function (attributeName) {\n state.facetsExcludes[attributeName].forEach(function (name) {\n res.push(\n getRefinement(state, 'exclude', attributeName, name, results.facets)\n );\n });\n });\n\n Object.keys(state.disjunctiveFacetsRefinements).forEach(function (\n attributeName\n ) {\n state.disjunctiveFacetsRefinements[attributeName].forEach(function (name) {\n res.push(\n getRefinement(\n state,\n 'disjunctive',\n attributeName,\n name,\n results.disjunctiveFacets\n )\n );\n });\n });\n\n Object.keys(state.hierarchicalFacetsRefinements).forEach(function (\n attributeName\n ) {\n state.hierarchicalFacetsRefinements[attributeName].forEach(function (name) {\n res.push(\n getHierarchicalRefinement(\n state,\n attributeName,\n name,\n results.hierarchicalFacets\n )\n );\n });\n });\n\n Object.keys(state.numericRefinements).forEach(function (attributeName) {\n var operators = state.numericRefinements[attributeName];\n Object.keys(operators).forEach(function (operator) {\n operators[operator].forEach(function (value) {\n res.push({\n type: 'numeric',\n attributeName: attributeName,\n name: value,\n numericValue: value,\n operator: operator,\n });\n });\n });\n });\n\n state.tagRefinements.forEach(function (name) {\n res.push({ type: 'tag', attributeName: '_tags', name: name });\n });\n\n return res;\n};\n\n/**\n * @typedef {Object} Facet\n * @property {string} name\n * @property {Object} data\n * @property {boolean} exhaustive\n */\n\n/**\n * @param {SearchParameters} state the current state\n * @param {string} type the type of the refinement\n * @param {string} attributeName The attribute of the facet\n * @param {*} name The name of the facet\n * @param {Facet[]} resultsFacets facets from the results\n * @return {Refinement} the refinement\n */\nfunction getRefinement(state, type, attributeName, name, resultsFacets) {\n var facet = find(resultsFacets, function (f) {\n return f.name === attributeName;\n });\n var count = facet && facet.data && facet.data[name] ? facet.data[name] : 0;\n var exhaustive = (facet && facet.exhaustive) || false;\n\n return {\n type: type,\n attributeName: attributeName,\n name: name,\n count: count,\n exhaustive: exhaustive,\n };\n}\n\n/**\n * @param {SearchParameters} state the current state\n * @param {string} attributeName the attribute of the hierarchical facet\n * @param {string} name the name of the facet\n * @param {Facet[]} resultsFacets facets from the results\n * @return {HierarchicalFacet} the hierarchical facet\n */\nfunction getHierarchicalRefinement(state, attributeName, name, resultsFacets) {\n var facetDeclaration = state.getHierarchicalFacetByName(attributeName);\n var separator = state._getHierarchicalFacetSeparator(facetDeclaration);\n var split = name.split(separator);\n var rootFacet = find(resultsFacets, function (facet) {\n return facet.name === attributeName;\n });\n\n var facet = split.reduce(function (intermediateFacet, part) {\n var newFacet =\n intermediateFacet &&\n find(intermediateFacet.data, function (f) {\n return f.name === part;\n });\n return newFacet !== undefined ? newFacet : intermediateFacet;\n }, rootFacet);\n\n var count = (facet && facet.count) || 0;\n var exhaustive = (facet && facet.exhaustive) || false;\n var path = (facet && facet.path) || '';\n\n return {\n type: 'hierarchical',\n attributeName: attributeName,\n name: path,\n count: count,\n exhaustive: exhaustive,\n };\n}\n\nmodule.exports = SearchResults;\n\n\n/***/ }),\n\n/***/ 49374:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar EventEmitter = __webpack_require__(17331);\n\nvar DerivedHelper = __webpack_require__(68078);\nvar escapeFacetValue = (__webpack_require__(94039).escapeFacetValue);\nvar inherits = __webpack_require__(14853);\nvar merge = __webpack_require__(60185);\nvar objectHasKeys = __webpack_require__(90116);\nvar omit = __webpack_require__(49803);\nvar RecommendParameters = __webpack_require__(67450);\nvar RecommendResults = __webpack_require__(43650);\nvar requestBuilder = __webpack_require__(96394);\nvar SearchParameters = __webpack_require__(17775);\nvar SearchResults = __webpack_require__(23076);\nvar sortAndMergeRecommendations = __webpack_require__(97878);\nvar version = __webpack_require__(24336);\n\n/**\n * Event triggered when a parameter is set or updated\n * @event AlgoliaSearchHelper#event:change\n * @property {object} event\n * @property {SearchParameters} event.state the current parameters with the latest changes applied\n * @property {SearchResults} event.results the previous results received from Algolia. `null` before the first request\n * @example\n * helper.on('change', function(event) {\n * console.log('The parameters have changed');\n * });\n */\n\n/**\n * Event triggered when a main search is sent to Algolia\n * @event AlgoliaSearchHelper#event:search\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search\n * @property {SearchResults} event.results the results from the previous search. `null` if it is the first search.\n * @example\n * helper.on('search', function(event) {\n * console.log('Search sent');\n * });\n */\n\n/**\n * Event triggered when a search using `searchForFacetValues` is sent to Algolia\n * @event AlgoliaSearchHelper#event:searchForFacetValues\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search it is the first search.\n * @property {string} event.facet the facet searched into\n * @property {string} event.query the query used to search in the facets\n * @example\n * helper.on('searchForFacetValues', function(event) {\n * console.log('searchForFacetValues sent');\n * });\n */\n\n/**\n * Event triggered when a search using `searchOnce` is sent to Algolia\n * @event AlgoliaSearchHelper#event:searchOnce\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search it is the first search.\n * @example\n * helper.on('searchOnce', function(event) {\n * console.log('searchOnce sent');\n * });\n */\n\n/**\n * Event triggered when the results are retrieved from Algolia\n * @event AlgoliaSearchHelper#event:result\n * @property {object} event\n * @property {SearchResults} event.results the results received from Algolia\n * @property {SearchParameters} event.state the parameters used to query Algolia. Those might be different from the one in the helper instance (for example if the network is unreliable).\n * @example\n * helper.on('result', function(event) {\n * console.log('Search results received');\n * });\n */\n\n/**\n * Event triggered when Algolia sends back an error. For example, if an unknown parameter is\n * used, the error can be caught using this event.\n * @event AlgoliaSearchHelper#event:error\n * @property {object} event\n * @property {Error} event.error the error returned by the Algolia.\n * @example\n * helper.on('error', function(event) {\n * console.log('Houston we got a problem.');\n * });\n */\n\n/**\n * Event triggered when the queue of queries have been depleted (with any result or outdated queries)\n * @event AlgoliaSearchHelper#event:searchQueueEmpty\n * @example\n * helper.on('searchQueueEmpty', function() {\n * console.log('No more search pending');\n * // This is received before the result event if we're not expecting new results\n * });\n *\n * helper.search();\n */\n\n/**\n * Initialize a new AlgoliaSearchHelper\n * @class\n * @classdesc The AlgoliaSearchHelper is a class that ease the management of the\n * search. It provides an event based interface for search callbacks:\n * - change: when the internal search state is changed.\n * This event contains a {@link SearchParameters} object and the\n * {@link SearchResults} of the last result if any.\n * - search: when a search is triggered using the `search()` method.\n * - result: when the response is retrieved from Algolia and is processed.\n * This event contains a {@link SearchResults} object and the\n * {@link SearchParameters} corresponding to this answer.\n * - error: when the response is an error. This event contains the error returned by the server.\n * @param {AlgoliaSearch} client an AlgoliaSearch client\n * @param {string} index the index name to query\n * @param {SearchParameters | object} options an object defining the initial\n * config of the search. It doesn't have to be a {SearchParameters},\n * just an object containing the properties you need from it.\n * @param {SearchResultsOptions|object} searchResultsOptions an object defining the options to use when creating the search results.\n */\nfunction AlgoliaSearchHelper(client, index, options, searchResultsOptions) {\n if (typeof client.addAlgoliaAgent === 'function') {\n client.addAlgoliaAgent('JS Helper (' + version + ')');\n }\n\n this.setClient(client);\n var opts = options || {};\n opts.index = index;\n this.state = SearchParameters.make(opts);\n this.recommendState = new RecommendParameters({\n params: opts.recommendState,\n });\n this.lastResults = null;\n this.lastRecommendResults = null;\n this._queryId = 0;\n this._recommendQueryId = 0;\n this._lastQueryIdReceived = -1;\n this._lastRecommendQueryIdReceived = -1;\n this.derivedHelpers = [];\n this._currentNbQueries = 0;\n this._currentNbRecommendQueries = 0;\n this._searchResultsOptions = searchResultsOptions;\n this._recommendCache = {};\n}\n\ninherits(AlgoliaSearchHelper, EventEmitter);\n\n/**\n * Start the search with the parameters set in the state. When the\n * method is called, it triggers a `search` event. The results will\n * be available through the `result` event. If an error occurs, an\n * `error` will be fired instead.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires search\n * @fires result\n * @fires error\n * @chainable\n */\nAlgoliaSearchHelper.prototype.search = function () {\n this._search({ onlyWithDerivedHelpers: false });\n return this;\n};\n\nAlgoliaSearchHelper.prototype.searchOnlyWithDerivedHelpers = function () {\n this._search({ onlyWithDerivedHelpers: true });\n return this;\n};\n\nAlgoliaSearchHelper.prototype.searchWithComposition = function () {\n this._runComposition({ onlyWithDerivedHelpers: true });\n return this;\n};\n/**\n * Sends the recommendation queries set in the state. When the method is\n * called, it triggers a `fetch` event. The results will be available through\n * the `result` event. If an error occurs, an `error` will be fired instead.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires fetch\n * @fires result\n * @fires error\n * @chainable\n */\nAlgoliaSearchHelper.prototype.recommend = function () {\n this._recommend();\n return this;\n};\n\n/**\n * Gets the search query parameters that would be sent to the Algolia Client\n * for the hits\n * @return {object} Query Parameters\n */\nAlgoliaSearchHelper.prototype.getQuery = function () {\n var state = this.state;\n return requestBuilder._getHitsSearchParams(state);\n};\n\n/**\n * Start a search using a modified version of the current state. This method does\n * not trigger the helper lifecycle and does not modify the state kept internally\n * by the helper. This second aspect means that the next search call will be the\n * same as a search call before calling searchOnce.\n * @param {object} options can contain all the parameters that can be set to SearchParameters\n * plus the index\n * @param {function} [cb] optional callback executed when the response from the\n * server is back.\n * @return {promise|undefined} if a callback is passed the method returns undefined\n * otherwise it returns a promise containing an object with two keys :\n * - content with a SearchResults\n * - state with the state used for the query as a SearchParameters\n * @example\n * // Changing the number of records returned per page to 1\n * // This example uses the callback API\n * var state = helper.searchOnce({hitsPerPage: 1},\n * function(error, content, state) {\n * // if an error occurred it will be passed in error, otherwise its value is null\n * // content contains the results formatted as a SearchResults\n * // state is the instance of SearchParameters used for this search\n * });\n * @example\n * // Changing the number of records returned per page to 1\n * // This example uses the promise API\n * var state1 = helper.searchOnce({hitsPerPage: 1})\n * .then(promiseHandler);\n *\n * function promiseHandler(res) {\n * // res contains\n * // {\n * // content : SearchResults\n * // state : SearchParameters (the one used for this specific search)\n * // }\n * }\n */\nAlgoliaSearchHelper.prototype.searchOnce = function (options, cb) {\n var tempState = !options\n ? this.state\n : this.state.setQueryParameters(options);\n var queries = requestBuilder._getQueries(tempState.index, tempState);\n // eslint-disable-next-line consistent-this\n var self = this;\n\n this._currentNbQueries++;\n\n this.emit('searchOnce', {\n state: tempState,\n });\n\n if (cb) {\n this.client\n .search(queries)\n .then(function (content) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) {\n self.emit('searchQueueEmpty');\n }\n\n cb(null, new SearchResults(tempState, content.results), tempState);\n })\n .catch(function (err) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) {\n self.emit('searchQueueEmpty');\n }\n\n cb(err, null, tempState);\n });\n\n return undefined;\n }\n\n return this.client.search(queries).then(\n function (content) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n return {\n content: new SearchResults(tempState, content.results),\n state: tempState,\n _originalResponse: content,\n };\n },\n function (e) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n throw e;\n }\n );\n};\n\n/**\n * Start the search for answers with the parameters set in the state.\n * This method returns a promise.\n * @param {Object} options - the options for answers API call\n * @param {string[]} options.attributesForPrediction - Attributes to use for predictions. If empty, `searchableAttributes` is used instead.\n * @param {string[]} options.queryLanguages - The languages in the query. Currently only supports ['en'].\n * @param {number} options.nbHits - Maximum number of answers to retrieve from the Answers Engine. Cannot be greater than 1000.\n *\n * @return {promise} the answer results\n * @deprecated answers is deprecated and will be replaced with new initiatives\n */\nAlgoliaSearchHelper.prototype.findAnswers = function (options) {\n // eslint-disable-next-line no-console\n console.warn('[algoliasearch-helper] answers is no longer supported');\n var state = this.state;\n var derivedHelper = this.derivedHelpers[0];\n if (!derivedHelper) {\n return Promise.resolve([]);\n }\n var derivedState = derivedHelper.getModifiedState(state);\n var data = merge(\n {\n attributesForPrediction: options.attributesForPrediction,\n nbHits: options.nbHits,\n },\n {\n params: omit(requestBuilder._getHitsSearchParams(derivedState), [\n 'attributesToSnippet',\n 'hitsPerPage',\n 'restrictSearchableAttributes',\n 'snippetEllipsisText',\n ]),\n }\n );\n\n var errorMessage =\n 'search for answers was called, but this client does not have a function client.initIndex(index).findAnswers';\n if (typeof this.client.initIndex !== 'function') {\n throw new Error(errorMessage);\n }\n var index = this.client.initIndex(derivedState.index);\n if (typeof index.findAnswers !== 'function') {\n throw new Error(errorMessage);\n }\n return index.findAnswers(derivedState.query, options.queryLanguages, data);\n};\n\n/**\n * Structure of each result when using\n * [`searchForFacetValues()`](reference.html#AlgoliaSearchHelper#searchForFacetValues)\n * @typedef FacetSearchHit\n * @type {object}\n * @property {string} value the facet value\n * @property {string} highlighted the facet value highlighted with the query string\n * @property {number} count number of occurrence of this facet value\n * @property {boolean} isRefined true if the value is already refined\n */\n\n/**\n * Structure of the data resolved by the\n * [`searchForFacetValues()`](reference.html#AlgoliaSearchHelper#searchForFacetValues)\n * promise.\n * @typedef FacetSearchResult\n * @type {object}\n * @property {FacetSearchHit} facetHits the results for this search for facet values\n * @property {number} processingTimeMS time taken by the query inside the engine\n */\n\n/**\n * Search for facet values based on an query and the name of a faceted attribute. This\n * triggers a search and will return a promise. On top of using the query, it also sends\n * the parameters from the state so that the search is narrowed down to only the possible values.\n *\n * See the description of [FacetSearchResult](reference.html#FacetSearchResult)\n * @param {string} facet the name of the faceted attribute\n * @param {string} query the string query for the search\n * @param {number} [maxFacetHits] the maximum number values returned. Should be > 0 and <= 100\n * @param {object} [userState] the set of custom parameters to use on top of the current state. Setting a property to `undefined` removes\n * it in the generated query.\n * @return {promise.} the results of the search\n */\nAlgoliaSearchHelper.prototype.searchForFacetValues = function (\n facet,\n query,\n maxFacetHits,\n userState\n) {\n var clientHasSFFV =\n typeof this.client.searchForFacetValues === 'function' &&\n // v5 has a wrong sffv signature\n typeof this.client.searchForFacets !== 'function';\n var clientHasInitIndex = typeof this.client.initIndex === 'function';\n if (\n !clientHasSFFV &&\n !clientHasInitIndex &&\n typeof this.client.search !== 'function'\n ) {\n throw new Error(\n 'search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues'\n );\n }\n\n var state = this.state.setQueryParameters(userState || {});\n var isDisjunctive = state.isDisjunctiveFacet(facet);\n var algoliaQuery = requestBuilder.getSearchForFacetQuery(\n facet,\n query,\n maxFacetHits,\n state\n );\n\n this._currentNbQueries++;\n // eslint-disable-next-line consistent-this\n var self = this;\n var searchForFacetValuesPromise;\n // newer algoliasearch ^3.27.1 - ~4.0.0\n if (clientHasSFFV) {\n searchForFacetValuesPromise = this.client.searchForFacetValues([\n { indexName: state.index, params: algoliaQuery },\n ]);\n // algoliasearch < 3.27.1\n } else if (clientHasInitIndex) {\n searchForFacetValuesPromise = this.client\n .initIndex(state.index)\n .searchForFacetValues(algoliaQuery);\n // algoliasearch ~5.0.0\n } else {\n // @MAJOR only use client.search\n delete algoliaQuery.facetName;\n searchForFacetValuesPromise = this.client\n .search([\n {\n type: 'facet',\n facet: facet,\n indexName: state.index,\n params: algoliaQuery,\n },\n ])\n .then(function processResponse(response) {\n return response.results[0];\n });\n }\n\n this.emit('searchForFacetValues', {\n state: state,\n facet: facet,\n query: query,\n });\n\n return searchForFacetValuesPromise.then(\n function addIsRefined(content) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n\n content = Array.isArray(content) ? content[0] : content;\n\n content.facetHits.forEach(function (f) {\n f.escapedValue = escapeFacetValue(f.value);\n f.isRefined = isDisjunctive\n ? state.isDisjunctiveFacetRefined(facet, f.escapedValue)\n : state.isFacetRefined(facet, f.escapedValue);\n });\n\n return content;\n },\n function (e) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n throw e;\n }\n );\n};\n\n/**\n * Search for facet values using the Composition API & based on a query and the name of a faceted attribute.\n * This triggers a search and will return a promise. On top of using the query, it also sends\n * the parameters from the state so that the search is narrowed down to only the possible values.\n *\n * See the description of [FacetSearchResult](reference.html#FacetSearchResult)\n * @param {string} facet the name of the faceted attribute\n * @param {string} query the string query for the search\n * @param {number} [maxFacetHits] the maximum number values returned. Should be > 0 and <= 100\n * @param {object} [userState] the set of custom parameters to use on top of the current state. Setting a property to `undefined` removes\n * it in the generated query.\n * @return {promise.} the results of the search\n */\nAlgoliaSearchHelper.prototype.searchForCompositionFacetValues = function (\n facet,\n query,\n maxFacetHits,\n userState\n) {\n if (typeof this.client.searchForFacetValues !== 'function') {\n throw new Error(\n 'search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues'\n );\n }\n\n var state = this.state.setQueryParameters(userState || {});\n var isDisjunctive = state.isDisjunctiveFacet(facet);\n\n this._currentNbQueries++;\n // eslint-disable-next-line consistent-this\n var self = this;\n var searchForFacetValuesPromise;\n\n searchForFacetValuesPromise = this.client.searchForFacetValues({\n compositionID: state.index,\n facetName: facet,\n searchForFacetValuesRequest: {\n params: {\n query: query,\n maxFacetHits: maxFacetHits,\n searchQuery: requestBuilder._getCompositionHitsSearchParams(state),\n },\n },\n });\n\n this.emit('searchForFacetValues', {\n state: state,\n facet: facet,\n query: query,\n });\n\n return searchForFacetValuesPromise.then(\n function addIsRefined(content) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n\n content = content.results[0];\n\n content.facetHits.forEach(function (f) {\n f.escapedValue = escapeFacetValue(f.value);\n f.isRefined = isDisjunctive\n ? state.isDisjunctiveFacetRefined(facet, f.escapedValue)\n : state.isFacetRefined(facet, f.escapedValue);\n });\n\n return content;\n },\n function (e) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n throw e;\n }\n );\n};\n\n/**\n * Sets the text query used for the search.\n *\n * This method resets the current page to 0.\n * @param {string} q the user query\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setQuery = function (q) {\n this._change({\n state: this.state.resetPage().setQuery(q),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Remove all the types of refinements except tags. A string can be provided to remove\n * only the refinements of a specific attribute. For more advanced use case, you can\n * provide a function instead. This function should follow the\n * [clearCallback definition](#SearchParameters.clearCallback).\n *\n * This method resets the current page to 0.\n * @param {string} [name] optional name of the facet / attribute on which we want to remove all refinements\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n * @example\n * // Removing all the refinements\n * helper.clearRefinements().search();\n * @example\n * // Removing all the filters on a the category attribute.\n * helper.clearRefinements('category').search();\n * @example\n * // Removing only the exclude filters on the category facet.\n * helper.clearRefinements(function(value, attribute, type) {\n * return type === 'exclude' && attribute === 'category';\n * }).search();\n */\nAlgoliaSearchHelper.prototype.clearRefinements = function (name) {\n this._change({\n state: this.state.resetPage().clearRefinements(name),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Remove all the tag filters.\n *\n * This method resets the current page to 0.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.clearTags = function () {\n this._change({\n state: this.state.resetPage().clearTags(),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Adds a disjunctive filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addDisjunctiveFacetRefinement = function (\n facet,\n value\n) {\n this._change({\n state: this.state.resetPage().addDisjunctiveFacetRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addDisjunctiveFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.addDisjunctiveRefine = function () {\n return this.addDisjunctiveFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Adds a refinement on a hierarchical facet. It will throw\n * an exception if the facet is not defined or if the facet\n * is already refined.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet name\n * @param {string} path the hierarchical facet path\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @throws Error if the facet is not defined or if the facet is refined\n * @chainable\n * @fires change\n */\nAlgoliaSearchHelper.prototype.addHierarchicalFacetRefinement = function (\n facet,\n path\n) {\n this._change({\n state: this.state.resetPage().addHierarchicalFacetRefinement(facet, path),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Adds a an numeric filter to an attribute with the `operator` and `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} attribute the attribute on which the numeric filter applies\n * @param {string} operator the operator of the filter\n * @param {number} value the value of the filter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addNumericRefinement = function (\n attribute,\n operator,\n value\n) {\n this._change({\n state: this.state\n .resetPage()\n .addNumericRefinement(attribute, operator, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Adds a filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFacetRefinement = function (facet, value) {\n this._change({\n state: this.state.resetPage().addFacetRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.addRefine = function () {\n return this.addFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Adds a an exclusion filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFacetExclusion = function (facet, value) {\n this._change({\n state: this.state.resetPage().addExcludeRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.addExclude = function () {\n return this.addFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Adds a tag filter with the `tag` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} tag the tag to add to the filter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addTag = function (tag) {\n this._change({\n state: this.state.resetPage().addTagRefinement(tag),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Adds a \"frequently bought together\" recommendation query.\n *\n * @param {FrequentlyBoughtTogetherQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFrequentlyBoughtTogether = function (params) {\n this._recommendChange({\n state: this.recommendState.addFrequentlyBoughtTogether(params),\n });\n\n return this;\n};\n\n/**\n * Adds a \"related products\" recommendation query.\n *\n * @param {RelatedProductsQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addRelatedProducts = function (params) {\n this._recommendChange({\n state: this.recommendState.addRelatedProducts(params),\n });\n\n return this;\n};\n\n/**\n * Adds a \"trending items\" recommendation query.\n *\n * @param {TrendingItemsQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addTrendingItems = function (params) {\n this._recommendChange({\n state: this.recommendState.addTrendingItems(params),\n });\n\n return this;\n};\n\n/**\n * Adds a \"trending facets\" recommendation query.\n *\n * @param {TrendingFacetsQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addTrendingFacets = function (params) {\n this._recommendChange({\n state: this.recommendState.addTrendingFacets(params),\n });\n\n return this;\n};\n\n/**\n * Adds a \"looking similar\" recommendation query.\n *\n * @param {LookingSimilarQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addLookingSimilar = function (params) {\n this._recommendChange({\n state: this.recommendState.addLookingSimilar(params),\n });\n\n return this;\n};\n\n/**\n * Removes an numeric filter to an attribute with the `operator` and `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * Some parameters are optional, triggering different behavior:\n * - if the value is not provided, then all the numeric value will be removed for the\n * specified attribute/operator couple.\n * - if the operator is not provided either, then all the numeric filter on this attribute\n * will be removed.\n *\n * This method resets the current page to 0.\n * @param {string} attribute the attribute on which the numeric filter applies\n * @param {string} [operator] the operator of the filter\n * @param {number} [value] the value of the filter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeNumericRefinement = function (\n attribute,\n operator,\n value\n) {\n this._change({\n state: this.state\n .resetPage()\n .removeNumericRefinement(attribute, operator, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Removes a disjunctive filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} [value] the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeDisjunctiveFacetRefinement = function (\n facet,\n value\n) {\n this._change({\n state: this.state\n .resetPage()\n .removeDisjunctiveFacetRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeDisjunctiveFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.removeDisjunctiveRefine = function () {\n return this.removeDisjunctiveFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Removes the refinement set on a hierarchical facet.\n * @param {string} facet the facet name\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @throws Error if the facet is not defined or if the facet is not refined\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeHierarchicalFacetRefinement = function (\n facet\n) {\n this._change({\n state: this.state.resetPage().removeHierarchicalFacetRefinement(facet),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Removes a filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} [value] the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFacetRefinement = function (facet, value) {\n this._change({\n state: this.state.resetPage().removeFacetRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.removeRefine = function () {\n return this.removeFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Removes an exclusion filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} [value] the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFacetExclusion = function (facet, value) {\n this._change({\n state: this.state.resetPage().removeExcludeRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.removeExclude = function () {\n return this.removeFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Removes a tag filter with the `tag` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} tag tag to remove from the filter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeTag = function (tag) {\n this._change({\n state: this.state.resetPage().removeTagRefinement(tag),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Removes a \"frequently bought together\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFrequentlyBoughtTogether = function (id) {\n this._recommendChange({\n state: this.recommendState.removeParams(id),\n });\n\n return this;\n};\n\n/**\n * Removes a \"related products\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeRelatedProducts = function (id) {\n this._recommendChange({\n state: this.recommendState.removeParams(id),\n });\n\n return this;\n};\n\n/**\n * Removes a \"trending items\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeTrendingItems = function (id) {\n this._recommendChange({\n state: this.recommendState.removeParams(id),\n });\n\n return this;\n};\n\n/**\n * Removes a \"trending facets\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeTrendingFacets = function (id) {\n this._recommendChange({\n state: this.recommendState.removeParams(id),\n });\n\n return this;\n};\n\n/**\n * Removes a \"looking similar\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeLookingSimilar = function (id) {\n this._recommendChange({\n state: this.recommendState.removeParams(id),\n });\n\n return this;\n};\n\n/**\n * Adds or removes an exclusion filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleFacetExclusion = function (facet, value) {\n this._change({\n state: this.state.resetPage().toggleExcludeFacetRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#toggleFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.toggleExclude = function () {\n return this.toggleFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Adds or removes a filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method can be used for conjunctive, disjunctive and hierarchical filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @throws Error will throw an error if the facet is not declared in the settings of the helper\n * @fires change\n * @chainable\n * @deprecated since version 2.19.0, see {@link AlgoliaSearchHelper#toggleFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.toggleRefinement = function (facet, value) {\n return this.toggleFacetRefinement(facet, value);\n};\n\n/**\n * Adds or removes a filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method can be used for conjunctive, disjunctive and hierarchical filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @throws Error will throw an error if the facet is not declared in the settings of the helper\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleFacetRefinement = function (facet, value) {\n this._change({\n state: this.state.resetPage().toggleFacetRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#toggleFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.toggleRefine = function () {\n return this.toggleFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Adds or removes a tag filter with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method resets the current page to 0.\n * @param {string} tag tag to remove or add\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleTag = function (tag) {\n this._change({\n state: this.state.resetPage().toggleTagRefinement(tag),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Increments the page number by one.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n * @example\n * helper.setPage(0).nextPage().getPage();\n * // returns 1\n */\nAlgoliaSearchHelper.prototype.nextPage = function () {\n var page = this.state.page || 0;\n return this.setPage(page + 1);\n};\n\n/**\n * Decrements the page number by one.\n * @fires change\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @chainable\n * @example\n * helper.setPage(1).previousPage().getPage();\n * // returns 0\n */\nAlgoliaSearchHelper.prototype.previousPage = function () {\n var page = this.state.page || 0;\n return this.setPage(page - 1);\n};\n\n/**\n * @private\n * @param {number} page The page number\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @chainable\n * @fires change\n */\nfunction setCurrentPage(page) {\n if (page < 0) throw new Error('Page requested below 0.');\n\n this._change({\n state: this.state.setPage(page),\n isPageReset: false,\n });\n\n return this;\n}\n\n/**\n * Change the current page\n * @deprecated\n * @param {number} page The page number\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setCurrentPage = setCurrentPage;\n\n/**\n * Updates the current page.\n * @function\n * @param {number} page The page number\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setPage = setCurrentPage;\n\n/**\n * Updates the name of the index that will be targeted by the query.\n *\n * This method resets the current page to 0.\n * @param {string} name the index name\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setIndex = function (name) {\n this._change({\n state: this.state.resetPage().setIndex(name),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Update a parameter of the search. This method reset the page\n *\n * The complete list of parameters is available on the\n * [Algolia website](https://www.algolia.com/doc/rest#query-an-index).\n * The most commonly used parameters have their own [shortcuts](#query-parameters-shortcuts)\n * or benefit from higher-level APIs (all the kind of filters and facets have their own API)\n *\n * This method resets the current page to 0.\n * @param {string} parameter name of the parameter to update\n * @param {any} value new value of the parameter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n * @example\n * helper.setQueryParameter('hitsPerPage', 20).search();\n */\nAlgoliaSearchHelper.prototype.setQueryParameter = function (parameter, value) {\n this._change({\n state: this.state.resetPage().setQueryParameter(parameter, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n/**\n * Set the whole state (warning: will erase previous state)\n * @param {SearchParameters} newState the whole new state\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setState = function (newState) {\n this._change({\n state: SearchParameters.make(newState),\n isPageReset: false,\n });\n\n return this;\n};\n\n/**\n * Override the current state without triggering a change event.\n * Do not use this method unless you know what you are doing. (see the example\n * for a legit use case)\n * @param {SearchParameters} newState the whole new state\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @example\n * helper.on('change', function(state){\n * // In this function you might want to find a way to store the state in the url/history\n * updateYourURL(state)\n * })\n * window.onpopstate = function(event){\n * // This is naive though as you should check if the state is really defined etc.\n * helper.overrideStateWithoutTriggeringChangeEvent(event.state).search()\n * }\n * @chainable\n */\nAlgoliaSearchHelper.prototype.overrideStateWithoutTriggeringChangeEvent =\n function (newState) {\n this.state = new SearchParameters(newState);\n return this;\n };\n\n/**\n * Check if an attribute has any numeric, conjunctive, disjunctive or hierarchical filters.\n * @param {string} attribute the name of the attribute\n * @return {boolean} true if the attribute is filtered by at least one value\n * @example\n * // hasRefinements works with numeric, conjunctive, disjunctive and hierarchical filters\n * helper.hasRefinements('price'); // false\n * helper.addNumericRefinement('price', '>', 100);\n * helper.hasRefinements('price'); // true\n *\n * helper.hasRefinements('color'); // false\n * helper.addFacetRefinement('color', 'blue');\n * helper.hasRefinements('color'); // true\n *\n * helper.hasRefinements('material'); // false\n * helper.addDisjunctiveFacetRefinement('material', 'plastic');\n * helper.hasRefinements('material'); // true\n *\n * helper.hasRefinements('categories'); // false\n * helper.toggleFacetRefinement('categories', 'kitchen > knife');\n * helper.hasRefinements('categories'); // true\n *\n */\nAlgoliaSearchHelper.prototype.hasRefinements = function (attribute) {\n if (objectHasKeys(this.state.getNumericRefinements(attribute))) {\n return true;\n } else if (this.state.isConjunctiveFacet(attribute)) {\n return this.state.isFacetRefined(attribute);\n } else if (this.state.isDisjunctiveFacet(attribute)) {\n return this.state.isDisjunctiveFacetRefined(attribute);\n } else if (this.state.isHierarchicalFacet(attribute)) {\n return this.state.isHierarchicalFacetRefined(attribute);\n }\n\n // there's currently no way to know that the user did call `addNumericRefinement` at some point\n // thus we cannot distinguish if there once was a numeric refinement that was cleared\n // so we will return false in every other situations to be consistent\n // while what we should do here is throw because we did not find the attribute in any type\n // of refinement\n return false;\n};\n\n/**\n * Check if a value is excluded for a specific faceted attribute. If the value\n * is omitted then the function checks if there is any excluding refinements.\n *\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} [value] optional value. If passed will test that this value\n * is filtering the given facet.\n * @return {boolean} true if refined\n * @example\n * helper.isExcludeRefined('color'); // false\n * helper.isExcludeRefined('color', 'blue') // false\n * helper.isExcludeRefined('color', 'red') // false\n *\n * helper.addFacetExclusion('color', 'red');\n *\n * helper.isExcludeRefined('color'); // true\n * helper.isExcludeRefined('color', 'blue') // false\n * helper.isExcludeRefined('color', 'red') // true\n */\nAlgoliaSearchHelper.prototype.isExcluded = function (facet, value) {\n return this.state.isExcludeRefined(facet, value);\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since 2.4.0, see {@link AlgoliaSearchHelper#hasRefinements}\n */\nAlgoliaSearchHelper.prototype.isDisjunctiveRefined = function (facet, value) {\n return this.state.isDisjunctiveFacetRefined(facet, value);\n};\n\n/**\n * Check if the string is a currently filtering tag.\n * @param {string} tag tag to check\n * @return {boolean} true if the tag is currently refined\n */\nAlgoliaSearchHelper.prototype.hasTag = function (tag) {\n return this.state.isTagRefined(tag);\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since 2.4.0, see {@link AlgoliaSearchHelper#hasTag}\n */\nAlgoliaSearchHelper.prototype.isTagRefined = function () {\n return this.hasTagRefinements.apply(this, arguments);\n};\n\n/**\n * Get the name of the currently used index.\n * @return {string} name of the index\n * @example\n * helper.setIndex('highestPrice_products').getIndex();\n * // returns 'highestPrice_products'\n */\nAlgoliaSearchHelper.prototype.getIndex = function () {\n return this.state.index;\n};\n\nfunction getCurrentPage() {\n return this.state.page;\n}\n\n/**\n * Get the currently selected page\n * @deprecated\n * @return {number} the current page\n */\nAlgoliaSearchHelper.prototype.getCurrentPage = getCurrentPage;\n/**\n * Get the currently selected page\n * @function\n * @return {number} the current page\n */\nAlgoliaSearchHelper.prototype.getPage = getCurrentPage;\n\n/**\n * Get all the tags currently set to filters the results.\n *\n * @return {string[]} The list of tags currently set.\n */\nAlgoliaSearchHelper.prototype.getTags = function () {\n return this.state.tagRefinements;\n};\n\n/**\n * Get the list of refinements for a given attribute. This method works with\n * conjunctive, disjunctive, excluding and numerical filters.\n *\n * See also SearchResults#getRefinements\n *\n * @param {string} facetName attribute name used for faceting\n * @return {Array.} All Refinement are objects that contain a value, and\n * a type. Numeric also contains an operator.\n * @example\n * helper.addNumericRefinement('price', '>', 100);\n * helper.getRefinements('price');\n * // [\n * // {\n * // \"value\": [\n * // 100\n * // ],\n * // \"operator\": \">\",\n * // \"type\": \"numeric\"\n * // }\n * // ]\n * @example\n * helper.addFacetRefinement('color', 'blue');\n * helper.addFacetExclusion('color', 'red');\n * helper.getRefinements('color');\n * // [\n * // {\n * // \"value\": \"blue\",\n * // \"type\": \"conjunctive\"\n * // },\n * // {\n * // \"value\": \"red\",\n * // \"type\": \"exclude\"\n * // }\n * // ]\n * @example\n * helper.addDisjunctiveFacetRefinement('material', 'plastic');\n * // [\n * // {\n * // \"value\": \"plastic\",\n * // \"type\": \"disjunctive\"\n * // }\n * // ]\n */\nAlgoliaSearchHelper.prototype.getRefinements = function (facetName) {\n var refinements = [];\n\n if (this.state.isConjunctiveFacet(facetName)) {\n var conjRefinements = this.state.getConjunctiveRefinements(facetName);\n\n conjRefinements.forEach(function (r) {\n refinements.push({\n value: r,\n type: 'conjunctive',\n });\n });\n\n var excludeRefinements = this.state.getExcludeRefinements(facetName);\n\n excludeRefinements.forEach(function (r) {\n refinements.push({\n value: r,\n type: 'exclude',\n });\n });\n } else if (this.state.isDisjunctiveFacet(facetName)) {\n var disjunctiveRefinements =\n this.state.getDisjunctiveRefinements(facetName);\n\n disjunctiveRefinements.forEach(function (r) {\n refinements.push({\n value: r,\n type: 'disjunctive',\n });\n });\n }\n\n var numericRefinements = this.state.getNumericRefinements(facetName);\n\n Object.keys(numericRefinements).forEach(function (operator) {\n var value = numericRefinements[operator];\n\n refinements.push({\n value: value,\n operator: operator,\n type: 'numeric',\n });\n });\n\n return refinements;\n};\n\n/**\n * Return the current refinement for the (attribute, operator)\n * @param {string} attribute attribute in the record\n * @param {string} operator operator applied on the refined values\n * @return {Array.} refined values\n */\nAlgoliaSearchHelper.prototype.getNumericRefinement = function (\n attribute,\n operator\n) {\n return this.state.getNumericRefinement(attribute, operator);\n};\n\n/**\n * Get the current breadcrumb for a hierarchical facet, as an array\n * @param {string} facetName Hierarchical facet name\n * @return {array.} the path as an array of string\n */\nAlgoliaSearchHelper.prototype.getHierarchicalFacetBreadcrumb = function (\n facetName\n) {\n return this.state.getHierarchicalFacetBreadcrumb(facetName);\n};\n\n// /////////// PRIVATE\n\n/**\n * Perform the underlying queries\n * @private\n * @param {object} options options for the query\n * @param {boolean} [options.onlyWithDerivedHelpers=false] if true, only the derived helpers will be queried\n * @return {undefined} does not return anything\n * @fires search\n * @fires result\n * @fires error\n */\nAlgoliaSearchHelper.prototype._search = function (options) {\n var state = this.state;\n var states = [];\n var mainQueries = [];\n\n if (!options.onlyWithDerivedHelpers) {\n mainQueries = requestBuilder._getQueries(state.index, state);\n\n states.push({\n state: state,\n queriesCount: mainQueries.length,\n helper: this,\n });\n\n this.emit('search', {\n state: state,\n results: this.lastResults,\n });\n }\n\n var derivedQueries = this.derivedHelpers.map(function (derivedHelper) {\n var derivedState = derivedHelper.getModifiedState(state);\n var derivedStateQueries = derivedState.index\n ? requestBuilder._getQueries(derivedState.index, derivedState)\n : [];\n\n states.push({\n state: derivedState,\n queriesCount: derivedStateQueries.length,\n helper: derivedHelper,\n });\n\n derivedHelper.emit('search', {\n state: derivedState,\n results: derivedHelper.lastResults,\n });\n\n return derivedStateQueries;\n });\n\n var queries = Array.prototype.concat.apply(mainQueries, derivedQueries);\n\n var queryId = this._queryId++;\n this._currentNbQueries++;\n\n if (!queries.length) {\n return Promise.resolve({ results: [] }).then(\n this._dispatchAlgoliaResponse.bind(this, states, queryId)\n );\n }\n\n try {\n this.client\n .search(queries)\n .then(this._dispatchAlgoliaResponse.bind(this, states, queryId))\n .catch(this._dispatchAlgoliaError.bind(this, queryId));\n } catch (error) {\n // If we reach this part, we're in an internal error state\n this.emit('error', {\n error: error,\n });\n }\n\n return undefined;\n};\n\n/**\n * Perform the underlying queries\n * @private\n * @param {boolean} [options.onlyWithDerivedHelpers=false] if true, only the derived helpers will be queried\n * @return {undefined} does not return anything\n * @fires search\n * @fires result\n * @fires error\n */\nAlgoliaSearchHelper.prototype._runComposition = function () {\n var state = this.state;\n var states = [];\n var mainQueries = [];\n\n var derivedQueries = this.derivedHelpers.map(function (derivedHelper) {\n var derivedState = derivedHelper.getModifiedState(state);\n var derivedStateQueries =\n requestBuilder._getCompositionQueries(derivedState);\n\n states.push({\n state: derivedState,\n queriesCount: derivedStateQueries.length,\n helper: derivedHelper,\n });\n\n derivedHelper.emit('search', {\n state: derivedState,\n results: derivedHelper.lastResults,\n });\n\n return derivedStateQueries;\n });\n\n var queries = Array.prototype.concat.apply(mainQueries, derivedQueries);\n\n var queryId = this._queryId++;\n this._currentNbQueries++;\n\n if (!queries.length) {\n return Promise.resolve({ results: [] }).then(\n this._dispatchAlgoliaResponse.bind(this, states, queryId)\n );\n }\n\n if (queries.length > 1) {\n throw new Error('Only one query is allowed when using a composition.');\n }\n\n var query = queries[0];\n\n try {\n this.client\n .search(query)\n .then(this._dispatchAlgoliaResponse.bind(this, states, queryId))\n .catch(this._dispatchAlgoliaError.bind(this, queryId));\n } catch (error) {\n // If we reach this part, we're in an internal error state\n this.emit('error', {\n error: error,\n });\n }\n\n return undefined;\n};\n\nAlgoliaSearchHelper.prototype._recommend = function () {\n var searchState = this.state;\n var recommendState = this.recommendState;\n var index = this.getIndex();\n var states = [{ state: recommendState, index: index, helper: this }];\n var ids = recommendState.params.map(function (param) {\n return param.$$id;\n });\n\n this.emit('fetch', {\n recommend: {\n state: recommendState,\n results: this.lastRecommendResults,\n },\n });\n\n var cache = this._recommendCache;\n\n var derivedQueries = this.derivedHelpers.map(function (derivedHelper) {\n var derivedIndex = derivedHelper.getModifiedState(searchState).index;\n if (!derivedIndex) {\n return [];\n }\n\n // Contrary to what is done when deriving the search state, we don't want to\n // provide the current recommend state to the derived helper, as it would\n // inherit unwanted queries. We instead provide an empty recommend state.\n var derivedState = derivedHelper.getModifiedRecommendState(\n new RecommendParameters()\n );\n states.push({\n state: derivedState,\n index: derivedIndex,\n helper: derivedHelper,\n });\n\n ids = Array.prototype.concat.apply(\n ids,\n derivedState.params.map(function (param) {\n return param.$$id;\n })\n );\n\n derivedHelper.emit('fetch', {\n recommend: {\n state: derivedState,\n results: derivedHelper.lastRecommendResults,\n },\n });\n\n return derivedState._buildQueries(derivedIndex, cache);\n });\n\n var queries = Array.prototype.concat.apply(\n this.recommendState._buildQueries(index, cache),\n derivedQueries\n );\n\n if (queries.length === 0) {\n return;\n }\n\n if (\n queries.length > 0 &&\n typeof this.client.getRecommendations === 'undefined'\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Please update algoliasearch/lite to the latest version in order to use recommend widgets.'\n );\n return;\n }\n\n var queryId = this._recommendQueryId++;\n this._currentNbRecommendQueries++;\n\n try {\n this.client\n .getRecommendations(queries)\n .then(this._dispatchRecommendResponse.bind(this, queryId, states, ids))\n .catch(this._dispatchRecommendError.bind(this, queryId));\n } catch (error) {\n // If we reach this part, we're in an internal error state\n this.emit('error', {\n error: error,\n });\n }\n\n return;\n};\n\n/**\n * Transform the responses as sent by the server and transform them into a user\n * usable object that merge the results of all the batch requests. It will dispatch\n * over the different helper + derived helpers (when there are some).\n * @private\n * @param {array.<{SearchParameters, AlgoliaQueries, AlgoliaSearchHelper}>} states state used to generate the request\n * @param {number} queryId id of the current request\n * @param {object} content content of the response\n * @return {undefined}\n */\nAlgoliaSearchHelper.prototype._dispatchAlgoliaResponse = function (\n states,\n queryId,\n content\n) {\n // eslint-disable-next-line consistent-this\n var self = this;\n\n // @TODO remove the number of outdated queries discarded instead of just one\n\n if (queryId < this._lastQueryIdReceived) {\n // Outdated answer\n return;\n }\n\n this._currentNbQueries -= queryId - this._lastQueryIdReceived;\n this._lastQueryIdReceived = queryId;\n\n if (this._currentNbQueries === 0) this.emit('searchQueueEmpty');\n\n var results = content.results.slice();\n var rawContent = Object.keys(content).reduce(function (value, key) {\n if (key !== 'results') value[key] = content[key];\n return value;\n }, {});\n\n if (Object.keys(rawContent).length <= 0) {\n rawContent = undefined;\n }\n\n states.forEach(function (s) {\n var state = s.state;\n var queriesCount = s.queriesCount;\n var helper = s.helper;\n var specificResults = results.splice(0, queriesCount);\n\n if (!state.index) {\n helper.emit('result', {\n results: null,\n state: state,\n });\n return;\n }\n\n helper.lastResults = new SearchResults(\n state,\n specificResults,\n self._searchResultsOptions\n );\n if (rawContent !== undefined) helper.lastResults._rawContent = rawContent;\n\n helper.emit('result', {\n results: helper.lastResults,\n state: state,\n });\n });\n};\n\nAlgoliaSearchHelper.prototype._dispatchRecommendResponse = function (\n queryId,\n states,\n ids,\n content\n) {\n // @TODO remove the number of outdated queries discarded instead of just one\n\n if (queryId < this._lastRecommendQueryIdReceived) {\n // Outdated answer\n return;\n }\n\n this._currentNbRecommendQueries -=\n queryId - this._lastRecommendQueryIdReceived;\n this._lastRecommendQueryIdReceived = queryId;\n\n if (this._currentNbRecommendQueries === 0) this.emit('recommendQueueEmpty');\n\n var cache = this._recommendCache;\n\n var idsMap = {};\n ids\n .filter(function (id) {\n return cache[id] === undefined;\n })\n .forEach(function (id, index) {\n if (!idsMap[id]) idsMap[id] = [];\n\n idsMap[id].push(index);\n });\n\n Object.keys(idsMap).forEach(function (id) {\n var indices = idsMap[id];\n var firstResult = content.results[indices[0]];\n if (indices.length === 1) {\n cache[id] = firstResult;\n return;\n }\n cache[id] = Object.assign({}, firstResult, {\n hits: sortAndMergeRecommendations(\n indices.map(function (idx) {\n return content.results[idx].hits;\n })\n ),\n });\n });\n\n var results = {};\n ids.forEach(function (id) {\n results[id] = cache[id];\n });\n\n states.forEach(function (s) {\n var state = s.state;\n var helper = s.helper;\n\n if (!s.index) {\n // eslint-disable-next-line no-warning-comments\n // TODO: emit \"result\" event when events for Recommend are implemented\n helper.emit('recommend:result', {\n results: null,\n state: state,\n });\n return;\n }\n\n helper.lastRecommendResults = new RecommendResults(state, results);\n\n // eslint-disable-next-line no-warning-comments\n // TODO: emit \"result\" event when events for Recommend are implemented\n helper.emit('recommend:result', {\n recommend: {\n results: helper.lastRecommendResults,\n state: state,\n },\n });\n });\n};\n\nAlgoliaSearchHelper.prototype._dispatchAlgoliaError = function (\n queryId,\n error\n) {\n if (queryId < this._lastQueryIdReceived) {\n // Outdated answer\n return;\n }\n\n this._currentNbQueries -= queryId - this._lastQueryIdReceived;\n this._lastQueryIdReceived = queryId;\n\n this.emit('error', {\n error: error,\n });\n\n if (this._currentNbQueries === 0) this.emit('searchQueueEmpty');\n};\n\nAlgoliaSearchHelper.prototype._dispatchRecommendError = function (\n queryId,\n error\n) {\n if (queryId < this._lastRecommendQueryIdReceived) {\n // Outdated answer\n return;\n }\n\n this._currentNbRecommendQueries -=\n queryId - this._lastRecommendQueryIdReceived;\n this._lastRecommendQueryIdReceived = queryId;\n\n this.emit('error', {\n error: error,\n });\n\n if (this._currentNbRecommendQueries === 0) this.emit('recommendQueueEmpty');\n};\n\nAlgoliaSearchHelper.prototype.containsRefinement = function (\n query,\n facetFilters,\n numericFilters,\n tagFilters\n) {\n return (\n query ||\n facetFilters.length !== 0 ||\n numericFilters.length !== 0 ||\n tagFilters.length !== 0\n );\n};\n\n/**\n * Test if there are some disjunctive refinements on the facet\n * @private\n * @param {string} facet the attribute to test\n * @return {boolean} true if there are refinements on this attribute\n */\nAlgoliaSearchHelper.prototype._hasDisjunctiveRefinements = function (facet) {\n return (\n this.state.disjunctiveRefinements[facet] &&\n this.state.disjunctiveRefinements[facet].length > 0\n );\n};\n\nAlgoliaSearchHelper.prototype._change = function (event) {\n var state = event.state;\n var isPageReset = event.isPageReset;\n\n if (state !== this.state) {\n this.state = state;\n\n this.emit('change', {\n state: this.state,\n results: this.lastResults,\n isPageReset: isPageReset,\n });\n }\n};\n\nAlgoliaSearchHelper.prototype._recommendChange = function (event) {\n var state = event.state;\n\n if (state !== this.recommendState) {\n this.recommendState = state;\n\n // eslint-disable-next-line no-warning-comments\n // TODO: emit \"change\" event when events for Recommend are implemented\n this.emit('recommend:change', {\n search: {\n results: this.lastResults,\n state: this.state,\n },\n recommend: {\n results: this.lastRecommendResults,\n state: this.recommendState,\n },\n });\n }\n};\n\n/**\n * Clears the cache of the underlying Algolia client.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n */\nAlgoliaSearchHelper.prototype.clearCache = function () {\n if (this.client.clearCache) this.client.clearCache();\n return this;\n};\n\n/**\n * Updates the internal client instance. If the reference of the clients\n * are equal then no update is actually done.\n * @param {AlgoliaSearch} newClient an AlgoliaSearch client\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n */\nAlgoliaSearchHelper.prototype.setClient = function (newClient) {\n if (this.client === newClient) return this;\n\n if (typeof newClient.addAlgoliaAgent === 'function') {\n newClient.addAlgoliaAgent('JS Helper (' + version + ')');\n }\n this.client = newClient;\n\n return this;\n};\n\n/**\n * Gets the instance of the currently used client.\n * @return {AlgoliaSearch} the currently used client\n */\nAlgoliaSearchHelper.prototype.getClient = function () {\n return this.client;\n};\n\n/**\n * Creates an derived instance of the Helper. A derived helper\n * is a way to request other indices synchronised with the lifecycle\n * of the main Helper. This mechanism uses the multiqueries feature\n * of Algolia to aggregate all the requests in a single network call.\n *\n * This method takes a function that is used to create a new SearchParameter\n * that will be used to create requests to Algolia. Those new requests\n * are created just before the `search` event. The signature of the function\n * is `SearchParameters -> SearchParameters`.\n *\n * This method returns a new DerivedHelper which is an EventEmitter\n * that fires the same `search`, `result` and `error` events. Those\n * events, however, will receive data specific to this DerivedHelper\n * and the SearchParameters that is returned by the call of the\n * parameter function.\n * @param {function} fn SearchParameters -> SearchParameters\n * @param {function} recommendFn RecommendParameters -> RecommendParameters\n * @return {DerivedHelper} a new DerivedHelper\n */\nAlgoliaSearchHelper.prototype.derive = function (fn, recommendFn) {\n var derivedHelper = new DerivedHelper(this, fn, recommendFn);\n this.derivedHelpers.push(derivedHelper);\n return derivedHelper;\n};\n\n/**\n * This method detaches a derived Helper from the main one. Prefer using the one from the\n * derived helper itself, to remove the event listeners too.\n * @private\n * @param {DerivedHelper} derivedHelper the derived helper to detach\n * @return {undefined} nothing is returned\n * @throws Error\n */\nAlgoliaSearchHelper.prototype.detachDerivedHelper = function (derivedHelper) {\n var pos = this.derivedHelpers.indexOf(derivedHelper);\n if (pos === -1) throw new Error('Derived helper already detached');\n this.derivedHelpers.splice(pos, 1);\n};\n\n/**\n * This method returns true if there is currently at least one on-going search.\n * @return {boolean} true if there is a search pending\n */\nAlgoliaSearchHelper.prototype.hasPendingRequests = function () {\n return this._currentNbQueries > 0;\n};\n\n/**\n * @typedef AlgoliaSearchHelper.NumericRefinement\n * @type {object}\n * @property {number[]} value the numbers that are used for filtering this attribute with\n * the operator specified.\n * @property {string} operator the faceting data: value, number of entries\n * @property {string} type will be 'numeric'\n */\n\n/**\n * @typedef AlgoliaSearchHelper.FacetRefinement\n * @type {object}\n * @property {string} value the string use to filter the attribute\n * @property {string} type the type of filter: 'conjunctive', 'disjunctive', 'exclude'\n */\n\nmodule.exports = AlgoliaSearchHelper;\n\n\n/***/ }),\n\n/***/ 74587:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nmodule.exports = function compact(array) {\n if (!Array.isArray(array)) {\n return [];\n }\n\n return array.filter(Boolean);\n};\n\n\n/***/ }),\n\n/***/ 52344:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// NOTE: this behaves like lodash/defaults, but doesn't mutate the target\n// it also preserve keys order\nmodule.exports = function defaultsPure() {\n var sources = Array.prototype.slice.call(arguments);\n\n return sources.reduceRight(function (acc, source) {\n Object.keys(Object(source)).forEach(function (key) {\n if (source[key] === undefined) {\n return;\n }\n if (acc[key] !== undefined) {\n // remove if already added, so that we can add it in correct order\n delete acc[key];\n }\n acc[key] = source[key];\n });\n return acc;\n }, {});\n};\n\n\n/***/ }),\n\n/***/ 94039:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n/**\n * Replaces a leading - with \\-\n * @private\n * @param {any} value the facet value to replace\n * @returns {any} the escaped facet value or the value if it was not a string\n */\nfunction escapeFacetValue(value) {\n if (typeof value !== 'string') return value;\n\n return String(value).replace(/^-/, '\\\\-');\n}\n\n/**\n * Replaces a leading \\- with -\n * @private\n * @param {any} value the escaped facet value\n * @returns {any} the unescaped facet value or the value if it was not a string\n */\nfunction unescapeFacetValue(value) {\n if (typeof value !== 'string') return value;\n\n return value.replace(/^\\\\-/, '-');\n}\n\nmodule.exports = {\n escapeFacetValue: escapeFacetValue,\n unescapeFacetValue: unescapeFacetValue,\n};\n\n\n/***/ }),\n\n/***/ 7888:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// @MAJOR can be replaced by native Array#find when we change support\nmodule.exports = function find(array, comparator) {\n if (!Array.isArray(array)) {\n return undefined;\n }\n\n for (var i = 0; i < array.length; i++) {\n if (comparator(array[i])) {\n return array[i];\n }\n }\n\n return undefined;\n};\n\n\n/***/ }),\n\n/***/ 69725:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// @MAJOR can be replaced by native Array#findIndex when we change support\nmodule.exports = function find(array, comparator) {\n if (!Array.isArray(array)) {\n return -1;\n }\n\n for (var i = 0; i < array.length; i++) {\n if (comparator(array[i])) {\n return i;\n }\n }\n return -1;\n};\n\n\n/***/ }),\n\n/***/ 7948:\n/***/ (function(module) {\n\n// @MAJOR: remove this function and use Array.prototype.flat\nmodule.exports = function flat(arr) {\n return arr.reduce(function (acc, val) {\n return acc.concat(val);\n }, []);\n};\n\n\n/***/ }),\n\n/***/ 82293:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar find = __webpack_require__(7888);\n\n/**\n * Transform sort format from user friendly notation to lodash format\n * @param {string[]} sortBy array of predicate of the form \"attribute:order\"\n * @param {string[]} [defaults] array of predicate of the form \"attribute:order\"\n * @return {array.} array containing 2 elements : attributes, orders\n */\nmodule.exports = function formatSort(sortBy, defaults) {\n var defaultInstructions = (defaults || []).map(function (sort) {\n return sort.split(':');\n });\n\n return sortBy.reduce(\n function preparePredicate(out, sort) {\n var sortInstruction = sort.split(':');\n\n var matchingDefault = find(\n defaultInstructions,\n function (defaultInstruction) {\n return defaultInstruction[0] === sortInstruction[0];\n }\n );\n\n if (sortInstruction.length > 1 || !matchingDefault) {\n out[0].push(sortInstruction[0]);\n out[1].push(sortInstruction[1]);\n return out;\n }\n\n out[0].push(matchingDefault[0]);\n out[1].push(matchingDefault[1]);\n return out;\n },\n [[], []]\n );\n};\n\n\n/***/ }),\n\n/***/ 14853:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nfunction inherits(ctor, superCtor) {\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true,\n },\n });\n}\n\nmodule.exports = inherits;\n\n\n/***/ }),\n\n/***/ 22686:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nfunction intersection(arr1, arr2) {\n return arr1.filter(function (value, index) {\n return (\n arr2.indexOf(value) > -1 &&\n arr1.indexOf(value) === index /* skips duplicates */\n );\n });\n}\n\nmodule.exports = intersection;\n\n\n/***/ }),\n\n/***/ 60185:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nfunction clone(value) {\n if (typeof value === 'object' && value !== null) {\n return _merge(Array.isArray(value) ? [] : {}, value);\n }\n return value;\n}\n\nfunction isObjectOrArrayOrFunction(value) {\n return (\n typeof value === 'function' ||\n Array.isArray(value) ||\n Object.prototype.toString.call(value) === '[object Object]'\n );\n}\n\nfunction _merge(target, source) {\n if (target === source) {\n return target;\n }\n\n // eslint-disable-next-line no-restricted-syntax\n for (var key in source) {\n if (\n !Object.prototype.hasOwnProperty.call(source, key) ||\n key === '__proto__' ||\n key === 'constructor'\n ) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n var sourceVal = source[key];\n var targetVal = target[key];\n\n if (typeof targetVal !== 'undefined' && typeof sourceVal === 'undefined') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (\n isObjectOrArrayOrFunction(targetVal) &&\n isObjectOrArrayOrFunction(sourceVal)\n ) {\n target[key] = _merge(targetVal, sourceVal);\n } else {\n target[key] = clone(sourceVal);\n }\n }\n return target;\n}\n\n/**\n * This method is like Object.assign, but recursively merges own and inherited\n * enumerable keyed properties of source objects into the destination object.\n *\n * NOTE: this behaves like lodash/merge, but:\n * - does mutate functions if they are a source\n * - treats non-plain objects as plain\n * - does not work for circular objects\n * - treats sparse arrays as sparse\n * - does not convert Array-like objects (Arguments, NodeLists, etc.) to arrays\n *\n * @param {Object} target The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n */\nfunction merge(target) {\n if (!isObjectOrArrayOrFunction(target)) {\n target = {};\n }\n\n for (var i = 1, l = arguments.length; i < l; i++) {\n var source = arguments[i];\n\n if (isObjectOrArrayOrFunction(source)) {\n _merge(target, source);\n }\n }\n return target;\n}\n\nmodule.exports = merge;\n\n\n/***/ }),\n\n/***/ 23034:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// NOTE: this behaves like lodash/defaults, but doesn't mutate the target\n// it also preserve keys order and keep the highest numeric value\nfunction mergeNumericMax() {\n var sources = Array.prototype.slice.call(arguments);\n\n return sources.reduceRight(function (acc, source) {\n Object.keys(Object(source)).forEach(function (key) {\n var accValue = typeof acc[key] === 'number' ? acc[key] : 0;\n var sourceValue = source[key];\n\n if (sourceValue === undefined) {\n return;\n }\n\n if (sourceValue >= accValue) {\n if (acc[key] !== undefined) {\n // remove if already added, so that we can add it in correct order\n delete acc[key];\n }\n acc[key] = sourceValue;\n }\n });\n return acc;\n }, {});\n}\n\nmodule.exports = mergeNumericMax;\n\n\n/***/ }),\n\n/***/ 90116:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nfunction objectHasKeys(obj) {\n return obj && Object.keys(obj).length > 0;\n}\n\nmodule.exports = objectHasKeys;\n\n\n/***/ }),\n\n/***/ 49803:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// https://github.com/babel/babel/blob/3aaafae053fa75febb3aa45d45b6f00646e30ba4/packages/babel-helpers/src/helpers.js#L604-L620\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source === null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key;\n var i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n // eslint-disable-next-line no-continue\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\n\n\n/***/ }),\n\n/***/ 42148:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined;\n var valIsNull = value === null;\n\n var othIsDefined = other !== undefined;\n var othIsNull = other === null;\n\n if (\n (!othIsNull && value > other) ||\n (valIsNull && othIsDefined) ||\n !valIsDefined\n ) {\n return 1;\n }\n if (\n (!valIsNull && value < other) ||\n (othIsNull && valIsDefined) ||\n !othIsDefined\n ) {\n return -1;\n }\n }\n return 0;\n}\n\n/**\n * @param {Array} collection object with keys in attributes\n * @param {Array} iteratees attributes\n * @param {Array} orders asc | desc\n * @return {Array} sorted collection\n */\nfunction orderBy(collection, iteratees, orders) {\n if (!Array.isArray(collection)) {\n return [];\n }\n\n if (!Array.isArray(orders)) {\n orders = [];\n }\n\n var result = collection.map(function (value, index) {\n return {\n criteria: iteratees.map(function (iteratee) {\n return value[iteratee];\n }),\n index: index,\n value: value,\n };\n });\n\n result.sort(function comparer(object, other) {\n var index = -1;\n\n while (++index < object.criteria.length) {\n var res = compareAscending(object.criteria[index], other.criteria[index]);\n if (res) {\n if (index >= orders.length) {\n return res;\n }\n if (orders[index] === 'desc') {\n return -res;\n }\n return res;\n }\n }\n\n // This ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n });\n\n return result.map(function (res) {\n return res.value;\n });\n}\n\nmodule.exports = orderBy;\n\n\n/***/ }),\n\n/***/ 28023:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nfunction valToNumber(v) {\n if (typeof v === 'number') {\n return v;\n } else if (typeof v === 'string') {\n return parseFloat(v);\n } else if (Array.isArray(v)) {\n return v.map(valToNumber);\n }\n\n throw new Error(\n 'The value should be a number, a parsable string or an array of those.'\n );\n}\n\nmodule.exports = valToNumber;\n\n\n/***/ }),\n\n/***/ 96394:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar merge = __webpack_require__(60185);\n\nfunction sortObject(obj) {\n return Object.keys(obj)\n .sort()\n .reduce(function (acc, curr) {\n acc[curr] = obj[curr];\n return acc;\n }, {});\n}\n\nvar requestBuilder = {\n /**\n * Get all the queries to send to the client, those queries can used directly\n * with the Algolia client.\n * @private\n * @param {string} index The name of the index\n * @param {SearchParameters} state The state from which to get the queries\n * @return {object[]} The queries\n */\n _getQueries: function getQueries(index, state) {\n var queries = [];\n\n // One query for the hits\n queries.push({\n indexName: index,\n params: requestBuilder._getHitsSearchParams(state),\n });\n\n // One for each disjunctive facets\n state.getRefinedDisjunctiveFacets().forEach(function (refinedFacet) {\n queries.push({\n indexName: index,\n params: requestBuilder._getDisjunctiveFacetSearchParams(\n state,\n refinedFacet\n ),\n });\n });\n\n // More to get the parent levels of the hierarchical facets when refined\n state.getRefinedHierarchicalFacets().forEach(function (refinedFacet) {\n var hierarchicalFacet = state.getHierarchicalFacetByName(refinedFacet);\n var currentRefinement = state.getHierarchicalRefinement(refinedFacet);\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n\n // If we are deeper than level 0 (starting from `beer > IPA`)\n // we want to get all parent values\n if (\n currentRefinement.length > 0 &&\n currentRefinement[0].split(separator).length > 1\n ) {\n // We generate a map of the filters we will use for our facet values queries\n var filtersMap = currentRefinement[0]\n .split(separator)\n .slice(0, -1)\n .reduce(function createFiltersMap(map, segment, level) {\n return map.concat({\n attribute: hierarchicalFacet.attributes[level],\n value:\n level === 0\n ? segment\n : [map[map.length - 1].value, segment].join(separator),\n });\n }, []);\n\n filtersMap.forEach(function (filter, level) {\n var params = requestBuilder._getDisjunctiveFacetSearchParams(\n state,\n filter.attribute,\n level === 0\n );\n\n // Keep facet filters unrelated to current hierarchical attributes\n function hasHierarchicalFacetFilter(value) {\n return hierarchicalFacet.attributes.some(function (attribute) {\n return attribute === value.split(':')[0];\n });\n }\n\n var filteredFacetFilters = (params.facetFilters || []).reduce(\n function (acc, facetFilter) {\n if (Array.isArray(facetFilter)) {\n var filtered = facetFilter.filter(function (filterValue) {\n return !hasHierarchicalFacetFilter(filterValue);\n });\n\n if (filtered.length > 0) {\n acc.push(filtered);\n }\n }\n\n if (\n typeof facetFilter === 'string' &&\n !hasHierarchicalFacetFilter(facetFilter)\n ) {\n acc.push(facetFilter);\n }\n\n return acc;\n },\n []\n );\n\n var parent = filtersMap[level - 1];\n if (level > 0) {\n params.facetFilters = filteredFacetFilters.concat(\n parent.attribute + ':' + parent.value\n );\n } else if (filteredFacetFilters.length > 0) {\n params.facetFilters = filteredFacetFilters;\n } else {\n delete params.facetFilters;\n }\n\n queries.push({ indexName: index, params: params });\n });\n }\n });\n\n return queries;\n },\n\n /**\n * Get all the queries to send to the client, those queries can used directly\n * with the Algolia client.\n * @private\n * @param {SearchParameters} state The state from which to get the queries\n * @return {object[]} The queries\n */\n _getCompositionQueries: function getQueries(state) {\n return [\n {\n compositionID: state.index,\n requestBody: {\n params: requestBuilder._getCompositionHitsSearchParams(state),\n },\n },\n ];\n },\n\n /**\n * Build search parameters used to fetch hits\n * @private\n * @param {SearchParameters} state The state from which to get the queries\n * @return {object.} The search parameters for hits\n */\n _getHitsSearchParams: function (state) {\n var facets = state.facets\n .concat(state.disjunctiveFacets)\n .concat(requestBuilder._getHitsHierarchicalFacetsAttributes(state))\n .sort();\n\n var facetFilters = requestBuilder._getFacetFilters(state);\n var numericFilters = requestBuilder._getNumericFilters(state);\n var tagFilters = requestBuilder._getTagFilters(state);\n var additionalParams = {};\n\n if (facets.length > 0) {\n additionalParams.facets = facets.indexOf('*') > -1 ? ['*'] : facets;\n }\n\n if (tagFilters.length > 0) {\n additionalParams.tagFilters = tagFilters;\n }\n\n if (facetFilters.length > 0) {\n additionalParams.facetFilters = facetFilters;\n }\n\n if (numericFilters.length > 0) {\n additionalParams.numericFilters = numericFilters;\n }\n\n return sortObject(merge({}, state.getQueryParams(), additionalParams));\n },\n\n /**\n * Build search parameters used to fetch hits\n * @private\n * @param {SearchParameters} state The state from which to get the queries\n * @return {object.} The search parameters for hits\n */\n _getCompositionHitsSearchParams: function (state) {\n var facets = state.facets\n .concat(\n state.disjunctiveFacets.map(function (value) {\n return 'disjunctive(' + value + ')';\n })\n )\n .concat(requestBuilder._getHitsHierarchicalFacetsAttributes(state))\n .sort();\n\n var facetFilters = requestBuilder._getFacetFilters(state);\n var numericFilters = requestBuilder._getNumericFilters(state);\n var tagFilters = requestBuilder._getTagFilters(state);\n var additionalParams = {};\n\n if (facets.length > 0) {\n additionalParams.facets = facets.indexOf('*') > -1 ? ['*'] : facets;\n }\n\n if (tagFilters.length > 0) {\n additionalParams.tagFilters = tagFilters;\n }\n\n if (facetFilters.length > 0) {\n additionalParams.facetFilters = facetFilters;\n }\n\n if (numericFilters.length > 0) {\n additionalParams.numericFilters = numericFilters;\n }\n\n var params = state.getQueryParams();\n\n delete params.highlightPreTag;\n delete params.highlightPostTag;\n // not a valid search parameter, it is handled in _getCompositionQueries\n delete params.index;\n\n return sortObject(merge({}, params, additionalParams));\n },\n\n /**\n * Build search parameters used to fetch a disjunctive facet\n * @private\n * @param {SearchParameters} state The state from which to get the queries\n * @param {string} facet the associated facet name\n * @param {boolean} hierarchicalRootLevel ?? FIXME\n * @return {object} The search parameters for a disjunctive facet\n */\n _getDisjunctiveFacetSearchParams: function (\n state,\n facet,\n hierarchicalRootLevel\n ) {\n var facetFilters = requestBuilder._getFacetFilters(\n state,\n facet,\n hierarchicalRootLevel\n );\n var numericFilters = requestBuilder._getNumericFilters(state, facet);\n var tagFilters = requestBuilder._getTagFilters(state);\n var additionalParams = {\n hitsPerPage: 0,\n page: 0,\n analytics: false,\n clickAnalytics: false,\n };\n\n if (tagFilters.length > 0) {\n additionalParams.tagFilters = tagFilters;\n }\n\n var hierarchicalFacet = state.getHierarchicalFacetByName(facet);\n\n if (hierarchicalFacet) {\n additionalParams.facets =\n requestBuilder._getDisjunctiveHierarchicalFacetAttribute(\n state,\n hierarchicalFacet,\n hierarchicalRootLevel\n );\n } else {\n additionalParams.facets = facet;\n }\n\n if (numericFilters.length > 0) {\n additionalParams.numericFilters = numericFilters;\n }\n\n if (facetFilters.length > 0) {\n additionalParams.facetFilters = facetFilters;\n }\n\n return sortObject(merge({}, state.getQueryParams(), additionalParams));\n },\n\n /**\n * Return the numeric filters in an algolia request fashion\n * @private\n * @param {SearchParameters} state the state from which to get the filters\n * @param {string} [facetName] the name of the attribute for which the filters should be excluded\n * @return {string[]} the numeric filters in the algolia format\n */\n _getNumericFilters: function (state, facetName) {\n if (state.numericFilters) {\n return state.numericFilters;\n }\n\n var numericFilters = [];\n\n Object.keys(state.numericRefinements).forEach(function (attribute) {\n var operators = state.numericRefinements[attribute] || {};\n Object.keys(operators).forEach(function (operator) {\n var values = operators[operator] || [];\n if (facetName !== attribute) {\n values.forEach(function (value) {\n if (Array.isArray(value)) {\n var vs = value.map(function (v) {\n return attribute + operator + v;\n });\n numericFilters.push(vs);\n } else {\n numericFilters.push(attribute + operator + value);\n }\n });\n }\n });\n });\n\n return numericFilters;\n },\n\n /**\n * Return the tags filters depending on which format is used, either tagFilters or tagRefinements\n * @private\n * @param {SearchParameters} state the state from which to get the filters\n * @return {string} Tag filters in a single string\n */\n _getTagFilters: function (state) {\n if (state.tagFilters) {\n return state.tagFilters;\n }\n\n return state.tagRefinements.join(',');\n },\n\n /**\n * Build facetFilters parameter based on current refinements. The array returned\n * contains strings representing the facet filters in the algolia format.\n * @private\n * @param {SearchParameters} state The state from which to get the queries\n * @param {string} [facet] if set, the current disjunctive facet\n * @param {boolean} [hierarchicalRootLevel] ?? FIXME\n * @return {array.} The facet filters in the algolia format\n */\n _getFacetFilters: function (state, facet, hierarchicalRootLevel) {\n var facetFilters = [];\n\n var facetsRefinements = state.facetsRefinements || {};\n Object.keys(facetsRefinements)\n .sort()\n .forEach(function (facetName) {\n var facetValues = facetsRefinements[facetName] || [];\n facetValues\n .slice()\n .sort()\n .forEach(function (facetValue) {\n facetFilters.push(facetName + ':' + facetValue);\n });\n });\n\n var facetsExcludes = state.facetsExcludes || {};\n Object.keys(facetsExcludes)\n .sort()\n .forEach(function (facetName) {\n var facetValues = facetsExcludes[facetName] || [];\n facetValues.sort().forEach(function (facetValue) {\n facetFilters.push(facetName + ':-' + facetValue);\n });\n });\n\n var disjunctiveFacetsRefinements = state.disjunctiveFacetsRefinements || {};\n Object.keys(disjunctiveFacetsRefinements)\n .sort()\n .forEach(function (facetName) {\n var facetValues = disjunctiveFacetsRefinements[facetName] || [];\n if (facetName === facet || !facetValues || facetValues.length === 0) {\n return;\n }\n var orFilters = [];\n\n facetValues\n .slice()\n .sort()\n .forEach(function (facetValue) {\n orFilters.push(facetName + ':' + facetValue);\n });\n\n facetFilters.push(orFilters);\n });\n\n var hierarchicalFacetsRefinements =\n state.hierarchicalFacetsRefinements || {};\n Object.keys(hierarchicalFacetsRefinements)\n .sort()\n .forEach(function (facetName) {\n var facetValues = hierarchicalFacetsRefinements[facetName] || [];\n var facetValue = facetValues[0];\n\n if (facetValue === undefined) {\n return;\n }\n\n var hierarchicalFacet = state.getHierarchicalFacetByName(facetName);\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n var rootPath = state._getHierarchicalRootPath(hierarchicalFacet);\n var attributeToRefine;\n var attributesIndex;\n\n // we ask for parent facet values only when the `facet` is the current hierarchical facet\n if (facet === facetName) {\n // if we are at the root level already, no need to ask for facet values, we get them from\n // the hits query\n if (\n facetValue.indexOf(separator) === -1 ||\n (!rootPath && hierarchicalRootLevel === true) ||\n (rootPath &&\n rootPath.split(separator).length ===\n facetValue.split(separator).length)\n ) {\n return;\n }\n\n if (!rootPath) {\n attributesIndex = facetValue.split(separator).length - 2;\n facetValue = facetValue.slice(0, facetValue.lastIndexOf(separator));\n } else {\n attributesIndex = rootPath.split(separator).length - 1;\n facetValue = rootPath;\n }\n\n attributeToRefine = hierarchicalFacet.attributes[attributesIndex];\n } else {\n attributesIndex = facetValue.split(separator).length - 1;\n\n attributeToRefine = hierarchicalFacet.attributes[attributesIndex];\n }\n\n if (attributeToRefine) {\n facetFilters.push([attributeToRefine + ':' + facetValue]);\n }\n });\n\n return facetFilters;\n },\n\n _getHitsHierarchicalFacetsAttributes: function (state) {\n var out = [];\n\n return state.hierarchicalFacets.reduce(\n // ask for as much levels as there's hierarchical refinements\n function getHitsAttributesForHierarchicalFacet(\n allAttributes,\n hierarchicalFacet\n ) {\n var hierarchicalRefinement = state.getHierarchicalRefinement(\n hierarchicalFacet.name\n )[0];\n\n // if no refinement, ask for root level\n if (!hierarchicalRefinement) {\n allAttributes.push(hierarchicalFacet.attributes[0]);\n return allAttributes;\n }\n\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n var level = hierarchicalRefinement.split(separator).length;\n var newAttributes = hierarchicalFacet.attributes.slice(0, level + 1);\n\n return allAttributes.concat(newAttributes);\n },\n out\n );\n },\n\n _getDisjunctiveHierarchicalFacetAttribute: function (\n state,\n hierarchicalFacet,\n rootLevel\n ) {\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n if (rootLevel === true) {\n var rootPath = state._getHierarchicalRootPath(hierarchicalFacet);\n var attributeIndex = 0;\n\n if (rootPath) {\n attributeIndex = rootPath.split(separator).length;\n }\n return [hierarchicalFacet.attributes[attributeIndex]];\n }\n\n var hierarchicalRefinement =\n state.getHierarchicalRefinement(hierarchicalFacet.name)[0] || '';\n // if refinement is 'beers > IPA > Flying dog',\n // then we want `facets: ['beers > IPA']` as disjunctive facet (parent level values)\n\n var parentLevel = hierarchicalRefinement.split(separator).length - 1;\n return hierarchicalFacet.attributes.slice(0, parentLevel + 1);\n },\n\n getSearchForFacetQuery: function (facetName, query, maxFacetHits, state) {\n var stateForSearchForFacetValues = state.isDisjunctiveFacet(facetName)\n ? state.clearRefinements(facetName)\n : state;\n var searchForFacetSearchParameters = {\n facetQuery: query,\n facetName: facetName,\n };\n if (typeof maxFacetHits === 'number') {\n searchForFacetSearchParameters.maxFacetHits = maxFacetHits;\n }\n return sortObject(\n merge(\n {},\n requestBuilder._getHitsSearchParams(stateForSearchForFacetValues),\n searchForFacetSearchParameters\n )\n );\n },\n};\n\nmodule.exports = requestBuilder;\n\n\n/***/ }),\n\n/***/ 46801:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nmodule.exports = function isValidUserToken(userToken) {\n if (userToken === null) {\n return false;\n }\n return /^[a-zA-Z0-9_-]{1,64}$/.test(userToken);\n};\n\n\n/***/ }),\n\n/***/ 97878:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar find = __webpack_require__(7888);\nvar flat = __webpack_require__(7948);\n\nfunction getAverageIndices(indexTracker, nrOfObjs) {\n var avgIndices = [];\n\n Object.keys(indexTracker).forEach(function (key) {\n if (indexTracker[key].count < 2) {\n indexTracker[key].indexSum += 100;\n }\n avgIndices.push({\n objectID: key,\n avgOfIndices: indexTracker[key].indexSum / nrOfObjs,\n });\n });\n\n return avgIndices.sort(function (a, b) {\n return a.avgOfIndices > b.avgOfIndices ? 1 : -1;\n });\n}\n\nfunction sortAndMergeRecommendations(results) {\n var indexTracker = {};\n\n results.forEach(function (hits) {\n hits.forEach(function (hit, index) {\n if (!indexTracker[hit.objectID]) {\n indexTracker[hit.objectID] = { indexSum: index, count: 1 };\n } else {\n indexTracker[hit.objectID] = {\n indexSum: indexTracker[hit.objectID].indexSum + index,\n count: indexTracker[hit.objectID].count + 1,\n };\n }\n });\n });\n\n var sortedAverageIndices = getAverageIndices(indexTracker, results.length);\n\n var finalOrder = sortedAverageIndices.reduce(function (\n orderedHits,\n avgIndexRef\n ) {\n var result = find(flat(results), function (hit) {\n return hit.objectID === avgIndexRef.objectID;\n });\n return result ? orderedHits.concat(result) : orderedHits;\n },\n []);\n\n return finalOrder;\n}\n\nmodule.exports = sortAndMergeRecommendations;\n\n\n/***/ }),\n\n/***/ 24336:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nmodule.exports = '3.24.2';\n\n\n/***/ }),\n\n/***/ 24955:\n/***/ (function(module) {\n\n/*! algoliasearch.umd.js | 4.24.0 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */\n!function(t,e){ true?module.exports=e():0}(this,(function(){\"use strict\";function t(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n=0||(a[r]=t[r]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}function a(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(!(Symbol.iterator in Object(t)||\"[object Arguments]\"===Object.prototype.toString.call(t)))return;var r=[],n=!0,a=!1,o=void 0;try{for(var i,u=t[Symbol.iterator]();!(n=(i=u.next()).done)&&(r.push(i.value),!e||r.length!==e);n=!0);}catch(t){a=!0,o=t}finally{try{n||null==u.return||u.return()}finally{if(a)throw o}}return r}(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}()}function o(t){return function(t){if(Array.isArray(t)){for(var e=0,r=new Array(t.length);e2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){u();var e=JSON.stringify(t);return o()[e]})).then((function(t){return Promise.all([t?t.value:e(),void 0!==t])})).then((function(t){var e=a(t,2),n=e[0],o=e[1];return Promise.all([n,o||r.miss(n)])})).then((function(t){return a(t,1)[0]}))},set:function(t,e){return Promise.resolve().then((function(){var a=o();return a[JSON.stringify(t)]={timestamp:(new Date).getTime(),value:e},n().setItem(r,JSON.stringify(a)),e}))},delete:function(t){return Promise.resolve().then((function(){var e=o();delete e[JSON.stringify(t)],n().setItem(r,JSON.stringify(e))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function u(t){var e=o(t.caches),r=e.shift();return void 0===r?{get:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},n=e();return n.then((function(t){return Promise.all([t,r.miss(t)])})).then((function(t){return a(t,1)[0]}))},set:function(t,e){return Promise.resolve(e)},delete:function(t){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(t,n){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(t,n,a).catch((function(){return u({caches:e}).get(t,n,a)}))},set:function(t,n){return r.set(t,n).catch((function(){return u({caches:e}).set(t,n)}))},delete:function(t){return r.delete(t).catch((function(){return u({caches:e}).delete(t)}))},clear:function(){return r.clear().catch((function(){return u({caches:e}).clear()}))}}}function s(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},e={};return{get:function(r,n){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},o=JSON.stringify(r);if(o in e)return Promise.resolve(t.serializable?JSON.parse(e[o]):e[o]);var i=n(),u=a&&a.miss||function(){return Promise.resolve()};return i.then((function(t){return u(t)})).then((function(){return i}))},set:function(r,n){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(t){return delete e[JSON.stringify(t)],Promise.resolve()},clear:function(){return e={},Promise.resolve()}}}function c(t,e,r){var n={\"x-algolia-api-key\":r,\"x-algolia-application-id\":e};return{headers:function(){return t===m.WithinHeaders?n:{}},queryParameters:function(){return t===m.WithinQueryParameters?n:{}}}}function f(t){var e=0;return t((function r(){return e++,new Promise((function(n){setTimeout((function(){n(t(r))}),Math.min(100*e,1e3))}))}))}function d(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(t,e){return Promise.resolve()};return Object.assign(t,{wait:function(r){return d(t.then((function(t){return Promise.all([e(t,r),t])})).then((function(t){return t[1]})))}})}function l(t){for(var e=t.length-1;e>0;e--){var r=Math.floor(Math.random()*(e+1)),n=t[e];t[e]=t[r],t[r]=n}return t}function h(t,e){return e?(Object.keys(e).forEach((function(r){t[r]=e[r](t)})),t):t}function p(t){for(var e=arguments.length,r=new Array(e>1?e-1:0),n=1;n0?n:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var g={Read:1,Write:2,Any:3},v=1,b=2,P=3;function O(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:v;return r(r({},t),{},{status:e,lastUpdate:Date.now()})}function w(t){return\"string\"==typeof t?{protocol:\"https\",url:t,accept:g.Any}:{protocol:t.protocol||\"https\",url:t.url,accept:t.accept||g.Any}}var I=\"DELETE\",x=\"GET\",j=\"POST\",D=\"PUT\";function q(t,e){return Promise.all(e.map((function(e){return t.get(e,(function(){return Promise.resolve(O(e))}))}))).then((function(t){var r=t.filter((function(t){return function(t){return t.status===v||Date.now()-t.lastUpdate>12e4}(t)})),n=t.filter((function(t){return function(t){return t.status===P&&Date.now()-t.lastUpdate<=12e4}(t)})),a=[].concat(o(r),o(n));return{getTimeout:function(t,e){return(0===n.length&&0===t?1:n.length+3+t)*e},statelessHosts:a.length>0?a.map((function(t){return w(t)})):e}}))}function S(t,e,n,a){var i=[],u=function(t,e){if(t.method===x||void 0===t.data&&void 0===e.data)return;var n=Array.isArray(t.data)?t.data:r(r({},t.data),e.data);return JSON.stringify(n)}(n,a),s=function(t,e){var n=r(r({},t.headers),e.headers),a={};return Object.keys(n).forEach((function(t){var e=n[t];a[t.toLowerCase()]=e})),a}(t,a),c=n.method,f=n.method!==x?{}:r(r({},n.data),a.data),d=r(r(r({\"x-algolia-agent\":t.userAgent.value},t.queryParameters),f),a.queryParameters),l=0,h=function e(r,o){var f=r.pop();if(void 0===f)throw{name:\"RetryError\",message:\"Unreachable hosts - your application id may be incorrect. If the error persists, please reach out to the Algolia Support team: https://alg.li/support .\",transporterStackTrace:E(i)};var h={data:u,headers:s,method:c,url:N(f,n.path,d),connectTimeout:o(l,t.timeouts.connect),responseTimeout:o(l,a.timeout)},p=function(t){var e={request:h,response:t,host:f,triesLeft:r.length};return i.push(e),e},m={onSuccess:function(t){return function(t){try{return JSON.parse(t.content)}catch(e){throw function(t,e){return{name:\"DeserializationError\",message:t,response:e}}(e.message,t)}}(t)},onRetry:function(n){var a=p(n);return n.isTimedOut&&l++,Promise.all([t.logger.info(\"Retryable failure\",A(a)),t.hostsCache.set(f,O(f,n.isTimedOut?P:b))]).then((function(){return e(r,o)}))},onFail:function(t){throw p(t),function(t,e){var r=t.content,n=t.status,a=r;try{a=JSON.parse(r).message}catch(t){}return function(t,e,r){return{name:\"ApiError\",message:t,status:e,transporterStackTrace:r}}(a,n,e)}(t,E(i))}};return t.requester.send(h).then((function(t){return function(t,e){return function(t){var e=t.status;return t.isTimedOut||function(t){var e=t.isTimedOut,r=t.status;return!e&&0==~~r}(t)||2!=~~(e/100)&&4!=~~(e/100)}(t)?e.onRetry(t):2==~~(t.status/100)?e.onSuccess(t):e.onFail(t)}(t,m)}))};return q(t.hostsCache,e).then((function(t){return h(o(t.statelessHosts).reverse(),t.getTimeout)}))}function k(t){var e=t.hostsCache,r=t.logger,n=t.requester,o=t.requestsCache,i=t.responsesCache,u=t.timeouts,s=t.userAgent,c=t.hosts,f=t.queryParameters,d={hostsCache:e,logger:r,requester:n,requestsCache:o,responsesCache:i,timeouts:u,userAgent:s,headers:t.headers,queryParameters:f,hosts:c.map((function(t){return w(t)})),read:function(t,e){var r=y(e,d.timeouts.read),n=function(){return S(d,d.hosts.filter((function(t){return 0!=(t.accept&g.Read)})),t,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:t.cacheable))return n();var o={request:t,mappedRequestOptions:r,transporter:{queryParameters:d.queryParameters,headers:d.headers}};return d.responsesCache.get(o,(function(){return d.requestsCache.get(o,(function(){return d.requestsCache.set(o,n()).then((function(t){return Promise.all([d.requestsCache.delete(o),t])}),(function(t){return Promise.all([d.requestsCache.delete(o),Promise.reject(t)])})).then((function(t){var e=a(t,2);e[0];return e[1]}))}))}),{miss:function(t){return d.responsesCache.set(o,t)}})},write:function(t,e){return S(d,d.hosts.filter((function(t){return 0!=(t.accept&g.Write)})),t,y(e,d.timeouts.write))}};return d}function T(t){var e={value:\"Algolia for JavaScript (\".concat(t,\")\"),add:function(t){var r=\"; \".concat(t.segment).concat(void 0!==t.version?\" (\".concat(t.version,\")\"):\"\");return-1===e.value.indexOf(r)&&(e.value=\"\".concat(e.value).concat(r)),e}};return e}function N(t,e,r){var n=R(r),a=\"\".concat(t.protocol,\"://\").concat(t.url,\"/\").concat(\"/\"===e.charAt(0)?e.substr(1):e);return n.length&&(a+=\"?\".concat(n)),a}function R(t){return Object.keys(t).map((function(e){return p(\"%s=%s\",e,(r=t[e],\"[object Object]\"===Object.prototype.toString.call(r)||\"[object Array]\"===Object.prototype.toString.call(r)?JSON.stringify(t[e]):t[e]));var r})).join(\"&\")}function E(t){return t.map((function(t){return A(t)}))}function A(t){var e=t.request.headers[\"x-algolia-api-key\"]?{\"x-algolia-api-key\":\"*****\"}:{};return r(r({},t),{},{request:r(r({},t.request),{},{headers:r(r({},t.request.headers),e)})})}var C=function(t){return function(e,r){return t.transporter.write({method:j,path:\"2/abtests\",data:e},r)}},U=function(t){return function(e,r){return t.transporter.write({method:I,path:p(\"2/abtests/%s\",e)},r)}},z=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"2/abtests/%s\",e)},r)}},J=function(t){return function(e){return t.transporter.read({method:x,path:\"2/abtests\"},e)}},F=function(t){return function(e,r){return t.transporter.write({method:j,path:p(\"2/abtests/%s/stop\",e)},r)}},H=function(t){return function(e){return t.transporter.read({method:x,path:\"1/strategies/personalization\"},e)}},M=function(t){return function(e,r){return t.transporter.write({method:j,path:\"1/strategies/personalization\",data:e},r)}};function B(t){return function e(r){return t.request(r).then((function(n){if(void 0!==t.batch&&t.batch(n.hits),!t.shouldStop(n))return n.cursor?e({cursor:n.cursor}):e({page:(r.page||0)+1})}))}({})}var K=function(t){return function(e,a){var o=a||{},i=o.queryParameters,u=n(o,[\"queryParameters\"]),s=r({acl:e},void 0!==i?{queryParameters:i}:{});return d(t.transporter.write({method:j,path:\"1/keys\",data:s},u),(function(e,r){return f((function(n){return tt(t)(e.key,r).catch((function(t){if(404!==t.status)throw t;return n()}))}))}))}},W=function(t){return function(e,r,n){var a=y(n);return a.queryParameters[\"X-Algolia-User-ID\"]=e,t.transporter.write({method:j,path:\"1/clusters/mapping\",data:{cluster:r}},a)}},L=function(t){return function(e,r,n){return t.transporter.write({method:j,path:\"1/clusters/mapping/batch\",data:{users:e,cluster:r}},n)}},Q=function(t){return function(e,r){return d(t.transporter.write({method:j,path:p(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!0,requests:{action:\"addEntry\",body:[]}}},r),(function(e,r){return jt(t)(e.taskID,r)}))}},G=function(t){return function(e,r,n){return d(t.transporter.write({method:j,path:p(\"1/indexes/%s/operation\",e),data:{operation:\"copy\",destination:r}},n),(function(r,n){return ut(t)(e,{methods:{waitTask:de}}).waitTask(r.taskID,n)}))}},V=function(t){return function(e,n,a){return G(t)(e,n,r(r({},a),{},{scope:[he.Rules]}))}},_=function(t){return function(e,n,a){return G(t)(e,n,r(r({},a),{},{scope:[he.Settings]}))}},X=function(t){return function(e,n,a){return G(t)(e,n,r(r({},a),{},{scope:[he.Synonyms]}))}},Y=function(t){return function(e,r){return e.method===x?t.transporter.read(e,r):t.transporter.write(e,r)}},Z=function(t){return function(e,r){return d(t.transporter.write({method:I,path:p(\"1/keys/%s\",e)},r),(function(r,n){return f((function(r){return tt(t)(e,n).then(r).catch((function(t){if(404!==t.status)throw t}))}))}))}},$=function(t){return function(e,r,n){var a=r.map((function(t){return{action:\"deleteEntry\",body:{objectID:t}}}));return d(t.transporter.write({method:j,path:p(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!1,requests:a}},n),(function(e,r){return jt(t)(e.taskID,r)}))}},tt=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"1/keys/%s\",e)},r)}},et=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"1/task/%s\",e.toString())},r)}},rt=function(t){return function(e){return t.transporter.read({method:x,path:\"/1/dictionaries/*/settings\"},e)}},nt=function(t){return function(e){return t.transporter.read({method:x,path:\"1/logs\"},e)}},at=function(t){return function(e){return t.transporter.read({method:x,path:\"1/clusters/mapping/top\"},e)}},ot=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"1/clusters/mapping/%s\",e)},r)}},it=function(t){return function(e){var r=e||{},a=r.retrieveMappings,o=n(r,[\"retrieveMappings\"]);return!0===a&&(o.getClusters=!0),t.transporter.read({method:x,path:\"1/clusters/mapping/pending\"},o)}},ut=function(t){return function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={transporter:t.transporter,appId:t.appId,indexName:e};return h(n,r.methods)}},st=function(t){return function(e){return t.transporter.read({method:x,path:\"1/keys\"},e)}},ct=function(t){return function(e){return t.transporter.read({method:x,path:\"1/clusters\"},e)}},ft=function(t){return function(e){return t.transporter.read({method:x,path:\"1/indexes\"},e)}},dt=function(t){return function(e){return t.transporter.read({method:x,path:\"1/clusters/mapping\"},e)}},lt=function(t){return function(e,r,n){return d(t.transporter.write({method:j,path:p(\"1/indexes/%s/operation\",e),data:{operation:\"move\",destination:r}},n),(function(r,n){return ut(t)(e,{methods:{waitTask:de}}).waitTask(r.taskID,n)}))}},ht=function(t){return function(e,r){return d(t.transporter.write({method:j,path:\"1/indexes/*/batch\",data:{requests:e}},r),(function(e,r){return Promise.all(Object.keys(e.taskID).map((function(n){return ut(t)(n,{methods:{waitTask:de}}).waitTask(e.taskID[n],r)})))}))}},pt=function(t){return function(e,r){return t.transporter.read({method:j,path:\"1/indexes/*/objects\",data:{requests:e}},r)}},mt=function(t){return function(e,n){var a=e.map((function(t){return r(r({},t),{},{params:R(t.params||{})})}));return t.transporter.read({method:j,path:\"1/indexes/*/queries\",data:{requests:a},cacheable:!0},n)}},yt=function(t){return function(e,a){return Promise.all(e.map((function(e){var o=e.params,i=o.facetName,u=o.facetQuery,s=n(o,[\"facetName\",\"facetQuery\"]);return ut(t)(e.indexName,{methods:{searchForFacetValues:ue}}).searchForFacetValues(i,u,r(r({},a),s))})))}},gt=function(t){return function(e,r){var n=y(r);return n.queryParameters[\"X-Algolia-User-ID\"]=e,t.transporter.write({method:I,path:\"1/clusters/mapping\"},n)}},vt=function(t){return function(e,r,n){var a=r.map((function(t){return{action:\"addEntry\",body:t}}));return d(t.transporter.write({method:j,path:p(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!0,requests:a}},n),(function(e,r){return jt(t)(e.taskID,r)}))}},bt=function(t){return function(e,r){return d(t.transporter.write({method:j,path:p(\"1/keys/%s/restore\",e)},r),(function(r,n){return f((function(r){return tt(t)(e,n).catch((function(t){if(404!==t.status)throw t;return r()}))}))}))}},Pt=function(t){return function(e,r,n){var a=r.map((function(t){return{action:\"addEntry\",body:t}}));return d(t.transporter.write({method:j,path:p(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!1,requests:a}},n),(function(e,r){return jt(t)(e.taskID,r)}))}},Ot=function(t){return function(e,r,n){return t.transporter.read({method:j,path:p(\"/1/dictionaries/%s/search\",e),data:{query:r},cacheable:!0},n)}},wt=function(t){return function(e,r){return t.transporter.read({method:j,path:\"1/clusters/mapping/search\",data:{query:e}},r)}},It=function(t){return function(e,r){return d(t.transporter.write({method:D,path:\"/1/dictionaries/*/settings\",data:e},r),(function(e,r){return jt(t)(e.taskID,r)}))}},xt=function(t){return function(e,r){var a=Object.assign({},r),o=r||{},i=o.queryParameters,u=n(o,[\"queryParameters\"]),s=i?{queryParameters:i}:{},c=[\"acl\",\"indexes\",\"referers\",\"restrictSources\",\"queryParameters\",\"description\",\"maxQueriesPerIPPerHour\",\"maxHitsPerQuery\"];return d(t.transporter.write({method:D,path:p(\"1/keys/%s\",e),data:s},u),(function(r,n){return f((function(r){return tt(t)(e,n).then((function(t){return function(t){return Object.keys(a).filter((function(t){return-1!==c.indexOf(t)})).every((function(e){if(Array.isArray(t[e])&&Array.isArray(a[e])){var r=t[e];return r.length===a[e].length&&r.every((function(t,r){return t===a[e][r]}))}return t[e]===a[e]}))}(t)?Promise.resolve():r()}))}))}))}},jt=function(t){return function(e,r){return f((function(n){return et(t)(e,r).then((function(t){return\"published\"!==t.status?n():void 0}))}))}},Dt=function(t){return function(e,r){return d(t.transporter.write({method:j,path:p(\"1/indexes/%s/batch\",t.indexName),data:{requests:e}},r),(function(e,r){return de(t)(e.taskID,r)}))}},qt=function(t){return function(e){return B(r(r({shouldStop:function(t){return void 0===t.cursor}},e),{},{request:function(r){return t.transporter.read({method:j,path:p(\"1/indexes/%s/browse\",t.indexName),data:r},e)}}))}},St=function(t){return function(e){var n=r({hitsPerPage:1e3},e);return B(r(r({shouldStop:function(t){return t.hits.length0&&void 0!==arguments[0]?arguments[0]:0,c=[];for(a=o;a=t.nbPages)throw{name:\"ObjectNotFoundError\",message:\"Object not found.\"};return n()}))}()}},Kt=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"1/indexes/%s/%s\",t.indexName,e)},r)}},Wt=function(){return function(t,e){for(var r=0,n=Object.entries(t.hits);rr.OPENED&&void 0===n&&(clearTimeout(o),n=a(t.responseTimeout,\"Socket timeout\"))},r.onerror=function(){0===r.status&&(clearTimeout(o),clearTimeout(n),e({content:r.responseText||\"Network request failed\",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(o),clearTimeout(n),e({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(t.data)}))}},logger:(a=ye,{debug:function(t,e){return pe>=a&&console.debug(t,e),Promise.resolve()},info:function(t,e){return me>=a&&console.info(t,e),Promise.resolve()},error:function(t,e){return console.error(t,e),Promise.resolve()}}),responsesCache:s(),requestsCache:s({serializable:!1}),hostsCache:u({caches:[i({key:\"\".concat(\"4.24.0\",\"-\").concat(t)}),s()]}),userAgent:T(\"4.24.0\").add({segment:\"Browser\"})},f=r(r({},o),n),d=function(){return function(t){return function(t){var e=t.region||\"us\",n=c(m.WithinHeaders,t.appId,t.apiKey),a=k(r(r({hosts:[{url:\"personalization.\".concat(e,\".algolia.com\")}]},t),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/json\"}),t.headers),queryParameters:r(r({},n.queryParameters()),t.queryParameters)}));return h({appId:t.appId,transporter:a},t.methods)}(r(r(r({},o),t),{},{methods:{getPersonalizationStrategy:H,setPersonalizationStrategy:M}}))}};return function(t){var e=t.appId,n=c(void 0!==t.authMode?t.authMode:m.WithinHeaders,e,t.apiKey),a=k(r(r({hosts:[{url:\"\".concat(e,\"-dsn.algolia.net\"),accept:g.Read},{url:\"\".concat(e,\".algolia.net\"),accept:g.Write}].concat(l([{url:\"\".concat(e,\"-1.algolianet.com\")},{url:\"\".concat(e,\"-2.algolianet.com\")},{url:\"\".concat(e,\"-3.algolianet.com\")}]))},t),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/x-www-form-urlencoded\"}),t.headers),queryParameters:r(r({},n.queryParameters()),t.queryParameters)}));return h({transporter:a,appId:e,addAlgoliaAgent:function(t,e){a.userAgent.add({segment:t,version:e})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},t.methods)}(r(r({},f),{},{methods:{search:mt,searchForFacetValues:yt,multipleBatch:ht,multipleGetObjects:pt,multipleQueries:mt,copyIndex:G,copySettings:_,copySynonyms:X,copyRules:V,moveIndex:lt,listIndices:ft,getLogs:nt,listClusters:ct,multipleSearchForFacetValues:yt,getApiKey:tt,addApiKey:K,listApiKeys:st,updateApiKey:xt,deleteApiKey:Z,restoreApiKey:bt,assignUserID:W,assignUserIDs:L,getUserID:ot,searchUserIDs:wt,listUserIDs:dt,getTopUserIDs:at,removeUserID:gt,hasPendingMappings:it,clearDictionaryEntries:Q,deleteDictionaryEntries:$,getDictionarySettings:rt,getAppTask:et,replaceDictionaryEntries:vt,saveDictionaryEntries:Pt,searchDictionaryEntries:Ot,setDictionarySettings:It,waitAppTask:jt,customRequest:Y,initIndex:function(t){return function(e){return ut(t)(e,{methods:{batch:Dt,delete:Ct,findAnswers:Mt,getObject:Kt,getObjects:Lt,saveObject:te,saveObjects:ee,search:ie,searchForFacetValues:ue,waitTask:de,setSettings:fe,getSettings:Gt,partialUpdateObject:_t,partialUpdateObjects:Xt,deleteObject:Ut,deleteObjects:zt,deleteBy:At,clearObjects:Nt,browseObjects:qt,getObjectPosition:Wt,findObject:Bt,exists:Ht,saveSynonym:ae,saveSynonyms:oe,getSynonym:Vt,searchSynonyms:ce,browseSynonyms:kt,deleteSynonym:Ft,clearSynonyms:Et,replaceAllObjects:Yt,replaceAllSynonyms:$t,searchRules:se,getRule:Qt,deleteRule:Jt,saveRule:re,saveRules:ne,replaceAllRules:Zt,browseRules:St,clearRules:Rt}})}},initAnalytics:function(){return function(t){return function(t){var e=t.region||\"us\",n=c(m.WithinHeaders,t.appId,t.apiKey),a=k(r(r({hosts:[{url:\"analytics.\".concat(e,\".algolia.com\")}]},t),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/json\"}),t.headers),queryParameters:r(r({},n.queryParameters()),t.queryParameters)}));return h({appId:t.appId,transporter:a},t.methods)}(r(r(r({},o),t),{},{methods:{addABTest:C,getABTest:z,getABTests:J,stopABTest:F,deleteABTest:U}}))}},initPersonalization:d,initRecommendation:function(){return function(t){return f.logger.info(\"The `initRecommendation` method is deprecated. Use `initPersonalization` instead.\"),d()(t)}},getRecommendations:ge,getFrequentlyBoughtTogether:ve,getLookingSimilar:we,getRecommendedForYou:Ie,getRelatedProducts:be,getTrendingFacets:Pe,getTrendingItems:Oe}}))}return xe.version=\"4.24.0\",xe}));\n\n\n/***/ }),\n\n/***/ 33321:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(82109);\nvar DESCRIPTORS = __webpack_require__(19781);\nvar defineProperties = __webpack_require__(36048);\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\n$({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, {\n defineProperties: defineProperties\n});\n\n\n/***/ }),\n\n/***/ 43371:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(82109);\nvar FREEZING = __webpack_require__(76677);\nvar fails = __webpack_require__(47293);\nvar isObject = __webpack_require__(70111);\nvar onFreeze = (__webpack_require__(62423).onFreeze);\n\nvar nativeFreeze = Object.freeze;\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeFreeze(1); });\n\n// `Object.freeze` method\n// https://tc39.github.io/ecma262/#sec-object.freeze\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n freeze: function freeze(it) {\n return nativeFreeze && isObject(it) ? nativeFreeze(onFreeze(it)) : it;\n }\n});\n\n\n/***/ }),\n\n/***/ 38880:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(82109);\nvar fails = __webpack_require__(47293);\nvar toIndexedObject = __webpack_require__(45656);\nvar nativeGetOwnPropertyDescriptor = (__webpack_require__(31236).f);\nvar DESCRIPTORS = __webpack_require__(19781);\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n\n\n/***/ }),\n\n/***/ 49337:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(82109);\nvar DESCRIPTORS = __webpack_require__(19781);\nvar ownKeys = __webpack_require__(53887);\nvar toIndexedObject = __webpack_require__(45656);\nvar getOwnPropertyDescriptorModule = __webpack_require__(31236);\nvar createProperty = __webpack_require__(86135);\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n\n\n/***/ }),\n\n/***/ 37268:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(82109);\nvar createHTML = __webpack_require__(14230);\nvar forcedStringHTMLMethod = __webpack_require__(43429);\n\n// `String.prototype.small` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.small\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('small') }, {\n small: function small() {\n return createHTML(this, 'small', '', '');\n }\n});\n\n\n/***/ }),\n\n/***/ 7544:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(91203)\n\n\n/***/ }),\n\n/***/ 90358:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"m\": function() { return /* binding */ getSearchClient; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74916);\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var algoliasearch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(24955);\n/* harmony import */ var algoliasearch__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(algoliasearch__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _helpers_Constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(24036);\n\n\n\nvar clients = {\n search: null,\n write: null\n};\nvar getSearchClient = function getSearchClient() {\n if (false) {}\n\n if (!clients.search) {\n clients.search = algoliasearch__WEBPACK_IMPORTED_MODULE_2___default()(\"B62GNB1Q51\", \"8818bd5008300b0eeaf62262d5948808\");\n }\n\n return clients.search;\n};\n\n/***/ }),\n\n/***/ 24036:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"$6\": function() { return /* binding */ MarkdownTextConstants; },\n/* harmony export */ \"$G\": function() { return /* binding */ LanguageSelectionConstants; },\n/* harmony export */ \"$c\": function() { return /* binding */ SpotlightSliderConstants; },\n/* harmony export */ \"Al\": function() { return /* binding */ CampaignIframeOverlayConstants; },\n/* harmony export */ \"BE\": function() { return /* binding */ CollectionTabsBlockConstants; },\n/* harmony export */ \"C3\": function() { return /* binding */ StarRatingConstants; },\n/* harmony export */ \"CR\": function() { return /* binding */ PressQuoteBlockConstants; },\n/* harmony export */ \"Cv\": function() { return /* binding */ CountryCode; },\n/* harmony export */ \"D$\": function() { return /* binding */ ComparisonChartBlockConstants; },\n/* harmony export */ \"D4\": function() { return /* binding */ ArticleHeroBlockConstants; },\n/* harmony export */ \"DI\": function() { return /* binding */ ArticleCategoryHeroBlockConstants; },\n/* harmony export */ \"Dz\": function() { return /* binding */ ButtonTabsNavigationConstant; },\n/* harmony export */ \"Ef\": function() { return /* binding */ YoutubeVideoConstants; },\n/* harmony export */ \"F2\": function() { return /* binding */ ProductHighlightsConstants; },\n/* harmony export */ \"FS\": function() { return /* binding */ SpotlightStickyBarConstants; },\n/* harmony export */ \"FU\": function() { return /* binding */ MetaConstants; },\n/* harmony export */ \"GI\": function() { return /* binding */ AnnouncementBarConstants; },\n/* harmony export */ \"GK\": function() { return /* binding */ LayoutConstants; },\n/* harmony export */ \"IH\": function() { return /* binding */ SpotlightWaitlistConstants; },\n/* harmony export */ \"If\": function() { return /* binding */ AppDownloadBlockConstants; },\n/* harmony export */ \"JA\": function() { return /* binding */ algoliaReducerConstants; },\n/* harmony export */ \"Jf\": function() { return /* binding */ ArticleShareConstants; },\n/* harmony export */ \"K1\": function() { return /* binding */ VideoPlayerConstants; },\n/* harmony export */ \"Kd\": function() { return /* binding */ ContentConstants; },\n/* harmony export */ \"LU\": function() { return /* binding */ AdditionalReadingBlockConstants; },\n/* harmony export */ \"Lh\": function() { return /* binding */ IconsConstant; },\n/* harmony export */ \"NM\": function() { return /* binding */ CarouselBlockConstants; },\n/* harmony export */ \"P\": function() { return /* binding */ miniContentBlockConstants; },\n/* harmony export */ \"P8\": function() { return /* binding */ LegacyProductHighlightsConstants; },\n/* harmony export */ \"Po\": function() { return /* binding */ UnderlineTabsNavigationConstants; },\n/* harmony export */ \"Qb\": function() { return /* binding */ SeriesSelectorConstants; },\n/* harmony export */ \"RH\": function() { return /* binding */ ProductSubNavConstants; },\n/* harmony export */ \"SS\": function() { return /* binding */ SearchServiceConstants; },\n/* harmony export */ \"Sj\": function() { return /* binding */ SeriesTabsConstants; },\n/* harmony export */ \"Tp\": function() { return /* binding */ SideBySideContainerConstants; },\n/* harmony export */ \"Uo\": function() { return /* binding */ BazaarVoiceConstants; },\n/* harmony export */ \"Vn\": function() { return /* binding */ TabbedContentConstants; },\n/* harmony export */ \"Vt\": function() { return /* binding */ FaqDetailsBlockConstants; },\n/* harmony export */ \"WQ\": function() { return /* binding */ SpotlightContentBlockConstants; },\n/* harmony export */ \"X\": function() { return /* binding */ WarrantyExtensionConstants; },\n/* harmony export */ \"XI\": function() { return /* binding */ OrganizationConstants; },\n/* harmony export */ \"Xx\": function() { return /* binding */ ContentSeriesSelectorConstants; },\n/* harmony export */ \"ZJ\": function() { return /* binding */ FileTypeConstants; },\n/* harmony export */ \"a9\": function() { return /* binding */ ComponentFactoryConstants; },\n/* harmony export */ \"al\": function() { return /* binding */ ProductOverviewConstant; },\n/* harmony export */ \"az\": function() { return /* binding */ FAQBlockConstants; },\n/* harmony export */ \"bk\": function() { return /* binding */ ShowcaseBlockConstants; },\n/* harmony export */ \"cj\": function() { return /* binding */ ProductOverlayConstants; },\n/* harmony export */ \"cl\": function() { return /* binding */ ResponsiveImageConstants; },\n/* harmony export */ \"dZ\": function() { return /* binding */ ImageContenfullConstants; },\n/* harmony export */ \"dd\": function() { return /* binding */ SeeMoreButtonConstants; },\n/* harmony export */ \"dx\": function() { return /* binding */ RecentlyViewedProductsBlockConstants; },\n/* harmony export */ \"f5\": function() { return /* binding */ SeriesComparisonItemConstants; },\n/* harmony export */ \"fE\": function() { return /* binding */ PromoConstants; },\n/* harmony export */ \"gP\": function() { return /* binding */ BrushConfiguratorConstants; },\n/* harmony export */ \"gT\": function() { return /* binding */ Constants; },\n/* harmony export */ \"gu\": function() { return /* binding */ OnePageScrollConstants; },\n/* harmony export */ \"hN\": function() { return /* binding */ PypestreamChatConstants; },\n/* harmony export */ \"hx\": function() { return /* binding */ metaConstant; },\n/* harmony export */ \"i6\": function() { return /* binding */ dentistContacts; },\n/* harmony export */ \"iH\": function() { return /* binding */ SvcApiConstants; },\n/* harmony export */ \"j0\": function() { return /* binding */ ZoneConstants; },\n/* harmony export */ \"j6\": function() { return /* binding */ ImageConstants; },\n/* harmony export */ \"k9\": function() { return /* binding */ BuySeriesConstants; },\n/* harmony export */ \"lS\": function() { return /* binding */ InTheBoxBlockConstants; },\n/* harmony export */ \"m_\": function() { return /* binding */ ContentVideoConstants; },\n/* harmony export */ \"nq\": function() { return /* binding */ ContactUsBlockConstants; },\n/* harmony export */ \"o5\": function() { return /* binding */ MainMenuConstants; },\n/* harmony export */ \"oF\": function() { return /* binding */ SpotlightVideoPlayerConstants; },\n/* harmony export */ \"oH\": function() { return /* binding */ SpotlightExperienceProductConstants; },\n/* harmony export */ \"oW\": function() { return /* binding */ SkipNavigationBlockConstants; },\n/* harmony export */ \"oq\": function() { return /* binding */ ProductGridBlockConstants; },\n/* harmony export */ \"pR\": function() { return /* binding */ SearchBarConstants; },\n/* harmony export */ \"q1\": function() { return /* binding */ SpotlightContestConstants; },\n/* harmony export */ \"qP\": function() { return /* binding */ RichTextConstants; },\n/* harmony export */ \"qQ\": function() { return /* binding */ UserQuoteConstants; },\n/* harmony export */ \"rM\": function() { return /* binding */ MiniNavigationConstants; },\n/* harmony export */ \"rg\": function() { return /* binding */ AwardsBlockConstant; },\n/* harmony export */ \"sF\": function() { return /* binding */ SpotlightContentVideoConstants; },\n/* harmony export */ \"sp\": function() { return /* binding */ SpotlightPreorderConstants; },\n/* harmony export */ \"t8\": function() { return /* binding */ BuyNowLiteConstants; },\n/* harmony export */ \"tV\": function() { return /* binding */ CharacterBlockConstants; },\n/* harmony export */ \"v5\": function() { return /* binding */ FooterConstants; },\n/* harmony export */ \"vT\": function() { return /* binding */ SearchBlockConstants; },\n/* harmony export */ \"yT\": function() { return /* binding */ RichTextLinkBlockConstants; },\n/* harmony export */ \"yU\": function() { return /* binding */ GalleryBlockConstants; },\n/* harmony export */ \"z8\": function() { return /* binding */ RotationConstants; },\n/* harmony export */ \"zh\": function() { return /* binding */ SpotlightExperienceConstants; }\n/* harmony export */ });\n/* unused harmony exports ArticlePopUpConstants, FAQConstants, labelConstant, SingleProductRecommenderConstant, MultipleProductRecommenderConstant, AlgoliaConstants, HierarchyUtilsConstants, PageNavigationConstants, JanrainConstants, IndexationUrlFactoryConstants */\n/* harmony import */ var _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(930);\n/* harmony import */ var _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_object_freeze_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(43371);\n/* harmony import */ var core_js_modules_es_object_freeze_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_freeze_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(82526);\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(41817);\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_string_small_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(37268);\n/* harmony import */ var core_js_modules_es_string_small_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_small_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(68309);\n/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_5__);\n\n\nvar _Object$freeze, _Object$freeze2;\n\n\n\n\n\n\nvar Constants = Object.freeze({\n title: 'title',\n titleLevel: 'titleLevel',\n classNames: 'classNames',\n callToActionLink: 'callToActionLink',\n callToActionLabel: 'callToActionLabel',\n description: 'description',\n disclaimer: 'disclaimer',\n disclaimerReference: 'disclaimerReference',\n eyebrow: 'eyebrow',\n backgroundAsset: 'backgroundAsset',\n mobileBackgroundAsset: 'mobileBackgroundAsset',\n anchorId: 'anchorId',\n hashChange: 'hashchange',\n resize: 'resize',\n close: 'close',\n play: 'play',\n mobile: 'mobile',\n desktop: 'desktop',\n chevronRight: 'chevronRight',\n blue: 'blue',\n smooth: 'smooth',\n backgroundImage: 'backgroundImage',\n mainAsset: 'mainAsset',\n name: 'name',\n empty: '',\n blocks: 'blocks',\n body: 'body',\n submit: 'submit',\n json: 'application/json',\n whiteText: 'white-text',\n white: 'white',\n content: 'content ',\n top: 'top',\n primaryColor: '#0057B8',\n scroll: 'scroll',\n ratingSummary: 'rating_summary',\n button: 'button',\n chevronDown: 'chevronDown',\n chevronTop: 'chevronTop',\n wideChevronDown: 'wideChevronDown',\n thinChevronDown: 'thinChevronDown',\n itemType: 'https://schema.org/Product',\n text: 'text',\n small: 'small',\n medium: 'medium',\n large: 'large',\n h1: 'h1',\n h2: 'h2',\n keydown: 'keydown',\n Tab: 'Tab',\n Escape: 'Escape',\n touchmove: 'touchmove',\n mediumLong: 'medium-long',\n alreadyInUse: 'already in use',\n brand: 'OralB',\n pathDelimiter: '/',\n blank: '_blank',\n collectionHeroSection: 'collection-hero-section',\n collectionHeroSectionCta: 'collection-hero-section-cta',\n titleLinkName: 'title-link',\n kidsProductCategory: 'Kids Product Category',\n optins: 'optIns',\n optinIdx: 0,\n autoComplete: 'on',\n aboutReviews: 'about reviews',\n Loading: 'Loading',\n breadcrumb: 'BreadcrumbList',\n Answer: 'Answer',\n Question: 'Question',\n HowToSchema: 'Howto',\n article: 'BlogPosting',\n WebPage: 'WebPage',\n FAQschema: 'FAQPage',\n ImageObject: 'ImageObject',\n organization: 'Organization',\n context: 'http://schema.org',\n typeLD: 'application/ld+json',\n signInEmail: 'signInEmail',\n signInPassword: 'signInPassword',\n product: 'Product',\n PrivacyLinkPlaceholder: '{{privacyLink}}',\n bannerImagePositionLeft: 'Left',\n bannerImagePositionUp: 'Up',\n bannerImagePositionRight: 'Right',\n bannerImagePositionTop: 'Top'\n});\nvar OrganizationConstants = Object.freeze({\n brand: 'OralB',\n parentOrganization: 'Procter & Gamble'\n});\nvar AdditionalReadingBlockConstants = Object.freeze({\n additionalReadingBlock: 'additionalReadingBlock',\n articleLink: 'article link'\n});\nvar AnnouncementBarConstants = Object.freeze({\n disableDays: 'disableDays',\n AnnouncementBarDisableDate: 'AnnouncementBarDisableDate',\n closeAriaLabel: 'closeAriaLabel',\n close: Constants.close,\n classNames: Constants.classNames,\n callToActionLink: Constants.callToActionLink,\n callToActionLabel: Constants.callToActionLabel,\n description: Constants.description,\n ctaName: 'electric toothburshes'\n});\nvar AppDownloadBlockConstants = Object.freeze({\n title: Constants.title,\n classNames: Constants.classNames,\n eyebrow: Constants.eyebrow,\n backgroundAsset: Constants.backgroundAsset,\n mobileBackgroundAsset: Constants.mobileBackgroundAsset,\n downloadLinks: 'downloadLinks',\n mobile: Constants.mobile,\n desktop: Constants.desktop,\n body: Constants.body,\n button: 'BUTTON'\n});\nvar ArticleCategoryHeroBlockConstants = Object.freeze({\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n classNames: Constants.classNames,\n eyebrow: Constants.eyebrow,\n body: Constants.body,\n backgroundAsset: Constants.backgroundAsset,\n mobileBackgroundAsset: Constants.mobileBackgroundAsset,\n ctas: 'ctas',\n chevronRight: Constants.chevronRight,\n disclaimer: Constants.disclaimer,\n blue: Constants.blue,\n mainAsset: 'mainAsset',\n mobileAsset: 'mobileAsset',\n textToTheRight: 'textToTheRight',\n backgroundColor: 'backgroundColor',\n callToActionAriaLabel: 'callToActionAriaLabel'\n});\nvar ArticleHeroBlockConstants = Object.freeze({\n classNames: Constants.classNames,\n readTimeLabel: 'readTimeLabel',\n articleBanner: 'article banner'\n});\nvar ImageConstants = Object.freeze({\n defaultImageWindWidth: 450,\n defaultWidth: 400,\n defaultDesktopWidth: 768,\n dpr_1440: 'f_auto,q_auto,w_1440',\n product: 'product',\n mobile_max_width: '767px',\n desktop_min_width: '768px'\n});\nvar ArticlePopUpConstants = Object.freeze({\n title: Constants.title,\n body: 'body',\n facebookLabel: 'facebookLabel',\n twitterLabel: 'twitterLabel',\n closeOverlayLabel: 'closeOverlayLabel'\n});\nvar BrushConfiguratorConstants = Object.freeze({\n dataName: 'data-name',\n smooth: Constants.smooth,\n center: 'center',\n \"switch\": 'switch',\n status: 'status',\n features: 'features',\n live: 'live',\n off: 'off'\n});\nvar ButtonTabsNavigationConstant = Object.freeze({\n replacementBrushHead: 'Replacement Brush Head',\n chevronDown: 'chevronDown',\n panel: 'panel',\n tab: 'tab',\n tablist: 'tablist',\n chevronLeft: 'chevronLeft',\n chevronRight: Constants.chevronRight\n});\nvar FAQConstants = Object.freeze({\n link: 'link'\n});\nvar IconsConstant = Object.freeze({\n role: 'img',\n iconOne: 'icon-1',\n iconTwo: 'icon-2',\n obIconRoundedContainer: 'ob-icon-rounded-container'\n});\nvar labelConstant = Object.freeze({\n reviewLabel: 'Search topics and reviews'\n});\nvar CharacterBlockConstants = Object.freeze({\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n classNames: Constants.classNames,\n eyebrow: Constants.eyebrow,\n description: Constants.description,\n backgroundImage: Constants.backgroundImage,\n mobileBackgroundImage: 'mobileBackgroundImage',\n characterLogo: 'characterLogo',\n mobileCharacterLogo: 'mobileCharacterLogo',\n maxWidth: '(max-width: 667px)',\n anchorId: Constants.anchorId\n});\nvar CollectionTabsBlockConstants = Object.freeze({\n smooth: Constants.smooth,\n hash: '#'\n});\nvar ComparisonChartBlockConstants = Object.freeze({\n row: 'row',\n table: 'table',\n rowheader: 'rowheader',\n columnheader: 'columnheader',\n cell: 'cell',\n noValueLabel: 'noValueLabel',\n top: Constants.top,\n chevronRight: Constants.chevronRight,\n jumpToConfiguratorLink: 'jumpToConfiguratorLink',\n altTextPrefixFeatureImage: 'comparison-chart-feature',\n ariaLabel: 'Select first IO series'\n});\nvar ContactUsBlockConstants = Object.freeze({\n classNames: Constants.classNames,\n contactUs: 'contact-us'\n});\nvar ContentConstants = Object.freeze((_Object$freeze = {\n playing: 'playing',\n play: 'play',\n pause: 'pause',\n pauseLabel: 'pauseLabel',\n playLabel: 'playLabel',\n resetLabel: 'resetLabel',\n openTranscriptLabel: 'openTranscriptLabel',\n closeTranscriptLabel: 'closeTranscriptLabel',\n ended: 'ended',\n Src: 'Src',\n Dest: 'Dest',\n x: 'x',\n y: 'y',\n White: 'White',\n white: Constants.white,\n blue: Constants.blue,\n transparentWithBorder: 'Transparent With Border',\n blueBorderBtn: 'ob-blue-border-btn',\n chevronRight: Constants.chevronRight,\n primaryGrey: 'primaryGrey',\n callToActionLink: Constants.callToActionLink,\n callToActionLabel: Constants.callToActionLabel,\n callToActionAriaLabel: 'callToActionAriaLabel',\n callToActionTitle: 'callToActionTitle',\n surtitle: 'surtitle',\n description: Constants.description,\n classNames: Constants.classNames,\n callToActionIsALink: 'callToActionIsALink',\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n backgroundColor: 'backgroundColor',\n textContainerBackgroundColor: 'textContainerBackgroundColor',\n textContainerBackgroundOpacity: 'textContainerBackgroundOpacity',\n textContainerHasPadding: 'textContainerHasPadding',\n blueEyebrow: 'blueEyebrow',\n disclaimer: Constants.disclaimer,\n disclaimerReference: Constants.disclaimerReference,\n textsImage: 'textsImage',\n cloudinaryVideo: 'cloudinaryVideo',\n devicesConfigurations: 'devicesConfigurations',\n deviceConfigurations: 'deviceConfigurations',\n isMedium: 'isMedium',\n blockMinHeight: 'blockMinHeight',\n blockMarginTop: 'blockMarginTop',\n blockMarginBottom: 'blockMarginBottom',\n blockMarginRight: 'blockMarginRight',\n blockMarginLeft: 'blockMarginLeft',\n blockPadding: 'blockPadding',\n textAlign: 'textAlign',\n textContainerWidth: 'textContainerWidth',\n titleWidth: 'titleWidth',\n descriptionWidth: 'descriptionWidth',\n textContainerHorizontalAlignment: 'textContainerHorizontalAlignment',\n textContainerVerticalAlignment: 'textContainerVerticalAlignment',\n textContainerOffset: 'textContainerOffset',\n textContainerMarginRight: 'textContainerMarginRight',\n textContainerMarginLeft: 'textContainerMarginLeft',\n textContainerMarginBottom: 'textContainerMarginBottom',\n mainAsset: 'mainAsset',\n mainAssetBelowOrAboveText: 'mainAssetBelowOrAboveText',\n mainAssetMaxWidth: 'mainAssetMaxWidth',\n mainAssetMaxHeight: 'mainAssetMaxHeight',\n mainAssetHeight: 'mainAssetHeight',\n mainAssetMarginTop: 'mainAssetMarginTop',\n mainAssetMarginRight: 'mainAssetMarginRight',\n mainAssetOffsetBottom: 'mainAssetOffsetBottom',\n mainAssetOffsetLeft: 'mainAssetOffsetLeft',\n mainAssetScale: 'mainAssetScale',\n backgroundAsset: 'backgroundAsset',\n mainAssetHorizontalAlignment: 'mainAssetHorizontalAlignment',\n mainAssetVerticalAlignment: 'mainAssetVerticalAlignment',\n backgroundPosition: 'backgroundPosition',\n sectionOffsetTop: 'sectionOffsetTop',\n mainAssetParallax: 'mainAssetParallax',\n mainAssetParallaxSetting: 'mainAssetParallaxSetting',\n textParallax: 'textParallax',\n textParallaxSetting: 'textParallaxSetting',\n textParallaxConfiguration: 'textParallaxConfiguration',\n assetParallaxConfiguration: 'assetParallaxConfiguration',\n textShowAnimation: 'textShowAnimation',\n textFadeIn: 'textFadeIn',\n textColor: 'textColor',\n respectImageAspectRatio: 'respectImageAspectRatio',\n titleFontSize: 'titleFontSize',\n small: Constants.small,\n medium: Constants.medium,\n large: Constants.large,\n ctaBackgroundColor: 'ctaBackgroundColor',\n aboveText: 'above text',\n belowText: 'below text',\n hasDivider: 'hasDivider',\n isRemoveParallax: 'isRemoveParallax',\n defaultWidth: 350,\n defaultWindWidth: 400,\n CtalabelId: 'ctaLabelId',\n ctaName: 'collection-cta',\n reset: 'reset',\n isPopupCta: 'isPopupCta',\n imagePopup: 'imagePopup',\n replay: 'replay',\n descriptionBelowOption: 'descriptionBelowOption',\n callToActionType: 'callToActionType',\n contentOptions: 'contentOptions',\n contentOptionClassName: 'contentOptionClassName'\n}, _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze, \"CtalabelId\", 'ctaLabelId'), _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze, \"secondaryAsset\", 'secondaryAsset'), _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze, \"ctaName\", 'collection-cta'), _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze, \"isCtaLinkExternal\", 'isCtaLinkExternal'), _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze, \"gaEventClass\", 'gaEventClass'), _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze, \"gaEventLabel\", 'gaEventLabel'), _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze, \"gaEvents\", 'gaEvents'), _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze, \"gAeventClassName\", 'gAeventClassName'), _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze, \"textAlignBottomMobileView\", 'text-align-bottom-mobile-view'), _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze, \"appStoreIcon\", 'appStoreIcon'), _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze, \"noteText\", 'noteText'), _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze, \"isContentHyperlinkBlock\", 'isContentHyperlinkBlock'), _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze, \"blockHyperlink\", 'blockHyperlink'), _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze, \"subDescription\", 'subDescription'), _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze, \"mobileMainHeading\", 'mobileMainHeading'), _Object$freeze));\nvar ContentVideoConstants = Object.freeze({\n Tab: Constants.Tab,\n keydown: Constants.keydown,\n description: Constants.description,\n disclaimer: Constants.disclaimer,\n mobileLayout: 'mobileLayout',\n desktopLayout: 'desktopLayout',\n whiteText: Constants.whiteText,\n backgroundImage: 'background-image',\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n classNames: Constants.classNames,\n textContainerMarginBottom: 'textContainerMarginBottom',\n textContainerMarginTop: 'textContainerMarginTop',\n playIconColor: 'playIconColor',\n backgroundColor: 'backgroundColor',\n playLabel: 'playLabel',\n closeLabel: 'closeLabel',\n close: Constants.close,\n play: Constants.play,\n pauseLabel: 'pauseLabel',\n resetLabel: 'resetLabel',\n openTranscriptLabel: 'openTranscriptLabel',\n closeTranscriptLabel: 'closeTranscriptLabel',\n white: Constants.white,\n whiteHexThreeChars: '#fff',\n whiteHexFull: '#ffffff',\n surtitle: 'surtitle',\n blueEyebrow: 'blueEyebrow',\n contentOptions: 'contentOptions',\n playIcon: 'playIcon',\n textImage: 'textImage',\n youtubeVideoBlock: 'youtubeVideoBlock',\n mainHeading: 'mainHeading',\n gaEventLabel: 'gaEventLabel'\n});\nvar AwardsBlockConstant = Object.freeze({\n awardItemLogo: 'award-item-logo'\n});\nvar FAQBlockConstants = Object.freeze({\n \"switch\": 'switch',\n button: Constants.button,\n minus6: 'minus6',\n plus: 'plus',\n arrowRight: 'ovalArrowRight',\n popularSentence: 'Popular topics others look for',\n searchResultsTitle: 'We found 6 results for Warranty',\n obSupport: 'Oral-B Support',\n Previous: 'Previous',\n Next: 'Next',\n of: 'of'\n});\nvar FooterConstants = Object.freeze({\n resize: Constants.resize,\n copyright: 'copyright',\n copyrightAt: '©',\n countryCode: 'CZ',\n lang: 'cs'\n});\nvar GalleryBlockConstants = Object.freeze({\n cloudinaryImage: 'cloudinaryImage',\n classNames: Constants.classNames,\n title: Constants.title,\n whiteText: Constants.whiteText,\n anchorId: Constants.anchorId,\n seeMoreButtonLabel: 'seeMoreButtonLabel',\n seeLessButtonLabel: 'seeLessButtonLabel',\n minus6: 'minus6',\n blue: Constants.blue,\n plus: 'plus',\n full: 'Full',\n large: 'Large',\n small: 'Small'\n});\nvar InTheBoxBlockConstants = Object.freeze({\n whiteText: Constants.whiteText,\n body: 'body',\n classNames: 'classNames',\n items: 'items',\n anchorId: Constants.anchorId,\n inTheBoxImage: 'inTheBoxImage',\n title: Constants.title,\n titleLevel: Constants.titleLevel\n});\nvar LanguageSelectionConstants = Object.freeze({\n primaryColor: Constants.primaryColor,\n smooth: Constants.smooth,\n title: Constants.title,\n keydown: Constants.keydown,\n regions: 'regions',\n currentLanguage: 'currentLanguage',\n jumpToLabel: 'jumpToLabel',\n closeLanguageSelectionLabel: 'closeLanguageSelectionLabel',\n wideChevronDown: 'wideChevronDown',\n close: Constants.close,\n countryLanguageSelection: 'Country and Language selection',\n countryLanguageAriaLabel: 'languageSelectionAriaLabel'\n});\nvar LayoutConstants = Object.freeze({\n classNames: Constants.classNames,\n zoneContestCode: 'zone-contest',\n zoneThankYouCode: 'zone-thankyou',\n paddingValue: '66px',\n paddingValueBreadcrumb: '112px'\n});\nvar LegacyProductHighlightsConstants = Object.freeze((_Object$freeze2 = {\n isActive: 'is-active',\n empty: Constants.empty,\n minus6: 'minus6',\n blue: Constants.blue,\n button: Constants.button,\n plus: 'plus',\n seeLess: 'SEE LESS',\n seeMore: 'SEE MORE',\n highlights: ' highlights',\n plusSymbol: '+',\n minusSymbol: '-',\n arrowUp: 'ArrowUp',\n arrowDown: 'ArrowDown',\n text: Constants.text,\n prev: 'prev',\n next: 'next',\n smooth: 'smooth',\n nearest: 'nearest',\n center: 'center'\n}, _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze2, \"highlights\", 'highlights'), _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()(_Object$freeze2, \"productRating\", 'rating'), _Object$freeze2));\nvar MainMenuConstants = Object.freeze({\n primaryColor: Constants.primaryColor,\n mousedown: 'mousedown',\n blur: 'blur',\n resize: Constants.resize,\n scroll: Constants.scroll,\n keydown: Constants.keydown,\n close: Constants.close,\n Open: 'Open',\n Close: 'Close',\n child: 'child',\n productByNeed: 'product-by-need',\n productByType: 'product-by-type',\n whyOralB: 'why-oral-b',\n conditions: 'conditions',\n lifeStages: 'life-stages',\n ourAmbition: 'our-ambition',\n wideChevronDown: 'wideChevronDown',\n chevronDown: Constants.chevronDown,\n plus: 'plus',\n minus6: 'minus6',\n mainMenuLabel: 'mainMenuLabel',\n hierarchy: 'hierarchy',\n classNames: Constants.classNames,\n hamburger: 'hamburger',\n closeMenuLabel: 'closeMenuLabel',\n openMenuLabel: 'openMenuLabel',\n searchLabel: 'searchLabel',\n returnToMainMenuLabel: 'returnToMainMenuLabel',\n arrowLeft: 'arrowLeft',\n searchDataActionDetail: 'Open Search Panel',\n panel: 'panel',\n pullDown: 'pull-down',\n collapsed: 'collapsed',\n expanded: 'expanded',\n expanding: 'expanding',\n escape: 'Escape',\n menubar: 'menubar',\n menuitem: 'menuitem',\n menulist: 'menu-list',\n menulistDesktop: 'menu-list-desktop',\n languageLink: 'language link',\n languageTabMobile: 'language tab mobile',\n expandingMenu: 'expanding-menu',\n closeButton: 'close button',\n menu: 'menu',\n chevronTop: 'chevronTop',\n white: 'white',\n capExpanded: 'EXPANDED',\n capExpanding: 'EXPANDING',\n capEscape: 'ESCAPE'\n});\nvar MarkdownTextConstants = Object.freeze({\n script: 'script',\n text: 'text'\n});\nvar MetaConstants = Object.freeze({\n https: 'https://'\n});\nvar MiniNavigationConstants = Object.freeze({\n hierarchy: 'hierarchy',\n classNames: Constants.classNames,\n backgroundGrey: 'backgroundGrey',\n href: 'href',\n smooth: Constants.smooth,\n chevronDown: Constants.chevronDown,\n resize: Constants.resize,\n target: 'target',\n downArrow: 'downArrow'\n});\nvar ComponentFactoryConstants = Object.freeze({\n Zone: 'Zone',\n Layout: 'Layout',\n Content: 'ContentBlock',\n ContentVideo: 'contentVideo',\n RichText: 'richTextBlock',\n RichTextLink: 'link',\n MarkdownText: 'markdownTextBlock',\n MainMenu: 'mainMenuBlock',\n Footer: 'footerBlock',\n LanguageSelection: 'languageSelectionBlock',\n PageNavigation: 'pageNavigationBlock',\n TabbedContent: 'tabbedContentBlock',\n AnnouncementBar: 'announcementBarBlock',\n SideBySideContainer: 'sideBySideContainerBlock',\n SeriesSelector: 'seriesSelectorBlock',\n MiniNavigation: 'miniNavigationBlock',\n PromoBlock: 'promoBlock',\n SpotlightSlider: 'spotlightSlider',\n SpotlightContentVideo: 'spotlightContentVideo',\n SpotlightContentBlock: 'spotlightContentBlock',\n SpotlightStickyBar: 'spotlightStickyBarBlock',\n InTheBoxBlock: 'inTheBoxBlock',\n ProductGridBlock: 'productGridBlock',\n CollectionTabsBlock: 'collectionTabsBlock',\n ProductHighlights: 'productHighlightBlock',\n FeaturesTabBlock: 'featuresTabBlock',\n BrandGuaranteeBlock: 'brandGuaranteeBlock',\n GalleryBlock: 'galleryBlock',\n FAQBlock: 'faqBlock',\n BrushConfigurator: 'brushConfiguratorBlock',\n ComparisonChartBlock: 'comparisonChartBlock',\n UserQuoteBlock: 'userQuoteBlock',\n SpotlightWaitlistBlock: 'spotlightWaitlistBlock',\n SpotlightPreorderBlock: 'spotlightPreOrderBlock',\n CollectionTabsDropdown: 'collectionSegmentTabsDropdownBlock',\n ProductSubNav: 'productSubNav',\n CharacterBlock: 'characterBlock',\n ProductRecommenderBlock: 'productRecommenderBlock',\n ShowcaseBlock: 'showcaseBlock',\n ArticleHeroBlock: 'articleHeroBlock',\n SkipNavigationBlock: 'skipNavigationBlock',\n AppDownloadBlock: 'appDownloadBlock',\n ArticleCategoryHeroBlock: 'articleCategoryHeroBlock',\n RecentlyViewedProductsBlock: 'recentlyViewedProductsBlock',\n AdditionalReadingBlock: 'additionalReadingBlock',\n ProductOverlay: 'productOverlay',\n ErrorBlock: 'errorBlock',\n ArticleBody: 'articleBody',\n CloudinaryImage: 'cloudinaryImage',\n YoutubeVideo: 'youtubeVideoBlock',\n ResponsiveImage: 'responsiveImageBlock',\n ContactUsBlock: 'contacUsBlock',\n LoginBlock: 'loginBlock',\n ForgotPasswordBlock: 'forgotPasswordBlock',\n ResetPasswordBlock: 'resetPasswordBlock',\n CreateAccountBlock: 'createAccountBlock',\n RegisterTypeCodeBlock: 'blockRegisterTypeCode',\n PypestreamChat: 'pypestreamChat',\n SearchBlock: 'search',\n PressQuoteBlock: 'pressQuoteBlock',\n RegisterProductBlock: 'registerProductBlock',\n CongratulationsBlock: 'congratulationBlock',\n ProfileBlock: 'profileBlock',\n ChangePasswordBlock: 'changePasswordBlock',\n Awards: 'awardsBlock',\n LoginNavigationBlock: 'loginNavigationBlock',\n DesignedByDentist: 'designedByDentistBlock',\n LegacyArticleHeroBlock: 'legacyArticleHeroBlock',\n ContentDetailsBlock: 'contentDetailsBlock',\n ConsentBlock: 'ConsentBlock',\n ThreeColumnsUserQuoteBlock: 'threeColumnsQuoteBlock',\n ArticlePopUp: 'articlePopUp',\n ArticleShare: 'articleShareBlock',\n LegacyProductHighlightBlock: 'legacyProductHighlightBlock',\n ArticleListBlock: 'articleListBlock',\n ArticleTableBlock: 'articleTableBlock',\n SpotlightContestBlock: 'spotlightContestBlock',\n SpotlightContestThankYouBlock: 'spotlightContestThankYouBlock',\n ProductLegacyBody: 'productLegacyBody',\n FaqDetailsBlock: 'faqDetailsBlock',\n Disclaimer: 'disclaimer',\n ProductVariantsRecommanderBlock: 'productVariantsRecommanderBlock',\n SitemapBlock: 'sitemapBlock',\n SitemapPage: 'SitemapPage',\n HTMLBlock: 'htmlBlock',\n SpotlightExperienceBlock: 'spotlightExperienceBlock',\n DoubleOptInVerificationBlock: 'doubleOptInVerificationBlock',\n articleLink: 'article link',\n blue: 'blue',\n chevronRight: 'chevronRight',\n mediaUpper: '(min-width: 1200px)',\n mediaLower: '(min-width: 426px)',\n dprUpper: 'q=100&f=center&fit=fill&w=460&h=260',\n dprMedium: 'q=100&f=center&fit=fill&w=272&h=150',\n dprLower: 'q=100&f=center&fit=fill&w=124&h=150',\n BreadCrumbs: 'breadCrumbs',\n CarouselBlock: 'blockCarouselBlock',\n AccordionBlock: 'accordionBlock',\n SwitchTab: 'switchTabs',\n DragSlider: 'dragSlider',\n MiniContentBlock: 'blockMiniContentBlock',\n ExpandableHierarchy: 'blockExpandableHierarchy',\n ContentAndCarouselBlock: 'blockContentAndCarousel',\n mainHeading: 'mainHeading',\n DentistContacts: 'dentistContacts',\n imageContentDetailsBlock: 'blockImageContentDetailsBlock',\n videoPromoBlock: 'blockVideoPromoBlock',\n ProductRecommenderABtest: 'productRecommendBlockABtest',\n DropDownSelector: 'DropDownSelector'\n});\nvar ZoneConstants = Object.freeze({\n zone: 'zone ',\n classNames: Constants.classNames,\n role: 'role',\n ariaLabel: 'ariaLabel',\n backgroundImage: Constants.backgroundImage,\n id: 'id',\n zoneSpotlightSliderBodyClassname: 'spotlight-body-zone',\n zoneSpotlightContestClassname: 'spotlight-zone-contest'\n});\nvar YoutubeVideoConstants = Object.freeze({\n percent: '%',\n title: 'Youtube',\n url: 'https://www.youtube-nocookie.com/embed/',\n youTubeUrl: 'https://www.youtube.com/'\n});\nvar VideoPlayerConstants = Object.freeze({\n id: 'video-player',\n videoRecommendations: 'Video Recommendations overlay item information',\n videoRatioVolume: 0.3,\n descriptionButtonLowOpacity: 0.5,\n descriptionButtonHighOpacity: 1,\n domainHttp: 'https:',\n audioDescriptionClassName: 'vjs-icon-audio-description',\n firstAudioFileId: 'firstAudiofile',\n secondAudioFileId: 'secondAudiofile',\n firstAudio: 'firstAudio',\n secondAudio: 'secondAudio'\n});\nvar UserQuoteConstants = Object.freeze({\n classNames: Constants.classNames,\n title: Constants.title,\n mainAsset: Constants.mainAsset,\n name: Constants.name,\n disclaimer: Constants.disclaimer,\n authorName: 'authorName',\n quote: 'quote',\n starRating: 'starRating',\n writeAReviewLabel: 'writeAReviewLabel',\n ratingSummary: Constants.ratingSummary,\n reviews: 'reviews',\n questions: 'questions',\n h1: Constants.h1,\n h2: Constants.h2,\n itemType: Constants.itemType,\n itemProp: Constants.name,\n displayUserReviews: 'displayUserReviews'\n});\nvar UnderlineTabsNavigationConstants = Object.freeze({\n resize: Constants.resize,\n childLabel: 'Child Product Category',\n tabList: 'tablist',\n tab: 'tab'\n});\nvar TabbedContentConstants = Object.freeze({\n empty: Constants.empty,\n anchorName: 'anchorName',\n chevronDown: Constants.chevronDown,\n tab: 'tab-',\n blocks: Constants.blocks\n});\nvar StarRatingConstants = Object.freeze({\n star: 'star',\n starEmpty: 'starEmpty',\n starHalf: 'starHalf'\n});\nvar SpotlightWaitlistConstants = Object.freeze({\n error: 'An error occured',\n failedToRegister: ': Registration failed',\n title: Constants.title,\n body: Constants.body,\n callToActionLabel: 'callToActionLabel',\n legalText: 'legalText',\n emailLimitExceedLabel: 'emailLimitExceedLabel',\n invalidLocaleLabel: 'invalidLocaleLabel',\n serviceUnavailableLabel: 'serviceUnavailableLabel',\n formLabels: 'formLabels',\n classNames: Constants.classNames,\n anchorId: Constants.anchorId,\n backgroundAsset: Constants.backgroundAsset,\n mobileBackgroundAsset: Constants.mobileBackgroundAsset,\n thankYouTitleLabel: 'thankYouTitleLabel',\n thankYouBackgroundAsset: 'thankYouBackgroundAsset',\n thankYouDescriptionLabel: 'thankYouDescriptionLabel',\n thankYouCallToAction: 'thankYouCallToAction',\n thankYouCallToActionLink: 'thankYouCallToActionLink',\n thankYouCallToActionIconName: 'thankYouCallToActionIconName',\n closeModalLabel: 'closeModalLabel',\n numberOfErrorsLabel: 'numberOfErrorsLabel',\n submit: Constants.submit,\n close: Constants.close,\n gcsCampaignParam: 'campaignId',\n gcsLocaleParam: 'locale',\n contentType: 'Content-Type',\n json: Constants.json,\n accessToken: 'access_token',\n system: 'GCS',\n chevronDown: Constants.chevronDown,\n countrySelectLabel: 'countrySelectLabel',\n countrySelectList: 'countrySelectList',\n countrySelectListDefaultOption: 'countrySelectListDefaultOption',\n countrySelectErrorMessage: 'countrySelectErrorMessage',\n countrySelectMention: 'countrySelectMention',\n modalLabelFirst: 'modalLabelFirst',\n modalLabelSecond: 'modalLabelSecond',\n addressTypeCode: 'addressTypeCode',\n alternateThankYouTitleLabel: 'alternateThankYouTitleLabel',\n alternateThankYouDescriptionLabel: 'alternateThankYouDescriptionLabel',\n callToPreOrderActionLabel: 'callToPreOrderActionLabel',\n callToPreOrderActionLink: 'callToPreOrderActionLink',\n isiO10camapign: 'isiO10camapign',\n TermConditions: 'Term&Conditions',\n email: 'Email',\n topicList: 'topicList',\n fromSource: 'iO10 Spotlight Campaign',\n topicTitle: 'topicTitle',\n otherProps: 'otherProps',\n loader: '/static/images/loader.gif'\n});\nvar CampaignIframeOverlayConstants = Object.freeze({\n localStorageIntersistialPopUp: 'disableIntersistialPopUp',\n isEnableCampaignOverlay: 'isEnableCampaignOverlay',\n email: 'Email',\n interestitialUserDetail: 'interestitialUserDetail',\n expiryHours: 'expiryHours',\n disableIntersistialPopUpCookieApp: 'disableIntersistialPopUpApp'\n});\nvar SpotlightContestConstants = Object.freeze({\n error: 'An error occured',\n failedToRegister: ': Sign up failed',\n title: Constants.title,\n contestTitle: 'contestTitle',\n signUpCallToActionLabel: 'signUpCallToActionLabel',\n emailLimitExceedLabel: 'emailLimitExceedLabel',\n invalidLocaleLabel: 'invalidLocaleLabel',\n serviceUnavailableLabel: 'serviceUnavailableLabel',\n formFields: 'formFields',\n classNames: Constants.classNames,\n anchorId: Constants.anchorId,\n backgroundAsset: Constants.backgroundAsset,\n mobileBackgroundAsset: Constants.mobileBackgroundAsset,\n oralBLogoAsset: 'oralBLogo',\n backToOralbLink: 'backToOralbLink',\n ioLogoAsset: 'ioLogo',\n formOptinInputText: 'formOptinInputText',\n formOwnETBInputText: 'formOwnETBInputText',\n formLegalText: 'formLegalText',\n socialLinks: 'socialLinks',\n redirectDestination: 'redirectDestination',\n copyrightLabel: 'copyrightLabel',\n thankYouTitleLabel: 'thankYouTitleLabel',\n thankYouBackgroundAsset: 'thankYouBackgroundAsset',\n thankYouDescriptionLabel: 'thankYouDescriptionLabel',\n thankYouCallToAction: 'thankYouCallToAction',\n thankYouCallToActionLink: 'thankYouCallToActionLink',\n thankYouCallToActionIconName: 'thankYouCallToActionIconName',\n numberOfErrorsLabel: 'numberOfErrorsLabel',\n submit: Constants.submit,\n close: Constants.close,\n GcsURL: '/registration?access_token=',\n gcsCampaignParam: 'campaignId',\n gcsLocaleParam: 'locale',\n contentType: 'Content-Type',\n json: Constants.json,\n accessToken: 'access_token',\n system: 'GCS',\n chevronDown: Constants.thinChevronDown,\n modalLabelFirst: 'modalLabelFirst',\n modalLabelSecond: 'modalLabelSecond',\n addressTypeCode: 'addressTypeCode',\n alternateThankYouTitleLabel: 'alternateThankYouTitleLabel',\n alternateThankYouDescriptionLabel: 'alternateThankYouDescriptionLabel',\n continueReading: 'Continue reading'\n});\nvar SpotlightVideoPlayerConstants = Object.freeze({\n pgone: 'pgone',\n cloudinaryVideoPlayer: 'cloudinary-video-player',\n cloudinaryCore: 'cloudinary-core',\n inherit: 'inherit',\n never: 'never',\n sourceTypes: ['hls', 'mp4', 'ogg', 'webm']\n});\nvar SpotlightStickyBarConstants = Object.freeze({\n stickyBarClassName: 'ob-SpotlightStickyBar',\n scrollTo: 'scrollTo',\n callToActionLink: Constants.callToActionLink,\n logoLink: 'logoLink',\n logo: 'logo',\n name: Constants.name,\n title: Constants.title,\n medium: Constants.medium,\n SignUp: 'Sign up',\n callToActionLabel: Constants.callToActionLabel,\n CallToActionLabel: 'CallToActionLabel'\n});\nvar SpotlightSliderConstants = Object.freeze({\n scrollerContainer: 'scroller-container ',\n classNames: Constants.classNames,\n continueReadingLabel: 'continueReadingLabel',\n main: 'main'\n});\nvar SpotlightPreorderConstants = Object.freeze({\n body: Constants.body,\n title: Constants.title,\n anchorId: Constants.anchorId,\n classNames: Constants.classNames,\n backgroundAsset: Constants.backgroundAsset,\n preOrderButtonLabel: 'preOrderButtonLabel',\n preOrderCallToAction: 'preOrderCallToAction',\n mobileBackgroundAsset: 'mobileBackgroundAsset'\n});\nvar SpotlightExperienceConstants = Object.freeze({\n description: Constants.description,\n title: Constants.title,\n anchorId: Constants.anchorId,\n classNames: Constants.classNames,\n backgroundAsset: Constants.backgroundAsset,\n callToActionLabel: 'callToActionLabel',\n callToActionLink: 'callToActionLink',\n experienceTitle: 'experienceTitle',\n experienceFeatures: 'experienceFeatures',\n closeLabel: 'closeLabel',\n chevronDown: Constants.chevronDown,\n countrySelectLabel: 'countrySelectLabel',\n countrySelectList: 'countrySelectList'\n});\nvar SpotlightExperienceProductConstants = Object.freeze({\n itemType: Constants.itemType,\n ProductName: 'ProductName',\n ratingSummary: 'inline_rating',\n button: Constants.button\n});\nvar SpotlightContentVideoConstants = Object.freeze({\n introText: 'introText',\n introLogo: 'introLogo',\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n defaultRight: \"-720px\",\n defaultBottom: \"-170px\",\n displaynone: \"none\",\n nextFrameOnVideoEnd: 'nextFrameOnVideoEnd',\n introDurationSecond: 'introDurationSecond',\n playButtonColor: 'playButtonColor',\n white: Constants.white,\n mobileFullSize: 'mobileFullSize',\n playLabel: 'playLabel',\n pauseLabel: 'pauseLabel',\n resetLabel: 'resetLabel',\n paused: 'paused',\n played: 'played',\n openTranscriptLabel: 'openTranscriptLabel',\n closeTranscriptLabel: 'closeTranscriptLabel',\n content: Constants.content,\n classNames: Constants.classNames,\n textContainerHasPadding: 'textContainerHasPadding',\n hide: 'hide',\n auto: 'auto',\n none: 'none',\n description: Constants.description,\n VideoId: 'VideoId',\n spotlightPause: 'spotlightPause',\n spotlightPlay: 'spotlightPlay',\n spotlightReplay: 'spotlightReplay',\n spotlightTranscript: 'spotlightTranscript',\n close: Constants.close\n});\nvar SpotlightContentBlockConstants = Object.freeze({\n devicesConfigurations: 'devicesConfigurations',\n textAlign: 'textAlign',\n empty: Constants.empty,\n textAlignment: 'textAlignment',\n textContainerVerticalAlignment: 'textContainerVerticalAlignment',\n textContainerOffset: 'textContainerOffset',\n textContainerMarginRight: 'textContainerMarginRight',\n textContainerMarginLeft: 'textContainerMarginLeft',\n mainAsset: Constants.mainAsset,\n mainAssetHorizontalAlignment: 'mainAssetHorizontalAlignment',\n mainAssetMaxWidth: 'mainAssetMaxWidth',\n mainAssetMarginTop: 'mainAssetMarginTop',\n mainAssetMarginRight: 'mainAssetMarginRight',\n mainAssetOffsetBottom: 'mainAssetOffsetBottom',\n mainAssetOffsetLeft: 'mainAssetOffsetLeft',\n secondaryAsset: 'secondaryAsset',\n additionalAssetList: 'additionalAssetList',\n backgroundAsset: Constants.backgroundAsset,\n mainAssetScale: 'mainAssetScale',\n textFadeIn: 'textFadeIn',\n refreshImageOnFrameChange: 'refreshImageOnFrameChange',\n content: Constants.content,\n classNames: Constants.classNames,\n whiteText: Constants.whiteText,\n hasLink: 'hasLink',\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n textImage: 'textImage',\n textImageMobile: 'textImageMobile',\n textImagePosition: 'textImagePosition',\n top: Constants.top,\n textContainerBackgroundColor: 'textContainerBackgroundColor',\n textContainerHasPadding: 'textContainerHasPadding',\n surtitle: 'surtitle',\n textContent: 'textContent',\n bottom: 'bottom',\n callToActionLink: Constants.callToActionLink,\n white: Constants.white,\n chevronRight: Constants.chevronRight,\n blue: Constants.blue,\n callToActionLabel: Constants.callToActionLabel\n});\nvar SkipNavigationBlockConstants = Object.freeze({\n label: 'label',\n targetID: 'targetID',\n roleMain: '[role=\"main\"]'\n});\nvar SideBySideContainerConstants = Object.freeze({\n anchorId: Constants.anchorId,\n name: Constants.name,\n left: 'left',\n right: 'right',\n sideBySide: 'side-by-side-',\n hasDivider: 'hasDivider',\n flipOnMobile: 'flipOnMobile',\n disclaimer: Constants.disclaimer,\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n description: Constants.description,\n blocks: Constants.blocks\n});\nvar ShowcaseBlockConstants = Object.freeze({\n classNames: Constants.classNames,\n title: Constants.title,\n description: Constants.description,\n sideImage: 'sideImage'\n});\nvar SeriesSelectorConstants = Object.freeze({\n master: 'master_',\n media: '(min-width: 768px)',\n dpr: 'f_auto,q_auto,w_398',\n empty: Constants.empty,\n ratingSummary: 'inline_rating',\n reviews: 'reviews',\n productRating: 'rating'\n});\nvar ProductOverviewConstant = Object.freeze({\n link: 'Link'\n});\nvar SingleProductRecommenderConstant = Object.freeze({\n title: 'title'\n});\nvar MultipleProductRecommenderConstant = Object.freeze({\n title: 'title'\n});\nvar SeriesTabsConstants = Object.freeze({\n button: Constants.button,\n \"true\": 'true',\n \"false\": 'false',\n chevronDown: Constants.chevronDown,\n buttonRole: 'button',\n page: 'page'\n});\nvar BuySeriesConstants = Object.freeze({\n chevronRight: Constants.chevronRight\n});\nvar SeriesComparisonItemConstants = Object.freeze({\n itemType: Constants.itemType,\n ProductName: 'ProductName',\n ratingSummary: 'inline_rating',\n button: Constants.button,\n comingSoonText: 'comingSoonText',\n commingSoonItem: 'coparison-item',\n productRating: 'rating'\n});\nvar SeeMoreButtonConstants = Object.freeze({\n blue: Constants.blue,\n chevronLeft: 'chevronLeft',\n chevronRight: Constants.chevronRight,\n button: Constants.button\n});\nvar AlgoliaConstants = Object.freeze({\n errorMsg: 'Cannot create algolia search client: ALGOLIA_APP_ID or ALGOLIA_APP_SEARCH_KEY envs are empty',\n crawlerTriggeredMsg: 'Algolia crawler triggered!!'\n});\nvar algoliaReducerConstants = Object.freeze({\n SearchClicked: 'SearchClicked',\n queryParm: 'queryParm',\n searchStaticContent: 'searchStaticContent',\n hitsResponse: 'hitsResponse',\n filerClicked: 'filerClicked',\n pageNoClicked: 'pageNoClicked',\n showAutocomplete: 'showAutocomplete',\n searchValue: 'searchValue',\n isSpinning: 'isSpinning',\n totalPageNumber: 'totalPageNumber',\n filterItems: 'filterItems',\n nbHits: 'nbHits',\n nbPages: 'nbPages'\n});\nvar SearchBarConstants = Object.freeze({\n text: Constants.text,\n submit: Constants.submit,\n searchText: 'searchText',\n search: 'search',\n list: 'list',\n maximumAutocompleteResults: 10,\n searchTitle: 'searchTitle',\n common_search: 'COMMOM SEARCH',\n SearchClicked: 'SearchClicked',\n queryParm: 'queryParm',\n searchStaticContent: 'searchStaticContent',\n hitsResponse: 'hitsResponse',\n filerClicked: 'filerClicked',\n SearchSuggestions: 'SearchSuggestions',\n pageNoClicked: 'pageNoClicked',\n showAutocomplete: 'showAutocomplete',\n searchValue: 'searchValue',\n isSpinning: 'isSpinning',\n eventCategory: 'event_informational_action',\n eventAction: 'event_search'\n});\nvar RotationConstants = Object.freeze({\n mouseup: 'mouseup',\n grabbing: 'grabbing',\n number: 'number',\n grab: 'grab',\n match: 'TEXTAREA|INPUT|SELECT',\n touch: 'touch'\n});\nvar RichTextConstants = Object.freeze({\n text: Constants.text,\n classNames: Constants.classNames,\n anchorId: Constants.anchorId\n});\nvar ResponsiveImageConstants = Object.freeze({\n tiny: 'tiny',\n mobile: 'mobile',\n tablet: 'tablet',\n desktop: 'desktop'\n});\nvar RecentlyViewedProductsBlockConstants = Object.freeze({\n show: 'show',\n fetch: '/_next/static/products/',\n json: '.json',\n four: '4'\n});\nvar HierarchyUtilsConstants = Object.freeze({\n menu: 'MENU'\n});\nvar PromoConstants = Object.freeze({\n promo: 'promo ',\n classNames: Constants.classNames,\n whiteText: Constants.whiteText,\n subtitle: 'subtitle',\n description: Constants.description,\n retailerText: 'retailerText',\n mobileBackgroundAsset: Constants.mobileBackgroundAsset,\n backgroundAsset: Constants.backgroundAsset,\n titleLevel: Constants.titleLevel,\n title: Constants.title,\n retailerLogo: 'retailerLogo',\n callToActionLink: Constants.callToActionLink,\n callToActionLabel: Constants.callToActionLabel,\n horizontalAlignment: 'horizontalAlignment',\n large: Constants.large\n});\nvar ProductSubNavConstants = Object.freeze({\n classNames: Constants.classNames,\n scroll: Constants.scroll,\n anchorClick: 'anchorClick',\n resize: Constants.resize,\n wheel: 'wheel',\n touchmove: Constants.touchmove,\n top: Constants.top,\n undefined: 'undefined',\n Collapsed: 'COLLAPSED',\n Collapsing: 'COLLAPSING',\n chevronDown: Constants.chevronDown,\n chevronTop: Constants.chevronTop,\n medium: Constants.medium,\n blank: '_blank',\n links: 'links',\n h1: Constants.h1,\n h2: Constants.h2,\n small: Constants.small,\n mediumLong: Constants.mediumLong,\n initialLoad: 'initialLoad'\n});\nvar ProductOverlayConstants = Object.freeze({\n closeOverlayLabel: 'closeOverlayLabel',\n empty: Constants.empty,\n classNames: Constants.classNames,\n keydown: Constants.keydown,\n noScroll: 'noScroll',\n scroll: Constants.scroll,\n isActive: 'is-active',\n querySelectorAll: 'button:not([disabled]), a[href]:not([disabled])',\n Tab: Constants.Tab,\n Escape: Constants.Escape,\n close: Constants.close,\n priceSpiderSource: '//cdn.pricespider.com/1/lib/ps-widget.js',\n priceSpiderConsoleLogMessageError: 'pricespider script not loaded',\n buyNowLiteErrorLabel: 'buyNowLiteErrorLabel',\n activateBuyNowLite: 'activateBuyNowLite'\n});\nvar ProductHighlightsConstants = Object.freeze({\n isActive: 'is-active',\n empty: Constants.empty,\n minus6: 'minus6',\n blue: Constants.blue,\n button: Constants.button,\n plus: 'plus',\n seeLess: 'SEE LESS',\n seeMore: 'SEE MORE',\n highlights: ' highlights',\n undefinedStr: 'undefined',\n iconArrowRight: 'chevronRight',\n arrowDown: 'ArrowDown',\n learnMore: 'Learn More',\n whyOralBHash: '#wiesooralb',\n innerWidth_4600: 4600,\n innerWidth_3000: 3000,\n innerWidth_2300: 2300,\n innerWidth_2000: 2000,\n innerWidth_1900: 1900,\n innerWidth_1700: 1700,\n innerWidth_1500: 1500,\n innerWidth_1200: 1200,\n innerWidth_380: 380,\n offset_10000: 10000,\n offset_7100: 7100,\n offset_5600: 5600,\n offset_5100: 5100,\n offset_4800: 4800,\n offset_4500: 4500,\n offset_4200: 4200,\n offset_3700: 3700,\n offset_5000: 5000,\n productRating: 'rating'\n});\nvar ProductGridBlockConstants = Object.freeze({\n title: Constants.title,\n titleLevel: Constants.titleLevel,\n one: '1',\n two: '2',\n classNames: Constants.classNames,\n anchorId: Constants.anchorId,\n eyebrow: Constants.eyebrow,\n body: Constants.body,\n disclaimer: Constants.disclaimer,\n seeMoreLabel: 'seeMoreLabel',\n seeLessLabel: 'seeLessLabel',\n maxNumberInlineItems: 'maxNumberInlineItems',\n whiteText: Constants.whiteText,\n radialBackground: 'radialBackground',\n background: 'background',\n removeLazyLoad: 'removeLazyLoad'\n});\nvar PageNavigationConstants = Object.freeze({\n classNames: Constants.classNames,\n pageNavigation: 'page-navigation--underlined',\n placeholderTitleLabel: 'placeholderTitleLabel',\n smooth: Constants.smooth,\n empty: Constants.empty,\n chevronDown: Constants.chevronDown,\n blocks: Constants.blocks\n});\nvar OnePageScrollConstants = Object.freeze({\n scrollDisabled: 'scroll--disabled',\n onePageScrollWrapper: 'one-page-scroll-wrapper',\n easeInOut: 'ease-in-out',\n resize: Constants.resize,\n hashChange: Constants.hashChange,\n touchmove: Constants.touchmove,\n keydown: Constants.keydown,\n container: 'container_',\n polite: 'polite',\n smooth: Constants.smooth,\n thinChevronDown: 'thinChevronDown',\n querySelector: '[data-isactiveblock=\"true\"]',\n scrollDown: 'Scroll down'\n});\nvar BazaarVoiceConstants = Object.freeze({\n masterProductIdPrefix: 'master_',\n masterProductNamePrefix: 'master_product_'\n});\nvar ArticleShareConstants = Object.freeze({\n facebookAlt: 'Share on Facebook',\n twitterAlt: 'Share on Twitter',\n shareTitle: 'Share',\n button: 'button',\n facebookIcon: '/static/images/facebook.png',\n twitterIcon: '/static/images/twitter.png'\n});\nvar PypestreamChatConstants = Object.freeze({\n persistentChatTriggered: 'persistentChatTriggered_'\n});\nvar PressQuoteBlockConstants = Object.freeze({\n pressQuotes: 'pressQuotes',\n pressLogo: 'pressLogo',\n quote: 'quote',\n starRating: 'reviewStars',\n animationGifAsset: 'animationGifAsset',\n callToActionLabel: 'ctaLabel',\n callToActionLink: 'ctaLink',\n iconArrowLeft: 'chevronLeft',\n iconArrowRight: 'chevronRight',\n previousLabel: 'previousLabel',\n nextLabel: 'nextLabel',\n transparentWithBorders: 'Transparent with Borders',\n ariaLabel: 'ariaLabel'\n});\nvar SearchBlockConstants = Object.freeze({\n queryHashName: 'query',\n queryHashEqual: '=',\n faqStylePageLinks: 'Page Links',\n faqStyleDropdown: 'Dropdown',\n allResultsCategory: 'All',\n pageCategory: 'Page',\n collectionCategory: 'Collection',\n productCategory: 'Product',\n articleCategory: 'Article',\n searchText: 'searchText',\n faqCategory: 'FAQ'\n});\nvar CountryCode = Object.freeze({\n Belgique: 'BEL',\n France: 'FRA',\n Deutschland: 'DEU',\n Schweiz: 'CHE',\n 'Österreich': 'AUT',\n Nederland: 'NLD',\n Belgie: 'BEL',\n 'United Kingdom': 'GBR',\n 'Ireland': 'IRL'\n});\nvar SearchServiceConstants = Object.freeze({\n contentType: 'Content-Type',\n json: Constants.json,\n swiftypeBaseUrl: 'https://api.swiftype.com/api/v1',\n swiftypePath: '/public/engines/search',\n swiftypeAutocompleteUrl: 'https://search-api.swiftype.com/api/v1/public/engines/suggest.json'\n});\nvar JanrainConstants = Object.freeze({\n productListLocalStorageKeyPrefix: 'oralbProductList-',\n benefitListLocalStorageKeyPrefix: 'oralbBenefitPreferenceList-'\n});\nvar SvcApiConstants = Object.freeze({\n contentType: 'Content-Type',\n ciamInstanceId: 'CiamInstanceId',\n resendVerificationForm: 'resendVerificationForm',\n unknownAccessToken: 'unknown access token'\n});\nvar WarrantyExtensionConstants = Object.freeze({\n contentType: 'Content-Type',\n json: Constants.json,\n accessToken: 'access_token',\n oneCPId: 'oneCPId',\n UUID: 'UUID',\n programIdParam: 'programId=',\n categoryIdParam: 'categoryId=',\n localeParam: 'locale=',\n productId: 0,\n // based on the API team request while doing warenty extension rewamp\n internGroupValue: 'OC',\n addressTypeCode: 'INVOICE_ADDRESS',\n warrantyExtensionPath: 'warrantyextension',\n getConsumerPath: 'consumer/getConsumer',\n getProductsByTypeCodePath: 'products/productByGas',\n getCampaignInfoMaster: 'program',\n getproductListBySeries: 'products/productListBySeries',\n gasPrimaryProductDetailKey: 'gasPrimaryProductDetail',\n gasSecondaryProductDetailKey: 'gasSecondaryProductDetail',\n primaryProductIndex: 0,\n comboProductIndex: 1,\n janrinProductIdDelimiter: '_',\n janrinProfileOldestProductIndex: 0\n});\nvar FaqDetailsBlockConstants = Object.freeze({\n classNames: 'classNames',\n anchorId: 'anchorId',\n baseClass: 'ob-faq-details-block '\n});\nvar CarouselBlockConstants = Object.freeze(_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default()({\n productCard: 'productCard',\n cloudinaryVideo: 'cloudinaryVideo',\n chevronRight: Constants.chevronRight,\n articleProductCard: 'articleProductCard',\n htmlBlock: 'htmlBlock',\n contentBlock: 'contentBlock',\n rightArrow: 'Å¡ipka vpravo',\n leftArrow: 'Å¡ipka vlevo',\n miniContentBlock: 'blockMiniContentBlock',\n carouselTabItem: 'carouselTabItem'\n}, \"miniContentBlock\", 'blockMiniContentBlock'));\nvar IndexationUrlFactoryConstants = Object.freeze({\n swiftypeBaseUrl: 'https://api.swiftype.com/api/v1/engines/',\n swiftypeDocumentTypes: '/document_types/',\n swiftypeAuth: '?auth_token=',\n json: '.json',\n specificSwiftypeDocument: '/documents/',\n generalSwiftypeDocument: '/documents'\n});\nvar RichTextLinkBlockConstants = Object.freeze({\n classNames: 'classNames',\n image: 'image',\n url: 'url',\n linkType: 'type',\n title: 'title'\n});\nvar BuyNowLiteConstants = Object.freeze({\n accessControlAllowOrigin: 'Access-Control-Allow-Origin',\n xFunctionKey: 'x-functions-key',\n passKey: 'passkey',\n ocpApimSubscriptionKey: 'Ocp-Apim-Subscription-Key',\n image: 'image',\n url: 'url',\n linkType: 'type',\n title: 'title'\n});\nvar ImageContenfullConstants = Object.freeze({\n defaultImageWindWidth: 450,\n defaultWidth: 400,\n defaultDesktopWidth: 768,\n dpr_1440: 'f=center&q=100&w=1440',\n product: 'product'\n});\nvar ContentSeriesSelectorConstants = Object.freeze({\n master: 'master_',\n media: '(min-width: 768px)',\n dpr: 'f=center&q=100&w=398',\n empty: Constants.empty,\n ratingSummary: 'inline_rating',\n reviews: 'reviews'\n});\nvar FileTypeConstants = Object.freeze({\n mp4: 'audio/mp4',\n mp3: 'audio/mp3',\n m4a: 'audio/mpeg'\n});\nvar miniContentBlockConstants = Object.freeze({\n blueCtaColorValue: 'blue',\n whiteCtaColorValue: 'white',\n blueCtaColor: '#002D72',\n whiteCtaColor: '#fff'\n});\nvar dentistContacts = Object.freeze({\n https: 'https://',\n http: 'http://',\n www: 'www.',\n allDentist: 'All Individuals / Practices',\n individuals: 'Individuals',\n practices: 'Practices'\n});\nvar metaConstant = Object.freeze({\n instances: ['localhost', 'dev', 'preview', 'stage', 'canary']\n});\n\n/***/ }),\n\n/***/ 38896:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"a\": function() { return /* binding */ useDomain; },\n/* harmony export */ \"q\": function() { return /* binding */ DomainNameProvider; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(85893);\n\n\nvar DomainNameContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)();\nvar useDomain = function useDomain() {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(DomainNameContext);\n};\nvar DomainNameProvider = function DomainNameProvider(_ref) {\n var children = _ref.children;\n\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(''),\n domain = _useState[0],\n setDomain = _useState[1];\n\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var currentDomain = window.location.hostname;\n setDomain(currentDomain);\n }, []);\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(DomainNameContext.Provider, {\n value: domain,\n children: children\n });\n};\n\n/***/ }),\n\n/***/ 41274:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"_\": function() { return /* binding */ useTabContext; },\n/* harmony export */ \"s\": function() { return /* binding */ TabProvider; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(85893);\n\n\nvar TabContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)();\nvar TabProvider = function TabProvider(_ref) {\n var children = _ref.children;\n\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0),\n activeTabIndex = _useState[0],\n setActiveTabIndex = _useState[1];\n\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(TabContext.Provider, {\n value: {\n activeTabIndex: activeTabIndex,\n setActiveTabIndex: setActiveTabIndex\n },\n children: children\n });\n};\nvar useTabContext = function useTabContext() {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(TabContext);\n};\n\n/***/ }),\n\n/***/ 91203:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(41539);\n\n__webpack_require__(12419);\n\nvar _classCallCheck = __webpack_require__(33227);\n\nvar _createClass = __webpack_require__(88361);\n\nvar _inherits = __webpack_require__(85971);\n\nvar _possibleConstructorReturn = __webpack_require__(52715);\n\nvar _getPrototypeOf = __webpack_require__(91193);\n\nvar _regeneratorRuntime = __webpack_require__(87794);\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\n__webpack_require__(69070);\n\n__webpack_require__(19601);\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports[\"default\"] = void 0;\n\nvar _async_to_generator = (__webpack_require__(60932)/* [\"default\"] */ .Z);\n\nvar _interop_require_default = (__webpack_require__(92648)/* [\"default\"] */ .Z);\n\nvar _react = _interop_require_default(__webpack_require__(67294));\n\nvar _utils = __webpack_require__(67206);\n\nfunction appGetInitialProps(_) {\n return _appGetInitialProps.apply(this, arguments);\n}\n\nfunction _appGetInitialProps() {\n _appGetInitialProps =\n /**\n * `App` component is used for initialize of pages. It allows for overwriting and full control of the `page` initialization.\n * This allows for keeping state between navigation, custom error handling, injecting additional data.\n */\n _async_to_generator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {\n var Component, ctx, pageProps;\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n Component = _ref.Component, ctx = _ref.ctx;\n _context.next = 3;\n return (0, _utils).loadGetInitialProps(Component, ctx);\n\n case 3:\n pageProps = _context.sent;\n return _context.abrupt(\"return\", {\n pageProps: pageProps\n });\n\n case 5:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n return _appGetInitialProps.apply(this, arguments);\n}\n\nvar _Component;\n\nvar App = /*#__PURE__*/function (_Component2) {\n _inherits(App, _Component2);\n\n var _super = _createSuper(App);\n\n function App() {\n _classCallCheck(this, App);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(App, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n Component = _this$props.Component,\n pageProps = _this$props.pageProps;\n return /*#__PURE__*/_react[\"default\"].createElement(Component, Object.assign({}, pageProps));\n }\n }]);\n\n return App;\n}(_Component = _react[\"default\"].Component);\n\nApp.origGetInitialProps = appGetInitialProps;\nApp.getInitialProps = appGetInitialProps;\nexports[\"default\"] = App;\n\n/***/ }),\n\n/***/ 39613:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41539);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(12419);\n/* harmony import */ var core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_object_keys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(47941);\n/* harmony import */ var core_js_modules_es_object_keys_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_keys_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(82526);\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(57327);\n/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(38880);\n/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(89554);\n/* harmony import */ var core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(54747);\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var core_js_modules_es_object_get_own_property_descriptors_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(49337);\n/* harmony import */ var core_js_modules_es_object_get_own_property_descriptors_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptors_js__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var core_js_modules_es_object_define_properties_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(33321);\n/* harmony import */ var core_js_modules_es_object_define_properties_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_properties_js__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(69070);\n/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(930);\n/* harmony import */ var _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(33227);\n/* harmony import */ var _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(88361);\n/* harmony import */ var _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_inherits_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(85971);\n/* harmony import */ var _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_inherits_js__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_inherits_js__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_possibleConstructorReturn_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(52715);\n/* harmony import */ var _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_possibleConstructorReturn_js__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_possibleConstructorReturn_js__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(91193);\n/* harmony import */ var _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(67294);\n/* harmony import */ var next_app__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(7544);\n/* harmony import */ var react_instantsearch_dom__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(4793);\n/* harmony import */ var _adapters_algolia_client__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(90358);\n/* harmony import */ var _components_TabContext__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(41274);\n/* harmony import */ var _styles_index_scss__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(29958);\n/* harmony import */ var _styles_index_scss__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(_styles_index_scss__WEBPACK_IMPORTED_MODULE_21__);\n/* harmony import */ var _components_Core_DynamicPage_DomainNameContext__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(38896);\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(85893);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_11___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_16___default()(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_16___default()(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_possibleConstructorReturn_js__WEBPACK_IMPORTED_MODULE_15___default()(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\n\n\n\n\n\n\n\n\n\nvar CustomApp = /*#__PURE__*/function (_App) {\n _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_inherits_js__WEBPACK_IMPORTED_MODULE_14___default()(CustomApp, _App);\n\n var _super = _createSuper(CustomApp);\n\n function CustomApp() {\n _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_12___default()(this, CustomApp);\n\n return _super.apply(this, arguments);\n }\n\n _home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_13___default()(CustomApp, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n Component = _this$props.Component,\n pageProps = _this$props.pageProps;\n var searchClient = (0,_adapters_algolia_client__WEBPACK_IMPORTED_MODULE_19__/* .getSearchClient */ .m)();\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(_components_Core_DynamicPage_DomainNameContext__WEBPACK_IMPORTED_MODULE_22__/* .DomainNameProvider */ .q, {\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(_components_TabContext__WEBPACK_IMPORTED_MODULE_20__/* .TabProvider */ .s, {\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(react_instantsearch_dom__WEBPACK_IMPORTED_MODULE_24__/* [\"default\"] */ .Z, {\n searchClient: searchClient,\n indexName: \"crawler_oral-b_cz_prod\",\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(Component, _objectSpread({}, pageProps))\n })\n })\n });\n }\n }]);\n\n return CustomApp;\n}(next_app__WEBPACK_IMPORTED_MODULE_18__[\"default\"]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (CustomApp);\n\n/***/ }),\n\n/***/ 91118:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/_app\",\n function () {\n return __webpack_require__(39613);\n }\n ]);\n if(false) {}\n \n\n/***/ }),\n\n/***/ 930:\n/***/ (function(module) {\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n/***/ }),\n\n/***/ 29958:\n/***/ (function() {\n\n// extracted by mini-css-extract-plugin\n\n/***/ }),\n\n/***/ 92703:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = __webpack_require__(50414);\n\nfunction emptyFunction() {}\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim\n };\n\n ReactPropTypes.checkPropTypes = emptyFunction;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n\n\n/***/ }),\n\n/***/ 45697:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (false) { var throwOnDirectAccess, isValidElement, REACT_ELEMENT_TYPE; } else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = __webpack_require__(92703)();\n}\n\n\n/***/ }),\n\n/***/ 50414:\n/***/ (function(module) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n/***/ }),\n\n/***/ 69590:\n/***/ (function(module) {\n\n/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.3\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n // START: Modifications:\n // Apply guards for `Object.create(null)` handling. See:\n // - https://github.com/FormidableLabs/react-fast-compare/issues/64\n // - https://github.com/epoberezkin/fast-deep-equal/issues/49\n if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString();\n // END: Modifications\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React/Preact\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n\n\n/***/ }),\n\n/***/ 33866:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BT\": function() { return /* binding */ InstantSearchConsumer; },\n/* harmony export */ \"tJ\": function() { return /* binding */ InstantSearchProvider; },\n/* harmony export */ \"wX\": function() { return /* binding */ IndexConsumer; }\n/* harmony export */ });\n/* unused harmony exports instantSearchContext, IndexProvider */\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);\n\nvar instantSearchContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({\n onInternalStateUpdate: function onInternalStateUpdate() {\n return undefined;\n },\n createHrefForState: function createHrefForState() {\n return '#';\n },\n onSearchForFacetValues: function onSearchForFacetValues() {\n return undefined;\n },\n onSearchStateChange: function onSearchStateChange() {\n return undefined;\n },\n onSearchParameters: function onSearchParameters() {\n return undefined;\n },\n store: {},\n widgetsManager: {},\n mainTargetedIndex: ''\n});\nvar InstantSearchConsumer = instantSearchContext.Consumer,\n InstantSearchProvider = instantSearchContext.Provider;\n\nvar _createContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(undefined),\n IndexConsumer = _createContext.Consumer,\n IndexProvider = _createContext.Provider;\n\n\n/***/ }),\n\n/***/ 95009:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Ei\": function() { return /* binding */ hasMultipleIndices; },\n/* harmony export */ \"O7\": function() { return /* binding */ getResults; },\n/* harmony export */ \"RD\": function() { return /* binding */ refineValue; },\n/* harmony export */ \"U6\": function() { return /* binding */ getCurrentRefinementValue; },\n/* harmony export */ \"WN\": function() { return /* binding */ getIndexId; },\n/* harmony export */ \"cI\": function() { return /* binding */ cleanUpValue; }\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60647);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n\nfunction getIndexId(context) {\n return hasMultipleIndices(context) ? context.multiIndexContext.targetedIndex : context.ais.mainTargetedIndex;\n}\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @returns {import('algoliasearch-helper').SearchResults} results\n */\nfunction getResults(searchResults, context) {\n if (searchResults.results) {\n if (searchResults.results.hits) {\n return searchResults.results;\n }\n var indexId = getIndexId(context);\n if (searchResults.results[indexId]) {\n return searchResults.results[indexId];\n }\n }\n return null;\n}\nfunction hasMultipleIndices(context) {\n return context && context.multiIndexContext;\n}\nfunction refineValue(searchState, nextRefinement, context, resetPage, namespace) {\n if (hasMultipleIndices(context)) {\n var indexId = getIndexId(context);\n return namespace ? refineMultiIndexWithNamespace(searchState, nextRefinement, indexId, resetPage, namespace) : refineMultiIndex(searchState, nextRefinement, indexId, resetPage);\n } else {\n // When we have a multi index page with shared widgets we should also\n // reset their page to 1 if the resetPage is provided. Otherwise the\n // indices will always be reset\n // see: https://github.com/algolia/react-instantsearch/issues/310\n // see: https://github.com/algolia/react-instantsearch/issues/637\n if (searchState.indices && resetPage) {\n Object.keys(searchState.indices).forEach(function (targetedIndex) {\n searchState = refineValue(searchState, {\n page: 1\n }, {\n multiIndexContext: {\n targetedIndex: targetedIndex\n }\n }, true, namespace);\n });\n }\n return namespace ? refineSingleIndexWithNamespace(searchState, nextRefinement, resetPage, namespace) : refineSingleIndex(searchState, nextRefinement, resetPage);\n }\n}\nfunction refineMultiIndex(searchState, nextRefinement, indexId, resetPage) {\n var page = resetPage ? {\n page: 1\n } : undefined;\n var state = searchState.indices && searchState.indices[indexId] ? _objectSpread(_objectSpread({}, searchState.indices), {}, _defineProperty({}, indexId, _objectSpread(_objectSpread(_objectSpread({}, searchState.indices[indexId]), nextRefinement), page))) : _objectSpread(_objectSpread({}, searchState.indices), {}, _defineProperty({}, indexId, _objectSpread(_objectSpread({}, nextRefinement), page)));\n return _objectSpread(_objectSpread({}, searchState), {}, {\n indices: state\n });\n}\nfunction refineSingleIndex(searchState, nextRefinement, resetPage) {\n var page = resetPage ? {\n page: 1\n } : undefined;\n return _objectSpread(_objectSpread(_objectSpread({}, searchState), nextRefinement), page);\n}\nfunction refineMultiIndexWithNamespace(searchState, nextRefinement, indexId, resetPage, namespace) {\n var _objectSpread4;\n var page = resetPage ? {\n page: 1\n } : undefined;\n var state = searchState.indices && searchState.indices[indexId] ? _objectSpread(_objectSpread({}, searchState.indices), {}, _defineProperty({}, indexId, _objectSpread(_objectSpread({}, searchState.indices[indexId]), {}, (_objectSpread4 = {}, _defineProperty(_objectSpread4, namespace, _objectSpread(_objectSpread({}, searchState.indices[indexId][namespace]), nextRefinement)), _defineProperty(_objectSpread4, \"page\", 1), _objectSpread4)))) : _objectSpread(_objectSpread({}, searchState.indices), {}, _defineProperty({}, indexId, _objectSpread(_defineProperty({}, namespace, nextRefinement), page)));\n return _objectSpread(_objectSpread({}, searchState), {}, {\n indices: state\n });\n}\nfunction refineSingleIndexWithNamespace(searchState, nextRefinement, resetPage, namespace) {\n var page = resetPage ? {\n page: 1\n } : undefined;\n return _objectSpread(_objectSpread({}, searchState), {}, _defineProperty({}, namespace, _objectSpread(_objectSpread({}, searchState[namespace]), nextRefinement)), page);\n}\nfunction getNamespaceAndAttributeName(id) {\n var parts = id.match(/^([^.]*)\\.(.*)/);\n var namespace = parts && parts[1];\n var attributeName = parts && parts[2];\n return {\n namespace: namespace,\n attributeName: attributeName\n };\n}\nfunction hasRefinements(_ref) {\n var multiIndex = _ref.multiIndex,\n indexId = _ref.indexId,\n namespace = _ref.namespace,\n attributeName = _ref.attributeName,\n id = _ref.id,\n searchState = _ref.searchState;\n if (multiIndex && namespace) {\n return searchState.indices && searchState.indices[indexId] && searchState.indices[indexId][namespace] && Object.hasOwnProperty.call(searchState.indices[indexId][namespace], attributeName);\n }\n if (multiIndex) {\n return searchState.indices && searchState.indices[indexId] && Object.hasOwnProperty.call(searchState.indices[indexId], id);\n }\n if (namespace) {\n return searchState[namespace] && Object.hasOwnProperty.call(searchState[namespace], attributeName);\n }\n return Object.hasOwnProperty.call(searchState, id);\n}\nfunction getRefinements(_ref2) {\n var multiIndex = _ref2.multiIndex,\n indexId = _ref2.indexId,\n namespace = _ref2.namespace,\n attributeName = _ref2.attributeName,\n id = _ref2.id,\n searchState = _ref2.searchState;\n if (multiIndex && namespace) {\n return searchState.indices[indexId][namespace][attributeName];\n }\n if (multiIndex) {\n return searchState.indices[indexId][id];\n }\n if (namespace) {\n return searchState[namespace][attributeName];\n }\n return searchState[id];\n}\nfunction getCurrentRefinementValue(props, searchState, context, id, defaultValue) {\n var indexId = getIndexId(context);\n var _getNamespaceAndAttri = getNamespaceAndAttributeName(id),\n namespace = _getNamespaceAndAttri.namespace,\n attributeName = _getNamespaceAndAttri.attributeName;\n var multiIndex = hasMultipleIndices(context);\n var args = {\n multiIndex: multiIndex,\n indexId: indexId,\n namespace: namespace,\n attributeName: attributeName,\n id: id,\n searchState: searchState\n };\n var hasRefinementsValue = hasRefinements(args);\n if (hasRefinementsValue) {\n return getRefinements(args);\n }\n if (props.defaultRefinement) {\n return props.defaultRefinement;\n }\n return defaultValue;\n}\nfunction cleanUpValue(searchState, context, id) {\n var indexId = getIndexId(context);\n var _getNamespaceAndAttri2 = getNamespaceAndAttributeName(id),\n namespace = _getNamespaceAndAttri2.namespace,\n attributeName = _getNamespaceAndAttri2.attributeName;\n if (hasMultipleIndices(context) && Boolean(searchState.indices)) {\n return cleanUpValueWithMultiIndex({\n attribute: attributeName,\n searchState: searchState,\n indexId: indexId,\n id: id,\n namespace: namespace\n });\n }\n return cleanUpValueWithSingleIndex({\n attribute: attributeName,\n searchState: searchState,\n id: id,\n namespace: namespace\n });\n}\nfunction cleanUpValueWithSingleIndex(_ref3) {\n var searchState = _ref3.searchState,\n id = _ref3.id,\n namespace = _ref3.namespace,\n attribute = _ref3.attribute;\n if (namespace) {\n return _objectSpread(_objectSpread({}, searchState), {}, _defineProperty({}, namespace, (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__/* .omit */ .CE)(searchState[namespace], [attribute])));\n }\n return (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__/* .omit */ .CE)(searchState, [id]);\n}\nfunction cleanUpValueWithMultiIndex(_ref4) {\n var searchState = _ref4.searchState,\n indexId = _ref4.indexId,\n id = _ref4.id,\n namespace = _ref4.namespace,\n attribute = _ref4.attribute;\n var indexSearchState = searchState.indices[indexId];\n if (namespace && indexSearchState) {\n return _objectSpread(_objectSpread({}, searchState), {}, {\n indices: _objectSpread(_objectSpread({}, searchState.indices), {}, _defineProperty({}, indexId, _objectSpread(_objectSpread({}, indexSearchState), {}, _defineProperty({}, namespace, (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__/* .omit */ .CE)(indexSearchState[namespace], [attribute])))))\n });\n }\n if (indexSearchState) {\n return _objectSpread(_objectSpread({}, searchState), {}, {\n indices: _objectSpread(_objectSpread({}, searchState.indices), {}, _defineProperty({}, indexId, (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__/* .omit */ .CE)(indexSearchState, [id])))\n });\n }\n return searchState;\n}\n\n/***/ }),\n\n/***/ 60647:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CE\": function() { return /* binding */ omit; },\n/* harmony export */ \"Gf\": function() { return /* binding */ getDisplayName; },\n/* harmony export */ \"Io\": function() { return /* binding */ addQueryID; },\n/* harmony export */ \"PQ\": function() { return /* binding */ defer; },\n/* harmony export */ \"RC\": function() { return /* binding */ addAbsolutePositions; },\n/* harmony export */ \"YC\": function() { return /* binding */ removeEmptyKey; },\n/* harmony export */ \"Zj\": function() { return /* binding */ unescapeFacetValue; },\n/* harmony export */ \"wU\": function() { return /* binding */ shallowEqual; }\n/* harmony export */ });\n/* unused harmony exports removeEmptyArraysFromObject, find, objectHasKeys, getPropertyByPath, getObjectType */\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n// eslint-disable-next-line @typescript-eslint/unbound-method\nvar hasOwn = Object.prototype.hasOwnProperty;\n\n// From https://github.com/reactjs/react-redux/blob/master/src/utils/shallowEqual.js\nvar shallowEqual = function shallowEqual(objA, objB) {\n if (objA === objB) {\n return true;\n }\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwn.call(objB, keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {\n return false;\n }\n }\n return true;\n};\nvar getDisplayName = function getDisplayName(Component) {\n return Component.displayName || Component.name || 'UnknownComponent';\n};\nvar resolved = Promise.resolve();\nvar defer = function defer(f) {\n resolved.then(f);\n};\nvar isPlainObject = function isPlainObject(value) {\n return _typeof(value) === 'object' && value !== null && !Array.isArray(value);\n};\nvar removeEmptyKey = function removeEmptyKey(obj) {\n Object.keys(obj).forEach(function (key) {\n var value = obj[key];\n if (!isPlainObject(value)) {\n return;\n }\n if (!objectHasKeys(value)) {\n delete obj[key];\n } else {\n removeEmptyKey(value);\n }\n });\n return obj;\n};\nvar removeEmptyArraysFromObject = function removeEmptyArraysFromObject(obj) {\n Object.keys(obj).forEach(function (key) {\n var value = obj[key];\n if (Array.isArray(value) && value.length === 0) {\n delete obj[key];\n }\n });\n return obj;\n};\nfunction addAbsolutePositions(hits, hitsPerPage, page) {\n return hits.map(function (hit, index) {\n return _objectSpread(_objectSpread({}, hit), {}, {\n __position: hitsPerPage * page + index + 1\n });\n });\n}\nfunction addQueryID(hits, queryID) {\n if (!queryID) {\n return hits;\n }\n return hits.map(function (hit) {\n return _objectSpread(_objectSpread({}, hit), {}, {\n __queryID: queryID\n });\n });\n}\nfunction find(array, comparator) {\n if (!Array.isArray(array)) {\n return undefined;\n }\n for (var i = 0; i < array.length; i++) {\n if (comparator(array[i])) {\n return array[i];\n }\n }\n return undefined;\n}\nfunction objectHasKeys(object) {\n return object && Object.keys(object).length > 0;\n}\n\n// https://github.com/babel/babel/blob/3aaafae053fa75febb3aa45d45b6f00646e30ba4/packages/babel-helpers/src/helpers.js#L604-L620\nfunction omit(source, excluded) {\n if (source === null || source === undefined) {\n return {};\n }\n var target = {};\n var sourceKeys = Object.keys(source);\n for (var i = 0; i < sourceKeys.length; i++) {\n var key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) {\n // eslint-disable-next-line no-continue\n continue;\n }\n target[key] = source[key];\n }\n return target;\n}\n\n/**\n * Retrieve the value at a path of the object:\n *\n * @example\n * getPropertyByPath(\n * { test: { this: { function: [{ now: { everyone: true } }] } } },\n * 'test.this.function[0].now.everyone'\n * ); // true\n *\n * getPropertyByPath(\n * { test: { this: { function: [{ now: { everyone: true } }] } } },\n * ['test', 'this', 'function', 0, 'now', 'everyone']\n * ); // true\n *\n * @param object Source object to query\n * @param path either an array of properties, or a string form of the properties, separated by .\n */\nvar getPropertyByPath = function getPropertyByPath(object, path) {\n return (Array.isArray(path) ? path : path.replace(/\\[(\\d+)]/g, '.$1').split('.')).reduce(function (current, key) {\n return current ? current[key] : undefined;\n }, object);\n};\nfunction getObjectType(object) {\n return Object.prototype.toString.call(object).slice(8, -1);\n}\nfunction unescapeFacetValue(value) {\n return value.replace(/^\\\\-/, '-');\n}\n\n/***/ }),\n\n/***/ 4793:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"Z\": function() { return /* binding */ widgets_InstantSearch; }\n});\n\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__(67294);\n// EXTERNAL MODULE: ./node_modules/react-fast-compare/index.js\nvar react_fast_compare = __webpack_require__(69590);\nvar react_fast_compare_default = /*#__PURE__*/__webpack_require__.n(react_fast_compare);\n// EXTERNAL MODULE: ./node_modules/prop-types/index.js\nvar prop_types = __webpack_require__(45697);\nvar prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);\n// EXTERNAL MODULE: ./node_modules/algoliasearch-helper/index.js\nvar algoliasearch_helper = __webpack_require__(8131);\nvar algoliasearch_helper_default = /*#__PURE__*/__webpack_require__.n(algoliasearch_helper);\n// EXTERNAL MODULE: ./node_modules/react-instantsearch-core/dist/es/core/utils.js\nvar utils = __webpack_require__(60647);\n;// CONCATENATED MODULE: ./node_modules/react-instantsearch-core/dist/es/core/createWidgetsManager.js\n\nfunction createWidgetsManager(onWidgetsUpdate) {\n var widgets = [];\n // Is an update scheduled?\n var scheduled = false;\n\n // The state manager's updates need to be batched since more than one\n // component can register or unregister widgets during the same tick.\n function scheduleUpdate() {\n if (scheduled) {\n return;\n }\n scheduled = true;\n (0,utils/* defer */.PQ)(function () {\n scheduled = false;\n onWidgetsUpdate();\n });\n }\n return {\n registerWidget: function registerWidget(widget) {\n widgets.push(widget);\n scheduleUpdate();\n return function unregisterWidget() {\n widgets.splice(widgets.indexOf(widget), 1);\n scheduleUpdate();\n };\n },\n update: scheduleUpdate,\n getWidgets: function getWidgets() {\n return widgets;\n }\n };\n}\n;// CONCATENATED MODULE: ./node_modules/react-instantsearch-core/dist/es/core/createStore.js\nfunction createStore(initialState) {\n var state = initialState;\n var listeners = [];\n return {\n getState: function getState() {\n return state;\n },\n setState: function setState(nextState) {\n state = nextState;\n listeners.forEach(function (listener) {\n return listener();\n });\n },\n subscribe: function subscribe(listener) {\n listeners.push(listener);\n return function unsubscribe() {\n listeners.splice(listeners.indexOf(listener), 1);\n };\n }\n };\n}\n;// CONCATENATED MODULE: ./node_modules/react-instantsearch-core/dist/es/core/highlight.js\n\nvar HIGHLIGHT_TAGS = {\n highlightPreTag: \"\",\n highlightPostTag: \"\"\n};\n\n/**\n * Parses an highlighted attribute into an array of objects with the string value, and\n * a boolean that indicated if this part is highlighted.\n *\n * @param {string} preTag - string used to identify the start of an highlighted value\n * @param {string} postTag - string used to identify the end of an highlighted value\n * @param {string} highlightedValue - highlighted attribute as returned by Algolia highlight feature\n * @return {object[]} - An array of {value: string, isHighlighted: boolean}.\n */\nfunction parseHighlightedAttribute(_ref) {\n var preTag = _ref.preTag,\n postTag = _ref.postTag,\n _ref$highlightedValue = _ref.highlightedValue,\n highlightedValue = _ref$highlightedValue === void 0 ? '' : _ref$highlightedValue;\n var splitByPreTag = highlightedValue.split(preTag);\n var firstValue = splitByPreTag.shift();\n var elements = firstValue === '' ? [] : [{\n value: firstValue,\n isHighlighted: false\n }];\n if (postTag === preTag) {\n var isHighlighted = true;\n splitByPreTag.forEach(function (split) {\n elements.push({\n value: split,\n isHighlighted: isHighlighted\n });\n isHighlighted = !isHighlighted;\n });\n } else {\n splitByPreTag.forEach(function (split) {\n var splitByPostTag = split.split(postTag);\n elements.push({\n value: splitByPostTag[0],\n isHighlighted: true\n });\n if (splitByPostTag[1] !== '') {\n elements.push({\n value: splitByPostTag[1],\n isHighlighted: false\n });\n }\n });\n }\n return elements;\n}\n\n/**\n * Find an highlighted attribute given an `attribute` and an `highlightProperty`, parses it,\n * and provided an array of objects with the string value and a boolean if this\n * value is highlighted.\n *\n * In order to use this feature, highlight must be activated in the configuration of\n * the index. The `preTag` and `postTag` attributes are respectively highlightPreTag and\n * highlightPostTag in Algolia configuration.\n *\n * @param {string} preTag - string used to identify the start of an highlighted value\n * @param {string} postTag - string used to identify the end of an highlighted value\n * @param {string} highlightProperty - the property that contains the highlight structure in the results\n * @param {string} attribute - the highlighted attribute to look for\n * @param {object} hit - the actual hit returned by Algolia.\n * @return {object[]} - An array of {value: string, isHighlighted: boolean}.\n */\nfunction parseAlgoliaHit(_ref2) {\n var _ref2$preTag = _ref2.preTag,\n preTag = _ref2$preTag === void 0 ? '' : _ref2$preTag,\n _ref2$postTag = _ref2.postTag,\n postTag = _ref2$postTag === void 0 ? '' : _ref2$postTag,\n highlightProperty = _ref2.highlightProperty,\n attribute = _ref2.attribute,\n hit = _ref2.hit;\n if (!hit) throw new Error('`hit`, the matching record, must be provided');\n var highlightObject = getPropertyByPath(hit[highlightProperty], attribute) || {};\n if (Array.isArray(highlightObject)) {\n return highlightObject.map(function (item) {\n return parseHighlightedAttribute({\n preTag: preTag,\n postTag: postTag,\n highlightedValue: item.value\n });\n });\n }\n return parseHighlightedAttribute({\n preTag: preTag,\n postTag: postTag,\n highlightedValue: highlightObject.value\n });\n}\n// EXTERNAL MODULE: ./node_modules/react-instantsearch-core/dist/es/core/indexUtils.js\nvar indexUtils = __webpack_require__(95009);\n;// CONCATENATED MODULE: ./node_modules/react-instantsearch-core/dist/es/core/version.js\n/* harmony default export */ var version = ('6.40.1');\n;// CONCATENATED MODULE: ./node_modules/react-instantsearch-core/dist/es/core/createInstantSearchManager.js\nvar _excluded = [\"resultsFacetValues\"],\n _excluded2 = [\"resultsFacetValues\"],\n _excluded3 = [\"resultsFacetValues\"];\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n\n\n\n\n\n\n\nfunction addAlgoliaAgents(searchClient) {\n if (typeof searchClient.addAlgoliaAgent === 'function') {\n searchClient.addAlgoliaAgent(\"react (\".concat(react.version, \")\"));\n searchClient.addAlgoliaAgent(\"react-instantsearch (\".concat(version, \")\"));\n }\n}\nvar isMultiIndexContext = function isMultiIndexContext(widget) {\n return (0,indexUtils/* hasMultipleIndices */.Ei)({\n ais: widget.props.contextValue,\n multiIndexContext: widget.props.indexContextValue\n });\n};\nvar isTargetedIndexEqualIndex = function isTargetedIndexEqualIndex(widget, indexId) {\n return widget.props.indexContextValue.targetedIndex === indexId;\n};\n\n// Relying on the `indexId` is a bit brittle to detect the `Index` widget.\n// Since it's a class we could rely on `instanceof` or similar. We never\n// had an issue though. Works for now.\nvar isIndexWidget = function isIndexWidget(widget) {\n return Boolean(widget.props.indexId);\n};\nvar isIndexWidgetEqualIndex = function isIndexWidgetEqualIndex(widget, indexId) {\n return widget.props.indexId === indexId;\n};\nvar sortIndexWidgetsFirst = function sortIndexWidgetsFirst(firstWidget, secondWidget) {\n var isFirstWidgetIndex = isIndexWidget(firstWidget);\n var isSecondWidgetIndex = isIndexWidget(secondWidget);\n if (isFirstWidgetIndex && !isSecondWidgetIndex) {\n return -1;\n }\n if (!isFirstWidgetIndex && isSecondWidgetIndex) {\n return 1;\n }\n return 0;\n};\n\n// This function is copied from the algoliasearch v4 API Client. If modified,\n// consider updating it also in `serializeQueryParameters` from `@algolia/transporter`.\nfunction serializeQueryParameters(parameters) {\n var isObjectOrArray = function isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Object.prototype.toString.call(value) === '[object Array]';\n };\n var encode = function encode(format) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n var i = 0;\n return format.replace(/%s/g, function () {\n return encodeURIComponent(args[i++]);\n });\n };\n return Object.keys(parameters).map(function (key) {\n return encode('%s=%s', key, isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key]);\n }).join('&');\n}\n\n/**\n * Creates a new instance of the InstantSearchManager which controls the widgets and\n * trigger the search when the widgets are updated.\n * @param {string} indexName - the main index name\n * @param {object} initialState - initial widget state\n * @param {object} SearchParameters - optional additional parameters to send to the algolia API\n * @param {number} stalledSearchDelay - time (in ms) after the search is stalled\n * @return {InstantSearchManager} a new instance of InstantSearchManager\n */\nfunction createInstantSearchManager(_ref) {\n var indexName = _ref.indexName,\n _ref$initialState = _ref.initialState,\n initialState = _ref$initialState === void 0 ? {} : _ref$initialState,\n searchClient = _ref.searchClient,\n resultsState = _ref.resultsState,\n stalledSearchDelay = _ref.stalledSearchDelay;\n var helper = algoliasearch_helper_default()(searchClient, indexName, _objectSpread({}, HIGHLIGHT_TAGS));\n addAlgoliaAgents(searchClient);\n helper.on('search', handleNewSearch).on('result', handleSearchSuccess({\n indexId: indexName\n })).on('error', handleSearchError);\n var skip = false;\n var stalledSearchTimer = null;\n var initialSearchParameters = helper.state;\n var searchCounter;\n var widgetsManager = createWidgetsManager(onWidgetsUpdate);\n hydrateSearchClient(searchClient, resultsState);\n var store = createStore({\n widgets: initialState,\n metadata: hydrateMetadata(resultsState),\n results: hydrateResultsState(resultsState),\n error: null,\n searching: false,\n isSearchStalled: true,\n searchingForFacetValues: false\n });\n function skipSearch() {\n skip = true;\n }\n function updateClient(client) {\n addAlgoliaAgents(client);\n helper.setClient(client);\n search();\n }\n function clearCache() {\n helper.clearCache();\n search();\n }\n function getMetadata(state) {\n return widgetsManager.getWidgets().filter(function (widget) {\n return Boolean(widget.getMetadata);\n }).map(function (widget) {\n return widget.getMetadata(state);\n });\n }\n function getSearchParameters() {\n var sharedParameters = widgetsManager.getWidgets().filter(function (widget) {\n return Boolean(widget.getSearchParameters);\n }).filter(function (widget) {\n return !isMultiIndexContext(widget) && !isIndexWidget(widget);\n }).reduce(function (res, widget) {\n return widget.getSearchParameters(res);\n }, initialSearchParameters);\n var mainParameters = widgetsManager.getWidgets().filter(function (widget) {\n return Boolean(widget.getSearchParameters);\n }).filter(function (widget) {\n var targetedIndexEqualMainIndex = isMultiIndexContext(widget) && isTargetedIndexEqualIndex(widget, indexName);\n var subIndexEqualMainIndex = isIndexWidget(widget) && isIndexWidgetEqualIndex(widget, indexName);\n return targetedIndexEqualMainIndex || subIndexEqualMainIndex;\n })\n // We have to sort the `Index` widgets first so the `index` parameter\n // is correctly set in the `reduce` function for the following widgets\n .sort(sortIndexWidgetsFirst).reduce(function (res, widget) {\n return widget.getSearchParameters(res);\n }, sharedParameters);\n var derivedIndices = widgetsManager.getWidgets().filter(function (widget) {\n return Boolean(widget.getSearchParameters);\n }).filter(function (widget) {\n var targetedIndexNotEqualMainIndex = isMultiIndexContext(widget) && !isTargetedIndexEqualIndex(widget, indexName);\n var subIndexNotEqualMainIndex = isIndexWidget(widget) && !isIndexWidgetEqualIndex(widget, indexName);\n return targetedIndexNotEqualMainIndex || subIndexNotEqualMainIndex;\n })\n // We have to sort the `Index` widgets first so the `index` parameter\n // is correctly set in the `reduce` function for the following widgets\n .sort(sortIndexWidgetsFirst).reduce(function (indices, widget) {\n var indexId = isMultiIndexContext(widget) ? widget.props.indexContextValue.targetedIndex : widget.props.indexId;\n var widgets = indices[indexId] || [];\n return _objectSpread(_objectSpread({}, indices), {}, _defineProperty({}, indexId, widgets.concat(widget)));\n }, {});\n var derivedParameters = Object.keys(derivedIndices).map(function (indexId) {\n return {\n parameters: derivedIndices[indexId].reduce(function (res, widget) {\n return widget.getSearchParameters(res);\n }, sharedParameters),\n indexId: indexId\n };\n });\n return {\n mainParameters: mainParameters,\n derivedParameters: derivedParameters\n };\n }\n function search() {\n if (!skip) {\n var _getSearchParameters = getSearchParameters(helper.state),\n mainParameters = _getSearchParameters.mainParameters,\n derivedParameters = _getSearchParameters.derivedParameters;\n searchCounter = derivedParameters.length + 1;\n\n // We have to call `slice` because the method `detach` on the derived\n // helpers mutates the value `derivedHelpers`. The `forEach` loop does\n // not iterate on each value and we're not able to correctly clear the\n // previous derived helpers (memory leak + useless requests).\n helper.derivedHelpers.slice().forEach(function (derivedHelper) {\n // Since we detach the derived helpers on **every** new search they\n // won't receive intermediate results in case of a stalled search.\n // Only the last result is dispatched by the derived helper because\n // they are not detached yet:\n //\n // - a -> main helper receives results\n // - ap -> main helper receives results\n // - app -> main helper + derived helpers receive results\n //\n // The quick fix is to avoid to detach them on search but only once they\n // received the results. But it means that in case of a stalled search\n // all the derived helpers not detached yet register a new search inside\n // the helper. The number grows fast in case of a bad network and it's\n // not deterministic.\n derivedHelper.detach();\n });\n derivedParameters.forEach(function (_ref2) {\n var indexId = _ref2.indexId,\n parameters = _ref2.parameters;\n var derivedHelper = helper.derive(function () {\n return parameters;\n });\n derivedHelper.on('result', handleSearchSuccess({\n indexId: indexId\n })).on('error', handleSearchError);\n });\n helper.setState(mainParameters);\n helper.search();\n }\n }\n function handleSearchSuccess(_ref3) {\n var indexId = _ref3.indexId;\n return function (event) {\n searchCounter--;\n var state = store.getState();\n var isDerivedHelpersEmpty = !helper.derivedHelpers.length;\n var results = state.results ? state.results : {};\n\n // Switching from mono index to multi index and vice versa must reset the\n // results to an empty object, otherwise we keep reference of stalled and\n // unused results.\n results = !isDerivedHelpersEmpty && results.getFacetByName ? {} : results;\n if (!isDerivedHelpersEmpty) {\n results = _objectSpread(_objectSpread({}, results), {}, _defineProperty({}, indexId, event.results));\n } else {\n results = event.results;\n }\n var currentState = store.getState();\n var nextIsSearchStalled = currentState.isSearchStalled;\n if (!helper.hasPendingRequests()) {\n clearTimeout(stalledSearchTimer);\n stalledSearchTimer = null;\n nextIsSearchStalled = false;\n }\n var resultsFacetValues = currentState.resultsFacetValues,\n partialState = _objectWithoutProperties(currentState, _excluded);\n store.setState(_objectSpread(_objectSpread({}, partialState), {}, {\n results: results,\n isSearchStalled: nextIsSearchStalled,\n searching: searchCounter > 0,\n error: null\n }));\n };\n }\n function handleSearchError(_ref4) {\n var error = _ref4.error;\n var currentState = store.getState();\n var nextIsSearchStalled = currentState.isSearchStalled;\n if (!helper.hasPendingRequests()) {\n clearTimeout(stalledSearchTimer);\n nextIsSearchStalled = false;\n }\n var resultsFacetValues = currentState.resultsFacetValues,\n partialState = _objectWithoutProperties(currentState, _excluded2);\n store.setState(_objectSpread(_objectSpread({}, partialState), {}, {\n isSearchStalled: nextIsSearchStalled,\n error: error,\n searching: false\n }));\n }\n function handleNewSearch() {\n if (!stalledSearchTimer) {\n stalledSearchTimer = setTimeout(function () {\n var _store$getState = store.getState(),\n resultsFacetValues = _store$getState.resultsFacetValues,\n partialState = _objectWithoutProperties(_store$getState, _excluded3);\n store.setState(_objectSpread(_objectSpread({}, partialState), {}, {\n isSearchStalled: true\n }));\n }, stalledSearchDelay);\n }\n }\n function hydrateSearchClient(client, results) {\n if (!results) {\n return;\n }\n\n // Disable cache hydration on:\n // - Algoliasearch API Client < v4 with cache disabled\n // - Third party clients (detected by the `addAlgoliaAgent` function missing)\n\n if ((!client.transporter || client._cacheHydrated) && (!client._useCache || typeof client.addAlgoliaAgent !== 'function')) {\n return;\n }\n\n // Algoliasearch API Client >= v4\n // To hydrate the client we need to populate the cache with the data from\n // the server (done in `hydrateSearchClientWithMultiIndexRequest` or\n // `hydrateSearchClientWithSingleIndexRequest`). But since there is no way\n // for us to compute the key the same way as `algoliasearch-client` we need\n // to populate it on a custom key and override the `search` method to\n // search on it first.\n if (client.transporter && !client._cacheHydrated) {\n client._cacheHydrated = true;\n var baseMethod = client.search;\n client.search = function (requests) {\n for (var _len2 = arguments.length, methodArgs = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n methodArgs[_key2 - 1] = arguments[_key2];\n }\n var requestsWithSerializedParams = requests.map(function (request) {\n return _objectSpread(_objectSpread({}, request), {}, {\n params: serializeQueryParameters(request.params)\n });\n });\n return client.transporter.responsesCache.get({\n method: 'search',\n args: [requestsWithSerializedParams].concat(methodArgs)\n }, function () {\n return baseMethod.apply(void 0, [requests].concat(methodArgs));\n });\n };\n }\n if (Array.isArray(results.results)) {\n hydrateSearchClientWithMultiIndexRequest(client, results.results);\n return;\n }\n hydrateSearchClientWithSingleIndexRequest(client, results);\n }\n function hydrateSearchClientWithMultiIndexRequest(client, results) {\n // Algoliasearch API Client >= v4\n // Populate the cache with the data from the server\n if (client.transporter) {\n client.transporter.responsesCache.set({\n method: 'search',\n args: [results.reduce(function (acc, result) {\n return acc.concat(result.rawResults.map(function (request) {\n return {\n indexName: request.index,\n params: request.params\n };\n }));\n }, [])]\n }, {\n results: results.reduce(function (acc, result) {\n return acc.concat(result.rawResults);\n }, [])\n });\n return;\n }\n\n // Algoliasearch API Client < v4\n // Prior to client v4 we didn't have a proper API to hydrate the client\n // cache from the outside. The following code populates the cache with\n // a single-index result. You can find more information about the\n // computation of the key inside the client (see link below).\n // https://github.com/algolia/algoliasearch-client-javascript/blob/c27e89ff92b2a854ae6f40dc524bffe0f0cbc169/src/AlgoliaSearchCore.js#L232-L240\n var key = \"/1/indexes/*/queries_body_\".concat(JSON.stringify({\n requests: results.reduce(function (acc, result) {\n return acc.concat(result.rawResults.map(function (request) {\n return {\n indexName: request.index,\n params: request.params\n };\n }));\n }, [])\n }));\n client.cache = _objectSpread(_objectSpread({}, client.cache), {}, _defineProperty({}, key, JSON.stringify({\n results: results.reduce(function (acc, result) {\n return acc.concat(result.rawResults);\n }, [])\n })));\n }\n function hydrateSearchClientWithSingleIndexRequest(client, results) {\n // Algoliasearch API Client >= v4\n // Populate the cache with the data from the server\n if (client.transporter) {\n client.transporter.responsesCache.set({\n method: 'search',\n args: [results.rawResults.map(function (request) {\n return {\n indexName: request.index,\n params: request.params\n };\n })]\n }, {\n results: results.rawResults\n });\n return;\n }\n // Algoliasearch API Client < v4\n // Prior to client v4 we didn't have a proper API to hydrate the client\n // cache from the outside. The following code populates the cache with\n // a single-index result. You can find more information about the\n // computation of the key inside the client (see link below).\n // https://github.com/algolia/algoliasearch-client-javascript/blob/c27e89ff92b2a854ae6f40dc524bffe0f0cbc169/src/AlgoliaSearchCore.js#L232-L240\n var key = \"/1/indexes/*/queries_body_\".concat(JSON.stringify({\n requests: results.rawResults.map(function (request) {\n return {\n indexName: request.index,\n params: request.params\n };\n })\n }));\n client.cache = _objectSpread(_objectSpread({}, client.cache), {}, _defineProperty({}, key, JSON.stringify({\n results: results.rawResults\n })));\n }\n function hydrateResultsState(results) {\n if (!results) {\n return null;\n }\n if (Array.isArray(results.results)) {\n return results.results.reduce(function (acc, result) {\n return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, result._internalIndexId, new (algoliasearch_helper_default()).SearchResults(new (algoliasearch_helper_default()).SearchParameters(result.state), result.rawResults)));\n }, {});\n }\n return new (algoliasearch_helper_default()).SearchResults(new (algoliasearch_helper_default()).SearchParameters(results.state), results.rawResults);\n }\n\n // Called whenever a widget has been rendered with new props.\n function onWidgetsUpdate() {\n var metadata = getMetadata(store.getState().widgets);\n store.setState(_objectSpread(_objectSpread({}, store.getState()), {}, {\n metadata: metadata,\n searching: true\n }));\n\n // Since the `getSearchParameters` method of widgets also depends on props,\n // the result search parameters might have changed.\n search();\n }\n function transitionState(nextSearchState) {\n var searchState = store.getState().widgets;\n return widgetsManager.getWidgets().filter(function (widget) {\n return Boolean(widget.transitionState);\n }).reduce(function (res, widget) {\n return widget.transitionState(searchState, res);\n }, nextSearchState);\n }\n function onExternalStateUpdate(nextSearchState) {\n var metadata = getMetadata(nextSearchState);\n store.setState(_objectSpread(_objectSpread({}, store.getState()), {}, {\n widgets: nextSearchState,\n metadata: metadata,\n searching: true\n }));\n search();\n }\n function onSearchForFacetValues(_ref5) {\n var facetName = _ref5.facetName,\n query = _ref5.query,\n _ref5$maxFacetHits = _ref5.maxFacetHits,\n maxFacetHits = _ref5$maxFacetHits === void 0 ? 10 : _ref5$maxFacetHits;\n // The values 1, 100 are the min / max values that the engine accepts.\n // see: https://www.algolia.com/doc/api-reference/api-parameters/maxFacetHits\n var maxFacetHitsWithinRange = Math.max(1, Math.min(maxFacetHits, 100));\n store.setState(_objectSpread(_objectSpread({}, store.getState()), {}, {\n searchingForFacetValues: true\n }));\n helper.searchForFacetValues(facetName, query, maxFacetHitsWithinRange).then(function (content) {\n var _objectSpread7;\n store.setState(_objectSpread(_objectSpread({}, store.getState()), {}, {\n error: null,\n searchingForFacetValues: false,\n resultsFacetValues: _objectSpread(_objectSpread({}, store.getState().resultsFacetValues), {}, (_objectSpread7 = {}, _defineProperty(_objectSpread7, facetName, content.facetHits), _defineProperty(_objectSpread7, \"query\", query), _objectSpread7))\n }));\n }, function (error) {\n store.setState(_objectSpread(_objectSpread({}, store.getState()), {}, {\n searchingForFacetValues: false,\n error: error\n }));\n }).catch(function (error) {\n // Since setState is synchronous, any error that occurs in the render of a\n // component will be swallowed by this promise.\n // This is a trick to make the error show up correctly in the console.\n // See http://stackoverflow.com/a/30741722/969302\n setTimeout(function () {\n throw error;\n });\n });\n }\n function updateIndex(newIndex) {\n initialSearchParameters = initialSearchParameters.setIndex(newIndex);\n // No need to trigger a new search here as the widgets will also update and trigger it if needed.\n }\n\n function getWidgetsIds() {\n return store.getState().metadata.reduce(function (res, meta) {\n return typeof meta.id !== 'undefined' ? res.concat(meta.id) : res;\n }, []);\n }\n return {\n store: store,\n widgetsManager: widgetsManager,\n getWidgetsIds: getWidgetsIds,\n getSearchParameters: getSearchParameters,\n onSearchForFacetValues: onSearchForFacetValues,\n onExternalStateUpdate: onExternalStateUpdate,\n transitionState: transitionState,\n updateClient: updateClient,\n updateIndex: updateIndex,\n clearCache: clearCache,\n skipSearch: skipSearch\n };\n}\nfunction hydrateMetadata(resultsState) {\n if (!resultsState) {\n return [];\n }\n\n // add a value noop, which gets replaced once the widgets are mounted\n return resultsState.metadata.map(function (datum) {\n return _objectSpread(_objectSpread({\n value: function value() {\n return {};\n }\n }, datum), {}, {\n items: datum.items && datum.items.map(function (item) {\n return _objectSpread(_objectSpread({\n value: function value() {\n return {};\n }\n }, item), {}, {\n items: item.items && item.items.map(function (nestedItem) {\n return _objectSpread({\n value: function value() {\n return {};\n }\n }, nestedItem);\n })\n });\n })\n });\n });\n}\n// EXTERNAL MODULE: ./node_modules/react-instantsearch-core/dist/es/core/context.js\nvar context = __webpack_require__(33866);\n;// CONCATENATED MODULE: ./node_modules/react-instantsearch-core/dist/es/core/metadata.js\nfunction metadata_typeof(obj) { \"@babel/helpers - typeof\"; return metadata_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, metadata_typeof(obj); }\nfunction isMetadataEnabled() {\n return (typeof window === \"undefined\" ? \"undefined\" : metadata_typeof(window)) === 'object' && metadata_typeof(window.navigator) === 'object' && typeof window.navigator.userAgent === 'string' && window.navigator.userAgent.includes('Algolia Crawler') && metadata_typeof(window.document) === 'object';\n}\nfunction getMetadataPayload(widgets, searchClient) {\n var internalProps = ['contextValue', 'indexContextValue'];\n var widgetsPayload = widgets.map(function (_ref) {\n var props = _ref.props,\n constructor = _ref.constructor;\n var _ref2 = constructor._connectorDesc || {},\n _ref2$defaultProps = _ref2.defaultProps,\n defaultProps = _ref2$defaultProps === void 0 ? {} : _ref2$defaultProps,\n _ref2$displayName = _ref2.displayName,\n displayName = _ref2$displayName === void 0 ? constructor.displayName : _ref2$displayName;\n return {\n displayName: displayName,\n $$type: constructor.$$type,\n $$widgetType: constructor.$$widgetType,\n params: Object.keys(props).filter(function (prop) {\n return !internalProps.includes(prop) && defaultProps[prop] !== props[prop] && props[prop] !== undefined;\n })\n };\n });\n var client = searchClient;\n var ua = client.transporter && client.transporter.userAgent ? client.transporter.userAgent.value : client._ua;\n return {\n ua: ua,\n widgets: widgetsPayload\n };\n}\nfunction injectMetadata(widgets, searchClient) {\n var payloadContainer = document.createElement('meta');\n var refNode = document.querySelector('head');\n payloadContainer.name = 'algolia:metadata';\n var payload = getMetadataPayload(widgets, searchClient);\n payloadContainer.content = JSON.stringify(payload);\n refNode.appendChild(payloadContainer);\n}\n;// CONCATENATED MODULE: ./node_modules/react-instantsearch-core/dist/es/widgets/InstantSearch.js\nfunction InstantSearch_typeof(obj) { \"@babel/helpers - typeof\"; return InstantSearch_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, InstantSearch_typeof(obj); }\nfunction InstantSearch_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction InstantSearch_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? InstantSearch_ownKeys(Object(source), !0).forEach(function (key) { InstantSearch_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : InstantSearch_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, InstantSearch_toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (InstantSearch_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction InstantSearch_defineProperty(obj, key, value) { key = InstantSearch_toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction InstantSearch_toPropertyKey(arg) { var key = InstantSearch_toPrimitive(arg, \"string\"); return InstantSearch_typeof(key) === \"symbol\" ? key : String(key); }\nfunction InstantSearch_toPrimitive(input, hint) { if (InstantSearch_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (InstantSearch_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n\n\n\n\n\n\nfunction isControlled(props) {\n return Boolean(props.searchState);\n}\n\n/**\n * @description\n * `` is the root component of all React InstantSearch implementations.\n * It provides all the connected components (aka widgets) a means to interact\n * with the searchState.\n * @kind widget\n * @name \n * @requirements You will need to have an Algolia account to be able to use this widget.\n * [Create one now](https://www.algolia.com/users/sign_up).\n * @propType {string} indexName - Main index in which to search.\n * @propType {boolean} [refresh=false] - Flag to activate when the cache needs to be cleared so that the front-end is updated when a change occurs in the index.\n * @propType {object} [searchClient] - Provide a custom search client.\n * @propType {func} [onSearchStateChange] - Function to be called everytime a new search is done. Useful for [URL Routing](guide/Routing.html).\n * @propType {object} [searchState] - Object to inject some search state. Switches the InstantSearch component in controlled mode. Useful for [URL Routing](guide/Routing.html).\n * @propType {func} [createURL] - Function to call when creating links, useful for [URL Routing](guide/Routing.html).\n * @propType {SearchResults|SearchResults[]} [resultsState] - Use this to inject the results that will be used at first rendering. Those results are found by using the `findResultsState` function. Useful for [Server Side Rendering](guide/Server-side_rendering.html).\n * @propType {number} [stalledSearchDelay=200] - The amount of time before considering that the search takes too much time. The time is expressed in milliseconds.\n * @propType {{ Root: string|function, props: object }} [root] - Use this to customize the root element. Default value: `{ Root: 'div' }`\n * @example\n * import React from 'react';\n * import algoliasearch from 'algoliasearch/lite';\n * import { InstantSearch, SearchBox, Hits } from 'react-instantsearch-dom';\n *\n * const searchClient = algoliasearch(\n * 'latency',\n * '6be0576ff61c053d5f9a3225e2a90f76'\n * );\n *\n * const App = () => (\n * \n * \n * \n * \n * );\n */\nvar InstantSearch = /*#__PURE__*/function (_Component) {\n _inherits(InstantSearch, _Component);\n var _super = _createSuper(InstantSearch);\n function InstantSearch(props) {\n var _this;\n _classCallCheck(this, InstantSearch);\n _this = _super.call(this, props);\n InstantSearch_defineProperty(_assertThisInitialized(_this), \"cleanupTimerRef\", null);\n InstantSearch_defineProperty(_assertThisInitialized(_this), \"isUnmounting\", false);\n var instantSearchManager = createInstantSearchManager({\n indexName: _this.props.indexName,\n searchClient: _this.props.searchClient,\n initialState: _this.props.searchState || {},\n resultsState: _this.props.resultsState,\n stalledSearchDelay: _this.props.stalledSearchDelay\n });\n var contextValue = {\n store: instantSearchManager.store,\n widgetsManager: instantSearchManager.widgetsManager,\n mainTargetedIndex: _this.props.indexName,\n onInternalStateUpdate: _this.onWidgetsInternalStateUpdate.bind(_assertThisInitialized(_this)),\n createHrefForState: _this.createHrefForState.bind(_assertThisInitialized(_this)),\n onSearchForFacetValues: _this.onSearchForFacetValues.bind(_assertThisInitialized(_this)),\n onSearchStateChange: _this.onSearchStateChange.bind(_assertThisInitialized(_this)),\n onSearchParameters: _this.onSearchParameters.bind(_assertThisInitialized(_this))\n };\n _this.state = {\n isControlled: isControlled(_this.props),\n instantSearchManager: instantSearchManager,\n contextValue: contextValue\n };\n return _this;\n }\n _createClass(InstantSearch, [{\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var prevIsControlled = isControlled(prevProps);\n if (prevIsControlled && !this.state.isControlled) {\n throw new Error(\"You can't switch from being controlled to uncontrolled\");\n }\n if (!prevIsControlled && this.state.isControlled) {\n throw new Error(\"You can't switch from being uncontrolled to controlled\");\n }\n if (this.props.refresh !== prevProps.refresh && this.props.refresh) {\n this.state.instantSearchManager.clearCache();\n }\n if (prevProps.indexName !== this.props.indexName) {\n this.state.instantSearchManager.updateIndex(this.props.indexName);\n }\n if (prevProps.searchClient !== this.props.searchClient) {\n this.state.instantSearchManager.updateClient(this.props.searchClient);\n }\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (this.cleanupTimerRef) {\n clearTimeout(this.cleanupTimerRef);\n this.cleanupTimerRef = null;\n }\n if (isMetadataEnabled()) {\n injectMetadata(this.state.instantSearchManager.widgetsManager.getWidgets(), this.props.searchClient);\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n var _this2 = this;\n this.cleanupTimerRef = setTimeout(function () {\n _this2.isUnmounting = true;\n _this2.state.instantSearchManager.skipSearch();\n });\n }\n }, {\n key: \"createHrefForState\",\n value: function createHrefForState(searchState) {\n searchState = this.state.instantSearchManager.transitionState(searchState);\n return this.state.isControlled && this.props.createURL ? this.props.createURL(searchState, this.getKnownKeys()) : '#';\n }\n }, {\n key: \"onWidgetsInternalStateUpdate\",\n value: function onWidgetsInternalStateUpdate(searchState) {\n searchState = this.state.instantSearchManager.transitionState(searchState);\n this.onSearchStateChange(searchState);\n if (!this.state.isControlled) {\n this.state.instantSearchManager.onExternalStateUpdate(searchState);\n }\n }\n }, {\n key: \"onSearchStateChange\",\n value: function onSearchStateChange(searchState) {\n if (this.props.onSearchStateChange && !this.isUnmounting) {\n this.props.onSearchStateChange(searchState);\n }\n }\n }, {\n key: \"onSearchParameters\",\n value: function onSearchParameters(getSearchParameters, context, props, getMetadata, displayName) {\n if (this.props.onSearchParameters) {\n var _searchState = this.props.searchState ? this.props.searchState : {};\n this.props.onSearchParameters(getSearchParameters, context, props, _searchState);\n }\n if (this.props.widgetsCollector) {\n var _searchState2 = this.props.searchState ? this.props.searchState : {};\n this.props.widgetsCollector({\n getSearchParameters: getSearchParameters,\n getMetadata: getMetadata,\n context: context,\n props: props,\n searchState: _searchState2,\n displayName: displayName\n });\n }\n }\n }, {\n key: \"onSearchForFacetValues\",\n value: function onSearchForFacetValues(searchState) {\n this.state.instantSearchManager.onSearchForFacetValues(searchState);\n }\n }, {\n key: \"getKnownKeys\",\n value: function getKnownKeys() {\n return this.state.instantSearchManager.getWidgetsIds();\n }\n }, {\n key: \"render\",\n value: function render() {\n if (react.Children.count(this.props.children) === 0) {\n return null;\n }\n return /*#__PURE__*/react.createElement(context/* InstantSearchProvider */.tJ, {\n value: this.state.contextValue\n }, this.props.children);\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n var nextIsControlled = isControlled(nextProps);\n var previousSearchState = prevState.instantSearchManager.store.getState().widgets;\n var nextSearchState = nextProps.searchState;\n if (nextIsControlled && !react_fast_compare_default()(previousSearchState, nextSearchState)) {\n prevState.instantSearchManager.onExternalStateUpdate(nextProps.searchState);\n }\n return {\n isControlled: nextIsControlled,\n contextValue: InstantSearch_objectSpread(InstantSearch_objectSpread({}, prevState.contextValue), {}, {\n mainTargetedIndex: nextProps.indexName\n })\n };\n }\n }]);\n return InstantSearch;\n}(react.Component);\nInstantSearch_defineProperty(InstantSearch, \"defaultProps\", {\n stalledSearchDelay: 200,\n refresh: false\n});\nInstantSearch_defineProperty(InstantSearch, \"propTypes\", {\n // @TODO: These props are currently constant.\n indexName: (prop_types_default()).string.isRequired,\n searchClient: prop_types_default().shape({\n search: (prop_types_default()).func.isRequired,\n searchForFacetValues: (prop_types_default()).func,\n addAlgoliaAgent: (prop_types_default()).func,\n clearCache: (prop_types_default()).func\n }).isRequired,\n createURL: (prop_types_default()).func,\n refresh: (prop_types_default()).bool,\n searchState: (prop_types_default()).object,\n onSearchStateChange: (prop_types_default()).func,\n onSearchParameters: (prop_types_default()).func,\n widgetsCollector: (prop_types_default()).func,\n resultsState: prop_types_default().oneOfType([(prop_types_default()).object, (prop_types_default()).array]),\n children: (prop_types_default()).node,\n stalledSearchDelay: (prop_types_default()).number\n});\n/* harmony default export */ var widgets_InstantSearch = (InstantSearch);\n\n/***/ })\n\n},\n/******/ function(__webpack_require__) { // webpackRuntimeModules\n/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }\n/******/ __webpack_require__.O(0, [9774,179], function() { return __webpack_exec__(91118), __webpack_exec__(61587); });\n/******/ var __webpack_exports__ = __webpack_require__.O();\n/******/ _N_E = __webpack_exports__;\n/******/ }\n]);"],"names":["self","push","module","EventEmitter","_events","_maxListeners","undefined","isFunction","arg","isObject","exports","prototype","defaultMaxListeners","setMaxListeners","n","isNaN","TypeError","emit","type","error","length","er","arguments","Error","handler","len","args","i","listeners","err","context","call","Array","slice","apply","addListener","listener","m","newListener","warned","console","trace","on","once","fired","g","removeListener","list","position","splice","removeAllListeners","key","listenerCount","evlistener","emitter","__unused_webpack_exports","__webpack_require__","AlgoliaSearchHelper","RecommendParameters","RecommendResults","SearchParameters","SearchResults","algoliasearchHelper","client","index","opts","searchResultsOptions","version","DerivedHelper","mainHelper","fn","recommendFn","main","lastResults","lastRecommendResults","inherits","detach","detachDerivedHelper","getModifiedState","parameters","getModifiedRecommendState","params","constructor","addParams","newParams","removeParams","id","filter","param","$$id","addFrequentlyBoughtTogether","Object","assign","model","addRelatedProducts","addTrendingItems","addTrendingFacets","addLookingSimilar","_buildQueries","indexName","cache","map","query","threshold","state","results","_state","_rawResults","forEach","defaultsPure","objectHasKeys","omit","lib","addRefinement","refinementList","attribute","value","isRefined","valueAsString","facetRefinement","concat","mod","removeRefinement","clearRefinement","v","f","toggleRefinement","refinementType","hasChanged","newRefinementList","keys","reduce","memo","values","facetList","refinementValue","containsRefinements","Boolean","indexOf","find","intersection","merge","valToNumber","isValidUserToken","RefinementList","isEqualNumericRefinement","a","b","isArray","every","el","newParameters","_parseNumbers","userToken","warn","facets","disjunctiveFacets","hierarchicalFacets","facetsRefinements","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements","paramName","isKeyKnown","PARAMETERS","isValueDefined","partialState","numbers","numberKeys","k","parsedValue","parseFloat","insideBoundingBox","geoRect","operators","operator","parsedValues","vPrime","make","instance","facet","rootPath","currentRefinement","getHierarchicalRefinement","name","clearRefinements","toggleHierarchicalFacetRefinement","validate","currentState","tagFilters","numericFilters","patch","_clearNumericRefinements","setQueryParameters","clearTags","setIndex","setQuery","newQuery","setPage","newPage","page","setFacets","setDisjunctiveFacets","setHitsPerPage","hitsPerPage","setTypoTolerance","typoTolerance","addNumericRefinement","val","isNumericRefined","getConjunctiveRefinements","facetName","isConjunctiveFacet","getDisjunctiveRefinements","isDisjunctiveFacet","getExcludeRefinements","removeNumericRefinement","number","op","getNumericRefinements","getNumericRefinement","newNumericRefinements","operatorList","outValues","addFacet","addDisjunctiveFacet","addHierarchicalFacet","hierarchicalFacet","isHierarchicalFacet","addFacetRefinement","addExcludeRefinement","addDisjunctiveFacetRefinement","addTagRefinement","tag","isTagRefined","modification","removeFacet","removeDisjunctiveFacet","removeHierarchicalFacet","removeFacetRefinement","removeExcludeRefinement","removeDisjunctiveFacetRefinement","removeTagRefinement","t","toggleFacetRefinement","toggleConjunctiveFacetRefinement","toggleDisjunctiveFacetRefinement","toggleExcludeFacetRefinement","separator","_getHierarchicalFacetSeparator","getHierarchicalFacetByName","lastIndexOf","addHierarchicalFacetRefinement","path","isHierarchicalFacetRefined","removeHierarchicalFacetRefinement","toggleTagRefinement","isFacetRefined","isExcludeRefined","isDisjunctiveFacetRefined","refinements","isOperatorDefined","isAttributeValueDefined","findArray","currentValue","getRefinedDisjunctiveFacets","disjunctiveNumericRefinedFacets","getRefinedHierarchicalFacets","sort","getUnrefinedDisjunctiveFacets","refinedFacets","managedParameters","getQueryParams","queryParams","paramValue","setQueryParameter","parameter","nextWithNumbers","previousPlainObject","acc","nextPlainObject","previous","isPreviousValueDefined","isNextValueDefined","resetPage","_getHierarchicalFacetSortBy","sortBy","_getHierarchicalRootPath","_getHierarchicalShowParentLevel","showParentLevel","hierarchicalFacetName","getHierarchicalFacetBreadcrumb","refinement","split","part","trim","toString","JSON","stringify","hierarchicalFacetResult","hierarchicalFacetIndex","hierarchicalFacetRefinement","hierarchicalSeparator","hierarchicalRootPath","hierarchicalShowParentLevel","prepareHierarchicalFacetSortBy","rootExhaustive","facetResult","exhaustive","hierarchicalTree","currentHierarchicalLevel","parent","level","data","subtree","picked","facetValue","tuple","parentPath","orderBy","facetCount","parts","unescapeFacetValue","escapedValue","escapeFacetValue","count","fv","compact","findIndex","formatSort","mergeNumericMax","generateHierarchicalTree","getIndices","attributes","indices","idx","assignFacetStats","dest","facetStats","stats","options","mainSubResponse","persistHierarchicalRootCount","processingTimeMS","sum","result","facetsIndices","disjunctiveFacetsIndices","nextDisjunctiveResult","mainFacets","facetKey","facetValueObject","facetNames","facetIndex","idxAttributeName","exhaustiveFacetsCount","isFacetDisjunctive","isFacetConjunctive","facets_stats","disjunctiveFacet","dfacet","facetResults","attributeIndex","dataFromMainRequest","refinedFacet","defaultData","root","excludes","getFacetStatsIfAvailable","getRefinement","attributeName","resultsFacets","getFacetByName","predicate","DEFAULT_SORT","getFacetValues","facetValues","extractNormalizedFacetValues","isExcluded","hierarchicalFacetValues","replace","currentRefinementSplit","unshift","setIsRefined","item","depth","child","facetOrdering","config","recSort","sortFn","node","names","children","childNode","order","ordering","orderedFacets","remainingFacets","hide","reverseOrder","sortRemainingBy","renderingContent","hidden","getFacetStats","getRefinements","res","facetDeclaration","rootFacet","intermediateFacet","newFacet","numericValue","requestBuilder","sortAndMergeRecommendations","addAlgoliaAgent","setClient","recommendState","_queryId","_recommendQueryId","_lastQueryIdReceived","_lastRecommendQueryIdReceived","derivedHelpers","_currentNbQueries","_currentNbRecommendQueries","_searchResultsOptions","_recommendCache","setCurrentPage","_change","isPageReset","getCurrentPage","search","_search","onlyWithDerivedHelpers","searchOnlyWithDerivedHelpers","searchWithComposition","_runComposition","recommend","_recommend","getQuery","_getHitsSearchParams","searchOnce","cb","tempState","queries","_getQueries","then","content","catch","_originalResponse","e","findAnswers","derivedHelper","Promise","resolve","derivedState","attributesForPrediction","nbHits","errorMessage","initIndex","queryLanguages","searchForFacetValues","maxFacetHits","userState","searchForFacetValuesPromise","clientHasSFFV","searchForFacets","clientHasInitIndex","isDisjunctive","algoliaQuery","getSearchForFacetQuery","response","facetHits","searchForCompositionFacetValues","compositionID","searchForFacetValuesRequest","searchQuery","_getCompositionHitsSearchParams","q","addDisjunctiveRefine","addRefine","addFacetExclusion","addExclude","addTag","_recommendChange","removeDisjunctiveRefine","removeRefine","removeFacetExclusion","removeExclude","removeTag","removeFrequentlyBoughtTogether","removeRelatedProducts","removeTrendingItems","removeTrendingFacets","removeLookingSimilar","toggleFacetExclusion","toggleExclude","toggleRefine","toggleTag","nextPage","previousPage","setState","newState","overrideStateWithoutTriggeringChangeEvent","hasRefinements","isDisjunctiveRefined","hasTag","hasTagRefinements","getIndex","getPage","getTags","conjRefinements","r","excludeRefinements","disjunctiveRefinements","states","mainQueries","queriesCount","helper","derivedQueries","derivedStateQueries","queryId","_dispatchAlgoliaResponse","bind","_dispatchAlgoliaError","_getCompositionQueries","searchState","ids","derivedIndex","getRecommendations","_dispatchRecommendResponse","_dispatchRecommendError","rawContent","s","specificResults","_rawContent","idsMap","firstResult","hits","containsRefinement","facetFilters","_hasDisjunctiveRefinements","event","clearCache","newClient","getClient","derive","pos","hasPendingRequests","array","sources","reduceRight","source","String","comparator","arr","defaults","defaultInstructions","out","sortInstruction","matchingDefault","defaultInstruction","ctor","superCtor","create","enumerable","writable","configurable","arr1","arr2","isObjectOrArrayOrFunction","target","l","_merge","hasOwnProperty","sourceVal","targetVal","accValue","sourceValue","obj","excluded","sourceKeys","collection","iteratees","orders","criteria","iteratee","object","other","compareAscending","valIsDefined","valIsNull","othIsDefined","othIsNull","sortObject","curr","_getDisjunctiveFacetSearchParams","filtersMap","segment","join","hasHierarchicalFacetFilter","some","filteredFacetFilters","facetFilter","filtered","filterValue","requestBody","_getHitsHierarchicalFacetsAttributes","_getFacetFilters","_getNumericFilters","_getTagFilters","additionalParams","highlightPreTag","highlightPostTag","hierarchicalRootLevel","analytics","clickAnalytics","_getDisjunctiveHierarchicalFacetAttribute","vs","orFilters","attributeToRefine","attributesIndex","allAttributes","hierarchicalRefinement","newAttributes","rootLevel","parentLevel","stateForSearchForFacetValues","searchForFacetSearchParameters","facetQuery","test","flat","indexTracker","nrOfObjs","avgIndices","hit","objectID","indexSum","sortedAverageIndices","avgOfIndices","orderedHits","avgIndexRef","getOwnPropertySymbols","getOwnPropertyDescriptor","defineProperty","getOwnPropertyDescriptors","defineProperties","o","propertyIsEnumerable","Symbol","iterator","u","next","done","return","from","serializable","get","miss","parse","set","delete","clear","c","headers","WithinHeaders","queryParameters","WithinQueryParameters","setTimeout","Math","min","d","wait","all","h","p","encodeURIComponent","y","entries","timeout","cacheable","Read","Write","Any","O","status","lastUpdate","Date","now","w","protocol","url","accept","I","j","S","method","toLowerCase","userAgent","pop","message","transporterStackTrace","E","R","charAt","substr","connectTimeout","timeouts","connect","responseTimeout","request","host","triesLeft","onSuccess","onRetry","isTimedOut","logger","info","A","hostsCache","onFail","requester","send","getTimeout","statelessHosts","reverse","requestsCache","responsesCache","hosts","read","mappedRequestOptions","transporter","reject","write","C","U","z","J","F","H","M","B","batch","shouldStop","cursor","K","acl","tt","W","cluster","L","users","Q","clearExistingDictionaryEntries","requests","action","body","jt","taskID","G","operation","destination","ut","methods","waitTask","de","V","scope","he","Rules","_","Settings","X","Synonyms","Y","Z","$","et","rt","nt","at","ot","it","retrieveMappings","getClusters","appId","st","ct","ft","dt","lt","ht","pt","mt","yt","ue","gt","vt","bt","Pt","Ot","wt","It","xt","Dt","qt","St","se","_highlightResult","kt","ce","Tt","batchSize","taskIDs","objectIDs","Nt","Rt","forwardToReplicas","Et","At","Ct","Ut","zt","le","DeleteObject","Jt","Ft","Ht","Gt","Mt","Bt","paginate","ie","parseInt","nbPages","Kt","Wt","Lt","attributesToRetrieve","Qt","getVersion","Vt","_t","Xt","createIfNotExists","PartialUpdateObject","PartialUpdateObjectNoCreate","Yt","safe","autoGenerateObjectIDIfNotExist","random","substring","ee","Zt","ne","clearExistingRules","$t","oe","clearExistingSynonyms","te","AddObject","UpdateObject","re","ae","replaceExistingSynonyms","fe","DeleteIndex","ClearIndex","ge","ve","fallbackParameters","be","Pe","Oe","we","Ie","xe","apiKey","XMLHttpRequest","open","setRequestHeader","abort","onreadystatechange","readyState","OPENED","clearTimeout","onerror","responseText","onload","debug","caches","shift","localStorage","window","getItem","setItem","timeToLive","fromEntries","timestamp","getTime","removeItem","T","add","getPersonalizationStrategy","setPersonalizationStrategy","region","multipleBatch","multipleGetObjects","multipleQueries","copyIndex","copySettings","copySynonyms","copyRules","moveIndex","listIndices","getLogs","listClusters","multipleSearchForFacetValues","getApiKey","addApiKey","listApiKeys","updateApiKey","deleteApiKey","restoreApiKey","assignUserID","assignUserIDs","getUserID","searchUserIDs","listUserIDs","getTopUserIDs","removeUserID","hasPendingMappings","clearDictionaryEntries","deleteDictionaryEntries","getDictionarySettings","getAppTask","replaceDictionaryEntries","saveDictionaryEntries","searchDictionaryEntries","setDictionarySettings","waitAppTask","customRequest","getObject","getObjects","saveObject","saveObjects","setSettings","getSettings","partialUpdateObject","partialUpdateObjects","deleteObject","deleteObjects","deleteBy","clearObjects","browseObjects","getObjectPosition","findObject","exists","saveSynonym","saveSynonyms","getSynonym","searchSynonyms","browseSynonyms","deleteSynonym","clearSynonyms","replaceAllObjects","replaceAllSynonyms","searchRules","getRule","deleteRule","saveRule","saveRules","replaceAllRules","browseRules","clearRules","initAnalytics","addABTest","getABTest","getABTests","stopABTest","deleteABTest","initPersonalization","initRecommendation","getFrequentlyBoughtTogether","getLookingSimilar","getRecommendedForYou","getRelatedProducts","getTrendingFacets","getTrendingItems","authMode","floor","__unused_webpack_module","DESCRIPTORS","stat","forced","sham","FREEZING","fails","onFreeze","nativeFreeze","freeze","toIndexedObject","nativeGetOwnPropertyDescriptor","FAILS_ON_PRIMITIVES","ownKeys","getOwnPropertyDescriptorModule","createProperty","descriptor","createHTML","proto","forcedStringHTMLMethod","small","__webpack_exports__","getSearchClient","algoliasearch__WEBPACK_IMPORTED_MODULE_2__","algoliasearch__WEBPACK_IMPORTED_MODULE_2___default","clients","MarkdownTextConstants","LanguageSelectionConstants","SpotlightSliderConstants","CampaignIframeOverlayConstants","CollectionTabsBlockConstants","StarRatingConstants","PressQuoteBlockConstants","CountryCode","ComparisonChartBlockConstants","ArticleHeroBlockConstants","ArticleCategoryHeroBlockConstants","ButtonTabsNavigationConstant","YoutubeVideoConstants","ProductHighlightsConstants","SpotlightStickyBarConstants","MetaConstants","AnnouncementBarConstants","LayoutConstants","SpotlightWaitlistConstants","AppDownloadBlockConstants","algoliaReducerConstants","ArticleShareConstants","VideoPlayerConstants","ContentConstants","AdditionalReadingBlockConstants","IconsConstant","CarouselBlockConstants","miniContentBlockConstants","LegacyProductHighlightsConstants","UnderlineTabsNavigationConstants","SeriesSelectorConstants","ProductSubNavConstants","SearchServiceConstants","SeriesTabsConstants","SideBySideContainerConstants","BazaarVoiceConstants","TabbedContentConstants","FaqDetailsBlockConstants","SpotlightContentBlockConstants","WarrantyExtensionConstants","OrganizationConstants","ContentSeriesSelectorConstants","FileTypeConstants","ComponentFactoryConstants","ProductOverviewConstant","FAQBlockConstants","ShowcaseBlockConstants","ProductOverlayConstants","ResponsiveImageConstants","ImageContenfullConstants","SeeMoreButtonConstants","RecentlyViewedProductsBlockConstants","SeriesComparisonItemConstants","PromoConstants","BrushConfiguratorConstants","Constants","OnePageScrollConstants","PypestreamChatConstants","metaConstant","dentistContacts","SvcApiConstants","ZoneConstants","ImageConstants","BuySeriesConstants","InTheBoxBlockConstants","ContentVideoConstants","ContactUsBlockConstants","MainMenuConstants","SpotlightVideoPlayerConstants","SpotlightExperienceProductConstants","SkipNavigationBlockConstants","ProductGridBlockConstants","SearchBarConstants","SpotlightContestConstants","RichTextConstants","UserQuoteConstants","MiniNavigationConstants","AwardsBlockConstant","SpotlightContentVideoConstants","SpotlightPreorderConstants","BuyNowLiteConstants","CharacterBlockConstants","FooterConstants","SearchBlockConstants","RichTextLinkBlockConstants","GalleryBlockConstants","RotationConstants","SpotlightExperienceConstants","_Object$freeze","_Object$freeze2","_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__","_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_0___default","title","titleLevel","classNames","callToActionLink","callToActionLabel","description","disclaimer","disclaimerReference","eyebrow","backgroundAsset","mobileBackgroundAsset","anchorId","hashChange","resize","close","play","mobile","desktop","chevronRight","blue","smooth","backgroundImage","mainAsset","empty","blocks","submit","json","whiteText","white","top","primaryColor","scroll","ratingSummary","button","chevronDown","chevronTop","wideChevronDown","thinChevronDown","itemType","text","medium","large","h1","h2","keydown","Tab","Escape","touchmove","mediumLong","alreadyInUse","brand","pathDelimiter","blank","collectionHeroSection","collectionHeroSectionCta","titleLinkName","kidsProductCategory","optins","optinIdx","autoComplete","aboutReviews","Loading","breadcrumb","Answer","Question","HowToSchema","article","WebPage","FAQschema","ImageObject","organization","typeLD","signInEmail","signInPassword","product","PrivacyLinkPlaceholder","bannerImagePositionLeft","bannerImagePositionUp","bannerImagePositionRight","bannerImagePositionTop","parentOrganization","additionalReadingBlock","articleLink","disableDays","AnnouncementBarDisableDate","closeAriaLabel","ctaName","downloadLinks","ctas","mobileAsset","textToTheRight","backgroundColor","callToActionAriaLabel","readTimeLabel","articleBanner","defaultImageWindWidth","defaultWidth","defaultDesktopWidth","dpr_1440","mobile_max_width","desktop_min_width","facebookLabel","twitterLabel","closeOverlayLabel","dataName","center","features","live","off","replacementBrushHead","panel","tab","tablist","chevronLeft","link","role","iconOne","iconTwo","obIconRoundedContainer","reviewLabel","mobileBackgroundImage","characterLogo","mobileCharacterLogo","maxWidth","hash","row","table","rowheader","columnheader","cell","noValueLabel","jumpToConfiguratorLink","altTextPrefixFeatureImage","ariaLabel","contactUs","playing","pause","pauseLabel","playLabel","resetLabel","openTranscriptLabel","closeTranscriptLabel","ended","Src","Dest","x","White","transparentWithBorder","blueBorderBtn","primaryGrey","callToActionTitle","surtitle","callToActionIsALink","textContainerBackgroundColor","textContainerBackgroundOpacity","textContainerHasPadding","blueEyebrow","textsImage","cloudinaryVideo","devicesConfigurations","deviceConfigurations","isMedium","blockMinHeight","blockMarginTop","blockMarginBottom","blockMarginRight","blockMarginLeft","blockPadding","textAlign","textContainerWidth","titleWidth","descriptionWidth","textContainerHorizontalAlignment","textContainerVerticalAlignment","textContainerOffset","textContainerMarginRight","textContainerMarginLeft","textContainerMarginBottom","mainAssetBelowOrAboveText","mainAssetMaxWidth","mainAssetMaxHeight","mainAssetHeight","mainAssetMarginTop","mainAssetMarginRight","mainAssetOffsetBottom","mainAssetOffsetLeft","mainAssetScale","mainAssetHorizontalAlignment","mainAssetVerticalAlignment","backgroundPosition","sectionOffsetTop","mainAssetParallax","mainAssetParallaxSetting","textParallax","textParallaxSetting","textParallaxConfiguration","assetParallaxConfiguration","textShowAnimation","textFadeIn","textColor","respectImageAspectRatio","titleFontSize","ctaBackgroundColor","aboveText","belowText","hasDivider","isRemoveParallax","defaultWindWidth","CtalabelId","reset","isPopupCta","imagePopup","replay","descriptionBelowOption","callToActionType","contentOptions","contentOptionClassName","mobileLayout","desktopLayout","textContainerMarginTop","playIconColor","closeLabel","whiteHexThreeChars","whiteHexFull","playIcon","textImage","youtubeVideoBlock","mainHeading","gaEventLabel","awardItemLogo","minus6","plus","arrowRight","popularSentence","searchResultsTitle","obSupport","Previous","Next","of","copyright","copyrightAt","countryCode","lang","cloudinaryImage","seeMoreButtonLabel","seeLessButtonLabel","full","items","inTheBoxImage","regions","currentLanguage","jumpToLabel","closeLanguageSelectionLabel","countryLanguageSelection","countryLanguageAriaLabel","zoneContestCode","zoneThankYouCode","paddingValue","paddingValueBreadcrumb","isActive","seeLess","seeMore","highlights","plusSymbol","minusSymbol","arrowUp","arrowDown","prev","nearest","mousedown","blur","Open","Close","productByNeed","productByType","whyOralB","conditions","lifeStages","ourAmbition","mainMenuLabel","hierarchy","hamburger","closeMenuLabel","openMenuLabel","searchLabel","returnToMainMenuLabel","arrowLeft","searchDataActionDetail","pullDown","collapsed","expanded","expanding","escape","menubar","menuitem","menulist","menulistDesktop","languageLink","languageTabMobile","expandingMenu","closeButton","menu","capExpanded","capExpanding","capEscape","script","https","backgroundGrey","href","downArrow","Zone","Layout","Content","ContentVideo","RichText","RichTextLink","MarkdownText","MainMenu","Footer","LanguageSelection","PageNavigation","TabbedContent","AnnouncementBar","SideBySideContainer","SeriesSelector","MiniNavigation","PromoBlock","SpotlightSlider","SpotlightContentVideo","SpotlightContentBlock","SpotlightStickyBar","InTheBoxBlock","ProductGridBlock","CollectionTabsBlock","ProductHighlights","FeaturesTabBlock","BrandGuaranteeBlock","GalleryBlock","FAQBlock","BrushConfigurator","ComparisonChartBlock","UserQuoteBlock","SpotlightWaitlistBlock","SpotlightPreorderBlock","CollectionTabsDropdown","ProductSubNav","CharacterBlock","ProductRecommenderBlock","ShowcaseBlock","ArticleHeroBlock","SkipNavigationBlock","AppDownloadBlock","ArticleCategoryHeroBlock","RecentlyViewedProductsBlock","AdditionalReadingBlock","ProductOverlay","ErrorBlock","ArticleBody","CloudinaryImage","YoutubeVideo","ResponsiveImage","ContactUsBlock","LoginBlock","ForgotPasswordBlock","ResetPasswordBlock","CreateAccountBlock","RegisterTypeCodeBlock","PypestreamChat","SearchBlock","PressQuoteBlock","RegisterProductBlock","CongratulationsBlock","ProfileBlock","ChangePasswordBlock","Awards","LoginNavigationBlock","DesignedByDentist","LegacyArticleHeroBlock","ContentDetailsBlock","ConsentBlock","ThreeColumnsUserQuoteBlock","ArticlePopUp","ArticleShare","LegacyProductHighlightBlock","ArticleListBlock","ArticleTableBlock","SpotlightContestBlock","SpotlightContestThankYouBlock","ProductLegacyBody","FaqDetailsBlock","Disclaimer","ProductVariantsRecommanderBlock","SitemapBlock","SitemapPage","HTMLBlock","SpotlightExperienceBlock","DoubleOptInVerificationBlock","mediaUpper","mediaLower","dprUpper","dprMedium","dprLower","BreadCrumbs","CarouselBlock","AccordionBlock","SwitchTab","DragSlider","MiniContentBlock","ExpandableHierarchy","ContentAndCarouselBlock","DentistContacts","imageContentDetailsBlock","videoPromoBlock","ProductRecommenderABtest","DropDownSelector","zone","zoneSpotlightSliderBodyClassname","zoneSpotlightContestClassname","percent","youTubeUrl","videoRecommendations","videoRatioVolume","descriptionButtonLowOpacity","descriptionButtonHighOpacity","domainHttp","audioDescriptionClassName","firstAudioFileId","secondAudioFileId","firstAudio","secondAudio","authorName","quote","starRating","writeAReviewLabel","reviews","questions","itemProp","displayUserReviews","childLabel","tabList","anchorName","star","starEmpty","starHalf","failedToRegister","legalText","emailLimitExceedLabel","invalidLocaleLabel","serviceUnavailableLabel","formLabels","thankYouTitleLabel","thankYouBackgroundAsset","thankYouDescriptionLabel","thankYouCallToAction","thankYouCallToActionLink","thankYouCallToActionIconName","closeModalLabel","numberOfErrorsLabel","gcsCampaignParam","gcsLocaleParam","contentType","accessToken","system","countrySelectLabel","countrySelectList","countrySelectListDefaultOption","countrySelectErrorMessage","countrySelectMention","modalLabelFirst","modalLabelSecond","addressTypeCode","alternateThankYouTitleLabel","alternateThankYouDescriptionLabel","callToPreOrderActionLabel","callToPreOrderActionLink","isiO10camapign","TermConditions","email","topicList","fromSource","topicTitle","otherProps","loader","localStorageIntersistialPopUp","isEnableCampaignOverlay","interestitialUserDetail","expiryHours","disableIntersistialPopUpCookieApp","contestTitle","signUpCallToActionLabel","formFields","oralBLogoAsset","backToOralbLink","ioLogoAsset","formOptinInputText","formOwnETBInputText","formLegalText","socialLinks","redirectDestination","copyrightLabel","GcsURL","continueReading","pgone","cloudinaryVideoPlayer","cloudinaryCore","inherit","never","sourceTypes","stickyBarClassName","scrollTo","logoLink","logo","SignUp","CallToActionLabel","scrollerContainer","continueReadingLabel","preOrderButtonLabel","preOrderCallToAction","experienceTitle","experienceFeatures","ProductName","introText","introLogo","defaultRight","defaultBottom","displaynone","nextFrameOnVideoEnd","introDurationSecond","playButtonColor","mobileFullSize","paused","played","auto","none","VideoId","spotlightPause","spotlightPlay","spotlightReplay","spotlightTranscript","textAlignment","secondaryAsset","additionalAssetList","refreshImageOnFrameChange","hasLink","textImageMobile","textImagePosition","textContent","bottom","label","targetID","roleMain","left","right","sideBySide","flipOnMobile","sideImage","master","media","dpr","productRating","buttonRole","comingSoonText","commingSoonItem","errorMsg","crawlerTriggeredMsg","SearchClicked","queryParm","searchStaticContent","hitsResponse","filerClicked","pageNoClicked","showAutocomplete","searchValue","isSpinning","totalPageNumber","filterItems","searchText","maximumAutocompleteResults","searchTitle","common_search","SearchSuggestions","eventCategory","eventAction","mouseup","grabbing","grab","match","touch","tiny","tablet","show","fetch","four","promo","subtitle","retailerText","retailerLogo","horizontalAlignment","anchorClick","wheel","Collapsed","Collapsing","links","initialLoad","noScroll","querySelectorAll","priceSpiderSource","priceSpiderConsoleLogMessageError","buyNowLiteErrorLabel","activateBuyNowLite","undefinedStr","iconArrowRight","learnMore","whyOralBHash","innerWidth_4600","innerWidth_3000","innerWidth_2300","innerWidth_2000","innerWidth_1900","innerWidth_1700","innerWidth_1500","innerWidth_1200","innerWidth_380","offset_10000","offset_7100","offset_5600","offset_5100","offset_4800","offset_4500","offset_4200","offset_3700","offset_5000","one","two","seeMoreLabel","seeLessLabel","maxNumberInlineItems","radialBackground","background","removeLazyLoad","pageNavigation","placeholderTitleLabel","scrollDisabled","onePageScrollWrapper","easeInOut","container","polite","querySelector","scrollDown","masterProductIdPrefix","masterProductNamePrefix","facebookAlt","twitterAlt","shareTitle","facebookIcon","twitterIcon","persistentChatTriggered","pressQuotes","pressLogo","animationGifAsset","iconArrowLeft","previousLabel","nextLabel","transparentWithBorders","queryHashName","queryHashEqual","faqStylePageLinks","faqStyleDropdown","allResultsCategory","pageCategory","collectionCategory","productCategory","articleCategory","faqCategory","Belgique","France","Deutschland","Schweiz","Nederland","Belgie","swiftypeBaseUrl","swiftypePath","swiftypeAutocompleteUrl","productListLocalStorageKeyPrefix","benefitListLocalStorageKeyPrefix","ciamInstanceId","resendVerificationForm","unknownAccessToken","oneCPId","UUID","programIdParam","categoryIdParam","localeParam","productId","internGroupValue","warrantyExtensionPath","getConsumerPath","getProductsByTypeCodePath","getCampaignInfoMaster","getproductListBySeries","gasPrimaryProductDetailKey","gasSecondaryProductDetailKey","primaryProductIndex","comboProductIndex","janrinProductIdDelimiter","janrinProfileOldestProductIndex","baseClass","productCard","articleProductCard","htmlBlock","contentBlock","rightArrow","leftArrow","miniContentBlock","carouselTabItem","swiftypeDocumentTypes","swiftypeAuth","specificSwiftypeDocument","generalSwiftypeDocument","image","linkType","accessControlAllowOrigin","xFunctionKey","passKey","ocpApimSubscriptionKey","mp4","mp3","m4a","blueCtaColorValue","whiteCtaColorValue","blueCtaColor","whiteCtaColor","http","www","allDentist","individuals","practices","instances","useDomain","DomainNameProvider","react__WEBPACK_IMPORTED_MODULE_0__","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__","DomainNameContext","createContext","useContext","_ref","_useState","useState","domain","setDomain","useEffect","location","hostname","jsx","Provider","useTabContext","TabProvider","TabContext","activeTabIndex","setActiveTabIndex","_classCallCheck","_createClass","_inherits","_possibleConstructorReturn","_getPrototypeOf","_regeneratorRuntime","_async_to_generator","_react","_interop_require_default","_utils","appGetInitialProps","_appGetInitialProps","mark","_callee","Component","ctx","pageProps","wrap","_context","loadGetInitialProps","sent","abrupt","stop","App","_Component2","hasNativeReflectConstruct","_super","_isNativeReflectConstruct","Reflect","construct","Proxy","valueOf","Super","NewTarget","_this$props","props","createElement","origGetInitialProps","getInitialProps","_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_11__","_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_11___default","_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_12__","_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_12___default","_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_13__","_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_13___default","_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_inherits_js__WEBPACK_IMPORTED_MODULE_14__","_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_inherits_js__WEBPACK_IMPORTED_MODULE_14___default","_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_possibleConstructorReturn_js__WEBPACK_IMPORTED_MODULE_15__","_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_possibleConstructorReturn_js__WEBPACK_IMPORTED_MODULE_15___default","_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_16__","_home_runner_work_mw_mt_oralb_com_cs_cz_mw_mt_oralb_com_cs_cz_node_modules_next_dist_compiled_babel_runtime_helpers_getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_16___default","next_app__WEBPACK_IMPORTED_MODULE_18__","react_instantsearch_dom__WEBPACK_IMPORTED_MODULE_24__","_adapters_algolia_client__WEBPACK_IMPORTED_MODULE_19__","_components_TabContext__WEBPACK_IMPORTED_MODULE_20__","_components_Core_DynamicPage_DomainNameContext__WEBPACK_IMPORTED_MODULE_22__","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__","enumerableOnly","symbols","sym","CustomApp","_App","searchClient","_objectSpread","__NEXT_P","__esModule","ReactPropTypesSecret","emptyFunction","shim","propName","componentName","propFullName","secret","getShim","isRequired","ReactPropTypes","bool","func","string","symbol","any","arrayOf","element","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","hasElementType","Element","hasMap","Map","hasSet","Set","hasArrayBuffer","ArrayBuffer","isView","equal","size","has","RegExp","flags","$$typeof","InstantSearchConsumer","InstantSearchProvider","IndexConsumer","instantSearchContext","onInternalStateUpdate","createHrefForState","onSearchForFacetValues","onSearchStateChange","onSearchParameters","store","widgetsManager","mainTargetedIndex","Consumer","_createContext","hasMultipleIndices","getResults","refineValue","nextRefinement","namespace","targetedIndex","multiIndexContext","_defineProperty","_objectSpread4","indexId","getIndexId","getCurrentRefinementValue","cleanUpValue","_utils_js__WEBPACK_IMPORTED_MODULE_0__","_typeof","_toPrimitive","input","hint","prim","toPrimitive","Number","ais","searchResults","getNamespaceAndAttributeName","defaultValue","multiIndex","_getNamespaceAndAttri","_ref2","defaultRefinement","_ref4","indexSearchState","_ref3","_getNamespaceAndAttri2","CE","_toPropertyKey","getDisplayName","addQueryID","defer","addAbsolutePositions","removeEmptyKey","shallowEqual","hasOwn","objA","objB","keysA","keysB","displayName","resolved","__position","queryID","__queryID","widgets_InstantSearch","react","react_fast_compare","react_fast_compare_default","prop_types","prop_types_default","algoliasearch_helper","algoliasearch_helper_default","utils","HIGHLIGHT_TAGS","indexUtils","_excluded","_excluded2","_excluded3","_objectWithoutProperties","_objectWithoutPropertiesLoose","sourceSymbolKeys","addAlgoliaAgents","isMultiIndexContext","widget","Ei","contextValue","indexContextValue","isTargetedIndexEqualIndex","isIndexWidget","isIndexWidgetEqualIndex","sortIndexWidgetsFirst","firstWidget","secondWidget","isFirstWidgetIndex","isSecondWidgetIndex","metadata_typeof","InstantSearch_typeof","InstantSearch_ownKeys","InstantSearch_objectSpread","InstantSearch_defineProperty","_defineProperties","InstantSearch_toPropertyKey","_setPrototypeOf","setPrototypeOf","__proto__","_assertThisInitialized","getPrototypeOf","InstantSearch_toPrimitive","isControlled","InstantSearch","_Component","subClass","superClass","protoProps","staticProps","Constructor","_this","instantSearchManager","createInstantSearchManager","searchCounter","_ref$initialState","initialState","resultsState","stalledSearchDelay","stalledSearchTimer","_store$getState","getState","resultsFacetValues","isSearchStalled","handleSearchSuccess","handleSearchError","skip","initialSearchParameters","createWidgetsManager","onWidgetsUpdate","widgets","scheduled","scheduleUpdate","PQ","registerWidget","update","getWidgets","metadata","getMetadata","searching","hydrateSearchClient","_cacheHydrated","_useCache","baseMethod","_len2","methodArgs","_key2","requestsWithSerializedParams","encode","format","_len","_key","isObjectOrArray","hydrateSearchClientWithMultiIndexRequest","rawResults","hydrateSearchClientWithSingleIndexRequest","datum","nestedItem","_internalIndexId","searchingForFacetValues","nextState","subscribe","getSearchParameters","sharedParameters","mainParameters","targetedIndexEqualMainIndex","subIndexEqualMainIndex","derivedIndices","targetedIndexNotEqualMainIndex","subIndexNotEqualMainIndex","derivedParameters","_getSearchParameters","isDerivedHelpersEmpty","nextIsSearchStalled","getWidgetsIds","meta","_ref5","_ref5$maxFacetHits","max","_objectSpread7","onExternalStateUpdate","nextSearchState","transitionState","updateClient","updateIndex","newIndex","skipSearch","onWidgetsInternalStateUpdate","prevProps","prevIsControlled","refresh","cleanupTimerRef","navigator","includes","document","payloadContainer","refNode","internalProps","widgetsPayload","payload","_connectorDesc","_ref2$defaultProps","defaultProps","_ref2$displayName","$$type","$$widgetType","prop","ua","_ua","appendChild","_this2","isUnmounting","createURL","getKnownKeys","_searchState","widgetsCollector","_searchState2","Children","tJ","nextProps","prevState","nextIsControlled","previousSearchState","__webpack_exec__","moduleId","_N_E"],"sourceRoot":""}