{"version":3,"file":"search.bundle.9fe33f3c17c160f2dffc.js","mappings":"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","sources":["webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/debounce.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/createRef.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/isEqual.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/noop.js","webpack:///./node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createClickedEvent.js","webpack:///./node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/isModernInsightsClient.js","webpack:///./node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createSearchInsightsApi.js","webpack:///./node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createViewedEvents.js","webpack:///./node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/isAlgoliaInsightsHit.js","webpack:///./node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createAlgoliaInsightsPlugin.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/safelyRunOnBrowser.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/createStore.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/createCancelablePromiseList.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/flatten.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/getAutocompleteSetters.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/getItemsCount.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/generateAutocompleteId.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/getNormalizedSources.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/getDefaultProps.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/reshape.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/resolve.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/mapToAlgoliaResponse.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/createCancelablePromise.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/getActiveItem.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/onInput.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/createConcurrentSafePromise.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/onKeyDown.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/isSamsung.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/getPropGetters.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/isOrContainsNode.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/version.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/userAgents.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/metadata.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/getCompletion.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/getNextActiveItemId.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/stateReducer.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/createAutocomplete.js","webpack:///./node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/constants.js","webpack:///./node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/getLocalStorage.js","webpack:///./node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/createLocalStorage.js","webpack:///./node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/getTemplates.js","webpack:///./node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/createRecentSearchesPlugin.js","webpack:///./node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/createStorageApi.js","webpack:///./node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/addHighlightedAttribute.js","webpack:///./node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/search.js","webpack:///./node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/createLocalStorageRecentSearchesPlugin.js","webpack:///./node_modules/@algolia/autocomplete-preset-algolia/dist/esm/search/fetchAlgoliaResults.js","webpack:///./node_modules/@algolia/autocomplete-preset-algolia/dist/esm/requester/createRequester.js","webpack:///./node_modules/@algolia/autocomplete-preset-algolia/dist/esm/requester/createAlgoliaRequester.js","webpack:///./node_modules/@algolia/autocomplete-preset-algolia/dist/esm/utils/getAppIdAndApiKey.js","webpack:///./node_modules/@algolia/autocomplete-preset-algolia/dist/esm/constants/index.js","webpack:///./node_modules/@algolia/autocomplete-preset-algolia/dist/esm/requester/getAlgoliaResults.js","webpack:///./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","webpack:///./components/algolia-autocomplete/i18n.ts","webpack:///./components/algolia-autocomplete/keyhandler.tsx","webpack:///./components/algolia-autocomplete/brands.component.tsx","webpack:///./components/algolia-autocomplete/categories.component.tsx","webpack:///./components/algolia-autocomplete/featured-brands.component.tsx","webpack:///./components/algolia-autocomplete/image.component.tsx","webpack:///./components/algolia-autocomplete/matches.component.tsx","webpack:///./components/algolia-autocomplete/popular-collections.component.tsx","webpack:///./components/algolia-autocomplete/top-suggestions.component.tsx","webpack:///./components/algolia-autocomplete/trending.component.tsx","webpack:///./components/algolia-autocomplete/utils.tsx","webpack:///./components/algolia-autocomplete/your-searches.component.tsx","webpack:///./components/algolia-autocomplete/layout.component.tsx","webpack:///./components/algolia-autocomplete/autocomplete.component.tsx","webpack:///./components/algolia-autocomplete/autocomplete.tsx"],"sourcesContent":["export function debounce(fn, time) {\n  var timerId = undefined;\n  return function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    if (timerId) {\n      clearTimeout(timerId);\n    }\n    timerId = setTimeout(function () {\n      return fn.apply(void 0, args);\n    }, time);\n  };\n}","export function createRef(initialValue) {\n  return {\n    current: initialValue\n  };\n}","function isPrimitive(obj) {\n  return obj !== Object(obj);\n}\nexport function isEqual(first, second) {\n  if (first === second) {\n    return true;\n  }\n  if (isPrimitive(first) || isPrimitive(second) || typeof first === 'function' || typeof second === 'function') {\n    return first === second;\n  }\n  if (Object.keys(first).length !== Object.keys(second).length) {\n    return false;\n  }\n  for (var _i = 0, _Object$keys = Object.keys(first); _i < _Object$keys.length; _i++) {\n    var key = _Object$keys[_i];\n    if (!(key in second)) {\n      return false;\n    }\n    if (!isEqual(first[key], second[key])) {\n      return false;\n    }\n  }\n  return true;\n}","export var noop = function noop() {};","export function createClickedEvent(_ref) {\n  var item = _ref.item,\n    _ref$items = _ref.items,\n    items = _ref$items === void 0 ? [] : _ref$items;\n  return {\n    index: item.__autocomplete_indexName,\n    items: [item],\n    positions: [1 + items.findIndex(function (x) {\n      return x.objectID === item.objectID;\n    })],\n    queryID: item.__autocomplete_queryID,\n    algoliaSource: ['autocomplete']\n  };\n}","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n/**\n * Determines if a given insights `client` supports the optional call to `init`\n * and the ability to set credentials via extra parameters when sending events.\n */\nexport function isModernInsightsClient(client) {\n  var _split$map = (client.version || '').split('.').map(Number),\n    _split$map2 = _slicedToArray(_split$map, 2),\n    major = _split$map2[0],\n    minor = _split$map2[1];\n\n  /* eslint-disable @typescript-eslint/camelcase */\n  var v3 = major >= 3;\n  var v2_4 = major === 2 && minor >= 4;\n  var v1_10 = major === 1 && minor >= 10;\n  return v3 || v2_4 || v1_10;\n  /* eslint-enable @typescript-eslint/camelcase */\n}","var _excluded = [\"items\"],\n  _excluded2 = [\"items\"];\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 _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\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 { isModernInsightsClient } from './isModernInsightsClient';\nfunction chunk(item) {\n  var chunkSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;\n  var chunks = [];\n  for (var i = 0; i < item.objectIDs.length; i += chunkSize) {\n    chunks.push(_objectSpread(_objectSpread({}, item), {}, {\n      objectIDs: item.objectIDs.slice(i, i + chunkSize)\n    }));\n  }\n  return chunks;\n}\nfunction mapToInsightsParamsApi(params) {\n  return params.map(function (_ref) {\n    var items = _ref.items,\n      param = _objectWithoutProperties(_ref, _excluded);\n    return _objectSpread(_objectSpread({}, param), {}, {\n      objectIDs: (items === null || items === void 0 ? void 0 : items.map(function (_ref2) {\n        var objectID = _ref2.objectID;\n        return objectID;\n      })) || param.objectIDs\n    });\n  });\n}\nexport function createSearchInsightsApi(searchInsights) {\n  var canSendHeaders = isModernInsightsClient(searchInsights);\n  function sendToInsights(method, payloads, items) {\n    if (canSendHeaders && typeof items !== 'undefined') {\n      var _items$0$__autocomple = items[0].__autocomplete_algoliaCredentials,\n        appId = _items$0$__autocomple.appId,\n        apiKey = _items$0$__autocomple.apiKey;\n      var headers = {\n        'X-Algolia-Application-Id': appId,\n        'X-Algolia-API-Key': apiKey\n      };\n      searchInsights.apply(void 0, [method].concat(_toConsumableArray(payloads), [{\n        headers: headers\n      }]));\n    } else {\n      searchInsights.apply(void 0, [method].concat(_toConsumableArray(payloads)));\n    }\n  }\n  return {\n    /**\n     * Initializes Insights with Algolia credentials.\n     */\n    init: function init(appId, apiKey) {\n      searchInsights('init', {\n        appId: appId,\n        apiKey: apiKey\n      });\n    },\n    /**\n     * Sets the user token to attach to events.\n     */\n    setUserToken: function setUserToken(userToken) {\n      searchInsights('setUserToken', userToken);\n    },\n    /**\n     * Sends click events to capture a query and its clicked items and positions.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-object-ids-after-search/\n     */\n    clickedObjectIDsAfterSearch: function clickedObjectIDsAfterSearch() {\n      for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {\n        params[_key] = arguments[_key];\n      }\n      if (params.length > 0) {\n        sendToInsights('clickedObjectIDsAfterSearch', mapToInsightsParamsApi(params), params[0].items);\n      }\n    },\n    /**\n     * Sends click events to capture clicked items.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-object-ids/\n     */\n    clickedObjectIDs: function clickedObjectIDs() {\n      for (var _len2 = arguments.length, params = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        params[_key2] = arguments[_key2];\n      }\n      if (params.length > 0) {\n        sendToInsights('clickedObjectIDs', mapToInsightsParamsApi(params), params[0].items);\n      }\n    },\n    /**\n     * Sends click events to capture the filters a user clicks on.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-filters/\n     */\n    clickedFilters: function clickedFilters() {\n      for (var _len3 = arguments.length, params = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        params[_key3] = arguments[_key3];\n      }\n      if (params.length > 0) {\n        searchInsights.apply(void 0, ['clickedFilters'].concat(params));\n      }\n    },\n    /**\n     * Sends conversion events to capture a query and its clicked items.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/converted-object-ids-after-search/\n     */\n    convertedObjectIDsAfterSearch: function convertedObjectIDsAfterSearch() {\n      for (var _len4 = arguments.length, params = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        params[_key4] = arguments[_key4];\n      }\n      if (params.length > 0) {\n        sendToInsights('convertedObjectIDsAfterSearch', mapToInsightsParamsApi(params), params[0].items);\n      }\n    },\n    /**\n     * Sends conversion events to capture clicked items.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/converted-object-ids/\n     */\n    convertedObjectIDs: function convertedObjectIDs() {\n      for (var _len5 = arguments.length, params = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n        params[_key5] = arguments[_key5];\n      }\n      if (params.length > 0) {\n        sendToInsights('convertedObjectIDs', mapToInsightsParamsApi(params), params[0].items);\n      }\n    },\n    /**\n     * Sends conversion events to capture the filters a user uses when converting.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/converted-filters/\n     */\n    convertedFilters: function convertedFilters() {\n      for (var _len6 = arguments.length, params = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n        params[_key6] = arguments[_key6];\n      }\n      if (params.length > 0) {\n        searchInsights.apply(void 0, ['convertedFilters'].concat(params));\n      }\n    },\n    /**\n     * Sends view events to capture clicked items.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/viewed-object-ids/\n     */\n    viewedObjectIDs: function viewedObjectIDs() {\n      for (var _len7 = arguments.length, params = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n        params[_key7] = arguments[_key7];\n      }\n      if (params.length > 0) {\n        params.reduce(function (acc, _ref3) {\n          var items = _ref3.items,\n            param = _objectWithoutProperties(_ref3, _excluded2);\n          return [].concat(_toConsumableArray(acc), _toConsumableArray(chunk(_objectSpread(_objectSpread({}, param), {}, {\n            objectIDs: (items === null || items === void 0 ? void 0 : items.map(function (_ref4) {\n              var objectID = _ref4.objectID;\n              return objectID;\n            })) || param.objectIDs\n          })).map(function (payload) {\n            return {\n              items: items,\n              payload: payload\n            };\n          })));\n        }, []).forEach(function (_ref5) {\n          var items = _ref5.items,\n            payload = _ref5.payload;\n          return sendToInsights('viewedObjectIDs', [payload], items);\n        });\n      }\n    },\n    /**\n     * Sends view events to capture the filters a user uses when viewing.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/viewed-filters/\n     */\n    viewedFilters: function viewedFilters() {\n      for (var _len8 = arguments.length, params = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n        params[_key8] = arguments[_key8];\n      }\n      if (params.length > 0) {\n        searchInsights.apply(void 0, ['viewedFilters'].concat(params));\n      }\n    }\n  };\n}","export function createViewedEvents(_ref) {\n  var items = _ref.items;\n  var itemsByIndexName = items.reduce(function (acc, current) {\n    var _acc$current$__autoco;\n    acc[current.__autocomplete_indexName] = ((_acc$current$__autoco = acc[current.__autocomplete_indexName]) !== null && _acc$current$__autoco !== void 0 ? _acc$current$__autoco : []).concat(current);\n    return acc;\n  }, {});\n  return Object.keys(itemsByIndexName).map(function (indexName) {\n    var items = itemsByIndexName[indexName];\n    return {\n      index: indexName,\n      items: items,\n      algoliaSource: ['autocomplete']\n    };\n  });\n}","export function isAlgoliaInsightsHit(hit) {\n  return hit.objectID && hit.__autocomplete_indexName && hit.__autocomplete_queryID;\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 _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\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 { createRef, debounce, isEqual, noop, safelyRunOnBrowser } from '@algolia/autocomplete-shared';\nimport { createClickedEvent } from './createClickedEvent';\nimport { createSearchInsightsApi } from './createSearchInsightsApi';\nimport { createViewedEvents } from './createViewedEvents';\nimport { isAlgoliaInsightsHit } from './isAlgoliaInsightsHit';\nvar VIEW_EVENT_DELAY = 400;\nvar ALGOLIA_INSIGHTS_VERSION = '2.6.0';\nvar ALGOLIA_INSIGHTS_SRC = \"https://cdn.jsdelivr.net/npm/search-insights@\".concat(ALGOLIA_INSIGHTS_VERSION, \"/dist/search-insights.min.js\");\nvar sendViewedObjectIDs = debounce(function (_ref) {\n  var onItemsChange = _ref.onItemsChange,\n    items = _ref.items,\n    insights = _ref.insights,\n    state = _ref.state;\n  onItemsChange({\n    insights: insights,\n    insightsEvents: createViewedEvents({\n      items: items\n    }).map(function (event) {\n      return _objectSpread({\n        eventName: 'Items Viewed'\n      }, event);\n    }),\n    state: state\n  });\n}, VIEW_EVENT_DELAY);\nexport function createAlgoliaInsightsPlugin(options) {\n  var _getOptions = getOptions(options),\n    providedInsightsClient = _getOptions.insightsClient,\n    onItemsChange = _getOptions.onItemsChange,\n    onSelectEvent = _getOptions.onSelect,\n    onActiveEvent = _getOptions.onActive;\n  var insightsClient = providedInsightsClient;\n  if (!providedInsightsClient) {\n    safelyRunOnBrowser(function (_ref2) {\n      var window = _ref2.window;\n      var pointer = window.AlgoliaAnalyticsObject || 'aa';\n      if (typeof pointer === 'string') {\n        insightsClient = window[pointer];\n      }\n      if (!insightsClient) {\n        window.AlgoliaAnalyticsObject = pointer;\n        if (!window[pointer]) {\n          window[pointer] = function () {\n            if (!window[pointer].queue) {\n              window[pointer].queue = [];\n            }\n            for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n              args[_key] = arguments[_key];\n            }\n            window[pointer].queue.push(args);\n          };\n        }\n        window[pointer].version = ALGOLIA_INSIGHTS_VERSION;\n        insightsClient = window[pointer];\n        loadInsights(window);\n      }\n    });\n  }\n  var insights = createSearchInsightsApi(insightsClient);\n  var previousItems = createRef([]);\n  var debouncedOnStateChange = debounce(function (_ref3) {\n    var state = _ref3.state;\n    if (!state.isOpen) {\n      return;\n    }\n    var items = state.collections.reduce(function (acc, current) {\n      return [].concat(_toConsumableArray(acc), _toConsumableArray(current.items));\n    }, []).filter(isAlgoliaInsightsHit);\n    if (!isEqual(previousItems.current.map(function (x) {\n      return x.objectID;\n    }), items.map(function (x) {\n      return x.objectID;\n    }))) {\n      previousItems.current = items;\n      if (items.length > 0) {\n        sendViewedObjectIDs({\n          onItemsChange: onItemsChange,\n          items: items,\n          insights: insights,\n          state: state\n        });\n      }\n    }\n  }, 0);\n  return {\n    name: 'aa.algoliaInsightsPlugin',\n    subscribe: function subscribe(_ref4) {\n      var setContext = _ref4.setContext,\n        onSelect = _ref4.onSelect,\n        onActive = _ref4.onActive;\n      insightsClient('addAlgoliaAgent', 'insights-plugin');\n      setContext({\n        algoliaInsightsPlugin: {\n          __algoliaSearchParameters: {\n            clickAnalytics: true\n          },\n          insights: insights\n        }\n      });\n      onSelect(function (_ref5) {\n        var item = _ref5.item,\n          state = _ref5.state,\n          event = _ref5.event,\n          source = _ref5.source;\n        if (!isAlgoliaInsightsHit(item)) {\n          return;\n        }\n        onSelectEvent({\n          state: state,\n          event: event,\n          insights: insights,\n          item: item,\n          insightsEvents: [_objectSpread({\n            eventName: 'Item Selected'\n          }, createClickedEvent({\n            item: item,\n            items: source.getItems().filter(isAlgoliaInsightsHit)\n          }))]\n        });\n      });\n      onActive(function (_ref6) {\n        var item = _ref6.item,\n          source = _ref6.source,\n          state = _ref6.state,\n          event = _ref6.event;\n        if (!isAlgoliaInsightsHit(item)) {\n          return;\n        }\n        onActiveEvent({\n          state: state,\n          event: event,\n          insights: insights,\n          item: item,\n          insightsEvents: [_objectSpread({\n            eventName: 'Item Active'\n          }, createClickedEvent({\n            item: item,\n            items: source.getItems().filter(isAlgoliaInsightsHit)\n          }))]\n        });\n      });\n    },\n    onStateChange: function onStateChange(_ref7) {\n      var state = _ref7.state;\n      debouncedOnStateChange({\n        state: state\n      });\n    },\n    __autocomplete_pluginOptions: options\n  };\n}\nfunction getOptions(options) {\n  return _objectSpread({\n    onItemsChange: function onItemsChange(_ref8) {\n      var insights = _ref8.insights,\n        insightsEvents = _ref8.insightsEvents;\n      insights.viewedObjectIDs.apply(insights, _toConsumableArray(insightsEvents.map(function (event) {\n        return _objectSpread(_objectSpread({}, event), {}, {\n          algoliaSource: [].concat(_toConsumableArray(event.algoliaSource || []), ['autocomplete-internal'])\n        });\n      })));\n    },\n    onSelect: function onSelect(_ref9) {\n      var insights = _ref9.insights,\n        insightsEvents = _ref9.insightsEvents;\n      insights.clickedObjectIDsAfterSearch.apply(insights, _toConsumableArray(insightsEvents.map(function (event) {\n        return _objectSpread(_objectSpread({}, event), {}, {\n          algoliaSource: [].concat(_toConsumableArray(event.algoliaSource || []), ['autocomplete-internal'])\n        });\n      })));\n    },\n    onActive: noop\n  }, options);\n}\nfunction loadInsights(environment) {\n  var errorMessage = \"[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete\";\n  try {\n    var script = environment.document.createElement('script');\n    script.async = true;\n    script.src = ALGOLIA_INSIGHTS_SRC;\n    script.onerror = function () {\n      // eslint-disable-next-line no-console\n      console.error(errorMessage);\n    };\n    document.body.appendChild(script);\n  } catch (cause) {\n    // eslint-disable-next-line no-console\n    console.error(errorMessage);\n  }\n}","/**\n * Safely runs code meant for browser environments only.\n */\nexport function safelyRunOnBrowser(callback) {\n  if (typeof window !== 'undefined') {\n    return callback({\n      window: window\n    });\n  }\n  return undefined;\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 _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 { createCancelablePromiseList } from './utils';\nexport function createStore(reducer, props, onStoreStateChange) {\n  var state = props.initialState;\n  return {\n    getState: function getState() {\n      return state;\n    },\n    dispatch: function dispatch(action, payload) {\n      var prevState = _objectSpread({}, state);\n      state = reducer(state, {\n        type: action,\n        props: props,\n        payload: payload\n      });\n      onStoreStateChange({\n        state: state,\n        prevState: prevState\n      });\n    },\n    pendingRequests: createCancelablePromiseList()\n  };\n}","export function createCancelablePromiseList() {\n  var list = [];\n  return {\n    add: function add(cancelablePromise) {\n      list.push(cancelablePromise);\n      return cancelablePromise.finally(function () {\n        list = list.filter(function (item) {\n          return item !== cancelablePromise;\n        });\n      });\n    },\n    cancelAll: function cancelAll() {\n      list.forEach(function (promise) {\n        return promise.cancel();\n      });\n    },\n    isEmpty: function isEmpty() {\n      return list.length === 0;\n    }\n  };\n}","export function flatten(values) {\n  return values.reduce(function (a, b) {\n    return a.concat(b);\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); }\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 { flatten } from '@algolia/autocomplete-shared';\nexport function getAutocompleteSetters(_ref) {\n  var store = _ref.store;\n  var setActiveItemId = function setActiveItemId(value) {\n    store.dispatch('setActiveItemId', value);\n  };\n  var setQuery = function setQuery(value) {\n    store.dispatch('setQuery', value);\n  };\n  var setCollections = function setCollections(rawValue) {\n    var baseItemId = 0;\n    var value = rawValue.map(function (collection) {\n      return _objectSpread(_objectSpread({}, collection), {}, {\n        // We flatten the stored items to support calling `getAlgoliaResults`\n        // from the source itself.\n        items: flatten(collection.items).map(function (item) {\n          return _objectSpread(_objectSpread({}, item), {}, {\n            __autocomplete_id: baseItemId++\n          });\n        })\n      });\n    });\n    store.dispatch('setCollections', value);\n  };\n  var setIsOpen = function setIsOpen(value) {\n    store.dispatch('setIsOpen', value);\n  };\n  var setStatus = function setStatus(value) {\n    store.dispatch('setStatus', value);\n  };\n  var setContext = function setContext(value) {\n    store.dispatch('setContext', value);\n  };\n  return {\n    setActiveItemId: setActiveItemId,\n    setQuery: setQuery,\n    setCollections: setCollections,\n    setIsOpen: setIsOpen,\n    setStatus: setStatus,\n    setContext: setContext\n  };\n}","export function getItemsCount(state) {\n  if (state.collections.length === 0) {\n    return 0;\n  }\n  return state.collections.reduce(function (sum, collection) {\n    return sum + collection.items.length;\n  }, 0);\n}","var autocompleteId = 0;\nexport function generateAutocompleteId() {\n  return \"autocomplete-\".concat(autocompleteId++);\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); }\nimport { invariant, decycle, noop } from '@algolia/autocomplete-shared';\nexport function getNormalizedSources(getSources, params) {\n  var seenSourceIds = [];\n  return Promise.resolve(getSources(params)).then(function (sources) {\n    invariant(Array.isArray(sources), function () {\n      return \"The `getSources` function must return an array of sources but returned type \".concat(JSON.stringify(_typeof(sources)), \":\\n\\n\").concat(JSON.stringify(decycle(sources), null, 2));\n    });\n    return Promise.all(sources\n    // We allow `undefined` and `false` sources to allow users to use\n    // `Boolean(query) && source` (=> `false`).\n    // We need to remove these values at this point.\n    .filter(function (maybeSource) {\n      return Boolean(maybeSource);\n    }).map(function (source) {\n      invariant(typeof source.sourceId === 'string', 'A source must provide a `sourceId` string.');\n      if (seenSourceIds.includes(source.sourceId)) {\n        throw new Error(\"[Autocomplete] The `sourceId` \".concat(JSON.stringify(source.sourceId), \" is not unique.\"));\n      }\n      seenSourceIds.push(source.sourceId);\n      var defaultSource = {\n        getItemInputValue: function getItemInputValue(_ref) {\n          var state = _ref.state;\n          return state.query;\n        },\n        getItemUrl: function getItemUrl() {\n          return undefined;\n        },\n        onSelect: function onSelect(_ref2) {\n          var setIsOpen = _ref2.setIsOpen;\n          setIsOpen(false);\n        },\n        onActive: noop,\n        onResolve: noop\n      };\n      Object.keys(defaultSource).forEach(function (key) {\n        defaultSource[key].__default = true;\n      });\n      var normalizedSource = _objectSpread(_objectSpread({}, defaultSource), source);\n      return Promise.resolve(normalizedSource);\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); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\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 { getItemsCount, generateAutocompleteId, flatten } from '@algolia/autocomplete-shared';\nimport { getNormalizedSources } from './utils';\nexport function getDefaultProps(props, pluginSubscribers) {\n  var _props$id;\n  /* eslint-disable no-restricted-globals */\n  var environment = typeof window !== 'undefined' ? window : {};\n  /* eslint-enable no-restricted-globals */\n  var plugins = props.plugins || [];\n  return _objectSpread(_objectSpread({\n    debug: false,\n    openOnFocus: false,\n    placeholder: '',\n    autoFocus: false,\n    defaultActiveItemId: null,\n    stallThreshold: 300,\n    insights: false,\n    environment: environment,\n    shouldPanelOpen: function shouldPanelOpen(_ref) {\n      var state = _ref.state;\n      return getItemsCount(state) > 0;\n    },\n    reshape: function reshape(_ref2) {\n      var sources = _ref2.sources;\n      return sources;\n    }\n  }, props), {}, {\n    // Since `generateAutocompleteId` triggers a side effect (it increments\n    // an internal counter), we don't want to execute it if unnecessary.\n    id: (_props$id = props.id) !== null && _props$id !== void 0 ? _props$id : generateAutocompleteId(),\n    plugins: plugins,\n    // The following props need to be deeply defaulted.\n    initialState: _objectSpread({\n      activeItemId: null,\n      query: '',\n      completion: null,\n      collections: [],\n      isOpen: false,\n      status: 'idle',\n      context: {}\n    }, props.initialState),\n    onStateChange: function onStateChange(params) {\n      var _props$onStateChange;\n      (_props$onStateChange = props.onStateChange) === null || _props$onStateChange === void 0 ? void 0 : _props$onStateChange.call(props, params);\n      plugins.forEach(function (x) {\n        var _x$onStateChange;\n        return (_x$onStateChange = x.onStateChange) === null || _x$onStateChange === void 0 ? void 0 : _x$onStateChange.call(x, params);\n      });\n    },\n    onSubmit: function onSubmit(params) {\n      var _props$onSubmit;\n      (_props$onSubmit = props.onSubmit) === null || _props$onSubmit === void 0 ? void 0 : _props$onSubmit.call(props, params);\n      plugins.forEach(function (x) {\n        var _x$onSubmit;\n        return (_x$onSubmit = x.onSubmit) === null || _x$onSubmit === void 0 ? void 0 : _x$onSubmit.call(x, params);\n      });\n    },\n    onReset: function onReset(params) {\n      var _props$onReset;\n      (_props$onReset = props.onReset) === null || _props$onReset === void 0 ? void 0 : _props$onReset.call(props, params);\n      plugins.forEach(function (x) {\n        var _x$onReset;\n        return (_x$onReset = x.onReset) === null || _x$onReset === void 0 ? void 0 : _x$onReset.call(x, params);\n      });\n    },\n    getSources: function getSources(params) {\n      return Promise.all([].concat(_toConsumableArray(plugins.map(function (plugin) {\n        return plugin.getSources;\n      })), [props.getSources]).filter(Boolean).map(function (getSources) {\n        return getNormalizedSources(getSources, params);\n      })).then(function (nested) {\n        return flatten(nested);\n      }).then(function (sources) {\n        return sources.map(function (source) {\n          return _objectSpread(_objectSpread({}, source), {}, {\n            onSelect: function onSelect(params) {\n              source.onSelect(params);\n              pluginSubscribers.forEach(function (x) {\n                var _x$onSelect;\n                return (_x$onSelect = x.onSelect) === null || _x$onSelect === void 0 ? void 0 : _x$onSelect.call(x, params);\n              });\n            },\n            onActive: function onActive(params) {\n              source.onActive(params);\n              pluginSubscribers.forEach(function (x) {\n                var _x$onActive;\n                return (_x$onActive = x.onActive) === null || _x$onActive === void 0 ? void 0 : _x$onActive.call(x, params);\n              });\n            },\n            onResolve: function onResolve(params) {\n              source.onResolve(params);\n              pluginSubscribers.forEach(function (x) {\n                var _x$onResolve;\n                return (_x$onResolve = x.onResolve) === null || _x$onResolve === void 0 ? void 0 : _x$onResolve.call(x, params);\n              });\n            }\n          });\n        });\n      });\n    },\n    navigator: _objectSpread({\n      navigate: function navigate(_ref3) {\n        var itemUrl = _ref3.itemUrl;\n        environment.location.assign(itemUrl);\n      },\n      navigateNewTab: function navigateNewTab(_ref4) {\n        var itemUrl = _ref4.itemUrl;\n        var windowReference = environment.open(itemUrl, '_blank', 'noopener');\n        windowReference === null || windowReference === void 0 ? void 0 : windowReference.focus();\n      },\n      navigateNewWindow: function navigateNewWindow(_ref5) {\n        var itemUrl = _ref5.itemUrl;\n        environment.open(itemUrl, '_blank', 'noopener');\n      }\n    }, props.navigator)\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); }\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 { flatten } from '@algolia/autocomplete-shared';\nexport function reshape(_ref) {\n  var collections = _ref.collections,\n    props = _ref.props,\n    state = _ref.state;\n  // Sources are grouped by `sourceId` to conveniently pick them via destructuring.\n  // Example: `const { recentSearchesPlugin } = sourcesBySourceId`\n  var originalSourcesBySourceId = collections.reduce(function (acc, collection) {\n    return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, collection.source.sourceId, _objectSpread(_objectSpread({}, collection.source), {}, {\n      getItems: function getItems() {\n        // We provide the resolved items from the collection to the `reshape` prop.\n        return flatten(collection.items);\n      }\n    })));\n  }, {});\n  var _props$plugins$reduce = props.plugins.reduce(function (acc, plugin) {\n      if (plugin.reshape) {\n        return plugin.reshape(acc);\n      }\n      return acc;\n    }, {\n      sourcesBySourceId: originalSourcesBySourceId,\n      state: state\n    }),\n    sourcesBySourceId = _props$plugins$reduce.sourcesBySourceId;\n  var reshapeSources = props.reshape({\n    sourcesBySourceId: sourcesBySourceId,\n    sources: Object.values(sourcesBySourceId),\n    state: state\n  });\n\n  // We reconstruct the collections with the items modified by the `reshape` prop.\n  return flatten(reshapeSources).filter(Boolean).map(function (source) {\n    return {\n      source: source,\n      items: source.getItems()\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); }\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 _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nimport { decycle, flatten, invariant } from '@algolia/autocomplete-shared';\nimport { mapToAlgoliaResponse } from './utils';\nfunction isDescription(item) {\n  return Boolean(item.execute);\n}\nfunction isRequesterDescription(description) {\n  return Boolean(description === null || description === void 0 ? void 0 : description.execute);\n}\nexport function preResolve(itemsOrDescription, sourceId, state) {\n  if (isRequesterDescription(itemsOrDescription)) {\n    var contextParameters = itemsOrDescription.requesterId === 'algolia' ? Object.assign.apply(Object, [{}].concat(_toConsumableArray(Object.keys(state.context).map(function (key) {\n      var _state$context$key;\n      return (_state$context$key = state.context[key]) === null || _state$context$key === void 0 ? void 0 : _state$context$key.__algoliaSearchParameters;\n    })))) : {};\n    return _objectSpread(_objectSpread({}, itemsOrDescription), {}, {\n      requests: itemsOrDescription.queries.map(function (query) {\n        return {\n          query: itemsOrDescription.requesterId === 'algolia' ? _objectSpread(_objectSpread({}, query), {}, {\n            params: _objectSpread(_objectSpread({}, contextParameters), query.params)\n          }) : query,\n          sourceId: sourceId,\n          transformResponse: itemsOrDescription.transformResponse\n        };\n      })\n    });\n  }\n  return {\n    items: itemsOrDescription,\n    sourceId: sourceId\n  };\n}\nexport function resolve(items) {\n  var packed = items.reduce(function (acc, current) {\n    if (!isDescription(current)) {\n      acc.push(current);\n      return acc;\n    }\n    var searchClient = current.searchClient,\n      execute = current.execute,\n      requesterId = current.requesterId,\n      requests = current.requests;\n    var container = acc.find(function (item) {\n      return isDescription(current) && isDescription(item) && item.searchClient === searchClient && Boolean(requesterId) && item.requesterId === requesterId;\n    });\n    if (container) {\n      var _container$items;\n      (_container$items = container.items).push.apply(_container$items, _toConsumableArray(requests));\n    } else {\n      var request = {\n        execute: execute,\n        requesterId: requesterId,\n        items: requests,\n        searchClient: searchClient\n      };\n      acc.push(request);\n    }\n    return acc;\n  }, []);\n  var values = packed.map(function (maybeDescription) {\n    if (!isDescription(maybeDescription)) {\n      return Promise.resolve(maybeDescription);\n    }\n    var _ref = maybeDescription,\n      execute = _ref.execute,\n      items = _ref.items,\n      searchClient = _ref.searchClient;\n    return execute({\n      searchClient: searchClient,\n      requests: items\n    });\n  });\n  return Promise.all(values).then(function (responses) {\n    return flatten(responses);\n  });\n}\nexport function postResolve(responses, sources, store) {\n  return sources.map(function (source) {\n    var matches = responses.filter(function (response) {\n      return response.sourceId === source.sourceId;\n    });\n    var results = matches.map(function (_ref2) {\n      var items = _ref2.items;\n      return items;\n    });\n    var transform = matches[0].transformResponse;\n    var items = transform ? transform(mapToAlgoliaResponse(results)) : results;\n    source.onResolve({\n      source: source,\n      results: results,\n      items: items,\n      state: store.getState()\n    });\n    invariant(Array.isArray(items), function () {\n      return \"The `getItems` function from source \\\"\".concat(source.sourceId, \"\\\" must return an array of items but returned type \").concat(JSON.stringify(_typeof(items)), \":\\n\\n\").concat(JSON.stringify(decycle(items), null, 2), \".\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems\");\n    });\n    invariant(items.every(Boolean), \"The `getItems` function from source \\\"\".concat(source.sourceId, \"\\\" must return an array of items but returned \").concat(JSON.stringify(undefined), \".\\n\\nDid you forget to return items?\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems\"));\n    return {\n      source: source,\n      items: items\n    };\n  });\n}","export function mapToAlgoliaResponse(rawResults) {\n  return {\n    results: rawResults,\n    hits: rawResults.map(function (result) {\n      return result.hits;\n    }).filter(Boolean),\n    facetHits: rawResults.map(function (result) {\n      var _facetHits;\n      return (_facetHits = result.facetHits) === null || _facetHits === void 0 ? void 0 : _facetHits.map(function (facetHit) {\n        // Bring support for the highlighting components.\n        return {\n          label: facetHit.value,\n          count: facetHit.count,\n          _highlightResult: {\n            label: {\n              value: facetHit.highlighted\n            }\n          }\n        };\n      });\n    }).filter(Boolean)\n  };\n}","function createInternalCancelablePromise(promise, initialState) {\n  var state = initialState;\n  return {\n    then: function then(onfulfilled, onrejected) {\n      return createInternalCancelablePromise(promise.then(createCallback(onfulfilled, state, promise), createCallback(onrejected, state, promise)), state);\n    },\n    catch: function _catch(onrejected) {\n      return createInternalCancelablePromise(promise.catch(createCallback(onrejected, state, promise)), state);\n    },\n    finally: function _finally(onfinally) {\n      if (onfinally) {\n        state.onCancelList.push(onfinally);\n      }\n      return createInternalCancelablePromise(promise.finally(createCallback(onfinally && function () {\n        state.onCancelList = [];\n        return onfinally();\n      }, state, promise)), state);\n    },\n    cancel: function cancel() {\n      state.isCanceled = true;\n      var callbacks = state.onCancelList;\n      state.onCancelList = [];\n      callbacks.forEach(function (callback) {\n        callback();\n      });\n    },\n    isCanceled: function isCanceled() {\n      return state.isCanceled === true;\n    }\n  };\n}\nexport function createCancelablePromise(executor) {\n  return createInternalCancelablePromise(new Promise(function (resolve, reject) {\n    return executor(resolve, reject);\n  }), {\n    isCanceled: false,\n    onCancelList: []\n  });\n}\ncreateCancelablePromise.resolve = function (value) {\n  return cancelable(Promise.resolve(value));\n};\ncreateCancelablePromise.reject = function (reason) {\n  return cancelable(Promise.reject(reason));\n};\nexport function cancelable(promise) {\n  return createInternalCancelablePromise(promise, {\n    isCanceled: false,\n    onCancelList: []\n  });\n}\nfunction createCallback(onResult, state, fallback) {\n  if (!onResult) {\n    return fallback;\n  }\n  return function callback(arg) {\n    if (state.isCanceled) {\n      return arg;\n    }\n    return onResult(arg);\n  };\n}","// We don't have access to the autocomplete source when we call `onKeyDown`\n// or `onClick` because those are native browser events.\n// However, we can get the source from the suggestion index.\nfunction getCollectionFromActiveItemId(state) {\n  // Given 3 sources with respectively 1, 2 and 3 suggestions: [1, 2, 3]\n  // We want to get the accumulated counts:\n  // [1, 1 + 2, 1 + 2 + 3] = [1, 3, 3 + 3] = [1, 3, 6]\n  var accumulatedCollectionsCount = state.collections.map(function (collections) {\n    return collections.items.length;\n  }).reduce(function (acc, collectionsCount, index) {\n    var previousValue = acc[index - 1] || 0;\n    var nextValue = previousValue + collectionsCount;\n    acc.push(nextValue);\n    return acc;\n  }, []);\n\n  // Based on the accumulated counts, we can infer the index of the suggestion.\n  var collectionIndex = accumulatedCollectionsCount.reduce(function (acc, current) {\n    if (current <= state.activeItemId) {\n      return acc + 1;\n    }\n    return acc;\n  }, 0);\n  return state.collections[collectionIndex];\n}\n\n/**\n * Gets the highlighted index relative to a suggestion object (not the absolute\n * highlighted index).\n *\n * Example:\n *  [['a', 'b'], ['c', 'd', 'e'], ['f']]\n *                      ↑\n *         (absolute: 3, relative: 1)\n */\nfunction getRelativeActiveItemId(_ref) {\n  var state = _ref.state,\n    collection = _ref.collection;\n  var isOffsetFound = false;\n  var counter = 0;\n  var previousItemsOffset = 0;\n  while (isOffsetFound === false) {\n    var currentCollection = state.collections[counter];\n    if (currentCollection === collection) {\n      isOffsetFound = true;\n      break;\n    }\n    previousItemsOffset += currentCollection.items.length;\n    counter++;\n  }\n  return state.activeItemId - previousItemsOffset;\n}\nexport function getActiveItem(state) {\n  var collection = getCollectionFromActiveItemId(state);\n  if (!collection) {\n    return null;\n  }\n  var item = collection.items[getRelativeActiveItemId({\n    state: state,\n    collection: collection\n  })];\n  var source = collection.source;\n  var itemInputValue = source.getItemInputValue({\n    item: item,\n    state: state\n  });\n  var itemUrl = source.getItemUrl({\n    item: item,\n    state: state\n  });\n  return {\n    item: item,\n    itemInputValue: itemInputValue,\n    itemUrl: itemUrl,\n    source: source\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); }\nvar _excluded = [\"event\", \"nextState\", \"props\", \"query\", \"refresh\", \"store\"];\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 _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; }\nimport { reshape } from './reshape';\nimport { preResolve, resolve, postResolve } from './resolve';\nimport { cancelable, createConcurrentSafePromise, getActiveItem } from './utils';\nvar lastStalledId = null;\nvar runConcurrentSafePromise = createConcurrentSafePromise();\nexport function onInput(_ref) {\n  var event = _ref.event,\n    _ref$nextState = _ref.nextState,\n    nextState = _ref$nextState === void 0 ? {} : _ref$nextState,\n    props = _ref.props,\n    query = _ref.query,\n    refresh = _ref.refresh,\n    store = _ref.store,\n    setters = _objectWithoutProperties(_ref, _excluded);\n  if (lastStalledId) {\n    props.environment.clearTimeout(lastStalledId);\n  }\n  var setCollections = setters.setCollections,\n    setIsOpen = setters.setIsOpen,\n    setQuery = setters.setQuery,\n    setActiveItemId = setters.setActiveItemId,\n    setStatus = setters.setStatus;\n  setQuery(query);\n  setActiveItemId(props.defaultActiveItemId);\n  if (!query && props.openOnFocus === false) {\n    var _nextState$isOpen;\n    var collections = store.getState().collections.map(function (collection) {\n      return _objectSpread(_objectSpread({}, collection), {}, {\n        items: []\n      });\n    });\n    setStatus('idle');\n    setCollections(collections);\n    setIsOpen((_nextState$isOpen = nextState.isOpen) !== null && _nextState$isOpen !== void 0 ? _nextState$isOpen : props.shouldPanelOpen({\n      state: store.getState()\n    }));\n\n    // We make sure to update the latest resolved value of the tracked\n    // promises to keep late resolving promises from \"cancelling\" the state\n    // updates performed in this code path.\n    // We chain with a void promise to respect `onInput`'s expected return type.\n    var _request = cancelable(runConcurrentSafePromise(collections).then(function () {\n      return Promise.resolve();\n    }));\n    return store.pendingRequests.add(_request);\n  }\n  setStatus('loading');\n  lastStalledId = props.environment.setTimeout(function () {\n    setStatus('stalled');\n  }, props.stallThreshold);\n\n  // We track the entire promise chain triggered by `onInput` before mutating\n  // the Autocomplete state to make sure that any state manipulation is based on\n  // fresh data regardless of when promises individually resolve.\n  // We don't track nested promises and only rely on the full chain resolution,\n  // meaning we should only ever manipulate the state once this concurrent-safe\n  // promise is resolved.\n  var request = cancelable(runConcurrentSafePromise(props.getSources(_objectSpread({\n    query: query,\n    refresh: refresh,\n    state: store.getState()\n  }, setters)).then(function (sources) {\n    return Promise.all(sources.map(function (source) {\n      return Promise.resolve(source.getItems(_objectSpread({\n        query: query,\n        refresh: refresh,\n        state: store.getState()\n      }, setters))).then(function (itemsOrDescription) {\n        return preResolve(itemsOrDescription, source.sourceId, store.getState());\n      });\n    })).then(resolve).then(function (responses) {\n      return postResolve(responses, sources, store);\n    }).then(function (collections) {\n      return reshape({\n        collections: collections,\n        props: props,\n        state: store.getState()\n      });\n    });\n  }))).then(function (collections) {\n    var _nextState$isOpen2;\n    // Parameters passed to `onInput` could be stale when the following code\n    // executes, because `onInput` calls may not resolve in order.\n    // If it becomes a problem we'll need to save the last passed parameters.\n    // See: https://codesandbox.io/s/agitated-cookies-y290z\n\n    setStatus('idle');\n    setCollections(collections);\n    var isPanelOpen = props.shouldPanelOpen({\n      state: store.getState()\n    });\n    setIsOpen((_nextState$isOpen2 = nextState.isOpen) !== null && _nextState$isOpen2 !== void 0 ? _nextState$isOpen2 : props.openOnFocus && !query && isPanelOpen || isPanelOpen);\n    var highlightedItem = getActiveItem(store.getState());\n    if (store.getState().activeItemId !== null && highlightedItem) {\n      var item = highlightedItem.item,\n        itemInputValue = highlightedItem.itemInputValue,\n        itemUrl = highlightedItem.itemUrl,\n        source = highlightedItem.source;\n      source.onActive(_objectSpread({\n        event: event,\n        item: item,\n        itemInputValue: itemInputValue,\n        itemUrl: itemUrl,\n        refresh: refresh,\n        source: source,\n        state: store.getState()\n      }, setters));\n    }\n  }).finally(function () {\n    setStatus('idle');\n    if (lastStalledId) {\n      props.environment.clearTimeout(lastStalledId);\n    }\n  });\n  return store.pendingRequests.add(request);\n}","/**\n * Creates a runner that executes promises in a concurrent-safe way.\n *\n * This is useful to prevent older promises to resolve after a newer promise,\n * otherwise resulting in stale resolved values.\n */\nexport function createConcurrentSafePromise() {\n  var basePromiseId = -1;\n  var latestResolvedId = -1;\n  var latestResolvedValue = undefined;\n  return function runConcurrentSafePromise(promise) {\n    basePromiseId++;\n    var currentPromiseId = basePromiseId;\n    return Promise.resolve(promise).then(function (x) {\n      // The promise might take too long to resolve and get outdated. This would\n      // result in resolving stale values.\n      // When this happens, we ignore the promise value and return the one\n      // coming from the latest resolved value.\n      //\n      // +----------------------------------+\n      // |        100ms                     |\n      // | run(1) +--->  R1                 |\n      // |        300ms                     |\n      // | run(2) +-------------> R2 (SKIP) |\n      // |        200ms                     |\n      // | run(3) +--------> R3             |\n      // +----------------------------------+\n      if (latestResolvedValue && currentPromiseId < latestResolvedId) {\n        return latestResolvedValue;\n      }\n      latestResolvedId = currentPromiseId;\n      latestResolvedValue = x;\n      return x;\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); }\nvar _excluded = [\"event\", \"props\", \"refresh\", \"store\"];\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 _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; }\nimport { onInput } from './onInput';\nimport { getActiveItem } from './utils';\nexport function onKeyDown(_ref) {\n  var event = _ref.event,\n    props = _ref.props,\n    refresh = _ref.refresh,\n    store = _ref.store,\n    setters = _objectWithoutProperties(_ref, _excluded);\n  if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n    // eslint-disable-next-line no-inner-declarations\n    var triggerScrollIntoView = function triggerScrollIntoView() {\n      var nodeItem = props.environment.document.getElementById(\"\".concat(props.id, \"-item-\").concat(store.getState().activeItemId));\n      if (nodeItem) {\n        if (nodeItem.scrollIntoViewIfNeeded) {\n          nodeItem.scrollIntoViewIfNeeded(false);\n        } else {\n          nodeItem.scrollIntoView(false);\n        }\n      }\n    }; // eslint-disable-next-line no-inner-declarations\n    var triggerOnActive = function triggerOnActive() {\n      var highlightedItem = getActiveItem(store.getState());\n      if (store.getState().activeItemId !== null && highlightedItem) {\n        var item = highlightedItem.item,\n          itemInputValue = highlightedItem.itemInputValue,\n          itemUrl = highlightedItem.itemUrl,\n          source = highlightedItem.source;\n        source.onActive(_objectSpread({\n          event: event,\n          item: item,\n          itemInputValue: itemInputValue,\n          itemUrl: itemUrl,\n          refresh: refresh,\n          source: source,\n          state: store.getState()\n        }, setters));\n      }\n    }; // Default browser behavior changes the caret placement on ArrowUp and\n    // ArrowDown.\n    event.preventDefault();\n\n    // When re-opening the panel, we need to split the logic to keep the actions\n    // synchronized as `onInput` returns a promise.\n    if (store.getState().isOpen === false && (props.openOnFocus || Boolean(store.getState().query))) {\n      onInput(_objectSpread({\n        event: event,\n        props: props,\n        query: store.getState().query,\n        refresh: refresh,\n        store: store\n      }, setters)).then(function () {\n        store.dispatch(event.key, {\n          nextActiveItemId: props.defaultActiveItemId\n        });\n        triggerOnActive();\n        // Since we rely on the DOM, we need to wait for all the micro tasks to\n        // finish (which include re-opening the panel) to make sure all the\n        // elements are available.\n        setTimeout(triggerScrollIntoView, 0);\n      });\n    } else {\n      store.dispatch(event.key, {});\n      triggerOnActive();\n      triggerScrollIntoView();\n    }\n  } else if (event.key === 'Escape') {\n    // This prevents the default browser behavior on `input[type=\"search\"]`\n    // from removing the query right away because we first want to close the\n    // panel.\n    event.preventDefault();\n    store.dispatch(event.key, null);\n\n    // Hitting the `Escape` key signals the end of a user interaction with the\n    // autocomplete. At this point, we should ignore any requests that are still\n    // pending and could reopen the panel once they resolve, because that would\n    // result in an unsolicited UI behavior.\n    store.pendingRequests.cancelAll();\n  } else if (event.key === 'Tab') {\n    store.dispatch('blur', null);\n\n    // Hitting the `Escape` key signals the end of a user interaction with the\n    // autocomplete. At this point, we should ignore any requests that are still\n    // pending and could reopen the panel once they resolve, because that would\n    // result in an unsolicited UI behavior.\n    store.pendingRequests.cancelAll();\n  } else if (event.key === 'Enter') {\n    // No active item, so we let the browser handle the native `onSubmit` form\n    // event.\n    if (store.getState().activeItemId === null || store.getState().collections.every(function (collection) {\n      return collection.items.length === 0;\n    })) {\n      // If requests are still pending when the panel closes, they could reopen\n      // the panel once they resolve.\n      // We want to prevent any subsequent query from reopening the panel\n      // because it would result in an unsolicited UI behavior.\n      if (!props.debug) {\n        store.pendingRequests.cancelAll();\n      }\n      return;\n    }\n\n    // This prevents the `onSubmit` event to be sent because an item is\n    // highlighted.\n    event.preventDefault();\n    var _ref2 = getActiveItem(store.getState()),\n      item = _ref2.item,\n      itemInputValue = _ref2.itemInputValue,\n      itemUrl = _ref2.itemUrl,\n      source = _ref2.source;\n    if (event.metaKey || event.ctrlKey) {\n      if (itemUrl !== undefined) {\n        source.onSelect(_objectSpread({\n          event: event,\n          item: item,\n          itemInputValue: itemInputValue,\n          itemUrl: itemUrl,\n          refresh: refresh,\n          source: source,\n          state: store.getState()\n        }, setters));\n        props.navigator.navigateNewTab({\n          itemUrl: itemUrl,\n          item: item,\n          state: store.getState()\n        });\n      }\n    } else if (event.shiftKey) {\n      if (itemUrl !== undefined) {\n        source.onSelect(_objectSpread({\n          event: event,\n          item: item,\n          itemInputValue: itemInputValue,\n          itemUrl: itemUrl,\n          refresh: refresh,\n          source: source,\n          state: store.getState()\n        }, setters));\n        props.navigator.navigateNewWindow({\n          itemUrl: itemUrl,\n          item: item,\n          state: store.getState()\n        });\n      }\n    } else if (event.altKey) {\n      // Keep native browser behavior\n    } else {\n      if (itemUrl !== undefined) {\n        source.onSelect(_objectSpread({\n          event: event,\n          item: item,\n          itemInputValue: itemInputValue,\n          itemUrl: itemUrl,\n          refresh: refresh,\n          source: source,\n          state: store.getState()\n        }, setters));\n        props.navigator.navigate({\n          itemUrl: itemUrl,\n          item: item,\n          state: store.getState()\n        });\n        return;\n      }\n      onInput(_objectSpread({\n        event: event,\n        nextState: {\n          isOpen: false\n        },\n        props: props,\n        query: itemInputValue,\n        refresh: refresh,\n        store: store\n      }, setters)).then(function () {\n        source.onSelect(_objectSpread({\n          event: event,\n          item: item,\n          itemInputValue: itemInputValue,\n          itemUrl: itemUrl,\n          refresh: refresh,\n          source: source,\n          state: store.getState()\n        }, setters));\n      });\n    }\n  }\n}","var regex = /((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;\nexport function isSamsung(userAgent) {\n  return Boolean(userAgent && userAgent.match(regex));\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); }\nvar _excluded = [\"props\", \"refresh\", \"store\"],\n  _excluded2 = [\"inputElement\", \"formElement\", \"panelElement\"],\n  _excluded3 = [\"inputElement\"],\n  _excluded4 = [\"inputElement\", \"maxLength\"],\n  _excluded5 = [\"sourceIndex\"],\n  _excluded6 = [\"sourceIndex\"],\n  _excluded7 = [\"item\", \"source\", \"sourceIndex\"];\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 _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; }\nimport { noop } from '@algolia/autocomplete-shared';\nimport { onInput } from './onInput';\nimport { onKeyDown as _onKeyDown } from './onKeyDown';\nimport { getActiveItem, isOrContainsNode, isSamsung } from './utils';\nexport function getPropGetters(_ref) {\n  var props = _ref.props,\n    refresh = _ref.refresh,\n    store = _ref.store,\n    setters = _objectWithoutProperties(_ref, _excluded);\n  var getEnvironmentProps = function getEnvironmentProps(providedProps) {\n    var inputElement = providedProps.inputElement,\n      formElement = providedProps.formElement,\n      panelElement = providedProps.panelElement,\n      rest = _objectWithoutProperties(providedProps, _excluded2);\n    function onMouseDownOrTouchStart(event) {\n      // The `onTouchStart`/`onMouseDown` events shouldn't trigger the `blur`\n      // handler when it's not an interaction with Autocomplete.\n      // We detect it with the following heuristics:\n      // - the panel is closed AND there are no pending requests\n      //   (no interaction with the autocomplete, no future state updates)\n      // - OR the touched target is the input element (should open the panel)\n      var isAutocompleteInteraction = store.getState().isOpen || !store.pendingRequests.isEmpty();\n      if (!isAutocompleteInteraction || event.target === inputElement) {\n        return;\n      }\n\n      // @TODO: support cases where there are multiple Autocomplete instances.\n      // Right now, a second instance makes this computation return false.\n      var isTargetWithinAutocomplete = [formElement, panelElement].some(function (contextNode) {\n        return isOrContainsNode(contextNode, event.target);\n      });\n      if (isTargetWithinAutocomplete === false) {\n        store.dispatch('blur', null);\n\n        // If requests are still pending when the user closes the panel, they\n        // could reopen the panel once they resolve.\n        // We want to prevent any subsequent query from reopening the panel\n        // because it would result in an unsolicited UI behavior.\n        if (!props.debug) {\n          store.pendingRequests.cancelAll();\n        }\n      }\n    }\n    return _objectSpread({\n      // We do not rely on the native `blur` event of the input to close the\n      // panel, but rather on a custom `touchstart`/`mousedown` event outside\n      // of the autocomplete elements.\n      // This ensures we don't mistakenly interpret interactions within the\n      // autocomplete (but outside of the input) as a signal to close the panel.\n      // For example, clicking reset button causes an input blur, but if\n      // `openOnFocus=true`, it shouldn't close the panel.\n      // On touch devices, scrolling results (`touchmove`) causes an input blur\n      // but shouldn't close the panel.\n      onTouchStart: onMouseDownOrTouchStart,\n      onMouseDown: onMouseDownOrTouchStart,\n      // When scrolling on touch devices (mobiles, tablets, etc.), we want to\n      // mimic the native platform behavior where the input is blurred to\n      // hide the virtual keyboard. This gives more vertical space to\n      // discover all the suggestions showing up in the panel.\n      onTouchMove: function onTouchMove(event) {\n        if (store.getState().isOpen === false || inputElement !== props.environment.document.activeElement || event.target === inputElement) {\n          return;\n        }\n        inputElement.blur();\n      }\n    }, rest);\n  };\n  var getRootProps = function getRootProps(rest) {\n    return _objectSpread({\n      role: 'combobox',\n      'aria-expanded': store.getState().isOpen,\n      'aria-haspopup': 'listbox',\n      'aria-owns': store.getState().isOpen ? \"\".concat(props.id, \"-list\") : undefined,\n      'aria-labelledby': \"\".concat(props.id, \"-label\")\n    }, rest);\n  };\n  var getFormProps = function getFormProps(providedProps) {\n    var inputElement = providedProps.inputElement,\n      rest = _objectWithoutProperties(providedProps, _excluded3);\n    return _objectSpread({\n      action: '',\n      noValidate: true,\n      role: 'search',\n      onSubmit: function onSubmit(event) {\n        var _providedProps$inputE;\n        event.preventDefault();\n        props.onSubmit(_objectSpread({\n          event: event,\n          refresh: refresh,\n          state: store.getState()\n        }, setters));\n        store.dispatch('submit', null);\n        (_providedProps$inputE = providedProps.inputElement) === null || _providedProps$inputE === void 0 ? void 0 : _providedProps$inputE.blur();\n      },\n      onReset: function onReset(event) {\n        var _providedProps$inputE2;\n        event.preventDefault();\n        props.onReset(_objectSpread({\n          event: event,\n          refresh: refresh,\n          state: store.getState()\n        }, setters));\n        store.dispatch('reset', null);\n        (_providedProps$inputE2 = providedProps.inputElement) === null || _providedProps$inputE2 === void 0 ? void 0 : _providedProps$inputE2.focus();\n      }\n    }, rest);\n  };\n  var getInputProps = function getInputProps(providedProps) {\n    var _props$environment$na;\n    function onFocus(event) {\n      // We want to trigger a query when `openOnFocus` is true\n      // because the panel should open with the current query.\n      if (props.openOnFocus || Boolean(store.getState().query)) {\n        onInput(_objectSpread({\n          event: event,\n          props: props,\n          query: store.getState().completion || store.getState().query,\n          refresh: refresh,\n          store: store\n        }, setters));\n      }\n      store.dispatch('focus', null);\n    }\n    var _ref2 = providedProps || {},\n      inputElement = _ref2.inputElement,\n      _ref2$maxLength = _ref2.maxLength,\n      maxLength = _ref2$maxLength === void 0 ? 512 : _ref2$maxLength,\n      rest = _objectWithoutProperties(_ref2, _excluded4);\n    var activeItem = getActiveItem(store.getState());\n    var userAgent = ((_props$environment$na = props.environment.navigator) === null || _props$environment$na === void 0 ? void 0 : _props$environment$na.userAgent) || '';\n    var shouldFallbackKeyHint = isSamsung(userAgent);\n    var enterKeyHint = activeItem !== null && activeItem !== void 0 && activeItem.itemUrl && !shouldFallbackKeyHint ? 'go' : 'search';\n    return _objectSpread({\n      'aria-autocomplete': 'both',\n      'aria-activedescendant': store.getState().isOpen && store.getState().activeItemId !== null ? \"\".concat(props.id, \"-item-\").concat(store.getState().activeItemId) : undefined,\n      'aria-controls': store.getState().isOpen ? \"\".concat(props.id, \"-list\") : undefined,\n      'aria-labelledby': \"\".concat(props.id, \"-label\"),\n      value: store.getState().completion || store.getState().query,\n      id: \"\".concat(props.id, \"-input\"),\n      autoComplete: 'off',\n      autoCorrect: 'off',\n      autoCapitalize: 'off',\n      enterKeyHint: enterKeyHint,\n      spellCheck: 'false',\n      autoFocus: props.autoFocus,\n      placeholder: props.placeholder,\n      maxLength: maxLength,\n      type: 'search',\n      onChange: function onChange(event) {\n        onInput(_objectSpread({\n          event: event,\n          props: props,\n          query: event.currentTarget.value.slice(0, maxLength),\n          refresh: refresh,\n          store: store\n        }, setters));\n      },\n      onKeyDown: function onKeyDown(event) {\n        _onKeyDown(_objectSpread({\n          event: event,\n          props: props,\n          refresh: refresh,\n          store: store\n        }, setters));\n      },\n      onFocus: onFocus,\n      // We don't rely on the `blur` event.\n      // See explanation in `onTouchStart`/`onMouseDown`.\n      // @MAJOR See if we need to keep this handler.\n      onBlur: noop,\n      onClick: function onClick(event) {\n        // When the panel is closed and you click on the input while\n        // the input is focused, the `onFocus` event is not triggered\n        // (default browser behavior).\n        // In an autocomplete context, it makes sense to open the panel in this\n        // case.\n        // We mimic this event by catching the `onClick` event which\n        // triggers the `onFocus` for the panel to open.\n        if (providedProps.inputElement === props.environment.document.activeElement && !store.getState().isOpen) {\n          onFocus(event);\n        }\n      }\n    }, rest);\n  };\n  var getAutocompleteId = function getAutocompleteId(instanceId, sourceId) {\n    return typeof sourceId !== 'undefined' ? \"\".concat(instanceId, \"-\").concat(sourceId) : instanceId;\n  };\n  var getLabelProps = function getLabelProps(providedProps) {\n    var _ref3 = providedProps || {},\n      sourceIndex = _ref3.sourceIndex,\n      rest = _objectWithoutProperties(_ref3, _excluded5);\n    return _objectSpread({\n      htmlFor: \"\".concat(getAutocompleteId(props.id, sourceIndex), \"-input\"),\n      id: \"\".concat(getAutocompleteId(props.id, sourceIndex), \"-label\")\n    }, rest);\n  };\n  var getListProps = function getListProps(providedProps) {\n    var _ref4 = providedProps || {},\n      sourceIndex = _ref4.sourceIndex,\n      rest = _objectWithoutProperties(_ref4, _excluded6);\n    return _objectSpread({\n      role: 'listbox',\n      'aria-labelledby': \"\".concat(getAutocompleteId(props.id, sourceIndex), \"-label\"),\n      id: \"\".concat(getAutocompleteId(props.id, sourceIndex), \"-list\")\n    }, rest);\n  };\n  var getPanelProps = function getPanelProps(rest) {\n    return _objectSpread({\n      onMouseDown: function onMouseDown(event) {\n        // Prevents the `activeElement` from being changed to the panel so\n        // that the blur event is not triggered, otherwise it closes the\n        // panel.\n        event.preventDefault();\n      },\n      onMouseLeave: function onMouseLeave() {\n        store.dispatch('mouseleave', null);\n      }\n    }, rest);\n  };\n  var getItemProps = function getItemProps(providedProps) {\n    var item = providedProps.item,\n      source = providedProps.source,\n      sourceIndex = providedProps.sourceIndex,\n      rest = _objectWithoutProperties(providedProps, _excluded7);\n    return _objectSpread({\n      id: \"\".concat(getAutocompleteId(props.id, sourceIndex), \"-item-\").concat(item.__autocomplete_id),\n      role: 'option',\n      'aria-selected': store.getState().activeItemId === item.__autocomplete_id,\n      onMouseMove: function onMouseMove(event) {\n        if (item.__autocomplete_id === store.getState().activeItemId) {\n          return;\n        }\n        store.dispatch('mousemove', item.__autocomplete_id);\n        var activeItem = getActiveItem(store.getState());\n        if (store.getState().activeItemId !== null && activeItem) {\n          var _item = activeItem.item,\n            itemInputValue = activeItem.itemInputValue,\n            itemUrl = activeItem.itemUrl,\n            _source = activeItem.source;\n          _source.onActive(_objectSpread({\n            event: event,\n            item: _item,\n            itemInputValue: itemInputValue,\n            itemUrl: itemUrl,\n            refresh: refresh,\n            source: _source,\n            state: store.getState()\n          }, setters));\n        }\n      },\n      onMouseDown: function onMouseDown(event) {\n        // Prevents the `activeElement` from being changed to the item so it\n        // can remain with the current `activeElement`.\n        event.preventDefault();\n      },\n      onClick: function onClick(event) {\n        var itemInputValue = source.getItemInputValue({\n          item: item,\n          state: store.getState()\n        });\n        var itemUrl = source.getItemUrl({\n          item: item,\n          state: store.getState()\n        });\n\n        // If `getItemUrl` is provided, it means that the suggestion\n        // is a link, not plain text that aims at updating the query.\n        // We can therefore skip the state change because it will update\n        // the `activeItemId`, resulting in a UI flash, especially\n        // noticeable on mobile.\n        var runPreCommand = itemUrl ? Promise.resolve() : onInput(_objectSpread({\n          event: event,\n          nextState: {\n            isOpen: false\n          },\n          props: props,\n          query: itemInputValue,\n          refresh: refresh,\n          store: store\n        }, setters));\n        runPreCommand.then(function () {\n          source.onSelect(_objectSpread({\n            event: event,\n            item: item,\n            itemInputValue: itemInputValue,\n            itemUrl: itemUrl,\n            refresh: refresh,\n            source: source,\n            state: store.getState()\n          }, setters));\n        });\n      }\n    }, rest);\n  };\n  return {\n    getEnvironmentProps: getEnvironmentProps,\n    getRootProps: getRootProps,\n    getFormProps: getFormProps,\n    getLabelProps: getLabelProps,\n    getInputProps: getInputProps,\n    getPanelProps: getPanelProps,\n    getListProps: getListProps,\n    getItemProps: getItemProps\n  };\n}","export function isOrContainsNode(parent, child) {\n  return parent === child || parent.contains(child);\n}","export var version = '1.9.4';","import { version } from './version';\nexport var userAgents = [{\n  segment: 'autocomplete-core',\n  version: version\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 _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 { userAgents } from '@algolia/autocomplete-shared';\nexport function getMetadata(_ref) {\n  var _, _options$__autocomple, _options$__autocomple2, _options$__autocomple3;\n  var plugins = _ref.plugins,\n    options = _ref.options;\n  var optionsKey = (_ = (((_options$__autocomple = options.__autocomplete_metadata) === null || _options$__autocomple === void 0 ? void 0 : _options$__autocomple.userAgents) || [])[0]) === null || _ === void 0 ? void 0 : _.segment;\n  var extraOptions = optionsKey ? _defineProperty({}, optionsKey, Object.keys(((_options$__autocomple2 = options.__autocomplete_metadata) === null || _options$__autocomple2 === void 0 ? void 0 : _options$__autocomple2.options) || {})) : {};\n  return {\n    plugins: plugins.map(function (plugin) {\n      return {\n        name: plugin.name,\n        options: Object.keys(plugin.__autocomplete_pluginOptions || [])\n      };\n    }),\n    options: _objectSpread({\n      'autocomplete-core': Object.keys(options)\n    }, extraOptions),\n    ua: userAgents.concat(((_options$__autocomple3 = options.__autocomplete_metadata) === null || _options$__autocomple3 === void 0 ? void 0 : _options$__autocomple3.userAgents) || [])\n  };\n}\nexport function injectMetadata(_ref3) {\n  var _environment$navigato, _environment$navigato2;\n  var metadata = _ref3.metadata,\n    environment = _ref3.environment;\n  var isMetadataEnabled = (_environment$navigato = environment.navigator) === null || _environment$navigato === void 0 ? void 0 : (_environment$navigato2 = _environment$navigato.userAgent) === null || _environment$navigato2 === void 0 ? void 0 : _environment$navigato2.includes('Algolia Crawler');\n  if (isMetadataEnabled) {\n    var metadataContainer = environment.document.createElement('meta');\n    var headRef = environment.document.querySelector('head');\n    metadataContainer.name = 'algolia:metadata';\n    setTimeout(function () {\n      metadataContainer.content = JSON.stringify(metadata);\n      headRef.appendChild(metadataContainer);\n    }, 0);\n  }\n}","import { getActiveItem } from './utils';\nexport function getCompletion(_ref) {\n  var _getActiveItem;\n  var state = _ref.state;\n  if (state.isOpen === false || state.activeItemId === null) {\n    return null;\n  }\n  return ((_getActiveItem = getActiveItem(state)) === null || _getActiveItem === void 0 ? void 0 : _getActiveItem.itemInputValue) || null;\n}","/**\n * Returns the next active item ID from the current state.\n *\n * We allow circular keyboard navigation from the base index.\n * The base index can either be `null` (nothing is highlighted) or `0`\n * (the first item is highlighted).\n * The base index is allowed to get assigned `null` only if\n * `props.defaultActiveItemId` is `null`. This pattern allows to \"stop\"\n * by the actual query before navigating to other suggestions as seen on\n * Google or Amazon.\n *\n * @param moveAmount The offset to increment (or decrement) the last index\n * @param baseIndex The current index to compute the next index from\n * @param itemCount The number of items\n * @param defaultActiveItemId The default active index to fallback to\n */\nexport function getNextActiveItemId(moveAmount, baseIndex, itemCount, defaultActiveItemId) {\n  if (!itemCount) {\n    return null;\n  }\n  if (moveAmount < 0 && (baseIndex === null || defaultActiveItemId !== null && baseIndex === 0)) {\n    return itemCount + moveAmount;\n  }\n  var numericIndex = (baseIndex === null ? -1 : baseIndex) + moveAmount;\n  if (numericIndex <= -1 || numericIndex >= itemCount) {\n    return defaultActiveItemId === null ? null : 0;\n  }\n  return numericIndex;\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 _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 { getItemsCount, invariant } from '@algolia/autocomplete-shared';\nimport { getCompletion } from './getCompletion';\nimport { getNextActiveItemId } from './utils';\nexport var stateReducer = function stateReducer(state, action) {\n  switch (action.type) {\n    case 'setActiveItemId':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: action.payload\n        });\n      }\n    case 'setQuery':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          query: action.payload,\n          completion: null\n        });\n      }\n    case 'setCollections':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          collections: action.payload\n        });\n      }\n    case 'setIsOpen':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          isOpen: action.payload\n        });\n      }\n    case 'setStatus':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          status: action.payload\n        });\n      }\n    case 'setContext':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          context: _objectSpread(_objectSpread({}, state.context), action.payload)\n        });\n      }\n    case 'ArrowDown':\n      {\n        var nextState = _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: action.payload.hasOwnProperty('nextActiveItemId') ? action.payload.nextActiveItemId : getNextActiveItemId(1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)\n        });\n        return _objectSpread(_objectSpread({}, nextState), {}, {\n          completion: getCompletion({\n            state: nextState\n          })\n        });\n      }\n    case 'ArrowUp':\n      {\n        var _nextState = _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: getNextActiveItemId(-1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)\n        });\n        return _objectSpread(_objectSpread({}, _nextState), {}, {\n          completion: getCompletion({\n            state: _nextState\n          })\n        });\n      }\n    case 'Escape':\n      {\n        if (state.isOpen) {\n          return _objectSpread(_objectSpread({}, state), {}, {\n            activeItemId: null,\n            isOpen: false,\n            completion: null\n          });\n        }\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: null,\n          query: '',\n          status: 'idle',\n          collections: []\n        });\n      }\n    case 'submit':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: null,\n          isOpen: false,\n          status: 'idle'\n        });\n      }\n    case 'reset':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId:\n          // Since we open the panel on reset when openOnFocus=true\n          // we need to restore the highlighted index to the defaultActiveItemId. (DocSearch use-case)\n\n          // Since we close the panel when openOnFocus=false\n          // we lose track of the highlighted index. (Query-suggestions use-case)\n          action.props.openOnFocus === true ? action.props.defaultActiveItemId : null,\n          status: 'idle',\n          query: ''\n        });\n      }\n    case 'focus':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: action.props.defaultActiveItemId,\n          isOpen: (action.props.openOnFocus || Boolean(state.query)) && action.props.shouldPanelOpen({\n            state: state\n          })\n        });\n      }\n    case 'blur':\n      {\n        if (action.props.debug) {\n          return state;\n        }\n        return _objectSpread(_objectSpread({}, state), {}, {\n          isOpen: false,\n          activeItemId: null\n        });\n      }\n    case 'mousemove':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: action.payload\n        });\n      }\n    case 'mouseleave':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: action.props.defaultActiveItemId\n        });\n      }\n    default:\n      invariant(false, \"The reducer action \".concat(JSON.stringify(action.type), \" is not supported.\"));\n      return state;\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); }\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 { createAlgoliaInsightsPlugin } from '@algolia/autocomplete-plugin-algolia-insights';\nimport { checkOptions } from './checkOptions';\nimport { createStore } from './createStore';\nimport { getAutocompleteSetters } from './getAutocompleteSetters';\nimport { getDefaultProps } from './getDefaultProps';\nimport { getPropGetters } from './getPropGetters';\nimport { getMetadata, injectMetadata } from './metadata';\nimport { onInput } from './onInput';\nimport { stateReducer } from './stateReducer';\nexport function createAutocomplete(options) {\n  checkOptions(options);\n  var subscribers = [];\n  var props = getDefaultProps(options, subscribers);\n  var store = createStore(stateReducer, props, onStoreStateChange);\n  var setters = getAutocompleteSetters({\n    store: store\n  });\n  var propGetters = getPropGetters(_objectSpread({\n    props: props,\n    refresh: refresh,\n    store: store,\n    navigator: props.navigator\n  }, setters));\n  function onStoreStateChange(_ref) {\n    var prevState = _ref.prevState,\n      state = _ref.state;\n    props.onStateChange(_objectSpread({\n      prevState: prevState,\n      state: state,\n      refresh: refresh,\n      navigator: props.navigator\n    }, setters));\n  }\n  function refresh() {\n    return onInput(_objectSpread({\n      event: new Event('input'),\n      nextState: {\n        isOpen: store.getState().isOpen\n      },\n      props: props,\n      navigator: props.navigator,\n      query: store.getState().query,\n      refresh: refresh,\n      store: store\n    }, setters));\n  }\n  if (options.insights && !props.plugins.some(function (plugin) {\n    return plugin.name === 'aa.algoliaInsightsPlugin';\n  })) {\n    var insightsParams = typeof options.insights === 'boolean' ? {} : options.insights;\n    props.plugins.push(createAlgoliaInsightsPlugin(insightsParams));\n  }\n  props.plugins.forEach(function (plugin) {\n    var _plugin$subscribe;\n    return (_plugin$subscribe = plugin.subscribe) === null || _plugin$subscribe === void 0 ? void 0 : _plugin$subscribe.call(plugin, _objectSpread(_objectSpread({}, setters), {}, {\n      navigator: props.navigator,\n      refresh: refresh,\n      onSelect: function onSelect(fn) {\n        subscribers.push({\n          onSelect: fn\n        });\n      },\n      onActive: function onActive(fn) {\n        subscribers.push({\n          onActive: fn\n        });\n      },\n      onResolve: function onResolve(fn) {\n        subscribers.push({\n          onResolve: fn\n        });\n      }\n    }));\n  });\n  injectMetadata({\n    metadata: getMetadata({\n      plugins: props.plugins,\n      options: options\n    }),\n    environment: props.environment\n  });\n  return _objectSpread(_objectSpread({\n    refresh: refresh,\n    navigator: props.navigator\n  }, propGetters), setters);\n}","export var LOCAL_STORAGE_KEY = 'AUTOCOMPLETE_RECENT_SEARCHES';\nexport var LOCAL_STORAGE_KEY_TEST = '__AUTOCOMPLETE_RECENT_SEARCHES_PLUGIN_TEST_KEY__';","import { LOCAL_STORAGE_KEY_TEST } from './constants';\nfunction isLocalStorageSupported() {\n  try {\n    localStorage.setItem(LOCAL_STORAGE_KEY_TEST, '');\n    localStorage.removeItem(LOCAL_STORAGE_KEY_TEST);\n    return true;\n  } catch (error) {\n    return false;\n  }\n}\nexport function getLocalStorage(_ref) {\n  var key = _ref.key;\n  if (!isLocalStorageSupported()) {\n    return {\n      setItem: function setItem() {},\n      getItem: function getItem() {\n        return [];\n      }\n    };\n  }\n  return {\n    setItem: function setItem(items) {\n      return window.localStorage.setItem(key, JSON.stringify(items));\n    },\n    getItem: function getItem() {\n      var items = window.localStorage.getItem(key);\n      return items ? JSON.parse(items) : [];\n    }\n  };\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nimport { getLocalStorage } from './getLocalStorage';\nexport function createLocalStorage(_ref) {\n  var key = _ref.key,\n    limit = _ref.limit,\n    search = _ref.search;\n  var storage = getLocalStorage({\n    key: key\n  });\n  return {\n    onAdd: function onAdd(item) {\n      storage.setItem([item].concat(_toConsumableArray(storage.getItem())));\n    },\n    onRemove: function onRemove(id) {\n      storage.setItem(storage.getItem().filter(function (x) {\n        return x.id !== id;\n      }));\n    },\n    getAll: function getAll() {\n      var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      return search({\n        query: query,\n        items: storage.getItem(),\n        limit: limit\n      }).slice(0, limit);\n    }\n  };\n}","/** @jsxRuntime classic */\n/** @jsx createElement */\n\nexport function getTemplates(_ref) {\n  var onRemove = _ref.onRemove,\n    onTapAhead = _ref.onTapAhead;\n  return {\n    item: function item(_ref2) {\n      var item = _ref2.item,\n        createElement = _ref2.createElement,\n        components = _ref2.components;\n      return createElement(\"div\", {\n        className: \"aa-ItemWrapper\"\n      }, createElement(\"div\", {\n        className: \"aa-ItemContent\"\n      }, createElement(\"div\", {\n        className: \"aa-ItemIcon aa-ItemIcon--noBorder\"\n      }, createElement(\"svg\", {\n        viewBox: \"0 0 24 24\",\n        fill: \"currentColor\"\n      }, createElement(\"path\", {\n        d: \"M12.516 6.984v5.25l4.5 2.672-0.75 1.266-5.25-3.188v-6h1.5zM12 20.016q3.281 0 5.648-2.367t2.367-5.648-2.367-5.648-5.648-2.367-5.648 2.367-2.367 5.648 2.367 5.648 5.648 2.367zM12 2.016q4.125 0 7.055 2.93t2.93 7.055-2.93 7.055-7.055 2.93-7.055-2.93-2.93-7.055 2.93-7.055 7.055-2.93z\"\n      }))), createElement(\"div\", {\n        className: \"aa-ItemContentBody\"\n      }, createElement(\"div\", {\n        className: \"aa-ItemContentTitle\"\n      }, createElement(components.ReverseHighlight, {\n        hit: item,\n        attribute: \"label\"\n      }), item.category && createElement(\"span\", {\n        className: \"aa-ItemContentSubtitle aa-ItemContentSubtitle--inline\"\n      }, createElement(\"span\", {\n        className: \"aa-ItemContentSubtitleIcon\"\n      }), \" in\", ' ', createElement(\"span\", {\n        className: \"aa-ItemContentSubtitleCategory\"\n      }, item.category))))), createElement(\"div\", {\n        className: \"aa-ItemActions\"\n      }, createElement(\"button\", {\n        className: \"aa-ItemActionButton\",\n        title: \"Remove this search\",\n        onClick: function onClick(event) {\n          event.preventDefault();\n          event.stopPropagation();\n          onRemove(item.id);\n        }\n      }, createElement(\"svg\", {\n        viewBox: \"0 0 24 24\",\n        fill: \"currentColor\"\n      }, createElement(\"path\", {\n        d: \"M18 7v13c0 0.276-0.111 0.525-0.293 0.707s-0.431 0.293-0.707 0.293h-10c-0.276 0-0.525-0.111-0.707-0.293s-0.293-0.431-0.293-0.707v-13zM17 5v-1c0-0.828-0.337-1.58-0.879-2.121s-1.293-0.879-2.121-0.879h-4c-0.828 0-1.58 0.337-2.121 0.879s-0.879 1.293-0.879 2.121v1h-4c-0.552 0-1 0.448-1 1s0.448 1 1 1h1v13c0 0.828 0.337 1.58 0.879 2.121s1.293 0.879 2.121 0.879h10c0.828 0 1.58-0.337 2.121-0.879s0.879-1.293 0.879-2.121v-13h1c0.552 0 1-0.448 1-1s-0.448-1-1-1zM9 5v-1c0-0.276 0.111-0.525 0.293-0.707s0.431-0.293 0.707-0.293h4c0.276 0 0.525 0.111 0.707 0.293s0.293 0.431 0.293 0.707v1zM9 11v6c0 0.552 0.448 1 1 1s1-0.448 1-1v-6c0-0.552-0.448-1-1-1s-1 0.448-1 1zM13 11v6c0 0.552 0.448 1 1 1s1-0.448 1-1v-6c0-0.552-0.448-1-1-1s-1 0.448-1 1z\"\n      }))), createElement(\"button\", {\n        className: \"aa-ItemActionButton\",\n        title: \"Fill query with \\\"\".concat(item.label, \"\\\"\"),\n        onClick: function onClick(event) {\n          event.preventDefault();\n          event.stopPropagation();\n          onTapAhead(item);\n        }\n      }, createElement(\"svg\", {\n        viewBox: \"0 0 24 24\",\n        fill: \"currentColor\"\n      }, createElement(\"path\", {\n        d: \"M8 17v-7.586l8.293 8.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-8.293-8.293h7.586c0.552 0 1-0.448 1-1s-0.448-1-1-1h-10c-0.552 0-1 0.448-1 1v10c0 0.552 0.448 1 1 1s1-0.448 1-1z\"\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); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\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 { createRef, warn } from '@algolia/autocomplete-shared';\nimport { createStorageApi } from './createStorageApi';\nimport { getTemplates } from './getTemplates';\nfunction getDefaultSubscribe(store) {\n  return function subscribe(_ref) {\n    var onSelect = _ref.onSelect;\n    onSelect(function (_ref2) {\n      var item = _ref2.item,\n        state = _ref2.state,\n        source = _ref2.source;\n      var inputValue = source.getItemInputValue({\n        item: item,\n        state: state\n      });\n      if (source.sourceId === 'querySuggestionsPlugin' && inputValue) {\n        var recentItem = {\n          id: inputValue,\n          label: inputValue,\n          category: item.__autocomplete_qsCategory\n        };\n        store.addItem(recentItem);\n      }\n    });\n  };\n}\nexport function createRecentSearchesPlugin(options) {\n  var _getOptions = getOptions(options),\n    storage = _getOptions.storage,\n    transformSource = _getOptions.transformSource,\n    subscribe = _getOptions.subscribe;\n  var store = createStorageApi(storage);\n  var lastItemsRef = createRef([]);\n  return {\n    name: 'aa.recentSearchesPlugin',\n    subscribe: subscribe !== null && subscribe !== void 0 ? subscribe : getDefaultSubscribe(store),\n    onSubmit: function onSubmit(_ref3) {\n      var state = _ref3.state;\n      var query = state.query;\n      if (query) {\n        var recentItem = {\n          id: query,\n          label: query\n        };\n        store.addItem(recentItem);\n      }\n    },\n    getSources: function getSources(_ref4) {\n      var query = _ref4.query,\n        setQuery = _ref4.setQuery,\n        refresh = _ref4.refresh,\n        state = _ref4.state;\n      lastItemsRef.current = store.getAll(query);\n      function onRemove(id) {\n        store.removeItem(id);\n        refresh();\n      }\n      function onTapAhead(item) {\n        setQuery(item.label);\n        refresh();\n      }\n      return Promise.resolve(lastItemsRef.current).then(function (items) {\n        if (items.length === 0) {\n          return [];\n        }\n        return [transformSource({\n          source: {\n            sourceId: 'recentSearchesPlugin',\n            getItemInputValue: function getItemInputValue(_ref5) {\n              var item = _ref5.item;\n              return item.label;\n            },\n            getItems: function getItems() {\n              return items;\n            },\n            templates: getTemplates({\n              onRemove: onRemove,\n              onTapAhead: onTapAhead\n            })\n          },\n          onRemove: onRemove,\n          onTapAhead: onTapAhead,\n          state: state\n        })];\n      });\n    },\n    data: _objectSpread(_objectSpread({}, store), {}, {\n      // @ts-ignore SearchOptions `facetFilters` is ReadonlyArray\n      getAlgoliaSearchParams: function getAlgoliaSearchParams() {\n        var _params$facetFilters, _params$hitsPerPage;\n        var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n        // If the items returned by `store.getAll` are contained in a Promise,\n        // we cannot provide the search params in time when this function is called\n        // because we need to resolve the promise before getting the value.\n        if (!Array.isArray(lastItemsRef.current)) {\n          process.env.NODE_ENV !== 'production' ? warn(false, 'The `getAlgoliaSearchParams` function is not supported with storages that return promises in `getAll`.') : void 0;\n          return params;\n        }\n        return _objectSpread(_objectSpread({}, params), {}, {\n          facetFilters: [].concat(_toConsumableArray((_params$facetFilters = params.facetFilters) !== null && _params$facetFilters !== void 0 ? _params$facetFilters : []), _toConsumableArray(lastItemsRef.current.map(function (item) {\n            return [\"objectID:-\".concat(item.label)];\n          }))),\n          hitsPerPage: Math.max(1, ((_params$hitsPerPage = params.hitsPerPage) !== null && _params$hitsPerPage !== void 0 ? _params$hitsPerPage : 10) - lastItemsRef.current.length)\n        });\n      }\n    }),\n    __autocomplete_pluginOptions: options\n  };\n}\nfunction getOptions(options) {\n  return _objectSpread({\n    transformSource: function transformSource(_ref6) {\n      var source = _ref6.source;\n      return source;\n    }\n  }, options);\n}","export function createStorageApi(storage) {\n  return {\n    addItem: function addItem(item) {\n      storage.onRemove(item.id);\n      storage.onAdd(item);\n    },\n    removeItem: function removeItem(id) {\n      storage.onRemove(id);\n    },\n    getAll: function getAll(query) {\n      return storage.getAll(query);\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); }\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); }\nexport function addHighlightedAttribute(_ref) {\n  var item = _ref.item,\n    query = _ref.query;\n  return _objectSpread(_objectSpread({}, item), {}, {\n    _highlightResult: {\n      label: {\n        value: query ? item.label.replace(new RegExp(query.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'gi'), function (match) {\n          return \"__aa-highlight__\".concat(match, \"__/aa-highlight__\");\n        }) : item.label\n      }\n    }\n  });\n}","import { addHighlightedAttribute } from './addHighlightedAttribute';\nexport function search(_ref) {\n  var query = _ref.query,\n    items = _ref.items,\n    limit = _ref.limit;\n  if (!query) {\n    return items.slice(0, limit).map(function (item) {\n      return addHighlightedAttribute({\n        item: item,\n        query: query\n      });\n    });\n  }\n  return items.filter(function (item) {\n    return item.label.toLowerCase().includes(query.toLowerCase());\n  }).slice(0, limit).map(function (item) {\n    return addHighlightedAttribute({\n      item: item,\n      query: query\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); }\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 { LOCAL_STORAGE_KEY } from './constants';\nimport { createLocalStorage } from './createLocalStorage';\nimport { createRecentSearchesPlugin } from './createRecentSearchesPlugin';\nimport { search as defaultSearch } from './search';\nexport function createLocalStorageRecentSearchesPlugin(options) {\n  var _getOptions = getOptions(options),\n    key = _getOptions.key,\n    limit = _getOptions.limit,\n    transformSource = _getOptions.transformSource,\n    search = _getOptions.search,\n    subscribe = _getOptions.subscribe;\n  var storage = createLocalStorage({\n    key: [LOCAL_STORAGE_KEY, key].join(':'),\n    limit: limit,\n    search: search\n  });\n  var recentSearchesPlugin = createRecentSearchesPlugin({\n    transformSource: transformSource,\n    storage: storage,\n    subscribe: subscribe\n  });\n  return _objectSpread(_objectSpread({}, recentSearchesPlugin), {}, {\n    name: 'aa.localStorageRecentSearchesPlugin',\n    __autocomplete_pluginOptions: options\n  });\n}\nfunction getOptions(options) {\n  return _objectSpread({\n    limit: 5,\n    search: defaultSearch,\n    transformSource: function transformSource(_ref) {\n      var source = _ref.source;\n      return source;\n    }\n  }, options);\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); }\nvar _excluded = [\"params\"];\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 _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 _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nimport { userAgents as coreUserAgents, invariant } from '@algolia/autocomplete-shared';\nimport { HIGHLIGHT_PRE_TAG, HIGHLIGHT_POST_TAG } from '../constants';\nimport { getAppIdAndApiKey } from '../utils';\nexport function fetchAlgoliaResults(_ref) {\n  var searchClient = _ref.searchClient,\n    queries = _ref.queries,\n    _ref$userAgents = _ref.userAgents,\n    userAgents = _ref$userAgents === void 0 ? [] : _ref$userAgents;\n  if (typeof searchClient.addAlgoliaAgent === 'function') {\n    var algoliaAgents = [].concat(_toConsumableArray(coreUserAgents), _toConsumableArray(userAgents));\n    algoliaAgents.forEach(function (_ref2) {\n      var segment = _ref2.segment,\n        version = _ref2.version;\n      searchClient.addAlgoliaAgent(segment, version);\n    });\n  }\n  var _getAppIdAndApiKey = getAppIdAndApiKey(searchClient),\n    appId = _getAppIdAndApiKey.appId,\n    apiKey = _getAppIdAndApiKey.apiKey;\n  invariant(Boolean(appId), 'The Algolia `appId` was not accessible from the searchClient passed.');\n  invariant(Boolean(apiKey), 'The Algolia `apiKey` was not accessible from the searchClient passed.');\n  return searchClient.search(queries.map(function (searchParameters) {\n    var params = searchParameters.params,\n      headers = _objectWithoutProperties(searchParameters, _excluded);\n    return _objectSpread(_objectSpread({}, headers), {}, {\n      params: _objectSpread({\n        hitsPerPage: 5,\n        highlightPreTag: HIGHLIGHT_PRE_TAG,\n        highlightPostTag: HIGHLIGHT_POST_TAG\n      }, params)\n    });\n  })).then(function (response) {\n    return response.results.map(function (result, resultIndex) {\n      var _result$hits;\n      return _objectSpread(_objectSpread({}, result), {}, {\n        hits: (_result$hits = result.hits) === null || _result$hits === void 0 ? void 0 : _result$hits.map(function (hit) {\n          return _objectSpread(_objectSpread({}, hit), {}, {\n            // Bring support for the Insights plugin.\n            __autocomplete_indexName: result.index || queries[resultIndex].indexName,\n            __autocomplete_queryID: result.queryID,\n            __autocomplete_algoliaCredentials: {\n              appId: appId,\n              apiKey: apiKey\n            }\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); }\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); }\nexport function createRequester(fetcher, requesterId) {\n  function execute(fetcherParams) {\n    return fetcher({\n      searchClient: fetcherParams.searchClient,\n      queries: fetcherParams.requests.map(function (x) {\n        return x.query;\n      })\n    }).then(function (responses) {\n      return responses.map(function (response, index) {\n        var _fetcherParams$reques = fetcherParams.requests[index],\n          sourceId = _fetcherParams$reques.sourceId,\n          transformResponse = _fetcherParams$reques.transformResponse;\n        return {\n          items: response,\n          sourceId: sourceId,\n          transformResponse: transformResponse\n        };\n      });\n    });\n  }\n  return function createSpecifiedRequester(requesterParams) {\n    return function requester(requestParams) {\n      return _objectSpread(_objectSpread({\n        requesterId: requesterId,\n        execute: execute\n      }, requesterParams), requestParams);\n    };\n  };\n}","import { fetchAlgoliaResults } from '../search';\nimport { createRequester } from './createRequester';\nexport var createAlgoliaRequester = createRequester(fetchAlgoliaResults, 'algolia');","export function getAppIdAndApiKey(searchClient) {\n  var _ref = searchClient.transporter || {},\n    _ref$headers = _ref.headers,\n    headers = _ref$headers === void 0 ? {} : _ref$headers,\n    _ref$queryParameters = _ref.queryParameters,\n    queryParameters = _ref$queryParameters === void 0 ? {} : _ref$queryParameters;\n  var APP_ID = 'x-algolia-application-id';\n  var API_KEY = 'x-algolia-api-key';\n  var appId = headers[APP_ID] || queryParameters[APP_ID];\n  var apiKey = headers[API_KEY] || queryParameters[API_KEY];\n  return {\n    appId: appId,\n    apiKey: apiKey\n  };\n}","export var HIGHLIGHT_PRE_TAG = '__aa-highlight__';\nexport var HIGHLIGHT_POST_TAG = '__/aa-highlight__';","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); }\nimport { invariant } from '@algolia/autocomplete-shared';\nimport { createAlgoliaRequester } from './createAlgoliaRequester';\n\n/**\n * Retrieves Algolia results from multiple indices.\n */\nexport function getAlgoliaResults(requestParams) {\n  invariant(_typeof(requestParams.searchClient) === 'object', 'The `searchClient` parameter is required for getAlgoliaResults({ searchClient }).');\n  var requester = createAlgoliaRequester({\n    transformResponse: function transformResponse(response) {\n      return response.hits;\n    }\n  });\n  return requester(requestParams);\n}","/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n    if (typeof Map !== 'undefined') {\r\n        return Map;\r\n    }\r\n    /**\r\n     * Returns index in provided array that matches the specified key.\r\n     *\r\n     * @param {Array<Array>} arr\r\n     * @param {*} key\r\n     * @returns {number}\r\n     */\r\n    function getIndex(arr, key) {\r\n        var result = -1;\r\n        arr.some(function (entry, index) {\r\n            if (entry[0] === key) {\r\n                result = index;\r\n                return true;\r\n            }\r\n            return false;\r\n        });\r\n        return result;\r\n    }\r\n    return /** @class */ (function () {\r\n        function class_1() {\r\n            this.__entries__ = [];\r\n        }\r\n        Object.defineProperty(class_1.prototype, \"size\", {\r\n            /**\r\n             * @returns {boolean}\r\n             */\r\n            get: function () {\r\n                return this.__entries__.length;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        /**\r\n         * @param {*} key\r\n         * @returns {*}\r\n         */\r\n        class_1.prototype.get = function (key) {\r\n            var index = getIndex(this.__entries__, key);\r\n            var entry = this.__entries__[index];\r\n            return entry && entry[1];\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @param {*} value\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.set = function (key, value) {\r\n            var index = getIndex(this.__entries__, key);\r\n            if (~index) {\r\n                this.__entries__[index][1] = value;\r\n            }\r\n            else {\r\n                this.__entries__.push([key, value]);\r\n            }\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.delete = function (key) {\r\n            var entries = this.__entries__;\r\n            var index = getIndex(entries, key);\r\n            if (~index) {\r\n                entries.splice(index, 1);\r\n            }\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.has = function (key) {\r\n            return !!~getIndex(this.__entries__, key);\r\n        };\r\n        /**\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.clear = function () {\r\n            this.__entries__.splice(0);\r\n        };\r\n        /**\r\n         * @param {Function} callback\r\n         * @param {*} [ctx=null]\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.forEach = function (callback, ctx) {\r\n            if (ctx === void 0) { ctx = null; }\r\n            for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n                var entry = _a[_i];\r\n                callback.call(ctx, entry[1], entry[0]);\r\n            }\r\n        };\r\n        return class_1;\r\n    }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n    if (typeof global !== 'undefined' && global.Math === Math) {\r\n        return global;\r\n    }\r\n    if (typeof self !== 'undefined' && self.Math === Math) {\r\n        return self;\r\n    }\r\n    if (typeof window !== 'undefined' && window.Math === Math) {\r\n        return window;\r\n    }\r\n    // eslint-disable-next-line no-new-func\r\n    return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n    if (typeof requestAnimationFrame === 'function') {\r\n        // It's required to use a bounded function because IE sometimes throws\r\n        // an \"Invalid calling object\" error if rAF is invoked without the global\r\n        // object on the left hand side.\r\n        return requestAnimationFrame.bind(global$1);\r\n    }\r\n    return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n    var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n    /**\r\n     * Invokes the original callback function and schedules new invocation if\r\n     * the \"proxy\" was called during current request.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function resolvePending() {\r\n        if (leadingCall) {\r\n            leadingCall = false;\r\n            callback();\r\n        }\r\n        if (trailingCall) {\r\n            proxy();\r\n        }\r\n    }\r\n    /**\r\n     * Callback invoked after the specified delay. It will further postpone\r\n     * invocation of the original function delegating it to the\r\n     * requestAnimationFrame.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function timeoutCallback() {\r\n        requestAnimationFrame$1(resolvePending);\r\n    }\r\n    /**\r\n     * Schedules invocation of the original function.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function proxy() {\r\n        var timeStamp = Date.now();\r\n        if (leadingCall) {\r\n            // Reject immediately following calls.\r\n            if (timeStamp - lastCallTime < trailingTimeout) {\r\n                return;\r\n            }\r\n            // Schedule new call to be in invoked when the pending one is resolved.\r\n            // This is important for \"transitions\" which never actually start\r\n            // immediately so there is a chance that we might miss one if change\r\n            // happens amids the pending invocation.\r\n            trailingCall = true;\r\n        }\r\n        else {\r\n            leadingCall = true;\r\n            trailingCall = false;\r\n            setTimeout(timeoutCallback, delay);\r\n        }\r\n        lastCallTime = timeStamp;\r\n    }\r\n    return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserverController.\r\n     *\r\n     * @private\r\n     */\r\n    function ResizeObserverController() {\r\n        /**\r\n         * Indicates whether DOM listeners have been added.\r\n         *\r\n         * @private {boolean}\r\n         */\r\n        this.connected_ = false;\r\n        /**\r\n         * Tells that controller has subscribed for Mutation Events.\r\n         *\r\n         * @private {boolean}\r\n         */\r\n        this.mutationEventsAdded_ = false;\r\n        /**\r\n         * Keeps reference to the instance of MutationObserver.\r\n         *\r\n         * @private {MutationObserver}\r\n         */\r\n        this.mutationsObserver_ = null;\r\n        /**\r\n         * A list of connected observers.\r\n         *\r\n         * @private {Array<ResizeObserverSPI>}\r\n         */\r\n        this.observers_ = [];\r\n        this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n        this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n    }\r\n    /**\r\n     * Adds observer to observers list.\r\n     *\r\n     * @param {ResizeObserverSPI} observer - Observer to be added.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.addObserver = function (observer) {\r\n        if (!~this.observers_.indexOf(observer)) {\r\n            this.observers_.push(observer);\r\n        }\r\n        // Add listeners if they haven't been added yet.\r\n        if (!this.connected_) {\r\n            this.connect_();\r\n        }\r\n    };\r\n    /**\r\n     * Removes observer from observers list.\r\n     *\r\n     * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.removeObserver = function (observer) {\r\n        var observers = this.observers_;\r\n        var index = observers.indexOf(observer);\r\n        // Remove observer if it's present in registry.\r\n        if (~index) {\r\n            observers.splice(index, 1);\r\n        }\r\n        // Remove listeners if controller has no connected observers.\r\n        if (!observers.length && this.connected_) {\r\n            this.disconnect_();\r\n        }\r\n    };\r\n    /**\r\n     * Invokes the update of observers. It will continue running updates insofar\r\n     * it detects changes.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.refresh = function () {\r\n        var changesDetected = this.updateObservers_();\r\n        // Continue running updates if changes have been detected as there might\r\n        // be future ones caused by CSS transitions.\r\n        if (changesDetected) {\r\n            this.refresh();\r\n        }\r\n    };\r\n    /**\r\n     * Updates every observer from observers list and notifies them of queued\r\n     * entries.\r\n     *\r\n     * @private\r\n     * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n     *      dimensions of it's elements.\r\n     */\r\n    ResizeObserverController.prototype.updateObservers_ = function () {\r\n        // Collect observers that have active observations.\r\n        var activeObservers = this.observers_.filter(function (observer) {\r\n            return observer.gatherActive(), observer.hasActive();\r\n        });\r\n        // Deliver notifications in a separate cycle in order to avoid any\r\n        // collisions between observers, e.g. when multiple instances of\r\n        // ResizeObserver are tracking the same element and the callback of one\r\n        // of them changes content dimensions of the observed target. Sometimes\r\n        // this may result in notifications being blocked for the rest of observers.\r\n        activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n        return activeObservers.length > 0;\r\n    };\r\n    /**\r\n     * Initializes DOM listeners.\r\n     *\r\n     * @private\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.connect_ = function () {\r\n        // Do nothing if running in a non-browser environment or if listeners\r\n        // have been already added.\r\n        if (!isBrowser || this.connected_) {\r\n            return;\r\n        }\r\n        // Subscription to the \"Transitionend\" event is used as a workaround for\r\n        // delayed transitions. This way it's possible to capture at least the\r\n        // final state of an element.\r\n        document.addEventListener('transitionend', this.onTransitionEnd_);\r\n        window.addEventListener('resize', this.refresh);\r\n        if (mutationObserverSupported) {\r\n            this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n            this.mutationsObserver_.observe(document, {\r\n                attributes: true,\r\n                childList: true,\r\n                characterData: true,\r\n                subtree: true\r\n            });\r\n        }\r\n        else {\r\n            document.addEventListener('DOMSubtreeModified', this.refresh);\r\n            this.mutationEventsAdded_ = true;\r\n        }\r\n        this.connected_ = true;\r\n    };\r\n    /**\r\n     * Removes DOM listeners.\r\n     *\r\n     * @private\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.disconnect_ = function () {\r\n        // Do nothing if running in a non-browser environment or if listeners\r\n        // have been already removed.\r\n        if (!isBrowser || !this.connected_) {\r\n            return;\r\n        }\r\n        document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n        window.removeEventListener('resize', this.refresh);\r\n        if (this.mutationsObserver_) {\r\n            this.mutationsObserver_.disconnect();\r\n        }\r\n        if (this.mutationEventsAdded_) {\r\n            document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n        }\r\n        this.mutationsObserver_ = null;\r\n        this.mutationEventsAdded_ = false;\r\n        this.connected_ = false;\r\n    };\r\n    /**\r\n     * \"Transitionend\" event handler.\r\n     *\r\n     * @private\r\n     * @param {TransitionEvent} event\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n        var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n        // Detect whether transition may affect dimensions of an element.\r\n        var isReflowProperty = transitionKeys.some(function (key) {\r\n            return !!~propertyName.indexOf(key);\r\n        });\r\n        if (isReflowProperty) {\r\n            this.refresh();\r\n        }\r\n    };\r\n    /**\r\n     * Returns instance of the ResizeObserverController.\r\n     *\r\n     * @returns {ResizeObserverController}\r\n     */\r\n    ResizeObserverController.getInstance = function () {\r\n        if (!this.instance_) {\r\n            this.instance_ = new ResizeObserverController();\r\n        }\r\n        return this.instance_;\r\n    };\r\n    /**\r\n     * Holds reference to the controller's instance.\r\n     *\r\n     * @private {ResizeObserverController}\r\n     */\r\n    ResizeObserverController.instance_ = null;\r\n    return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n    for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n        var key = _a[_i];\r\n        Object.defineProperty(target, key, {\r\n            value: props[key],\r\n            enumerable: false,\r\n            writable: false,\r\n            configurable: true\r\n        });\r\n    }\r\n    return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n    // Assume that the element is an instance of Node, which means that it\r\n    // has the \"ownerDocument\" property from which we can retrieve a\r\n    // corresponding global object.\r\n    var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n    // Return the local global object if it's not possible extract one from\r\n    // provided element.\r\n    return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n    return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n    var positions = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        positions[_i - 1] = arguments[_i];\r\n    }\r\n    return positions.reduce(function (size, position) {\r\n        var value = styles['border-' + position + '-width'];\r\n        return size + toFloat(value);\r\n    }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n    var positions = ['top', 'right', 'bottom', 'left'];\r\n    var paddings = {};\r\n    for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n        var position = positions_1[_i];\r\n        var value = styles['padding-' + position];\r\n        paddings[position] = toFloat(value);\r\n    }\r\n    return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n *      to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n    var bbox = target.getBBox();\r\n    return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n    // Client width & height properties can't be\r\n    // used exclusively as they provide rounded values.\r\n    var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n    // By this condition we can catch all non-replaced inline, hidden and\r\n    // detached elements. Though elements with width & height properties less\r\n    // than 0.5 will be discarded as well.\r\n    //\r\n    // Without it we would need to implement separate methods for each of\r\n    // those cases and it's not possible to perform a precise and performance\r\n    // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n    // gives wrong results for elements with width & height less than 0.5.\r\n    if (!clientWidth && !clientHeight) {\r\n        return emptyRect;\r\n    }\r\n    var styles = getWindowOf(target).getComputedStyle(target);\r\n    var paddings = getPaddings(styles);\r\n    var horizPad = paddings.left + paddings.right;\r\n    var vertPad = paddings.top + paddings.bottom;\r\n    // Computed styles of width & height are being used because they are the\r\n    // only dimensions available to JS that contain non-rounded values. It could\r\n    // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n    // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n    var width = toFloat(styles.width), height = toFloat(styles.height);\r\n    // Width & height include paddings and borders when the 'border-box' box\r\n    // model is applied (except for IE).\r\n    if (styles.boxSizing === 'border-box') {\r\n        // Following conditions are required to handle Internet Explorer which\r\n        // doesn't include paddings and borders to computed CSS dimensions.\r\n        //\r\n        // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n        // properties then it's either IE, and thus we don't need to subtract\r\n        // anything, or an element merely doesn't have paddings/borders styles.\r\n        if (Math.round(width + horizPad) !== clientWidth) {\r\n            width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n        }\r\n        if (Math.round(height + vertPad) !== clientHeight) {\r\n            height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n        }\r\n    }\r\n    // Following steps can't be applied to the document's root element as its\r\n    // client[Width/Height] properties represent viewport area of the window.\r\n    // Besides, it's as well not necessary as the <html> itself neither has\r\n    // rendered scroll bars nor it can be clipped.\r\n    if (!isDocumentElement(target)) {\r\n        // In some browsers (only in Firefox, actually) CSS width & height\r\n        // include scroll bars size which can be removed at this step as scroll\r\n        // bars are the only difference between rounded dimensions + paddings\r\n        // and \"client\" properties, though that is not always true in Chrome.\r\n        var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n        var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n        // Chrome has a rather weird rounding of \"client\" properties.\r\n        // E.g. for an element with content width of 314.2px it sometimes gives\r\n        // the client width of 315px and for the width of 314.7px it may give\r\n        // 314px. And it doesn't happen all the time. So just ignore this delta\r\n        // as a non-relevant.\r\n        if (Math.abs(vertScrollbar) !== 1) {\r\n            width -= vertScrollbar;\r\n        }\r\n        if (Math.abs(horizScrollbar) !== 1) {\r\n            height -= horizScrollbar;\r\n        }\r\n    }\r\n    return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n    // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n    // interface.\r\n    if (typeof SVGGraphicsElement !== 'undefined') {\r\n        return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n    }\r\n    // If it's so, then check that element is at least an instance of the\r\n    // SVGElement and that it has the \"getBBox\" method.\r\n    // eslint-disable-next-line no-extra-parens\r\n    return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n        typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element (<html>).\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n    return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n    if (!isBrowser) {\r\n        return emptyRect;\r\n    }\r\n    if (isSVGGraphicsElement(target)) {\r\n        return getSVGContentRect(target);\r\n    }\r\n    return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n    var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n    // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n    var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n    var rect = Object.create(Constr.prototype);\r\n    // Rectangle's properties are not writable and non-enumerable.\r\n    defineConfigurable(rect, {\r\n        x: x, y: y, width: width, height: height,\r\n        top: y,\r\n        right: x + width,\r\n        bottom: height + y,\r\n        left: x\r\n    });\r\n    return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n    return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n    /**\r\n     * Creates an instance of ResizeObservation.\r\n     *\r\n     * @param {Element} target - Element to be observed.\r\n     */\r\n    function ResizeObservation(target) {\r\n        /**\r\n         * Broadcasted width of content rectangle.\r\n         *\r\n         * @type {number}\r\n         */\r\n        this.broadcastWidth = 0;\r\n        /**\r\n         * Broadcasted height of content rectangle.\r\n         *\r\n         * @type {number}\r\n         */\r\n        this.broadcastHeight = 0;\r\n        /**\r\n         * Reference to the last observed content rectangle.\r\n         *\r\n         * @private {DOMRectInit}\r\n         */\r\n        this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n        this.target = target;\r\n    }\r\n    /**\r\n     * Updates content rectangle and tells whether it's width or height properties\r\n     * have changed since the last broadcast.\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    ResizeObservation.prototype.isActive = function () {\r\n        var rect = getContentRect(this.target);\r\n        this.contentRect_ = rect;\r\n        return (rect.width !== this.broadcastWidth ||\r\n            rect.height !== this.broadcastHeight);\r\n    };\r\n    /**\r\n     * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n     * from the corresponding properties of the last observed content rectangle.\r\n     *\r\n     * @returns {DOMRectInit} Last observed content rectangle.\r\n     */\r\n    ResizeObservation.prototype.broadcastRect = function () {\r\n        var rect = this.contentRect_;\r\n        this.broadcastWidth = rect.width;\r\n        this.broadcastHeight = rect.height;\r\n        return rect;\r\n    };\r\n    return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n    /**\r\n     * Creates an instance of ResizeObserverEntry.\r\n     *\r\n     * @param {Element} target - Element that is being observed.\r\n     * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n     */\r\n    function ResizeObserverEntry(target, rectInit) {\r\n        var contentRect = createReadOnlyRect(rectInit);\r\n        // According to the specification following properties are not writable\r\n        // and are also not enumerable in the native implementation.\r\n        //\r\n        // Property accessors are not being used as they'd require to define a\r\n        // private WeakMap storage which may cause memory leaks in browsers that\r\n        // don't support this type of collections.\r\n        defineConfigurable(this, { target: target, contentRect: contentRect });\r\n    }\r\n    return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserver.\r\n     *\r\n     * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n     *      when one of the observed elements changes it's content dimensions.\r\n     * @param {ResizeObserverController} controller - Controller instance which\r\n     *      is responsible for the updates of observer.\r\n     * @param {ResizeObserver} callbackCtx - Reference to the public\r\n     *      ResizeObserver instance which will be passed to callback function.\r\n     */\r\n    function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n        /**\r\n         * Collection of resize observations that have detected changes in dimensions\r\n         * of elements.\r\n         *\r\n         * @private {Array<ResizeObservation>}\r\n         */\r\n        this.activeObservations_ = [];\r\n        /**\r\n         * Registry of the ResizeObservation instances.\r\n         *\r\n         * @private {Map<Element, ResizeObservation>}\r\n         */\r\n        this.observations_ = new MapShim();\r\n        if (typeof callback !== 'function') {\r\n            throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n        }\r\n        this.callback_ = callback;\r\n        this.controller_ = controller;\r\n        this.callbackCtx_ = callbackCtx;\r\n    }\r\n    /**\r\n     * Starts observing provided element.\r\n     *\r\n     * @param {Element} target - Element to be observed.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.observe = function (target) {\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        // Do nothing if current environment doesn't have the Element interface.\r\n        if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n            return;\r\n        }\r\n        if (!(target instanceof getWindowOf(target).Element)) {\r\n            throw new TypeError('parameter 1 is not of type \"Element\".');\r\n        }\r\n        var observations = this.observations_;\r\n        // Do nothing if element is already being observed.\r\n        if (observations.has(target)) {\r\n            return;\r\n        }\r\n        observations.set(target, new ResizeObservation(target));\r\n        this.controller_.addObserver(this);\r\n        // Force the update of observations.\r\n        this.controller_.refresh();\r\n    };\r\n    /**\r\n     * Stops observing provided element.\r\n     *\r\n     * @param {Element} target - Element to stop observing.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.unobserve = function (target) {\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        // Do nothing if current environment doesn't have the Element interface.\r\n        if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n            return;\r\n        }\r\n        if (!(target instanceof getWindowOf(target).Element)) {\r\n            throw new TypeError('parameter 1 is not of type \"Element\".');\r\n        }\r\n        var observations = this.observations_;\r\n        // Do nothing if element is not being observed.\r\n        if (!observations.has(target)) {\r\n            return;\r\n        }\r\n        observations.delete(target);\r\n        if (!observations.size) {\r\n            this.controller_.removeObserver(this);\r\n        }\r\n    };\r\n    /**\r\n     * Stops observing all elements.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.disconnect = function () {\r\n        this.clearActive();\r\n        this.observations_.clear();\r\n        this.controller_.removeObserver(this);\r\n    };\r\n    /**\r\n     * Collects observation instances the associated element of which has changed\r\n     * it's content rectangle.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.gatherActive = function () {\r\n        var _this = this;\r\n        this.clearActive();\r\n        this.observations_.forEach(function (observation) {\r\n            if (observation.isActive()) {\r\n                _this.activeObservations_.push(observation);\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Invokes initial callback function with a list of ResizeObserverEntry\r\n     * instances collected from active resize observations.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.broadcastActive = function () {\r\n        // Do nothing if observer doesn't have active observations.\r\n        if (!this.hasActive()) {\r\n            return;\r\n        }\r\n        var ctx = this.callbackCtx_;\r\n        // Create ResizeObserverEntry instance for every active observation.\r\n        var entries = this.activeObservations_.map(function (observation) {\r\n            return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n        });\r\n        this.callback_.call(ctx, entries, ctx);\r\n        this.clearActive();\r\n    };\r\n    /**\r\n     * Clears the collection of active observations.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.clearActive = function () {\r\n        this.activeObservations_.splice(0);\r\n    };\r\n    /**\r\n     * Tells whether observer has active observations.\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    ResizeObserverSPI.prototype.hasActive = function () {\r\n        return this.activeObservations_.length > 0;\r\n    };\r\n    return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserver.\r\n     *\r\n     * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n     *      dimensions of the observed elements change.\r\n     */\r\n    function ResizeObserver(callback) {\r\n        if (!(this instanceof ResizeObserver)) {\r\n            throw new TypeError('Cannot call a class as a function.');\r\n        }\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        var controller = ResizeObserverController.getInstance();\r\n        var observer = new ResizeObserverSPI(callback, controller, this);\r\n        observers.set(this, observer);\r\n    }\r\n    return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n    'observe',\r\n    'unobserve',\r\n    'disconnect'\r\n].forEach(function (method) {\r\n    ResizeObserver.prototype[method] = function () {\r\n        var _a;\r\n        return (_a = observers.get(this))[method].apply(_a, arguments);\r\n    };\r\n});\n\nvar index = (function () {\r\n    // Export existing implementation if available.\r\n    if (typeof global$1.ResizeObserver !== 'undefined') {\r\n        return global$1.ResizeObserver;\r\n    }\r\n    return ResizeObserver;\r\n})();\n\nexport default index;\n","export const en = {\r\n    TodayShowstopper: \"TODAY'S SHOWSTOPPER\",\r\n    'Your searches': 'Your searches',\r\n    Trending: 'Trending',\r\n    'Possible item matches': 'Possible item matches',\r\n    'Top suggestions': 'Top suggestions',\r\n    Categories: 'Categories',\r\n    Brands: 'Brands',\r\n    'No results': 'No results',\r\n    in: 'in ',\r\n    'See all possible matches': 'See all possible matches',\r\n};\r\nexport const fr = {\r\n    TodayShowstopper: \"TODAY'S SHOWSTOPPER\",\r\n    'Your searches': 'Vos recherches',\r\n    Trending: 'Tendance',\r\n    'Possible item matches': \"Correspondances d'articles possibles\",\r\n    'Top suggestions': 'Meilleures suggestions',\r\n    Categories: 'Catégories',\r\n    Brands: 'Marques',\r\n    'No results': 'Aucun résultat',\r\n    in: 'à ',\r\n    'See all possible matches': 'Voir tous les articles',\r\n};\r\n\r\n// i18n.addResourceBundle('en', 'algolia_autocomplete', en, true, true);\r\n// i18n.addResourceBundle('fr', 'algolia_autocomplete', fr, true, true);\r\n","import React from 'react';\r\ninterface KeyhandlerProps {\r\n    handler: any;\r\n}\r\n\r\nexport function KeyHandler({ handler }: KeyhandlerProps) {\r\n    React.useEffect(() => {\r\n        // run on mount\r\n        document.addEventListener('keydown', handler);\r\n        // this is run when unmounted\r\n        return () => {\r\n            document.removeEventListener('keydown', handler);\r\n        };\r\n    }, []);\r\n\r\n    return <></>;\r\n}\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\ninterface BrandProps {\r\n    brands: any;\r\n    autocomplete: any;\r\n    language: string;\r\n    state: any;\r\n}\r\nexport function Brands({ brands, autocomplete, language, state }: BrandProps) {\r\n    const { source } = brands || '';\r\n    const { t } = useTranslation('algolia_autocomplete');\r\n    const title = t('Brands');\r\n    const noresults = t('No results');\r\n    return (\r\n        <>\r\n            {brands && brands.items && (\r\n                <div className=\"ac__section__wrap\">\r\n                    <h5 className=\"ac__section__title search-title\">{title}</h5>\r\n                    <ul className=\"ac__section__list\" role=\"listbox\" aria-labelledby=\"autocomplete-1-label\">\r\n                        {brands.items.map((item: any, index) => {\r\n                            let nameSplited: string;\r\n                            // check for language\r\n                            if (language == 'en') {\r\n                                nameSplited = item.valueName.en.split(':');\r\n                            } else {\r\n                                nameSplited = item.valueName.fr.split(':');\r\n                            }\r\n                            const link = '/pages/products/brand/' + item.slugPath + '?keyword=' + state.query;\r\n                            return (\r\n                                <li\r\n                                    key={index}\r\n                                    className=\"ac__hit--item\"\r\n                                    value={item.objectID}\r\n                                    {...autocomplete.getItemProps({ item, source })}\r\n                                >\r\n                                    <a href={link} onClick={(e) => e.preventDefault()}>\r\n                                        {nameSplited[0]}\r\n                                    </a>\r\n                                </li>\r\n                            );\r\n                        })}\r\n                        {brands && brands.items.length == 0 && (\r\n                            <li className=\"ac__hit--item padding_small\">\r\n                                <div className=\"ac__hit--no-results\"> {noresults}</div>\r\n                            </li>\r\n                        )}\r\n                    </ul>\r\n                </div>\r\n            )}\r\n        </>\r\n    );\r\n}\r\n","import * as React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { getCurrentColumn, getIndexBySource } from './utils';\r\ninterface CategoryProps {\r\n    suggestions: any;\r\n    autocomplete: any;\r\n    categories: any;\r\n    state: any;\r\n}\r\nexport function Categories({ suggestions, autocomplete, categories, state }: CategoryProps) {\r\n    const { source } = categories || '';\r\n    const { t } = useTranslation('algolia_autocomplete');\r\n    const title = t('Categories');\r\n    const noresults = t('No results');\r\n    const union = t('in');\r\n    const query = suggestions && suggestions.items && suggestions.items[0] ? suggestions.items[0].query : state.query;\r\n    const globalQuery = state.query;\r\n    const innerHTML =\r\n        suggestions && suggestions.items && suggestions.items[0]\r\n            ? suggestions.items[0]._highlightResult.query.value\r\n            : '';\r\n    return (\r\n        <>\r\n            {categories && (\r\n                <div className=\"ac__section__wrap\">\r\n                    <h5 className=\"ac__section__title search-title\">{title}</h5>\r\n                    <ul className=\"ac__section__list\" role=\"listbox\" aria-labelledby=\"autocomplete-1-label\">\r\n                        {categories.items.map((item: any, index) => {\r\n                            const link = '/pages/products/category/' + item.slugPath + '?keyword=' + query;\r\n                            // string build is the text for categories if there are no suggestions remove the word in\r\n                            const stringBuild = union + ' ' + item.labels;\r\n                            item.index = index;\r\n                            return (\r\n                                <li\r\n                                    {...autocomplete.getItemProps({ item, source })}\r\n                                    key={index}\r\n                                    value={[query, item.fullPath[index]]}\r\n                                    className=\"ac__hit--item\"\r\n                                >\r\n                                    <a href={link} onClick={(e) => e.preventDefault()} className=\"ac__hit--category\">\r\n                                        <div>\r\n                                            {innerHTML === '' && <mark>{globalQuery}</mark>}\r\n                                            {innerHTML != '' && (\r\n                                                <mark dangerouslySetInnerHTML={{ __html: innerHTML }} />\r\n                                            )}\r\n                                            <span className=\"curisve-text\"> {stringBuild}</span>\r\n                                        </div>\r\n                                    </a>\r\n                                </li>\r\n                            );\r\n                        })}\r\n                        {categories && categories.items.length == 0 && (\r\n                            <li className=\"ac__hit--item\">\r\n                                <div className=\"ac__hit--no-results\"> {noresults}</div>\r\n                            </li>\r\n                        )}\r\n                    </ul>\r\n                </div>\r\n            )}\r\n        </>\r\n    );\r\n}\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\ninterface BrandProps {\r\n    brands: any;\r\n    autocomplete: any;\r\n    title: string;\r\n    state: any;\r\n}\r\nexport function FeaturedBrands({ brands, autocomplete, title, state }: BrandProps) {\r\n    const { source } = brands || '';\r\n    const { t } = useTranslation('algolia_autocomplete');\r\n    const noresults = t('No results');\r\n    return (\r\n        <>\r\n            {brands && brands.items && (\r\n                <div className=\"ac__section__wrap\">\r\n                    <h5 className=\"ac__section__title search-title\">{title}</h5>\r\n                    <ul className=\"ac__section__list\" role=\"listbox\" aria-labelledby=\"autocomplete-1-label\">\r\n                        {brands.items.map((item: any, index) => {\r\n                            return (\r\n                                <li\r\n                                    key={index}\r\n                                    className=\"ac__hit--item\"\r\n                                    {...autocomplete.getItemProps({ item, source })}\r\n                                >\r\n                                    <a\r\n                                        href={item.LinkWithoutDomain}\r\n                                        onClick={(e) => {\r\n                                            e.preventDefault();\r\n                                        }}\r\n                                    >\r\n                                        {item.LinkText}\r\n                                    </a>\r\n                                </li>\r\n                            );\r\n                        })}\r\n                    </ul>\r\n                </div>\r\n            )}\r\n            {brands && brands.items.length == 0 && (\r\n                <li className=\"ac__hit--item\">\r\n                    <div className=\"ac__hit--no-results\"> {noresults}</div>\r\n                </li>\r\n            )}\r\n        </>\r\n    );\r\n}\r\n","import React, { FC, useState, useEffect, useLayoutEffect } from 'react';\r\n\r\ninterface ILoadingImg {\r\n    url: string;\r\n    alt: string;\r\n    classOk?: string;\r\n    classError?: string;\r\n    classLoading?: string;\r\n}\r\n\r\nconst LoadingImg: FC<ILoadingImg> = ({ url, alt, classOk, classError, classLoading }) => {\r\n    const [isLoad, setIsLoad] = useState<boolean>(false);\r\n    const [error, setError] = useState<string | undefined>(undefined);\r\n\r\n    useLayoutEffect(() => {\r\n        const image = new Image();\r\n        image.onerror = () => {\r\n            // console.log(`error ${url}`);\r\n            setError(`error loading ${url}`);\r\n            setIsLoad(false);\r\n        };\r\n        image.onload = function (e) {\r\n            setIsLoad(true);\r\n            //console.log('data ' + e.src);\r\n            /*\r\n                //and you can get the image data\r\n                    imgData = {\r\n                                src: this.src,\r\n                                width:this.width,\r\n                                height:this.height\r\n                            }\r\n            */\r\n        };\r\n        image.src = url;\r\n\r\n        return () => setIsLoad(false);\r\n    }, [url]);\r\n\r\n    return (\r\n        <>\r\n            {/* {error && (\r\n                <div className={classError + ' img-responsive'} style={{ width: '95px', height: '90.5px' }}></div>\r\n            )} */}\r\n            {!isLoad && <div className={classLoading} style={{ width: '95px', height: '90.5px' }}></div>}\r\n            {isLoad && (\r\n                <img\r\n                    src={url}\r\n                    className={classOk + ' img-responsive'}\r\n                    alt={alt}\r\n                    style={{ width: '95px', height: '90.5px' }}\r\n                />\r\n            )}\r\n        </>\r\n    );\r\n};\r\n\r\nexport default LoadingImg;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { useEasyPay } from '../shopping_bag/hooks/useEasyPay';\r\n\r\nimport LoadingImg from './image.component';\r\ninterface MatchesProps {\r\n    products: any;\r\n    autocomplete: any;\r\n    state: any;\r\n    language: any;\r\n    insightsClient: any;\r\n}\r\nexport const deriveVariantEdpAndPath = (item) => {\r\n    let variantImagePath = null;\r\n    let variantEdpNo = null;\r\n    if (\r\n        item._highlightResult &&\r\n        item._highlightResult?.styleVariants &&\r\n        item._highlightResult?.styleVariants.length > 0\r\n    ) {\r\n        let styleVariant = item._highlightResult.styleVariants.find(\r\n            (x) => x.displayName.en.matchLevel == 'full' || x.displayName.fr.matchLevel == 'full',\r\n        );\r\n        if (styleVariant) {\r\n            const edp = item.edps.find(\r\n                (x) => x.styleCode === styleVariant.code.value.replace('<mark>', '').replace('</mark>', ''),\r\n            );\r\n            if (edp && edp.imageUrl && edp.imageUrl.trim() !== '') {\r\n                variantEdpNo = edp.edpNo;\r\n                variantImagePath = edp.imageUrl;\r\n            }\r\n        } else {\r\n            styleVariant = item._highlightResult.styleVariants.find(\r\n                (x) => x.displayName.en.matchLevel == 'partial' || x.displayName.fr.matchLevel == 'partial',\r\n            );\r\n            if (styleVariant) {\r\n                const edp = item.edps.find(\r\n                    (x) => x.styleCode == styleVariant.code.value.replace('<mark>', '').replace('</mark>', ''),\r\n                );\r\n                if (edp && edp.imageUrl && edp.imageUrl.trim() !== '') {\r\n                    variantEdpNo = edp.edpNo;\r\n                    variantImagePath = edp.imageUrl;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return [variantImagePath, variantEdpNo];\r\n};\r\nexport function Matches({ products, autocomplete, state, language, insightsClient }: MatchesProps) {\r\n    const { source } = products || '';\r\n    const { t } = useTranslation('algolia_autocomplete');\r\n    const today = new Date();\r\n\r\n    // obtaining the date stamp of the request\r\n    const datenum: number = parseInt(\r\n        today.getUTCFullYear() +\r\n            ('0' + (today.getUTCMonth() + 1)).slice(-2) +\r\n            ('0' + today.getUTCDate()).slice(-2) +\r\n            ('0' + today.getUTCHours()).slice(-2) +\r\n            ('0' + today.getUTCMinutes()).slice(-2) +\r\n            ('0' + today.getUTCSeconds()).slice(-2),\r\n    );\r\n    const title = state.context.title;\r\n    const seeAll = t('See all possible matches');\r\n\r\n    const getVariantImageAndEdp = (item) => {\r\n        if (!item.objectID) {\r\n            return [null, null];\r\n        }\r\n        const [variantImagePath, variantEdpNo] = deriveVariantEdpAndPath(item);\r\n\r\n        if (variantEdpNo && variantImagePath) {\r\n            //send style variant we found from search above\r\n            // if (item.objectID == '630939') {\r\n            //     console.log(`!${variantEdpNo} https://item.tscimg.ca/TSC/${variantImagePath}?impolicy=L`);\r\n            // } else {\r\n            //     console.log(item.objectID);\r\n            // }\r\n            return [variantEdpNo, `https://item.tscimg.ca/TSC/${variantImagePath}?impolicy=L`];\r\n        } else {\r\n            // if (item.objectID == '630939') {\r\n            //     console.log(`${item.edps[0].edpNo} https://item.tscimg.ca/TSC/${item.defaultImagePath}?impolicy=L`);\r\n            // } else {\r\n            //     console.log(item.objectID);\r\n            // }\r\n            //send default image and default edp\r\n            return [item.edps[0].edpNo, `https://item.tscimg.ca/TSC/${item.defaultImagePath}?impolicy=L`];\r\n        }\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <h5 className=\"search-title\">{title}</h5>\r\n            <ul className=\"ac__matches__list\" role=\"listbox\" aria-labelledby=\"autocomplete-1-label\">\r\n                {products &&\r\n                    products.items &&\r\n                    products.items.map((item: any, index) => {\r\n                        item.index = index;\r\n\r\n                        const pricediff = item.priceIsMin !== item.priceWasMin;\r\n                        const isTs = datenum > item.tsFrom && datenum < item.tsTo;\r\n                        let badge, name, displayWasPrice, displayIsPrice;\r\n                        let crossPriceNewLine = false;\r\n                        const [imageEdp, imagePath] = getVariantImageAndEdp(item);\r\n                        const link = `${item.productLinkWithoutDomain.en}${imageEdp ? '&edp=' + imageEdp : ''} `;\r\n                        // const link2 = `/pages/productdetails?nav=R:${item.objectID}${\r\n                        //     imageEdp ? `?&edp=${imageEdp}` : ''\r\n                        // }`;\r\n                        // check for EN OR FR\r\n                        if (language === 'fr') {\r\n                            // FRENCH\r\n                            if (item.priceLabel && item.priceLabel?.lvl1.length > 0 && item.priceLabel?.lvl1[0]?.fr) {\r\n                                badge = item.priceLabel?.lvl1[0]?.fr\r\n                                    ? item.priceLabel?.lvl1[0]?.fr.split(':')[0].toUpperCase()\r\n                                    : item.priceLabel?.lvl1?.fr[0].split(':')[0].toUpperCase();\r\n                            }\r\n                            if (typeof badge == 'undefined') {\r\n                                badge = '';\r\n                            }\r\n                            displayWasPrice = item.wasPriceRange && item.wasPriceRange.fr;\r\n                            displayIsPrice = item.isPriceRange && item.isPriceRange.fr;\r\n                            name = item._highlightResult ? item._highlightResult?.name?.fr?.value : '';\r\n                        } else {\r\n                            // ENGLISH\r\n                            if (item.priceLabel && item.priceLabel?.lvl1.length > 0 && item.priceLabel?.lvl1[0]?.fr) {\r\n                                badge = item.priceLabel?.lvl1[0]?.en\r\n                                    ? item.priceLabel?.lvl1[0]?.en.split(':')[0].toUpperCase()\r\n                                    : item.priceLabel?.lvl1?.en[0].split(':')[0].toUpperCase();\r\n                            }\r\n                            if (typeof badge == 'undefined') {\r\n                                badge = '';\r\n                            }\r\n                            displayWasPrice = item.wasPriceRange && item.wasPriceRange.en;\r\n                            displayIsPrice = item.isPriceRange && item.isPriceRange.en;\r\n                            name = item._highlightResult ? item._highlightResult?.name?.en?.value : '';\r\n                        }\r\n                        if (displayWasPrice) {\r\n                            if (displayWasPrice.indexOf('-') > -1) {\r\n                                //contains hyphen so we will need to move crossprice to sencond line\r\n                                crossPriceNewLine = true;\r\n                            }\r\n                        }\r\n                        if (isTs) {\r\n                            badge = t('TodayShowstopper');\r\n                        }\r\n                        return (\r\n                            <li\r\n                                key={index}\r\n                                // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\r\n                                tabIndex=\"0\"\r\n                                className=\"ac__matches--item\"\r\n                                {...autocomplete.getItemProps({ item, source })}\r\n                            >\r\n                                {!(item.Linkall && item.Linkall != '') && (\r\n                                    <a\r\n                                        href={link}\r\n                                        onClick={(e) => e.preventDefault()}\r\n                                        className=\"ac__matches--link ac-productlist\"\r\n                                    >\r\n                                        <div className=\"ac-productlist__row\">\r\n                                            <div className=\"ac-productlist__left\">\r\n                                                {/* <img\r\n                                                    className=\"img-responsive\"\r\n                                                    key={index}\r\n                                                    alt={item.name.en}\r\n                                                    src={\r\n                                                        'https://item.tscimg.ca/TSC/' +\r\n                                                        item.defaultImagePath +\r\n                                                        '?impolicy=L'\r\n                                                    }\r\n                                                ></img> */}\r\n                                                <LoadingImg\r\n                                                    key={index}\r\n                                                    classOk=\"ac__productlist--image-ok\"\r\n                                                    classLoading=\"ac__productlist--image-missing\"\r\n                                                    classError=\"ac__productlist--image-error\"\r\n                                                    alt={item.name.en}\r\n                                                    url={imagePath}\r\n                                                />\r\n                                            </div>\r\n                                            <div className=\"ac-productlist__right\">\r\n                                                {badge && <div className=\"ac-productlist__badge\">{badge}</div>}\r\n                                                <div\r\n                                                    className=\"ac-productlist__description\"\r\n                                                    dangerouslySetInnerHTML={{\r\n                                                        __html: name,\r\n                                                    }}\r\n                                                />\r\n                                                <div className=\"ac-productlist__item-number2\">{item.altItemNo}</div>\r\n                                                <div className=\"ac-productlist__price-wrap\">\r\n                                                    <div className=\"ac-productlist__price\">\r\n                                                        {pricediff && (\r\n                                                            <>\r\n                                                                <span className=\"ac-productlist__price-text\">\r\n                                                                    {displayIsPrice}\r\n                                                                </span>\r\n                                                                <span\r\n                                                                    className={\r\n                                                                        crossPriceNewLine\r\n                                                                            ? 'ac-productlist__cross-text nextLine'\r\n                                                                            : 'ac-productlist__cross-text'\r\n                                                                    }\r\n                                                                >\r\n                                                                    {displayWasPrice}\r\n                                                                </span>\r\n                                                            </>\r\n                                                        )}\r\n                                                        {!pricediff && (\r\n                                                            <span className=\"ac-productlist__price-text\">\r\n                                                                {displayIsPrice}\r\n                                                            </span>\r\n                                                        )}\r\n                                                    </div>\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                    </a>\r\n                                )}\r\n                                {item.Linkall && item.Linkall != '' && (\r\n                                    <a\r\n                                        href={encodeURIComponent(item.Linkall)}\r\n                                        className=\"ac__matches--link ac__matches--all-link\"\r\n                                    >\r\n                                        <div style={{ textAlign: 'right' }}>{seeAll}</div>\r\n                                    </a>\r\n                                )}\r\n                            </li>\r\n                        );\r\n                    })}\r\n            </ul>\r\n        </>\r\n    );\r\n}\r\n","import React from 'react';\r\ninterface YourSearchesProps {\r\n    collections: any;\r\n    autocomplete: any;\r\n    title: string;\r\n}\r\nexport function PopularCollections({ collections, autocomplete, title }: YourSearchesProps) {\r\n    const { source } = collections || '';\r\n\r\n    return (\r\n        <>\r\n            {collections && collections.items && collections.items.length > 0 && (\r\n                <div className=\"ac__section__wrap\">\r\n                    <h5 className=\"search-title\">{title}</h5>\r\n                    <ul className=\"ac__section__collection\" role=\"listbox\" aria-labelledby=\"autocomplete-1-label\">\r\n                        {collections.items.map((item: any, index) => {\r\n                            return (\r\n                                <li key={index} className=\"aa-Item\" {...autocomplete.getItemProps({ item, source })}>\r\n                                    <a href={item.NavigateUrl} className=\"center ac__collection--cta\">\r\n                                        <picture>\r\n                                            <source\r\n                                                media=\"(min-width:768px)\"\r\n                                                width=\"\"\r\n                                                height=\"\"\r\n                                                srcSet={\r\n                                                    'https://src.tscimg.ca/Content/en_CA' +\r\n                                                    item?.Picture?.MediumImage?.Url\r\n                                                }\r\n                                            />\r\n                                            <source\r\n                                                media=\"(min-width:0px)\"\r\n                                                srcSet={\r\n                                                    'https://src.tscimg.ca/Content/en_CA' +\r\n                                                    item?.Picture?.SmallImage?.Url\r\n                                                }\r\n                                            />\r\n                                            <img\r\n                                                src={\r\n                                                    'https://src.tscimg.ca/Content/en_CA' +\r\n                                                    item?.Picture?.SmallImage?.Url\r\n                                                }\r\n                                                alt={item?.Picture?.ImageAltText}\r\n                                                className=\"aa__content-image\"\r\n                                            ></img>\r\n                                        </picture>\r\n                                    </a>\r\n\r\n                                    <a\r\n                                        href={item.NavigateUrl}\r\n                                        className=\"item-description center ac__collection--title\"\r\n                                    >\r\n                                        {item.Title}\r\n                                    </a>\r\n                                    <a href={item.NavigateUrl} className=\"center ac__collection--cta\">\r\n                                        {item.CtaText}\r\n                                    </a>\r\n                                </li>\r\n                            );\r\n                        })}\r\n                    </ul>\r\n                </div>\r\n            )}\r\n        </>\r\n    );\r\n}\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\ninterface SuggestionsProps {\r\n    suggestions: any;\r\n    autocomplete: any;\r\n    insightsClient: any;\r\n    state: any;\r\n}\r\nexport function TopSuggestions({ suggestions, autocomplete, insightsClient, state }: SuggestionsProps) {\r\n    const { source } = suggestions || '';\r\n    const { t } = useTranslation('algolia_autocomplete');\r\n    const title = t('Top suggestions');\r\n    const noResultStr = t('No results');\r\n\r\n    return (\r\n        <>\r\n            {suggestions && suggestions.items && (\r\n                <div className=\"ac__section__wrap\">\r\n                    <h5 className=\"ac__section__title search-title\">{title}</h5>\r\n                    <ul className=\"ac__section__list\" role=\"listbox\" aria-labelledby=\"autocomplete-1-label\">\r\n                        {suggestions.items.map((item: any, index) => {\r\n                            item.index = index;\r\n                            const link = '/pages/products?keyword=' + item.objectID;\r\n                            return (\r\n                                <li\r\n                                    className=\"ac__hit--item\"\r\n                                    {...autocomplete.getItemProps({ item, source })}\r\n                                    key={item.objectID}\r\n                                >\r\n                                    <a href={link} onClick={(e) => e.preventDefault()}>\r\n                                        <mark dangerouslySetInnerHTML={{ __html: item._highlightResult.query.value }} />\r\n                                    </a>\r\n                                </li>\r\n                            );\r\n                        })}\r\n                        {suggestions && suggestions.items.length == 0 && (\r\n                            <li className=\"ac__hit--item\">\r\n                                <div className=\"ac__hit--no-results\"> {noResultStr}</div>\r\n                            </li>\r\n                        )}\r\n                    </ul>\r\n                </div>\r\n            )}\r\n        </>\r\n    );\r\n}\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\ninterface TrendingProps {\r\n    suggestions: any;\r\n    autocomplete: any;\r\n    insightsClient: any;\r\n}\r\nexport function Trending({ suggestions, autocomplete, insightsClient }: TrendingProps) {\r\n    const { source } = suggestions || '';\r\n    const { t } = useTranslation('algolia_autocomplete');\r\n    const title = t('Trending');\r\n    const noresults = t('No results');\r\n    return (\r\n        <>\r\n            {suggestions && suggestions.items && (\r\n                <div className=\"ac__section__wrap\">\r\n                    <h5 className=\"ac__section__title search-title\">{title}</h5>\r\n                    <ul className=\"ac__section__list\" role=\"listbox\" aria-labelledby=\"autocomplete-1-label\">\r\n                        {suggestions.items.map((item: any, index) => {\r\n                            item.index = index;\r\n                            return (\r\n                                <li\r\n                                    className=\"ac__hit--item\"\r\n                                    {...autocomplete.getItemProps({ item, source })}\r\n                                    value={item.objectID}\r\n                                    key={index}\r\n                                >\r\n                                    <a\r\n                                        href={'/pages/products?keyword=' + encodeURIComponent(item.objectID)}\r\n                                        data-index={index}\r\n                                        onClick={(e) => {\r\n                                            e.preventDefault();\r\n                                        }}\r\n                                    >\r\n                                        {item.objectID}\r\n                                    </a>\r\n                                </li>\r\n                            );\r\n                        })}\r\n                        {suggestions && suggestions.items.length == 0 && (\r\n                            <li className=\"ac__hit--item\">\r\n                                <div className=\"ac__hit--no-results\"> {noresults}</div>\r\n                            </li>\r\n                        )}\r\n                    </ul>\r\n                </div>\r\n            )}\r\n        </>\r\n    );\r\n}\r\n","// check if query should show state one of the autocomplete design\r\nexport function isStateOne(query: string) {\r\n    if (query.length <= 1) return true;\r\n    else return false;\r\n}\r\n//compare if two hits array contain the same data\r\nexport function arraysEqual(a, b) {\r\n    if (a === b) return true;\r\n    if (a == null || b == null) return false;\r\n    if (a.length !== b.length) return false;\r\n\r\n    // If you don't care about the order of the elements inside\r\n    // the array, you should sort both arrays here.\r\n    // Please note that calling sort on an array will modify that array.\r\n    // you might want to clone your array first.\r\n\r\n    for (let i = 0; i < a.length; ++i) {\r\n        if (a[i].objectID !== b[i].objectID) return false;\r\n    }\r\n    return true;\r\n}\r\n// Return the correct fitler in the following format AND (dimensionIds:VALUE OR dimensionIds:VALUE2)\r\nexport function createFilterMultipleDimensions(str: string) {\r\n    //3002806,2037855,126638\r\n    const arrayDimensions: string[] = str.split(',');\r\n    if (arrayDimensions.length <= 0 || str == '') return '';\r\n    let filterStr = ' AND ( ';\r\n    for (const index in arrayDimensions) {\r\n        filterStr = filterStr + 'dimensionIds:' + arrayDimensions[index] + ' OR ';\r\n    }\r\n    // Remove last 3 characters(last unncesarry OR)\r\n    filterStr = filterStr.substring(0, filterStr.length - 3);\r\n    return filterStr + ' )';\r\n}\r\n// generate empty hit object\r\nexport function generateHit() {\r\n    return {\r\n        query: '',\r\n        LinkWithoutDomain: '',\r\n        dimension: '',\r\n        slugPath: '',\r\n        valueName: {},\r\n        label: '',\r\n        brand: '',\r\n        categories: [],\r\n        image: '',\r\n        name: '',\r\n        objectID: '',\r\n        url: '',\r\n        facets: '',\r\n        LinkText: '',\r\n        Linkall: '',\r\n        productLinkWithoutDomain: { en: '', fr: '' },\r\n        index: 0,\r\n        __autocomplete_queryID: '',\r\n        labels: '',\r\n    };\r\n}\r\n// get the column on which the active item is\r\nexport function getCurrentColumn(collections, activeItemId) {\r\n    let allItems = [];\r\n    let active = activeItemId;\r\n    let source;\r\n    for (const index in collections) {\r\n        allItems = allItems.concat(collections[index].items);\r\n        // obtain the source of the index item\r\n        active = active - collections[index].items.length;\r\n        if (active < 0) {\r\n            source = collections[index].source.sourceId;\r\n            break;\r\n        }\r\n    }\r\n    if (source == 'PRODUCTS') return 1;\r\n    else if (source == 'POPULARCOLLECTIONS') return 2;\r\n    else return 0;\r\n}\r\n\r\n// get the relative index of the first element on the given source\r\nexport function getIndexBySource(collections, source: string) {\r\n    let count = 0;\r\n    for (const index in collections) {\r\n        if (collections[index].source.sourceId == source) {\r\n            return count;\r\n        }\r\n        count = count + collections[index].items.length;\r\n    }\r\n    return null;\r\n}\r\n\r\n// transformationn response for facets\r\nexport function transfromResponseQuerySuggestionFacets(data: any, language: string) {\r\n    const facets = data.hits[0].products.facets.exact_matches;\r\n    const response = [];\r\n\r\n    let lvl0 = '';\r\n    if (language == 'fr') {\r\n        if (facets['category.lvl1.fr'].length > 0) {\r\n            lvl0 = facets['category.lvl1.fr'][0].value.split(':');\r\n        }\r\n    } else {\r\n        if (facets['category.lvl1.en'].length > 0) {\r\n            lvl0 = facets['category.lvl1.en'][0].value.split(':');\r\n        }\r\n    }\r\n\r\n    response.push({\r\n        query: data.hits[0].objectID,\r\n        labels: lvl0[0],\r\n        dimension: lvl0[1],\r\n        fullPath: lvl0[1],\r\n    });\r\n    // building lvl 1\r\n    let idsToRemove: string[];\r\n    let lastID: string;\r\n    for (const indexlvl1 in facets['category.lvl2.idPath']) {\r\n        // get an array of ids that we need to remove in order to construct the label\r\n        idsToRemove = facets['category.lvl2.idPath'][indexlvl1].value.split('>');\r\n        let label: string =\r\n            language == 'fr'\r\n                ? facets['category.lvl2.fr'][indexlvl1].value\r\n                : facets['category.lvl2.en'][indexlvl1].value;\r\n        for (const indexids in idsToRemove) {\r\n            // remove ids from the label\r\n            label = label.replace(':' + idsToRemove[indexids].trim(), '');\r\n            lastID = idsToRemove[indexids].trim();\r\n        }\r\n        // set the response object\r\n        response.push({\r\n            query: data.hits[0].objectID,\r\n            labels: label,\r\n            dimension: lastID,\r\n            fullPath: facets['category.lvl2.idPath'][indexlvl1].value.trim(),\r\n        });\r\n    }\r\n    return response;\r\n}\r\nexport function transformResponseProductsFacets(categories: any, language: string, query: string) {\r\n    const data = [];\r\n    const labels: string[] = [];\r\n    const ids: string[] = [];\r\n    const slugPaths: string[] = [];\r\n    let fullPath: string[] = [];\r\n    // check for EN or FR and do data structure\r\n    let level0 = '';\r\n    let level1 = [];\r\n    let slugPathLevel1 = [];\r\n    let slugPathLevel2 = [];\r\n    if (language === 'en' && categories.facets) {\r\n        level0 = Object.keys(categories.facets['category.lvl1.en'])[0];\r\n        level1 = Object.keys(categories.facets['category.lvl2.en']);\r\n    } else {\r\n        level0 = Object.keys(categories.facets['category.lvl1.fr'])[0];\r\n        level1 = Object.keys(categories.facets['category.lvl2.fr']);\r\n    }\r\n    slugPathLevel1 = Object.keys(categories.facets['category.lvl1.slugPath']);\r\n    slugPathLevel2 = Object.keys(categories.facets['category.lvl2.slugPath']);\r\n    // For level 0 we just need to take first element\r\n    const idPathslvl0 = Object.keys(categories.facets['category.lvl1.idPath'])[0];\r\n    const idPathslvl1 = Object.keys(categories.facets['category.lvl2.idPath']);\r\n    fullPath = [idPathslvl0].concat(idPathslvl1);\r\n    //building level 0\r\n    labels.push(level0.split(':')[0]);\r\n    ids.push(level0.split(':')[1]);\r\n    // building for level 1\r\n    let labelBuild = '';\r\n    let lastIndex: string;\r\n    for (const index in level1) {\r\n        const sublevel = level1[index].split('>');\r\n        labelBuild = '';\r\n        for (const subindex in sublevel) {\r\n            //save last index and build the label\r\n            const subbreak = sublevel[subindex].split(':');\r\n            labelBuild = labelBuild + ' > ' + subbreak[0];\r\n            lastIndex = subbreak[1];\r\n        }\r\n        labelBuild = labelBuild.trim().substring(1, labelBuild.length - 1);\r\n        labels.push(labelBuild);\r\n        ids.push(lastIndex);\r\n    }\r\n    for (const index in slugPathLevel1) {\r\n        slugPaths.push(slugPathLevel1[index]);\r\n    }\r\n    for (const index in labels) {\r\n        data.push({\r\n            query: query,\r\n            labels: labels[index],\r\n            dimension: ids[index],\r\n            fullPath: fullPath[index],\r\n            slugPath: slugPaths[index],\r\n        });\r\n    }\r\n    return data;\r\n}\r\n\r\n/*\r\n * Copyright 2020 Adobe. All rights reserved.\r\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License. You may obtain a copy\r\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software distributed under\r\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\r\n * OF ANY KIND, either express or implied. See the License for the specific language\r\n * governing permissions and limitations under the License.\r\n */\r\n\r\nimport { useEffect, useState } from 'react';\r\n\r\nimport { AutocompleteItem } from './autocomplete.component';\r\n\r\ninterface ViewportSize {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n// @ts-ignore\r\nconst visualViewport = typeof window !== 'undefined' && window.visualViewport;\r\n\r\nfunction getViewportSize(): ViewportSize {\r\n    return {\r\n        width: visualViewport?.width || window.innerWidth,\r\n        height: visualViewport?.height || window.innerHeight,\r\n    };\r\n}\r\n\r\nexport function useViewportSize(): ViewportSize {\r\n    const [size, setSize] = useState(() => getViewportSize());\r\n\r\n    useEffect(() => {\r\n        // Use visualViewport api to track available height even on iOS virtual keyboard opening\r\n        const onResize = () => {\r\n            setSize((size) => {\r\n                const newSize = getViewportSize();\r\n                if (newSize.width === size.width && newSize.height === size.height) {\r\n                    return size;\r\n                }\r\n                return newSize;\r\n            });\r\n        };\r\n\r\n        if (!visualViewport) {\r\n            window.addEventListener('resize', onResize);\r\n        } else {\r\n            visualViewport.addEventListener('resize', onResize);\r\n        }\r\n\r\n        return () => {\r\n            if (!visualViewport) {\r\n                window.removeEventListener('resize', onResize);\r\n            } else {\r\n                visualViewport.removeEventListener('resize', onResize);\r\n            }\r\n        };\r\n    }, []);\r\n\r\n    return size;\r\n}\r\n\r\nexport function getPageTopLeft(el) {\r\n    const rect = el.getBoundingClientRect();\r\n    const docEl = document.documentElement;\r\n    return {\r\n        left: rect.left + (window.pageXOffset || docEl.scrollLeft || 0),\r\n        top: rect.top + (window.pageYOffset || docEl.scrollTop || 0),\r\n    };\r\n}\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\ninterface YourSearchesProps {\r\n    suggestions: any;\r\n    autocomplete: any;\r\n}\r\nexport function YourSearches({ suggestions, autocomplete }: YourSearchesProps) {\r\n    const { source } = suggestions || '';\r\n    const { i18n, t } = useTranslation('algolia_autocomplete');\r\n    const title = t('Your searches');\r\n    return (\r\n        <>\r\n            {suggestions && suggestions.items && (\r\n                <div className=\"ac__section__wrap\">\r\n                    <h5 className=\"ac__section__title search-title\">{title}</h5>\r\n                    <ul className=\"ac__section__list\" role=\"listbox\" aria-labelledby=\"autocomplete-1-label\">\r\n                        {suggestions.items.map((item: any, index) => {\r\n                            const link = '/pages/products?keyword=' + encodeURIComponent(item.label);\r\n                            return (\r\n                                <li\r\n                                    key={index}\r\n                                    className=\"ac__hit--item\"\r\n                                    {...autocomplete.getItemProps({ item, source })}\r\n                                    value={item.label}\r\n                                >\r\n                                    <a\r\n                                        href={link}\r\n                                        onClick={(e) => {\r\n                                            e.preventDefault();\r\n                                        }}\r\n                                    >\r\n                                        {item.label}\r\n                                    </a>\r\n                                </li>\r\n                            );\r\n                        })}\r\n                    </ul>\r\n                </div>\r\n            )}\r\n        </>\r\n    );\r\n}\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n\r\n//import { CSSProperties } from 'react';\r\nimport { Brands } from './brands.component';\r\nimport { Categories } from './categories.component';\r\nimport { FeaturedBrands } from './featured-brands.component';\r\nimport { Matches } from './matches.component';\r\nimport { PopularCollections } from './popular-collections.component';\r\nimport { TopSuggestions } from './top-suggestions.component';\r\nimport { Trending } from './trending.component';\r\nimport { isStateOne } from './utils';\r\nimport { YourSearches } from './your-searches.component';\r\n\r\ninterface LayoutProps {\r\n    collection: any;\r\n    autocomplete: any;\r\n    state: any;\r\n    client: any;\r\n    language: string;\r\n    SearchLeftBottomSectionTitle: string;\r\n    popularCollections: any[];\r\n    SearchRightSectionTitle: string;\r\n    insightsClient: any;\r\n}\r\nfunction findCollection(collections, collectionName) {\r\n    const collectionData = collections.filter(function (collection) {\r\n        return collection.source.sourceId == 'PRODUCTS';\r\n    })[0];\r\n    return collectionData;\r\n}\r\n\r\nexport const Layout = ({\r\n    collection,\r\n    autocomplete,\r\n    state,\r\n    language,\r\n    SearchLeftBottomSectionTitle,\r\n    SearchRightSectionTitle,\r\n    insightsClient,\r\n}: LayoutProps) => {\r\n    const [trendingData, setTrendingData] = useState();\r\n    const [topSuggestionData, setTopSuggestionData] = useState();\r\n    const [recentSearches, setRecentSearches] = useState();\r\n    const [featuredBrands, setFeaturedBrandsData] = useState();\r\n    const [productData, setProductData] = useState(findCollection(collection, 'PRODUCTS'));\r\n    const [brandsData, setBrandsData] = useState();\r\n    const [categoriesData, setCategoriesData] = useState();\r\n    const [popularCollectionsData, setpopularCollectionsData] = useState([]);\r\n    useEffect(() => {\r\n        for (let i = 0; i < collection.length; i++) {\r\n            if (collection[i].source.sourceId == 'recentSearchesPlugin') {\r\n                setRecentSearches(collection[i]);\r\n            } else if (collection[i].source.sourceId == 'TRENDING') {\r\n                setTrendingData(collection[i]);\r\n            } else if (collection[i].source.sourceId == 'BRANDS') {\r\n                setBrandsData(collection[i]);\r\n            } else if (collection[i].source.sourceId == 'FEATUREDBRANDS') {\r\n                setFeaturedBrandsData(collection[i]);\r\n            } else if (collection[i].source.sourceId == 'TOPSUGGESTIONS') {\r\n                setTopSuggestionData(collection[i]);\r\n            } else if (collection[i].source.sourceId == 'CATEGORIES') {\r\n                setCategoriesData(collection[i]);\r\n            } else if (collection[i].source.sourceId == 'POPULARCOLLECTIONS') {\r\n                setpopularCollectionsData(collection[i]);\r\n            }\r\n        }\r\n        if (findCollection(collection, 'PRODUCTS') != productData) {\r\n            setProductData(findCollection(collection, 'PRODUCTS'));\r\n        }\r\n    }, [collection, productData]);\r\n    return (\r\n        <section className=\"ac__layout-wrap\">\r\n            <div className=\"ac__layout--left\">\r\n                {isStateOne(state.query) ? (\r\n                    <>\r\n                        <YourSearches suggestions={recentSearches} autocomplete={autocomplete} />\r\n                        <Trending\r\n                            suggestions={trendingData}\r\n                            autocomplete={autocomplete}\r\n                            insightsClient={insightsClient}\r\n                        />\r\n                        <FeaturedBrands\r\n                            brands={featuredBrands}\r\n                            autocomplete={autocomplete}\r\n                            title={SearchLeftBottomSectionTitle}\r\n                            state={state}\r\n                        />\r\n                    </>\r\n                ) : (\r\n                    <>\r\n                        <TopSuggestions\r\n                            suggestions={topSuggestionData}\r\n                            autocomplete={autocomplete}\r\n                            insightsClient={insightsClient}\r\n                            state={state}\r\n                        />\r\n                        <Categories\r\n                            suggestions={topSuggestionData}\r\n                            autocomplete={autocomplete}\r\n                            categories={categoriesData}\r\n                            state={state}\r\n                        />\r\n                        <Brands brands={brandsData} autocomplete={autocomplete} language={language} state={state} />\r\n                    </>\r\n                )}\r\n            </div>\r\n\r\n            <div className=\"ac__layout--right\">\r\n                <div className=\"ac__layout-inner--left\">\r\n                    {productData && (\r\n                        <Matches\r\n                            products={productData}\r\n                            autocomplete={autocomplete}\r\n                            state={state}\r\n                            language={language}\r\n                            insightsClient={insightsClient}\r\n                        />\r\n                    )}\r\n                </div>\r\n                <div className=\"ac__layout-inner--right\">\r\n                    <PopularCollections\r\n                        collections={popularCollectionsData}\r\n                        autocomplete={autocomplete}\r\n                        title={SearchRightSectionTitle}\r\n                    ></PopularCollections>\r\n                </div>\r\n            </div>\r\n        </section>\r\n    );\r\n};\r\n","/* eslint-disable no-undef */\r\n/* eslint-disable jsx-a11y/label-has-associated-control */\r\n/* eslint-disable @typescript-eslint/ban-ts-comment */\r\n/* eslint-disable @typescript-eslint/no-unused-expressions */\r\nimport { AutocompleteState, createAutocomplete } from '@algolia/autocomplete-core';\r\nimport { createLocalStorageRecentSearchesPlugin } from '@algolia/autocomplete-plugin-recent-searches';\r\nimport { getAlgoliaResults } from '@algolia/autocomplete-preset-algolia';\r\nimport { Hit } from '@algolia/client-search';\r\nimport algoliasearch from 'algoliasearch/lite';\r\nimport React, { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport ResizeObserver from 'resize-observer-polyfill';\r\nimport insightsClient from 'search-insights';\r\n\r\nimport CloseSvg from '@/components/common/CloseSvg';\r\nimport { Cookie } from '@/tscapi/utils/cookie';\r\n\r\nimport { en, fr } from './i18n';\r\nimport { KeyHandler } from './keyhandler';\r\nimport { Layout } from './layout.component';\r\nimport { deriveVariantEdpAndPath } from './matches.component';\r\nimport {\r\n    arraysEqual,\r\n    isStateOne,\r\n    transformResponseProductsFacets,\r\n    transfromResponseQuerySuggestionFacets,\r\n    useViewportSize,\r\n    getPageTopLeft,\r\n    generateHit,\r\n    getCurrentColumn,\r\n    getIndexBySource,\r\n    createFilterMultipleDimensions,\r\n} from './utils';\r\n\r\nlet appId, apiKey;\r\nlet searchEnvironment = 'pr';\r\nconst urlParams = new URLSearchParams(window.location.search);\r\n//\r\nif (\r\n    window.location.hostname.startsWith('www') ||\r\n    window.location.hostname.startsWith('pr') ||\r\n    window.location.hostname.startsWith('st') ||\r\n    window.location.hostname.startsWith('or')\r\n) {\r\n    searchEnvironment = 'pr';\r\n} else {\r\n    searchEnvironment = 'qa';\r\n}\r\n\r\n// parameter overides destination index for debugging\r\nif (urlParams.get('algoliadebug') == 'pr') {\r\n    searchEnvironment = 'pr';\r\n    console.log('Algolia Index: pr');\r\n}\r\nif (urlParams.get('algoliadebug') == 'qa') {\r\n    searchEnvironment = 'qa';\r\n    console.log('Algolia Index: qa');\r\n}\r\n\r\nif (searchEnvironment == 'pr') {\r\n    // On production and staging,  query Production indexes\r\n    appId = 'F8X5YYAL68';\r\n    apiKey = '4c8346d66994aa53e2fed2b017a8455b';\r\n} else {\r\n    // on anything else search on QA algolia indexes\r\n    appId = 'N2PGXY1LE4';\r\n    apiKey = '1c209dd6850cf47fb7d0b4a7a0b1ebf8';\r\n}\r\n\r\n// import i18n from 'i18next';\r\n// import { initReactI18next } from 'react-i18next';\r\n// import { Cookie } from '../../tscapi/utils/cookie';\r\n// const cookie: Cookie = new Cookie();\r\n// const lang = cookie.Language.toLowerCase() == 'en_ca' ? 'en' : 'fr';\r\n\r\nlet firstData = null;\r\n\r\nconst searchClient = algoliasearch(appId, apiKey);\r\ninsightsClient('init', { appId, apiKey });\r\n// set pugins for autocomplete\r\nconst recentSearchesPlugin = createLocalStorageRecentSearchesPlugin({\r\n    key: 'new',\r\n    transformSource({ source }) {\r\n        source.getItemUrl = ({ item }) => {\r\n            return '/pages/products?keyword=' + encodeURIComponent(item.label);\r\n        };\r\n        const oldFunction = source.getItems;\r\n        source.getItems = (autocompleteObj) => {\r\n            if (!isStateOne(autocompleteObj.state.query)) return [];\r\n            else {\r\n                //autocompleteObj.setQuery(autocompleteObj.state.query.replace(/\\s+$/g, ''));\r\n                //autocompleteObj.state.query = autocompleteObj.state.query.replace(/\\s+$/g, '');\r\n                // just get data once to avoid unnecesary filtering\r\n                if (firstData) return firstData;\r\n                else firstData = oldFunction(autocompleteObj);\r\n                return firstData;\r\n            }\r\n        };\r\n        source.onSelect = (obj) => {\r\n            //your searches\r\n            obj.event.preventDefault();\r\n            window.analyticsData.search = {};\r\n            window.analyticsData.search.searchTerm = obj.item.label;\r\n            window.analyticsData.search.totalRecords = obj.state.context.hits;\r\n            window.analyticsData.search.type = 'Your searches click';\r\n\r\n            // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n            window._satellite && window._satellite.track('internal_search');\r\n            //store search term in session storage for later use on PDP/PRP to track search term with Meta/Capi\r\n            try {\r\n                window.sessionStorage.setItem('TSC_SearchString', obj.item.label);\r\n            } catch (error) {\r\n                console.error('Failed to store data in sessionStorage', error);\r\n            }\r\n            setTimeout(() => {\r\n                window.location.href = '/pages/products?keyword=' + encodeURIComponent(obj.item.label);\r\n            }, 400);\r\n        };\r\n        // redefine on enter\r\n        return source;\r\n    },\r\n});\r\nexport type AutocompleteItem = Hit<{\r\n    query: string;\r\n    LinkWithoutDomain: string;\r\n    dimension: string;\r\n    slugPath: string;\r\n    valueName: any;\r\n    label: string;\r\n    brand: string;\r\n    categories: string[];\r\n    image: string;\r\n    name: string;\r\n    objectID: string;\r\n    url: string;\r\n    facets: string;\r\n    LinkText: string;\r\n    Linkall: string;\r\n    index: any;\r\n    labels: any;\r\n    productLinkWithoutDomain: { en: string; fr: string };\r\n    __autocomplete_queryID: string;\r\n}>;\r\ndeclare global {\r\n    interface Window {\r\n        _satellite: any;\r\n        alloy: any;\r\n    }\r\n}\r\nlet collections = [];\r\nlet activeItem = null;\r\nlet autocompleteRef;\r\nlet querycopy;\r\nlet lastColumnOne;\r\n\r\nexport function Autocomplete(props: { placeholder; openOnFocus; dataAPI; debug }) {\r\n    const [autocompleteState, setAutocompleteState] = React.useState<AutocompleteState<AutocompleteItem>>({\r\n        collections: [],\r\n        completion: null,\r\n        context: {},\r\n        isOpen: false,\r\n        query: '',\r\n        activeItemId: null,\r\n        status: 'idle',\r\n    });\r\n    async function digestMessage(message) {\r\n        const msgUint8 = new TextEncoder().encode(message); // encode as (utf-8) Uint8Array\r\n        const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8); // hash the message\r\n        const hashArray = Array.from(new Uint8Array(hashBuffer)); // convert buffer to byte array\r\n        const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join(''); // convert bytes to hex string\r\n        return hashHex;\r\n    }\r\n    const panelSize = useViewportSize();\r\n    const cookie: Cookie = new Cookie();\r\n    const { i18n, t } = useTranslation('algolia_autocomplete');\r\n\r\n    i18n.addResourceBundle('en', 'algolia_autocomplete', en);\r\n    i18n.addResourceBundle('fr', 'algolia_autocomplete', fr);\r\n    let encrypted = 'unidentifiable';\r\n    async function getECID() {\r\n        if (typeof window.alloy !== 'undefined') {\r\n            try {\r\n                const result = await window.alloy('getIdentity');\r\n                encrypted = result.identity.ECID;\r\n                //console.log('sayt ecid ', encrypted);\r\n            } catch (error) {\r\n                //console.log('Error retrieving ECID ' + error);\r\n                //console.log('sayt error ', encrypted);\r\n            }\r\n        } else {\r\n            encrypted = 'unidentifiable';\r\n            //console.log('sayt no _sat ', encrypted);\r\n        }\r\n    }\r\n    // check if the user is logged in\r\n    async function getUser() {\r\n        if (cookie.UserEmail) {\r\n            encrypted = await digestMessage(cookie.UserEmail);\r\n            insightsClient('setUserToken', encrypted);\r\n        } else {\r\n            await getECID();\r\n            insightsClient('setUserToken', encrypted);\r\n        }\r\n    }\r\n\r\n    function getSearchType(source) {\r\n        switch (source) {\r\n            case 'QUERY':\r\n                return 'Standard product click';\r\n            case 'Standard product click':\r\n                return 'Standard product click';\r\n            case 'TRENDING':\r\n                return 'Trending product click';\r\n            case 'FEATUREDBRANDS':\r\n                return 'Featured product click';\r\n            case 'TOPSUGGESTIONS':\r\n                return 'Top suggestions product click';\r\n            case 'CATEGORIES':\r\n                return 'Categories product click';\r\n            case 'BRANDS':\r\n                return 'Brands product click';\r\n            case 'ALGOLIADIMENSION':\r\n                return 'Now Trending product click';\r\n        }\r\n    }\r\n    function trackSearchEvent(obj) {\r\n        try {\r\n            window.sessionStorage.setItem('TSC_AlgoliaClick', JSON.stringify(obj));\r\n        } catch (error) {\r\n            // if it fails\r\n        }\r\n    }\r\n    function trackInternalSearchEvent(obj) {\r\n        //find product collection\r\n        const productObjData = obj.state.collections.find((element) => element.source.sourceId == 'PRODUCTS');\r\n        if (productObjData) {\r\n            if (productObjData.items[0].objectID == obj.state.query.replace(/-/g, '').replace(/\\s+/g, '')) {\r\n                try {\r\n                    const analyticsProductsObject = {\r\n                        index: 'products',\r\n                        objectIDs: [productObjData.items[0].objectID],\r\n                        positions: [1],\r\n                        queryID: productObjData.items[0].__autocomplete_queryID,\r\n                    };\r\n                    window.sessionStorage.setItem('TSC_AlgoliaClick', JSON.stringify(analyticsProductsObject));\r\n                } catch (error) {\r\n                    // if it fails\r\n                }\r\n            }\r\n        }\r\n    }\r\n    const setRuleContext = (query, setContext) => {\r\n        const regOrderNo = new RegExp('\\\\d{6}');\r\n        if (query) {\r\n            if (isExactProductNumber(query)) {\r\n                //if 6 digit number (with or without hyphen or spaces) ex. 555-123, 555 123, 555123\r\n                setContext({ exactNumber: true });\r\n                return ['ITEMNO'];\r\n            } else {\r\n                setContext({ exactNumber: false });\r\n                return ['SEARCH'];\r\n            }\r\n        }\r\n    };\r\n\r\n    const isExactProductNumber = (query) => {\r\n        const regOrderNo = new RegExp('\\\\d{6}');\r\n        if (query) {\r\n            if (\r\n                regOrderNo.test(query.replace(/-/g, '').replace(/\\s+/g, '')) &&\r\n                query.replace(/-/g, '').replace(/\\s+/g, '').length == 6\r\n            ) {\r\n                //if 6 digit number (with or without hyphen or spaces) ex. 555-123, 555 123, 555123\r\n                return true;\r\n            } else {\r\n                return false;\r\n            }\r\n        }\r\n    };\r\n    const setFilter = (query) => {\r\n        const today = new Date();\r\n        const datestr: string =\r\n            today.getUTCFullYear() +\r\n            ('0' + (today.getUTCMonth() + 1)).slice(-2) +\r\n            ('0' + today.getUTCDate()).slice(-2) +\r\n            ('0' + today.getUTCHours()).slice(-2) +\r\n            '12' +\r\n            '00';\r\n        const filterString = `activeFrom <= ${datestr} AND (activeTo = 19700101000000 OR activeTo >= ${datestr}) AND ((searchExcludeFrom = 19700101000000 OR searchExcludeFrom > ${datestr}) OR (searchExcludeTo = 19700101000000 OR searchExcludeTo < ${datestr}))`;\r\n        const itemNoFilterString = `activeFrom <= ${datestr} AND (activeTo = 19700101000000  OR activeTo >= ${datestr})`;\r\n        const newstring = `activeFrom <= ${datestr} AND activeTo >= ${datestr} AND (searchExcludeFrom > ${datestr}) OR (searchExcludeTo < ${datestr})`;\r\n\r\n        if (isExactProductNumber(query)) {\r\n            //if 6 digit number (with or without hyphen or spaces) ex. 555-123, 555 123, 555123\r\n            return itemNoFilterString;\r\n        } else {\r\n            return filterString;\r\n        }\r\n    };\r\n    function setExtendedAnalytics(obj) {\r\n        window.analyticsData.search.searchTerm = obj.state.context?.searchByActiveItem\r\n            ? obj.state.context?.searchActiveItem.query\r\n            : obj.state.query;\r\n\r\n        switch (obj.state.context?.searchActiveItem?.source) {\r\n            case 'CATEGORIES':\r\n                //let category = obj.state.context.searchActiveItem.filterID;\r\n                if (obj.state.context.searchActiveItem.category) {\r\n                    window.analyticsData.search.category = obj.state.context.searchActiveItem.category;\r\n                }\r\n                break;\r\n            case 'FEATUREDBRANDS': {\r\n                const brand = obj.state.context.searchActiveItem.filterID;\r\n                if (obj.state.context.searchActiveItem.brand) {\r\n                    window.analyticsData.search.brand = obj.state.context.searchActiveItem.brand;\r\n                }\r\n                window.analyticsData.search.searchTerm = obj.state.context.searchActiveItem.activeLabel;\r\n                break;\r\n            }\r\n            case 'BRANDS': {\r\n                const brand = obj.state.context.searchActiveItem.activeLabel;\r\n                if (brand) {\r\n                    window.analyticsData.search.brand = brand;\r\n                    //window.analyticsData.search.searchTerm = brand;\r\n                }\r\n                break;\r\n            }\r\n        }\r\n    }\r\n    const language = cookie.ApiLanguage;\r\n    const [noResults, setnoResults] = useState(true);\r\n    ////// READ DATA FROM CONTENTFUL\r\n    const contentfulProducts: string =\r\n        props.dataAPI && props.dataAPI.data && props.dataAPI.data.SearchMiddleSectionDimensions\r\n            ? props.dataAPI.data.SearchMiddleSectionDimensions\r\n            : '';\r\n    const contentfulSeoUrl: string =\r\n        props.dataAPI && props.dataAPI.data && props.dataAPI.data.SearchMiddleSectionSeoUrl\r\n            ? props.dataAPI.data.SearchMiddleSectionSeoUrl\r\n            : '';\r\n    const SearchMiddleSectionTitle =\r\n        props.dataAPI && props.dataAPI.data && props.dataAPI.data.SearchMiddleSectionTitle\r\n            ? props.dataAPI.data.SearchMiddleSectionTitle\r\n            : '';\r\n    const featuredData =\r\n        props.dataAPI && props.dataAPI.data && props.dataAPI.data.SearchLeftBottomSection\r\n            ? props.dataAPI.data.SearchLeftBottomSection\r\n            : [];\r\n    const SearchLeftBottomSectionTitle =\r\n        props.dataAPI && props.dataAPI.data && props.dataAPI.data.SearchLeftBottomSectionTitle\r\n            ? props.dataAPI.data.SearchLeftBottomSectionTitle\r\n            : '';\r\n    const SearchRightSectionTitle =\r\n        props.dataAPI && props.dataAPI.data && props.dataAPI.data.SearchRightSectionTitle\r\n            ? props.dataAPI.data.SearchRightSectionTitle\r\n            : '';\r\n    const popularCollections =\r\n        props.dataAPI && props.dataAPI.data && props.dataAPI.data.SearchRightSection\r\n            ? props.dataAPI.data.SearchRightSection\r\n            : [];\r\n    // data manipulation flags\r\n    let lastID = null;\r\n    let refresh = false;\r\n    let brandHits = [];\r\n    let trendingHits = [];\r\n    let topSuggestionsHits = [];\r\n    let trendingProductsHits = [];\r\n    let featuredBrandsProductsHits = [];\r\n    let categoriesProductsHits = [];\r\n    let brandsProductsHits = [];\r\n    let queryProductsHits = [];\r\n    // set translations\r\n    const noResultStr = t('No results');\r\n\r\n    const handler = (event) => {\r\n        if (event.ctrlKey) {\r\n            let id;\r\n            const currColumn = getCurrentColumn(collections, activeItem);\r\n            if (currColumn == 0) {\r\n                // jump from column 0 to 1\r\n                lastColumnOne = activeItem;\r\n                id = getIndexBySource(collections, 'PRODUCTS');\r\n                autocompleteRef.setActiveItemId(id);\r\n            } else if (currColumn == 1) {\r\n                if (isStateOne(querycopy)) {\r\n                    // jump from column 1 to 2\r\n                    id = getIndexBySource(collections, 'POPULARCOLLECTIONS');\r\n                    autocompleteRef.setActiveItemId(id);\r\n                } else {\r\n                    // jump from column 1 to 0\r\n                    if (lastColumnOne) autocompleteRef.setActiveItemId(lastColumnOne);\r\n                    else autocompleteRef.setActiveItemId(0);\r\n                }\r\n            } else {\r\n                // jumping from column 2 to 0\r\n                if (lastColumnOne) autocompleteRef.setActiveItemId(lastColumnOne);\r\n                else autocompleteRef.setActiveItemId(0);\r\n            } // on the second column go to the top\r\n        }\r\n    };\r\n    const autocomplete = React.useMemo(\r\n        () =>\r\n            createAutocomplete<AutocompleteItem, React.BaseSyntheticEvent, React.MouseEvent, React.KeyboardEvent>({\r\n                plugins: [recentSearchesPlugin],\r\n                onStateChange(autocompleteObj) {\r\n                    // COPIES FOR CTRL KEY EVENT\r\n                    collections = JSON.parse(JSON.stringify(autocompleteObj.state.collections));\r\n                    activeItem = autocompleteObj.state.activeItemId;\r\n                    querycopy = autocompleteObj.state.query;\r\n                    // ON RESET OF HOVER\r\n                    if (autocompleteObj.state.context.reset) {\r\n                        lastID = null;\r\n                        autocompleteObj.state.activeItemId = null;\r\n                        autocompleteObj.state.context.searchByActiveItem = false;\r\n                        autocompleteObj.state.context.reset = false;\r\n                        setAutocompleteState(autocompleteObj.state);\r\n                    }\r\n                    const activeItemId = autocompleteObj.state.activeItemId;\r\n                    //get max length of all collections start at -1 since index starts at 0\r\n                    let maxIndex = -1;\r\n                    for (const index in autocompleteObj.state.collections)\r\n                        maxIndex += autocompleteObj.state.collections[index].items.length;\r\n                    // CHANGE OF ACTIVE ITEM (TRIGGER SEARCH)\r\n                    if (\r\n                        autocompleteObj.prevState.activeItemId != autocompleteObj.state.activeItemId &&\r\n                        autocompleteObj.state.activeItemId != null\r\n                    ) {\r\n                        let allItems = [];\r\n                        let active = activeItemId;\r\n                        let source;\r\n                        const activeLabel = '';\r\n                        for (const index in autocompleteObj.state.collections) {\r\n                            allItems = allItems.concat(autocompleteObj.state.collections[index].items);\r\n                            // obtain the label of hovered/selected item\r\n                            //activeLabel = autocompleteObj.state.collections[index].items[active]?.label;\r\n                            // obtain the source of the index item\r\n                            active = active - autocompleteObj.state.collections[index].items.length;\r\n                            if (active < 0) {\r\n                                source = autocompleteObj.state.collections[index].source.sourceId;\r\n                                break;\r\n                            }\r\n                        }\r\n                        //activeLabel = allItems[activeItemId];\r\n                        //console.log(activeItemId);\r\n                        lastID = activeItemId;\r\n                        // on products and recent searches we dont do any refresh of data\r\n                        if (\r\n                            source != 'PRODUCTS' &&\r\n                            source != 'recentSearchesPlugin' &&\r\n                            source != 'POPULARCOLLECTIONS' &&\r\n                            source != 'TRENDING'\r\n                        ) {\r\n                            autocompleteObj.state.context.searchByActiveItem = true;\r\n                            const item = allItems[autocompleteObj.state.activeItemId];\r\n                            // set search objects on change of active item\r\n                            if (source == 'TRENDING') {\r\n                                autocompleteObj.state.context.searchActiveItem = {\r\n                                    source: 'TRENDING',\r\n                                    query: item.objectID,\r\n                                    activeLabel: allItems[activeItemId],\r\n                                    slugPath: item.slugPath,\r\n                                };\r\n                            } else if (source == 'FEATUREDBRANDS') {\r\n                                autocompleteObj.state.context.searchActiveItem = {\r\n                                    source: 'FEATUREDBRANDS',\r\n                                    filterID: item.DimensionId,\r\n                                    activeLabel: allItems[activeItemId],\r\n                                    slugPath: item.slugPath,\r\n                                };\r\n                            } else if (source == 'TOPSUGGESTIONS') {\r\n                                autocompleteObj.state.context.searchActiveItem = {\r\n                                    source: 'TOPSUGGESTIONS',\r\n                                    query: item.objectID,\r\n                                    activeLabel: activeLabel,\r\n                                    slugPath: item.slugPath,\r\n                                };\r\n                            } else if (source == 'CATEGORIES') {\r\n                                autocompleteObj.state.context.searchActiveItem = {\r\n                                    source: 'CATEGORIES',\r\n                                    query: item.query,\r\n                                    filterID: item.fullPath,\r\n                                    dimensionID: item.dimension,\r\n                                    category: item.exactPath,\r\n                                    slugPath: item.slugPath,\r\n                                };\r\n                            } else if (source == 'BRANDS') {\r\n                                autocompleteObj.state.context.searchActiveItem = {\r\n                                    source: 'BRANDS',\r\n                                    query: autocompleteObj.state.query,\r\n                                    filterID: item.objectID,\r\n                                    activeLabel: item.valueName.en.split(':')[0],\r\n                                    slugPath: item.slugPath,\r\n                                };\r\n                            }\r\n                            refresh = true;\r\n                            autocompleteObj.refresh();\r\n                        }\r\n                        // in the change of a query reset the lastID\r\n                    } else if (\r\n                        autocompleteObj.prevState.activeItemId != autocompleteObj.state.activeItemId &&\r\n                        autocompleteObj.state.activeItemId == null &&\r\n                        (autocompleteObj.prevState.activeItemId == maxIndex ||\r\n                            autocompleteObj.prevState.activeItemId == 0)\r\n                    ) {\r\n                        // on change of state and going from last item to null\r\n                        if (refresh) {\r\n                            refresh = false;\r\n                            lastID = autocompleteObj.prevState.activeItemId;\r\n                        } else lastID = autocompleteObj.state.activeItemId;\r\n                    } else if (autocompleteObj.prevState.query != autocompleteObj.state.query) {\r\n                        autocompleteObj.state.context.searchByActiveItem = false;\r\n                        lastID = null;\r\n                    }\r\n                    // display noResultsPage\r\n                    let localnoResults = true;\r\n                    for (const index in autocompleteObj.state.collections) {\r\n                        if (autocompleteObj.state.collections[index].items.length > 0) {\r\n                            localnoResults = false;\r\n                            break;\r\n                        }\r\n                    }\r\n                    // update on the state before leaving the component\r\n                    autocompleteObj.state.activeItemId = lastID;\r\n                    // not search by active item on null element\r\n                    setnoResults(localnoResults);\r\n                    setAutocompleteState(autocompleteObj.state);\r\n                },\r\n                getSources({ query, setContext }) {\r\n                    const today = new Date();\r\n                    const datestr: string =\r\n                        today.getUTCFullYear() +\r\n                        ('0' + (today.getUTCMonth() + 1)).slice(-2) +\r\n                        ('0' + today.getUTCDate()).slice(-2) +\r\n                        ('0' + today.getUTCHours()).slice(-2) +\r\n                        '12' +\r\n                        '00';\r\n\r\n                    return [\r\n                        {\r\n                            sourceId: 'TRENDING',\r\n                            onSelect(obj) {\r\n                                // send event and redirect\r\n                                obj.event.preventDefault();\r\n                                insightsClient('clickedObjectIDsAfterSearch', {\r\n                                    eventName: 'Items clicked',\r\n                                    index: 'products_query_suggestions',\r\n                                    objectIDs: [obj.item.objectID],\r\n                                    positions: [obj.item.index + 1],\r\n                                    queryID: obj.item.__autocomplete_queryID,\r\n                                });\r\n                                window.analyticsData.search = {};\r\n                                window.analyticsData.search.searchTerm = obj.item.objectID;\r\n                                window.analyticsData.search.totalRecords = obj.state.context.hits;\r\n                                window.analyticsData.search.type = 'Trending click';\r\n                                window._satellite && window._satellite.track('internal_search');\r\n\r\n                                //store search term in session storage for later use on PDP/PRP to track search term with Meta/Capi\r\n                                try {\r\n                                    window.sessionStorage.setItem('TSC_SearchString', obj.item.objectID);\r\n                                } catch (error) {\r\n                                    console.error('Failed to store data in sessionStorage', error);\r\n                                }\r\n                                setTimeout(() => {\r\n                                    window.location.href = '/pages/products?keyword=' + obj.item.objectID;\r\n                                }, 400);\r\n                            },\r\n                            onActive(obj) {\r\n                                if (obj.event && obj.event.type == 'keydown') obj.state.completion = obj.item.query;\r\n                            },\r\n                            getItemUrl({ item }) {\r\n                                return '/pages/products?keyword=' + item.objectID;\r\n                            },\r\n                            getItems(autocompleteObj) {\r\n                                const query = '';\r\n                                if (!isStateOne(autocompleteObj.query)) {\r\n                                    trendingHits = [];\r\n                                    return [];\r\n                                } else\r\n                                    return getAlgoliaResults({\r\n                                        searchClient,\r\n                                        queries: [\r\n                                            {\r\n                                                indexName: 'products_query_suggestions',\r\n                                                query,\r\n                                                params: {\r\n                                                    clickAnalytics: true,\r\n                                                    hitsPerPage: 5,\r\n                                                    highlightPreTag: '<span class=\"unmark-text\">',\r\n                                                    highlightPostTag: '</span>',\r\n                                                    attributesToRetrieve: ['name'],\r\n                                                },\r\n                                            },\r\n                                        ],\r\n                                        transformResponse({ hits }) {\r\n                                            //analytic view item event removed because it was impacting trending products\r\n                                            return hits;\r\n                                        },\r\n                                    });\r\n                            },\r\n                        },\r\n                        {\r\n                            sourceId: 'FEATUREDBRANDS',\r\n                            onSelect(obj) {\r\n                                obj.event.preventDefault();\r\n                                window.analyticsData.search = {};\r\n                                window.analyticsData.search.searchTerm = obj.item.LinkText;\r\n                                window.analyticsData.search.totalRecords = obj.state.context.hits;\r\n                                window.analyticsData.search.type = 'Featured click';\r\n                                window._satellite && window._satellite.track('internal_search');\r\n                                //store search term in session storage for later use on PDP/PRP to track search term with Meta/Capi\r\n                                try {\r\n                                    window.sessionStorage.setItem('TSC_SearchString', obj.item.LinkText);\r\n                                } catch (error) {\r\n                                    console.error('Failed to store data in sessionStorage', error);\r\n                                }\r\n                                setTimeout(() => {\r\n                                    window.location.href = obj.item.LinkWithoutDomain;\r\n                                }, 400);\r\n                            },\r\n                            onActive(obj) {\r\n                                if (obj.event && obj.event.type == 'keydown') obj.state.completion = obj.item.LinkText;\r\n                            },\r\n                            getItemUrl({ item }) {\r\n                                return item.LinkWithoutDomain;\r\n                            },\r\n                            getItems(obj) {\r\n                                if (!isStateOne(query)) return [];\r\n                                else return featuredData;\r\n                            },\r\n                        },\r\n                        {\r\n                            sourceId: 'TOPSUGGESTIONS',\r\n                            onSelect(obj) {\r\n                                obj.event.preventDefault();\r\n                                insightsClient('clickedObjectIDsAfterSearch', {\r\n                                    eventName: 'Items clicked',\r\n                                    index: 'products_query_suggestions',\r\n                                    objectIDs: [obj.item.objectID],\r\n                                    positions: [obj.item.index + 1],\r\n                                    queryID: obj.item.__autocomplete_queryID,\r\n                                });\r\n\r\n                                window.analyticsData.search = {};\r\n                                window.analyticsData.search.searchTerm = obj.item.objectID;\r\n                                window.analyticsData.search.totalRecords = obj.state.context.hits;\r\n                                window.analyticsData.search.type = 'Top suggestions click';\r\n                                window._satellite && window._satellite.track('internal_search');\r\n                                //store search term in session storage for later use on PDP/PRP to track search term with Meta/Capi\r\n                                try {\r\n                                    window.sessionStorage.setItem('TSC_SearchString', obj.item.objectID);\r\n                                } catch (error) {\r\n                                    console.error('Failed to store data in sessionStorage', error);\r\n                                }\r\n                                setTimeout(() => {\r\n                                    window.location.href = '/pages/products?keyword=' + obj.item.objectID;\r\n                                }, 400);\r\n                            },\r\n                            onActive(obj) {\r\n                                if (obj.event && obj.event.type == 'keydown') obj.state.completion = obj.item.query;\r\n                            },\r\n                            getItemUrl(obj) {\r\n                                return '/pages/products?keyword=' + obj.item.objectID;\r\n                            },\r\n                            getItems({ query }) {\r\n                                if (isStateOne(query)) {\r\n                                    topSuggestionsHits = [];\r\n                                    return [];\r\n                                }\r\n                                return getAlgoliaResults({\r\n                                    searchClient,\r\n                                    queries: [\r\n                                        {\r\n                                            indexName: 'products_query_suggestions',\r\n                                            query,\r\n                                            params: {\r\n                                                clickAnalytics: true,\r\n                                                hitsPerPage: 5,\r\n                                                highlightPreTag: '<span class=\"unmark-text\">',\r\n                                                highlightPostTag: '</span>',\r\n                                            },\r\n                                        },\r\n                                    ],\r\n                                    transformResponse({ hits }) {\r\n                                        // send view event only if the hits are different from previous\r\n                                        // get object IDS\r\n                                        if (!arraysEqual(topSuggestionsHits[0], hits[0]) && hits[0].length > 0) {\r\n                                            const objectID = [];\r\n                                            topSuggestionsHits = hits;\r\n                                            for (const index in hits[0]) {\r\n                                                objectID.push(hits[0][index].objectID);\r\n                                            }\r\n                                            insightsClient('viewedObjectIDs', {\r\n                                                eventName: 'Items Viewed custom',\r\n                                                index: 'products_query_suggestions',\r\n                                                objectIDs: objectID,\r\n                                            });\r\n                                        }\r\n                                        return hits;\r\n                                    },\r\n                                });\r\n                            },\r\n                        },\r\n                        {\r\n                            sourceId: 'CATEGORIES',\r\n                            onSelect(obj) {\r\n                                obj.event.preventDefault();\r\n                                window.analyticsData.search = {};\r\n                                window.analyticsData.search.searchTerm = obj.item.query;\r\n                                window.analyticsData.search.totalRecords = obj.state.context.hits;\r\n                                window.analyticsData.search.type = 'Categories click';\r\n                                window.analyticsData.search.category = obj.item.labels;\r\n                                if (obj.state.context?.searchByActiveItem) {\r\n                                    setExtendedAnalytics(obj);\r\n                                }\r\n                                window._satellite && window._satellite.track('internal_search');\r\n                                //store search term in session storage for later use on PDP/PRP to track search term with Meta/Capi\r\n                                try {\r\n                                    window.sessionStorage.setItem('TSC_SearchString', obj.item.query);\r\n                                } catch (error) {\r\n                                    console.error('Failed to store data in sessionStorage', error);\r\n                                }\r\n                                setTimeout(() => {\r\n                                    window.location.href =\r\n                                        '/pages/products/category/' + obj.item.slugPath + '?keyword=' + obj.item.query;\r\n                                }, 400);\r\n                            },\r\n                            onActive(obj) {\r\n                                if (obj.event && obj.event.type == 'keydown') obj.state.completion = obj.item.query;\r\n                            },\r\n                            getItemUrl({ item }) {\r\n                                return '/pages/products/category/' + item.slugPath + '?keyword=' + item.query;\r\n                            },\r\n                            getItems({ query }) {\r\n                                if (isStateOne(query)) return [];\r\n                                // API call must be done since the getAlgoliaResults doesnt accept concatenated calls\r\n                                let index = searchClient.initIndex('products_query_suggestions');\r\n                                return index\r\n                                    .search(query, {\r\n                                        hitsPerPage: 5,\r\n                                        highlightPreTag: '<a class=\"unmark-text\">',\r\n                                        highlightPostTag: '</a>',\r\n                                    })\r\n                                    .then((data) => {\r\n                                        let querytopsuggestion = '';\r\n                                        index = searchClient.initIndex('products');\r\n                                        if (data.hits && data.hits.length <= 0) querytopsuggestion = query;\r\n                                        else querytopsuggestion = data.hits[0].objectID;\r\n                                        return index\r\n                                            .search(querytopsuggestion, {\r\n                                                facets: [\r\n                                                    'category.lvl1.slugPath',\r\n                                                    'category.lvl1.en',\r\n                                                    'category.lvl1.fr',\r\n                                                    'category.lvl1.idPath',\r\n                                                    'category.lvl2.slugPath',\r\n                                                    'category.lvl2.en',\r\n                                                    'category.lvl2.fr',\r\n                                                    'category.lvl2.idPath',\r\n                                                ],\r\n                                                sortFacetValuesBy: 'count',\r\n                                                maxValuesPerFacet: 2,\r\n                                                hitsPerPage: 1,\r\n                                            })\r\n                                            .then((categories) => {\r\n                                                // lvl0 MAC:00192 LVL 1 MAC:00192 > ASD:123\r\n                                                const data = [];\r\n                                                const labels: string[] = [];\r\n                                                const ids: string[] = [];\r\n                                                const slugPaths = [];\r\n                                                let fullPath: string[] = [];\r\n                                                const exactPath: string[] = [];\r\n                                                // check for EN or FR and do data structure\r\n                                                let level1 = [];\r\n                                                let level2 = [];\r\n                                                let slugPathLevel1 = [];\r\n                                                let slugPathLevel2 = [];\r\n                                                if (\r\n                                                    categories.facets &&\r\n                                                    Object.keys(categories.facets).length === 0 &&\r\n                                                    Object.getPrototypeOf(categories.facets) === Object.prototype\r\n                                                ) {\r\n                                                    return [];\r\n                                                }\r\n                                                if (language === 'en' && categories.facets) {\r\n                                                    level1 = Object.keys(categories.facets['category.lvl1.en']);\r\n                                                    level2 = Object.keys(categories.facets['category.lvl2.en']);\r\n                                                } else {\r\n                                                    level1 = Object.keys(categories.facets['category.lvl1.fr']);\r\n                                                    level2 = Object.keys(categories.facets['category.lvl2.fr']);\r\n                                                }\r\n\r\n                                                slugPathLevel1 = Object.keys(\r\n                                                    categories.facets['category.lvl1.slugPath'],\r\n                                                );\r\n                                                slugPathLevel2 = Object.keys(\r\n                                                    categories.facets['category.lvl2.slugPath'],\r\n                                                );\r\n\r\n                                                // For level 0 we just need to take first element\r\n                                                // const idPathslvl1 = Object.keys(\r\n                                                //     categories.facets['category.lvl1.idPath'],\r\n                                                // );\r\n                                                //sort idPathsLvl1 to match level1 keys order\r\n                                                // let sortedIdPathsLvl1 = [];\r\n                                                // for (const index in level1) {\r\n                                                //     for (const nestedIndex in level1) {\r\n                                                //         if (level1[index].includes(idPathslvl1[nestedIndex])) {\r\n                                                //             sortedIdPathsLvl1.push(idPathslvl1[nestedIndex]);\r\n                                                //         }\r\n                                                //     }\r\n                                                // }\r\n                                                // const idPathslvl2 = Object.keys(\r\n                                                //     categories.facets['category.lvl2.idPath'],\r\n                                                // );\r\n                                                //fullPath = sortedIdPathsLvl1.concat(idPathslvl2);\r\n                                                //no longer use idPaths, switched to using property 'category.lvl2.en'\r\n                                                fullPath = level1.concat(level2);\r\n                                                let labelBuild = '';\r\n                                                let lastIndex: string;\r\n\r\n                                                //build level 1 list\r\n                                                for (const index in level1) {\r\n                                                    labels.push(level1[index].split(':')[0]);\r\n                                                    exactPath.push(level1[index].split(':')[0]);\r\n                                                    ids.push(level1[index].split(':')[1]);\r\n                                                }\r\n                                                for (const index in slugPathLevel1) {\r\n                                                    slugPaths.push(slugPathLevel1[index]);\r\n                                                }\r\n                                                //build level 2 list\r\n                                                for (const index in level2) {\r\n                                                    const sublevel = level2[index].split('>');\r\n                                                    labelBuild = '';\r\n                                                    for (const subindex in sublevel) {\r\n                                                        //save last index and build the label\r\n                                                        const subbreak = sublevel[subindex].split(':');\r\n                                                        labelBuild = labelBuild + ' > ' + subbreak[0];\r\n                                                        lastIndex = subbreak[1];\r\n                                                    }\r\n                                                    labelBuild = labelBuild.trim().substring(1, labelBuild.length - 1);\r\n                                                    labels.push(labelBuild);\r\n                                                    ids.push(lastIndex);\r\n                                                    exactPath.push(sublevel[1].split(':')[0].trim());\r\n                                                }\r\n                                                for (const index in slugPathLevel2) {\r\n                                                    slugPaths.push(slugPathLevel2[index]);\r\n                                                }\r\n                                                //push only first 5 results\r\n                                                labels.slice(0, 5).forEach((item, index) => {\r\n                                                    data.push({\r\n                                                        query: querytopsuggestion,\r\n                                                        labels: labels[index],\r\n                                                        dimension: ids[index],\r\n                                                        fullPath: fullPath[index],\r\n                                                        exactPath: exactPath[index],\r\n                                                        slugPath: slugPaths[index],\r\n                                                    });\r\n                                                });\r\n\r\n                                                return data;\r\n                                            });\r\n                                    });\r\n                            },\r\n                        },\r\n                        {\r\n                            sourceId: 'BRANDS',\r\n                            onSelect(obj) {\r\n                                obj.event.preventDefault();\r\n                                let nameSplited;\r\n                                if (language == 'en') {\r\n                                    nameSplited = obj.item.valueName.en.split(':');\r\n                                } else {\r\n                                    nameSplited = obj.item.valueName.fr.split(':');\r\n                                }\r\n                                window.analyticsData.search = {};\r\n                                window.analyticsData.search.brand = nameSplited[0];\r\n                                window.analyticsData.search.totalRecords = obj.state.context.hits;\r\n                                window.analyticsData.search.type = 'Brands click';\r\n                                window._satellite && window._satellite.track('internal_search');\r\n                                //store search term in session storage for later use on PDP/PRP to track search term with Meta/Capi\r\n                                try {\r\n                                    window.sessionStorage.setItem('TSC_SearchString', obj.state.query);\r\n                                } catch (error) {\r\n                                    console.error('Failed to store data in sessionStorage', error);\r\n                                }\r\n                                setTimeout(() => {\r\n                                    window.location.href =\r\n                                        '/pages/products/brand/' + obj.item.slugPath + '?keyword=' + obj.state.query;\r\n                                }, 400);\r\n                            },\r\n                            onActive(obj) {\r\n                                // is it an keyboard event?\r\n                                if (obj.event && obj.event.type == 'keydown') {\r\n                                    obj.state.completion = obj.state.query;\r\n                                }\r\n                                // can we bind\r\n                            },\r\n                            getItemUrl({ item, state }) {\r\n                                let nameSplited: string;\r\n                                // check for language\r\n                                if (language == 'en') {\r\n                                    nameSplited = item.valueName.en.split(':');\r\n                                } else {\r\n                                    nameSplited = item.valueName.fr.split(':');\r\n                                }\r\n                                const link = '/pages/products/brand/' + item.slugPath + '?keyword=' + state.query;\r\n                                return link;\r\n                            },\r\n                            getItems({ query }) {\r\n                                if (isStateOne(query)) {\r\n                                    brandHits = [];\r\n                                    return [];\r\n                                }\r\n                                return getAlgoliaResults({\r\n                                    searchClient,\r\n                                    queries: [\r\n                                        {\r\n                                            indexName: 'products',\r\n                                            query,\r\n                                            params: {\r\n                                                clickAnalytics: true,\r\n                                                ruleContexts: query === '' ? ['PRP'] : ['SEARCH'],\r\n                                                filters: setFilter(query),\r\n                                                hitsPerPage: 0,\r\n                                                highlightPreTag: '<mark>',\r\n                                                highlightPostTag: '</mark>',\r\n                                                facets: ['brand.lvl1.en', 'brand.lvl1.fr', 'brand.lvl1.slugPath'],\r\n                                                maxValuesPerFacet: 5,\r\n                                                sortFacetValuesBy: 'count',\r\n                                            },\r\n                                        },\r\n                                    ],\r\n                                    transformResponse(res) {\r\n                                        // send view event only if the hits are different from previous\r\n                                        // get object IDS\r\n                                        const allfacets: any = res.results[0];\r\n                                        const facetsresponse = allfacets.facets;\r\n                                        //empty case\r\n                                        if (\r\n                                            facetsresponse && // 👈 null and undefined check\r\n                                            Object.keys(facetsresponse).length === 0 &&\r\n                                            facetsresponse.constructor === Object\r\n                                        )\r\n                                            return [];\r\n                                        const enArray = Object.getOwnPropertyNames(facetsresponse['brand.lvl1.en']);\r\n                                        const frArray = Object.getOwnPropertyNames(facetsresponse['brand.lvl1.fr']);\r\n                                        const slugPath = Object.getOwnPropertyNames(\r\n                                            facetsresponse['brand.lvl1.slugPath'],\r\n                                        );\r\n                                        const brandsData = [];\r\n                                        for (const i in enArray) {\r\n                                            brandsData.push({\r\n                                                valueId: enArray[i].split(':')[1],\r\n                                                objectID: enArray[i].split(':')[1],\r\n                                                valueName: {\r\n                                                    en: enArray[i],\r\n                                                    fr: frArray[i],\r\n                                                },\r\n                                                slugPath: slugPath[i],\r\n                                            });\r\n                                        }\r\n                                        return brandsData;\r\n                                    },\r\n                                });\r\n                            },\r\n                        },\r\n                        {\r\n                            sourceId: 'PRODUCTS',\r\n                            onSelect(obj) {\r\n                                obj.event.preventDefault();\r\n                                insightsClient('clickedObjectIDsAfterSearch', {\r\n                                    eventName: 'Items clicked',\r\n                                    index: 'products',\r\n                                    objectIDs: [obj.item.objectID],\r\n                                    positions: [obj.item.index + 1],\r\n                                    queryID: obj.item.__autocomplete_queryID,\r\n                                });\r\n\r\n                                if (obj.item?.Linkall && obj.item?.Linkall != '') {\r\n                                    //Products List\r\n                                    //Clicked on 'All Product Matches'\r\n                                    window.analyticsData.search = {};\r\n                                    window.analyticsData.search.totalRecords = obj.state.context.hits;\r\n                                    window.analyticsData.search.type = 'All possible matches click';\r\n                                    if (obj.item.objectID != '') {\r\n                                        window.analyticsData.product = obj.item;\r\n                                    }\r\n                                    if (obj.state.context?.searchByActiveItem) {\r\n                                        setExtendedAnalytics(obj);\r\n                                    }\r\n                                    window._satellite && window._satellite.track('internal_search');\r\n\r\n                                    //store search term in session storage for later use on PDP/PRP to track search term with Meta/Capi\r\n                                    try {\r\n                                        const url = obj.item.Linkall;\r\n                                        if (url.includes('keyword=')) {\r\n                                            const urlParams = new URLSearchParams(url.split('?')[1]);\r\n                                            const searchTerm = urlParams.get('keyword');\r\n                                            window.sessionStorage.setItem('TSC_SearchString', searchTerm);\r\n                                        }\r\n                                    } catch (error) {\r\n                                        console.error('Failed to store data in sessionStorage', error);\r\n                                    }\r\n                                    setTimeout(() => {\r\n                                        window.location.href = obj.item.Linkall;\r\n                                    }, 400);\r\n                                } else {\r\n                                    //Products List\r\n                                    //Clicked on a Product\r\n                                    trackSearchEvent({\r\n                                        objectIDs: [obj.item.objectID],\r\n                                        positions: [obj.item.index + 1],\r\n                                        queryID: obj.item.__autocomplete_queryID,\r\n                                        index: 'products',\r\n                                    });\r\n                                    window.analyticsData.search = {};\r\n                                    window.analyticsData.search.searchTerm = obj.state.query;\r\n                                    window.analyticsData.search.totalRecords = obj.state.context.hits;\r\n                                    window.analyticsData.search.type = getSearchType(obj.state.context.source);\r\n                                    window.analyticsData.product = obj.item;\r\n                                    if (obj.state.context?.searchByActiveItem) {\r\n                                        setExtendedAnalytics(obj);\r\n                                    }\r\n                                    window._satellite && window._satellite.track('internal_search');\r\n                                    //store search term in session storage for later use on PDP/PRP to track search term with Meta/Capi\r\n                                    try {\r\n                                        window.sessionStorage.setItem('TSC_SearchString', obj.state.query);\r\n                                        window.sessionStorage.setItem('TSC_SearchClick', obj.item.objectID);\r\n                                    } catch (error) {\r\n                                        console.error('Failed to store data in sessionStorage', error);\r\n                                    }\r\n                                    if (obj.item['parentItemNo']) {\r\n                                        const urlWithParentId = obj.item.productLinkWithoutDomain.en.replace(\r\n                                            obj.item.objectID,\r\n                                            obj.item['parentItemNo'],\r\n                                        );\r\n                                        setTimeout(() => {\r\n                                            window.location.href = `${urlWithParentId}${obj.item['edpNo'] ? '&edp=' + obj.item['edpNo'] : ''}`;\r\n                                        }, 400);\r\n                                        return;\r\n                                    }\r\n                                    setTimeout(() => {\r\n                                        const [path, edp] = deriveVariantEdpAndPath(obj.item);\r\n                                        window.location.href = `${obj.item.productLinkWithoutDomain.en}${\r\n                                            edp ? '&edp=edp' : ``\r\n                                        }`;\r\n                                    }, 400);\r\n                                }\r\n                            },\r\n                            getItemUrl({ item }) {\r\n                                if (item.Linkall && item.Linkall != '') return item.Linkall;\r\n                                else return `${item.productLinkWithoutDomain.en}`;\r\n                            },\r\n                            getItems(obj) {\r\n                                if (\r\n                                    obj.state.context.searchByActiveItem == true &&\r\n                                    obj.state.context.searchActiveItem\r\n                                ) {\r\n                                    const queryObject: any = obj.state.context.searchActiveItem;\r\n                                    let query = '';\r\n                                    let filterCategoryString = '';\r\n\r\n                                    switch (queryObject.source) {\r\n                                        case 'TRENDING':\r\n                                        case 'TOPSUGGESTIONS':\r\n                                            query = queryObject.query;\r\n                                            return getAlgoliaResults({\r\n                                                searchClient,\r\n                                                queries: [\r\n                                                    {\r\n                                                        indexName: 'products',\r\n                                                        query,\r\n                                                        params: {\r\n                                                            clickAnalytics: true,\r\n                                                            ruleContexts: query === '' ? ['PRP'] : ['SEARCH'],\r\n                                                            filters: setFilter(query),\r\n                                                            hitsPerPage: 5,\r\n                                                            highlightPreTag: '<mark>',\r\n                                                            highlightPostTag: '</mark>',\r\n                                                            attributesToRetrieve: [\r\n                                                                'name',\r\n                                                                'priceIsMin',\r\n                                                                'priceWasMin',\r\n                                                                'wasPriceRange',\r\n                                                                'isPriceRange',\r\n                                                                'tsFrom',\r\n                                                                'tsTo',\r\n                                                                'edps.styleCode',\r\n                                                                'edps.imageUrl',\r\n                                                                'edps.edpNo',\r\n                                                                'priceLabel',\r\n                                                                'altItemNo',\r\n                                                                'defaultImagePath',\r\n                                                                'parentItemNo',\r\n                                                                'productLinkWithoutDomain',\r\n                                                            ],\r\n                                                        },\r\n                                                    },\r\n                                                ],\r\n                                                transformResponse({ results, hits }) {\r\n                                                    // send algolia view events\r\n                                                    // send view event only if the hits are different from previous\r\n                                                    // get object IDS\r\n                                                    if (\r\n                                                        !arraysEqual(trendingProductsHits[0], hits[0]) &&\r\n                                                        hits[0].length > 0\r\n                                                    ) {\r\n                                                        const objectID = [];\r\n                                                        trendingProductsHits = hits;\r\n                                                        for (const index in hits[0]) {\r\n                                                            objectID.push(hits[0][index].objectID);\r\n                                                        }\r\n\r\n                                                        insightsClient('viewedObjectIDs', {\r\n                                                            eventName: 'Items Viewed From ' + queryObject.source,\r\n                                                            index: 'products',\r\n                                                            objectIDs: objectID,\r\n                                                        });\r\n                                                    }\r\n                                                    const response: any = results[0];\r\n                                                    const linkAll = generateHit();\r\n                                                    linkAll.Linkall = '/pages/products';\r\n                                                    linkAll.Linkall += query.length > 0 ? '?keyword=' + query : '';\r\n                                                    hits[0].push(linkAll);\r\n                                                    //'TRENDING/TOPSUGGESTIONS'\r\n                                                    setContext({\r\n                                                        source: queryObject.source,\r\n                                                        title: t('Possible item matches'),\r\n                                                        hits: response.nbHits,\r\n                                                    });\r\n                                                    return hits;\r\n                                                },\r\n                                            });\r\n                                        case 'FEATUREDBRANDS':\r\n                                            return getAlgoliaResults({\r\n                                                searchClient,\r\n                                                queries: [\r\n                                                    {\r\n                                                        indexName: 'products',\r\n                                                        query,\r\n                                                        params: {\r\n                                                            clickAnalytics: true,\r\n                                                            ruleContexts: query === '' ? ['PRP'] : ['SEARCH'],\r\n                                                            filters:\r\n                                                                setFilter(query) +\r\n                                                                ' AND ' +\r\n                                                                'dimensionIds:' +\r\n                                                                queryObject.filterID,\r\n                                                            hitsPerPage: 5,\r\n                                                            highlightPreTag: '<mark>',\r\n                                                            highlightPostTag: '</mark>',\r\n                                                            facets: ['brand.lvl1.slugPath'],\r\n                                                            attributesToRetrieve: [\r\n                                                                'name',\r\n                                                                'priceIsMin',\r\n                                                                'priceWasMin',\r\n                                                                'wasPriceRange',\r\n                                                                'isPriceRange',\r\n                                                                'tsFrom',\r\n                                                                'tsTo',\r\n                                                                'edps.styleCode',\r\n                                                                'edps.imageUrl',\r\n                                                                'edps.edpNo',\r\n                                                                'priceLabel',\r\n                                                                'altItemNo',\r\n                                                                'defaultImagePath',\r\n                                                                'parentItemNo',\r\n                                                                'productLinkWithoutDomain',\r\n                                                            ],\r\n                                                        },\r\n                                                    },\r\n                                                ],\r\n                                                transformResponse({ results, hits }) {\r\n                                                    // send view event only if the hits are different from previous\r\n                                                    // get object IDS\r\n                                                    if (\r\n                                                        !arraysEqual(featuredBrandsProductsHits[0], hits[0]) &&\r\n                                                        hits[0].length > 0\r\n                                                    ) {\r\n                                                        const objectID = [];\r\n                                                        featuredBrandsProductsHits = hits;\r\n                                                        for (const index in hits[0]) {\r\n                                                            objectID.push(hits[0][index].objectID);\r\n                                                        }\r\n\r\n                                                        insightsClient('viewedObjectIDs', {\r\n                                                            eventName: 'Items Viewed From Featured Brands',\r\n                                                            index: 'products',\r\n                                                            objectIDs: objectID,\r\n                                                        });\r\n                                                    }\r\n                                                    const response: any = results[0];\r\n                                                    const linkAll = generateHit();\r\n                                                    const facetsresponse = response.facets;\r\n                                                    let slugPath = [];\r\n                                                    if (\r\n                                                        Object.getOwnPropertyNames(facetsresponse).includes(\r\n                                                            'brand.lvl1.slugPath',\r\n                                                        )\r\n                                                    ) {\r\n                                                        slugPath = Object.getOwnPropertyNames(\r\n                                                            facetsresponse['brand.lvl1.slugPath'],\r\n                                                        );\r\n                                                    }\r\n                                                    if (slugPath && slugPath.length > 0) {\r\n                                                        linkAll.Linkall = '/pages/products/brand/' + slugPath[0];\r\n                                                        linkAll.Linkall += query.length > 0 ? '?keyword=' + query : '';\r\n                                                    } else {\r\n                                                        linkAll.Linkall = '/pages/products';\r\n                                                        linkAll.Linkall += query.length > 0 ? '?keyword=' + query : '';\r\n                                                    }\r\n                                                    hits[0].push(linkAll);\r\n\r\n                                                    setContext({\r\n                                                        title: t('Possible item matches'),\r\n                                                        source: 'FEATUREDBRANDS',\r\n                                                        hits: response.nbHits,\r\n                                                    });\r\n\r\n                                                    return hits;\r\n                                                },\r\n                                            });\r\n                                        case 'CATEGORIES':\r\n                                            query = queryObject.query;\r\n\r\n                                            // check on which level is the path : 0 or 1\r\n                                            if (queryObject.filterID.indexOf('>') == -1)\r\n                                                filterCategoryString =\r\n                                                    'category.lvl1.en:\"' + queryObject.filterID + '\"';\r\n                                            else\r\n                                                filterCategoryString =\r\n                                                    'category.lvl2.en:\"' + queryObject.filterID + '\"';\r\n                                            return getAlgoliaResults({\r\n                                                searchClient,\r\n                                                queries: [\r\n                                                    {\r\n                                                        indexName: 'products',\r\n                                                        query,\r\n                                                        params: {\r\n                                                            clickAnalytics: true,\r\n                                                            ruleContexts: query === '' ? ['PRP'] : ['SEARCH'],\r\n                                                            filters: setFilter(query) + ' AND ' + filterCategoryString,\r\n                                                            hitsPerPage: 5,\r\n                                                            highlightPreTag: '<mark>',\r\n                                                            highlightPostTag: '</mark>',\r\n                                                            facets: ['category.lvl1.slugPath'],\r\n                                                            attributesToRetrieve: [\r\n                                                                'name',\r\n                                                                'priceIsMin',\r\n                                                                'priceWasMin',\r\n                                                                'wasPriceRange',\r\n                                                                'isPriceRange',\r\n                                                                'tsFrom',\r\n                                                                'tsTo',\r\n                                                                'edps.styleCode',\r\n                                                                'edps.imageUrl',\r\n                                                                'edps.edpNo',\r\n                                                                'priceLabel',\r\n                                                                'altItemNo',\r\n                                                                'defaultImagePath',\r\n                                                                'parentItemNo',\r\n                                                                'productLinkWithoutDomain',\r\n                                                            ],\r\n                                                        },\r\n                                                    },\r\n                                                ],\r\n                                                transformResponse(res) {\r\n                                                    // send view event only if the hits are different from previous\r\n                                                    // get object IDS\r\n                                                    if (\r\n                                                        !arraysEqual(categoriesProductsHits[0], res.hits[0]) &&\r\n                                                        res.hits[0].length > 0\r\n                                                    ) {\r\n                                                        const objectID = [];\r\n                                                        categoriesProductsHits = res.hits;\r\n                                                        for (const index in res.hits[0]) {\r\n                                                            objectID.push(res.hits[0][index].objectID);\r\n                                                        }\r\n\r\n                                                        insightsClient('viewedObjectIDs', {\r\n                                                            eventName: 'Items Viewed From Categories',\r\n                                                            index: 'products',\r\n                                                            objectIDs: objectID,\r\n                                                        });\r\n                                                    }\r\n                                                    //modify Hits\r\n                                                    const linkAll = generateHit();\r\n                                                    let queryCategoryLink = queryObject?.filterID;\r\n                                                    if (queryCategoryLink.indexOf(' > ') > -1) {\r\n                                                        queryCategoryLink = queryCategoryLink.split(' > ')[1];\r\n                                                        queryCategoryLink = queryCategoryLink.split(':')[1];\r\n                                                    } else {\r\n                                                        queryCategoryLink = queryCategoryLink.split(':')[1];\r\n                                                    }\r\n                                                    const facets: any = res.results[0];\r\n                                                    const facetsresponse = facets.facets;\r\n\r\n                                                    const slugPath = Object.getOwnPropertyNames(\r\n                                                        facetsresponse['category.lvl1.slugPath'],\r\n                                                    );\r\n                                                    linkAll.Linkall = '/pages/products/category/' + slugPath[0];\r\n                                                    linkAll.Linkall += query.length > 0 ? '?keyword=' + query : '';\r\n                                                    res.hits[0].push(linkAll);\r\n\r\n                                                    const response: any = res.results[0];\r\n                                                    setContext({\r\n                                                        title: t('Possible item matches'),\r\n                                                        source: 'CATEGORIES',\r\n                                                        hits: response.nbHits,\r\n                                                    });\r\n\r\n                                                    return res.hits;\r\n                                                },\r\n                                            });\r\n                                        case 'BRANDS':\r\n                                            query = queryObject.query;\r\n                                            return getAlgoliaResults({\r\n                                                searchClient,\r\n                                                queries: [\r\n                                                    {\r\n                                                        indexName: 'products',\r\n                                                        query,\r\n                                                        params: {\r\n                                                            clickAnalytics: true,\r\n                                                            ruleContexts: query === '' ? ['PRP'] : ['SEARCH'],\r\n                                                            filters:\r\n                                                                setFilter(query) +\r\n                                                                ' AND ' +\r\n                                                                'brand.lvl1.idPath:' +\r\n                                                                queryObject.filterID,\r\n                                                            hitsPerPage: 5,\r\n                                                            highlightPreTag: '<mark>',\r\n                                                            highlightPostTag: '</mark>',\r\n                                                            facets: ['brand.lvl1.slugPath'],\r\n                                                            attributesToRetrieve: [\r\n                                                                'name',\r\n                                                                'priceIsMin',\r\n                                                                'priceWasMin',\r\n                                                                'wasPriceRange',\r\n                                                                'isPriceRange',\r\n                                                                'tsFrom',\r\n                                                                'tsTo',\r\n                                                                'edps.styleCode',\r\n                                                                'edps.imageUrl',\r\n                                                                'edps.edpNo',\r\n                                                                'priceLabel',\r\n                                                                'altItemNo',\r\n                                                                'defaultImagePath',\r\n                                                                'parentItemNo',\r\n                                                                'productLinkWithoutDomain',\r\n                                                            ],\r\n                                                        },\r\n                                                    },\r\n                                                ],\r\n                                                transformResponse(res) {\r\n                                                    // send view event only if the hits are different from previous\r\n                                                    // get object IDS\r\n                                                    if (\r\n                                                        !arraysEqual(brandsProductsHits[0], res.hits[0]) &&\r\n                                                        res.hits[0].length > 0\r\n                                                    ) {\r\n                                                        const objectID = [];\r\n                                                        brandsProductsHits = res.hits;\r\n                                                        for (const index in res.hits[0]) {\r\n                                                            objectID.push(res.hits[0][index].objectID);\r\n                                                        }\r\n                                                        insightsClient('viewedObjectIDs', {\r\n                                                            eventName: 'Items Viewed From Brands',\r\n                                                            index: 'products',\r\n                                                            objectIDs: objectID,\r\n                                                        });\r\n                                                    }\r\n\r\n                                                    const response: any = res.results[0];\r\n                                                    const linkAll = generateHit();\r\n                                                    const facetsresponse = response.facets;\r\n                                                    const slugPath = Object.getOwnPropertyNames(\r\n                                                        facetsresponse['brand.lvl1.slugPath'],\r\n                                                    );\r\n                                                    linkAll.Linkall = '/pages/products/brand/' + slugPath[0];\r\n                                                    linkAll.Linkall += query.length > 0 ? '?keyword=' + query : '';\r\n                                                    res.hits[0].push(linkAll);\r\n                                                    setContext({\r\n                                                        source: 'BRANDS',\r\n                                                        title: t('Possible item matches'),\r\n                                                        hits: response.nbHits,\r\n                                                    });\r\n                                                    return res.hits;\r\n                                                },\r\n                                            });\r\n                                    }\r\n                                }\r\n                                // empty on state one\r\n                                if (isStateOne(obj.query)) {\r\n                                    const query = '';\r\n                                    return getAlgoliaResults({\r\n                                        searchClient,\r\n                                        queries: [\r\n                                            {\r\n                                                indexName: 'products',\r\n                                                query,\r\n                                                params: {\r\n                                                    clickAnalytics: true,\r\n                                                    ruleContexts: query === '' ? ['PRP'] : ['SEARCH'],\r\n                                                    filters:\r\n                                                        setFilter(query) +\r\n                                                        createFilterMultipleDimensions(contentfulProducts),\r\n                                                    sortFacetValuesBy: 'count',\r\n                                                    hitsPerPage: 5,\r\n                                                    highlightPreTag: '<mark>',\r\n                                                    highlightPostTag: '</mark>',\r\n                                                    maxValuesPerFacet: 5,\r\n                                                    facets: ['category.lvl1.slugPath', 'brand.lvl1.slugPath'],\r\n                                                    attributesToRetrieve: [\r\n                                                        'name',\r\n                                                        'priceIsMin',\r\n                                                        'priceWasMin',\r\n                                                        'wasPriceRange',\r\n                                                        'isPriceRange',\r\n                                                        'tsFrom',\r\n                                                        'tsTo',\r\n                                                        'edps.styleCode',\r\n                                                        'edps.imageUrl',\r\n                                                        'edps.edpNo',\r\n                                                        'priceLabel',\r\n                                                        'altItemNo',\r\n                                                        'defaultImagePath',\r\n                                                        'parentItemNo',\r\n                                                        'productLinkWithoutDomain',\r\n                                                    ],\r\n                                                },\r\n                                            },\r\n                                        ],\r\n                                        transformResponse(res) {\r\n                                            const response: any = res.results[0];\r\n                                            const linkAll = generateHit();\r\n                                            const facets: any = res.results[0];\r\n                                            const facetsresponse = facets.facets;\r\n                                            let slugPath = '';\r\n                                            let dimType = '';\r\n                                            if (\r\n                                                Object.getOwnPropertyNames(facetsresponse).includes(\r\n                                                    'category.lvl1.slugPath',\r\n                                                )\r\n                                            ) {\r\n                                                slugPath = Object.getOwnPropertyNames(\r\n                                                    facetsresponse['category.lvl1.slugPath'],\r\n                                                )[0];\r\n                                                dimType = 'category';\r\n                                            } else if (\r\n                                                Object.getOwnPropertyNames(facetsresponse).includes(\r\n                                                    'brand.lvl1.slugPath',\r\n                                                )\r\n                                            ) {\r\n                                                slugPath = Object.getOwnPropertyNames(\r\n                                                    facetsresponse['brand.lvl1.slugPath'],\r\n                                                )[0];\r\n                                                dimType = 'brand';\r\n                                            }\r\n                                            if (contentfulSeoUrl) {\r\n                                                linkAll.Linkall = contentfulSeoUrl;\r\n                                            } else {\r\n                                                linkAll.Linkall = '/pages/products';\r\n                                                linkAll.Linkall += obj.query.length > 0 ? '?keyword=' + obj.query : '';\r\n                                            }\r\n                                            res.hits[0].push(linkAll);\r\n                                            setContext({\r\n                                                source: 'ALGOLIADIMENSION',\r\n                                                dimension: contentfulProducts,\r\n                                                title: SearchMiddleSectionTitle,\r\n                                                hits: response.nbHits,\r\n                                                slugPath: slugPath[0],\r\n                                            });\r\n                                            return res.hits;\r\n                                        },\r\n                                    });\r\n                                } else {\r\n                                    // regular possible item matches\r\n                                    const query = obj.query;\r\n                                    //check if query is 6 digit number, and set context\r\n\r\n                                    const ruleContext: string[] = setRuleContext(query, setContext);\r\n                                    return getAlgoliaResults({\r\n                                        searchClient,\r\n                                        queries: [\r\n                                            {\r\n                                                indexName: 'products',\r\n                                                query,\r\n                                                params: {\r\n                                                    clickAnalytics: true,\r\n                                                    filters: setFilter(query),\r\n                                                    ruleContexts: ruleContext,\r\n                                                    hitsPerPage: 5,\r\n                                                    highlightPreTag: '<mark>',\r\n                                                    highlightPostTag: '</mark>',\r\n                                                    attributesToRetrieve: [\r\n                                                        'name',\r\n                                                        'priceIsMin',\r\n                                                        'priceWasMin',\r\n                                                        'wasPriceRange',\r\n                                                        'isPriceRange',\r\n                                                        'altItemNo',\r\n                                                        'tsFrom',\r\n                                                        'tsTo',\r\n                                                        'edps.styleCode',\r\n                                                        'edps.imageUrl',\r\n                                                        'edps.edpNo',\r\n                                                        'priceLabel',\r\n                                                        'defaultImagePath',\r\n                                                        'parentItemNo',\r\n                                                        'deliveryOptions',\r\n                                                        'brandText',\r\n                                                        'productLinkWithoutDomain',\r\n                                                    ],\r\n                                                },\r\n                                            },\r\n                                        ],\r\n                                        transformResponse({ results, hits }) {\r\n                                            const response: any = results[0];\r\n                                            // send view event only if the hits are different from previous\r\n                                            // get object IDS\r\n                                            if (!arraysEqual(queryProductsHits[0], hits[0]) && hits[0].length > 0) {\r\n                                                const objectID = [];\r\n                                                queryProductsHits = hits;\r\n                                                for (const index in hits[0]) {\r\n                                                    objectID.push(hits[0][index].objectID);\r\n                                                }\r\n                                                insightsClient('viewedObjectIDs', {\r\n                                                    eventName: 'Items Viewed From Query',\r\n                                                    index: 'products',\r\n                                                    objectIDs: objectID,\r\n                                                });\r\n                                            }\r\n                                            if (isExactProductNumber(query)) {\r\n                                                //we will go through the products, and if they are children of a parent product,\r\n                                                //we will reach over to the parent to discover the childs edpNo and save it back into the child product data\r\n                                                const hitsLength = hits[0].length;\r\n                                                for (let i = 0; i < hitsLength; i++) {\r\n                                                    if (hits[0][i]['parentItemNo'] != '') {\r\n                                                        //found a child item\r\n                                                        const parentItemNumber = hits[0][i]['parentItemNo'];\r\n                                                        const childItemNumber = hits[0][i]['objectID'];\r\n                                                        // get the delivery options from the parent item\r\n                                                        hits[0]\r\n                                                            .filter((item) => item.objectID == parentItemNumber)\r\n                                                            .forEach((itemFound) => {\r\n                                                                itemFound['deliveryOptions']\r\n                                                                    .filter(\r\n                                                                        (deliveryOption) =>\r\n                                                                            deliveryOption['itemNo'] == childItemNumber,\r\n                                                                    )\r\n                                                                    .forEach((subLevel) => {\r\n                                                                        //we found a child in the parent deliveryOption\r\n                                                                        //hurray we found the childs edpNo!\r\n                                                                        //add this edp info to the original hits object, making it available for later use\r\n                                                                        hits[0][i]['edpNo'] = subLevel['edpNo'];\r\n                                                                        //save deliveryOption to context (with parentID added for later use)\r\n                                                                        const enhancedDeliveryOptions = itemFound[\r\n                                                                            'deliveryOptions'\r\n                                                                        ].map((element) => ({\r\n                                                                            parentID: parentItemNumber,\r\n                                                                            ...element,\r\n                                                                        }));\r\n                                                                        setContext({\r\n                                                                            deliveryOptions: enhancedDeliveryOptions,\r\n                                                                        });\r\n                                                                    });\r\n                                                            });\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                            const linkAll = generateHit();\r\n                                            linkAll.Linkall = '/pages/products';\r\n                                            linkAll.Linkall +=\r\n                                                query.length > 0 ? '?keyword=' + encodeURIComponent(query) : '';\r\n                                            hits[0].push(linkAll);\r\n                                            setContext({\r\n                                                source: 'QUERY',\r\n                                                title: t('Possible item matches'),\r\n                                                hits: response.nbHits,\r\n                                            });\r\n                                            return hits;\r\n                                        },\r\n                                    });\r\n                                }\r\n                            },\r\n                        },\r\n                        {\r\n                            sourceId: 'POPULARCOLLECTIONS',\r\n                            getItemUrl({ item }) {\r\n                                return item.LinkWithoutDomain;\r\n                            },\r\n                            getItems(obj) {\r\n                                if (!isStateOne(query)) return [];\r\n                                else return popularCollections;\r\n                            },\r\n                        },\r\n                    ];\r\n                },\r\n\r\n                onSubmit(autocompleteOb) {\r\n                    // hit the api see if there is any redirect if so go the redirect otherwise\r\n                    //just go to the url\r\n                    if (autocompleteOb.state.query == '') {\r\n                        return;\r\n                    }\r\n                    //remove hyphen and spaces\r\n                    const cleanQuery = autocompleteOb.state.query.replace(/-/g, '').replace(/\\s+/g, '');\r\n                    window.analyticsData.search = {};\r\n                    window.analyticsData.search.searchTerm = autocompleteOb.state.query;\r\n                    window.analyticsData.search.totalRecords = autocompleteOb.state.context.hits;\r\n                    window.analyticsData.search.type = 'Standard search';\r\n                    window._satellite && window._satellite.track('internal_search');\r\n                    //store search term in session storage for later use on PDP/PRP to track search term with Meta/Capi\r\n                    try {\r\n                        window.sessionStorage.setItem('TSC_SearchString', autocompleteOb.state.query);\r\n                    } catch (error) {\r\n                        console.error('Failed to store data in sessionStorage', error);\r\n                    }\r\n                    if (autocompleteOb.state.context.exactNumber) {\r\n                        //if 6 digit number, send to to PDP\r\n                        //check deliveryOptions in context in case this is a child item and we need to send to parent instead\r\n                        const tempDeliveryContext: [] = autocompleteOb.state.context['deliveryOptions'] as [];\r\n                        if (tempDeliveryContext != null && tempDeliveryContext.length > 0) {\r\n                            tempDeliveryContext\r\n                                .filter((item) => {\r\n                                    return item['itemNo'] == cleanQuery;\r\n                                })\r\n                                .forEach((subItem) => {\r\n                                    // send to Parent with child EDP parameter\r\n                                    trackInternalSearchEvent(autocompleteOb);\r\n                                    // we dont have seo friendly url on deliveryoption object\r\n                                    window.location.href =\r\n                                        '/pages/productdetails?nav=R:' +\r\n                                        (subItem['parentID'] + (subItem['edpNo'] ? '&edp=' + subItem['edpNo'] : ''));\r\n                                    return;\r\n                                });\r\n                            return;\r\n                        }\r\n                        trackInternalSearchEvent(autocompleteOb);\r\n                        // we dont have seo friendly url on deliveryoption object\r\n                        window.location.assign('/pages/productdetails?nav=R:' + encodeURIComponent(cleanQuery));\r\n                        return;\r\n                    }\r\n\r\n                    const redirectIndex = searchClient.initIndex('redirections');\r\n                    const filterData = `\"fields.keywords.en-CA\": \"${autocompleteOb.state.query.trimEnd()}\" OR \"fields.keywords.fr-CA\": \"${autocompleteOb.state.query.trimEnd()}\"`;\r\n                    redirectIndex\r\n                        .search(autocompleteOb.state.query.trimEnd(), {\r\n                            filters: filterData,\r\n                            sortFacetValuesBy: 'count',\r\n                            maxValuesPerFacet: 2,\r\n                            hitsPerPage: 1,\r\n                        })\r\n                        .then((data) => {\r\n                            if (data.hits && data.hits.length > 0) {\r\n                                //redirection\r\n                                //@ts-ignore\r\n                                const destination = data.hits[0].fields.targetUrl['en-CA'];\r\n                                let firstParameter = '?';\r\n                                if (destination.indexOf('?') > -1) {\r\n                                    firstParameter = '&';\r\n                                }\r\n                                const keywordParam =\r\n                                    destination.includes('/pages/productresults') ||\r\n                                    destination.includes('/pages/category')\r\n                                        ? 'searchterm'\r\n                                        : 'keyword';\r\n                                return window.location.assign(\r\n                                    `${destination}${firstParameter}rd=1&${keywordParam}=${encodeURIComponent(\r\n                                        autocompleteOb.state.query,\r\n                                    )}`,\r\n                                );\r\n                            } else {\r\n                                //no redirection\r\n                                window.location.assign(\r\n                                    '/pages/products?keyword=' + encodeURIComponent(autocompleteOb.state.query),\r\n                                );\r\n                            }\r\n                        })\r\n                        .catch((error) => {\r\n                            console.log(error);\r\n                        });\r\n                },\r\n                ...props,\r\n            }),\r\n        [props],\r\n    );\r\n    autocompleteRef = autocomplete;\r\n\r\n    const inputRef = React.useRef<HTMLInputElement>(null);\r\n    const formRef = React.useRef<HTMLFormElement>(null);\r\n    const panelRef = React.useRef<HTMLDivElement>(null);\r\n\r\n    const { getEnvironmentProps } = autocomplete;\r\n    React.useEffect(() => {\r\n        const SecondaryNavigationSearch = document.querySelector<HTMLElement>('.secondary-navigation__search');\r\n        const SecondaryNavigationSearchBackButton = document.querySelector<HTMLElement>(\r\n            '.secondary-navigation__search__back-button',\r\n        );\r\n        //select category bar\r\n        const categoryNavBar = document.querySelector<HTMLElement>('.container-primary-navigation');\r\n        const PrimaryNavigation = document.querySelector<HTMLElement>('.primary-navigation');\r\n        const TrailingHeaderContent = document.querySelector<HTMLElement>('.HeaderWithLogoAndSearchV2')\r\n            .nextElementSibling as HTMLElement | null;\r\n        const TSCMiddle = document.querySelector<HTMLElement>('.Middle');\r\n        const SecondaryNavigationAAPanel = document.querySelector<HTMLElement>('.aa-Panel');\r\n        const SAYT_OVERLAY_HEIGHT_ADJUSTMENT = 42;\r\n        const breakpoint =\r\n            panelSize.width > 1023\r\n                ? 'desktop'\r\n                : panelSize.width > 767 && panelSize.width < 1024\r\n                  ? 'tablet'\r\n                  : 'smartphone';\r\n\r\n        const contentPushDownInterval: NodeJS.Timer | null = null;\r\n        let searchFocusAddClass: NodeJS.Timeout | null = null;\r\n\r\n        if (autocompleteState.isOpen) {\r\n            categoryNavBar.classList.add('invisible');\r\n            if (panelSize.width < 768) {\r\n                document.body.classList.add('pageScrollOff');\r\n                //emit a custom event open\r\n            }\r\n\r\n            if (panelSize.width < 1023) {\r\n                if (SecondaryNavigationSearch) {\r\n                    SecondaryNavigationSearch?.classList.add('secondary-navigation__search--focus');\r\n                    searchFocusAddClass = setTimeout(() => {\r\n                        SecondaryNavigationSearch?.classList.add('secondary-navigation__search--focus');\r\n                    }, 200);\r\n                    SecondaryNavigationSearchBackButton?.classList.add(\r\n                        'secondary-navigation__search__back-button--active',\r\n                    );\r\n                    SecondaryNavigationSearchBackButton.addEventListener('click', () => {\r\n                        autocomplete.setIsOpen(false);\r\n                    });\r\n                }\r\n            }\r\n\r\n            const SecondaryNavigationAAPanelOffsetHeight = SecondaryNavigationAAPanel.offsetHeight;\r\n\r\n            if (TrailingHeaderContent) {\r\n                /*\r\n                console.log('%c SecondaryNavigationAAPanelOffsetHeight', 'color: red; font-weight: bold;');\r\n                console.log({ SecondaryNavigationAAPanelOffsetHeight });\r\n                */\r\n                TrailingHeaderContent.style.marginTop = `${SecondaryNavigationAAPanelOffsetHeight}px`;\r\n            } else {\r\n                TSCMiddle.style.marginTop = `${SecondaryNavigationAAPanelOffsetHeight}px`;\r\n            }\r\n\r\n            // @ts-ignore\r\n            const AAPanelResize = new ResizeObserver((entries) => {\r\n                const AAPanelNewHeight = entries[0].contentRect.height;\r\n\r\n                if (TrailingHeaderContent) {\r\n                    /*\r\n                    console.log('%c AAPanelNewHeight', 'color: blue; font-weight: bold;');\r\n                    console.log({ AAPanelNewHeight });\r\n                    */\r\n                    TrailingHeaderContent.style.marginTop =\r\n                        AAPanelNewHeight === 0\r\n                            ? '0px'\r\n                            : breakpoint === 'desktop'\r\n                              ? `${AAPanelNewHeight - SAYT_OVERLAY_HEIGHT_ADJUSTMENT}px`\r\n                              : `${AAPanelNewHeight - SAYT_OVERLAY_HEIGHT_ADJUSTMENT / 2}px`;\r\n                } else {\r\n                    TSCMiddle.style.marginTop =\r\n                        AAPanelNewHeight === 0\r\n                            ? '0px'\r\n                            : breakpoint === 'desktop'\r\n                              ? `${AAPanelNewHeight - SAYT_OVERLAY_HEIGHT_ADJUSTMENT}px`\r\n                              : `${AAPanelNewHeight - SAYT_OVERLAY_HEIGHT_ADJUSTMENT / 2}px`;\r\n                }\r\n            });\r\n\r\n            AAPanelResize.observe(SecondaryNavigationAAPanel);\r\n            PrimaryNavigation?.classList.add('primary-navigation--search-focus');\r\n\r\n            return () => {\r\n                if (!searchFocusAddClass) {\r\n                    clearTimeout(searchFocusAddClass);\r\n                }\r\n            };\r\n        } else {\r\n            document.body.classList.remove('pageScrollOff');\r\n            categoryNavBar.classList.remove('invisible');\r\n            if (panelSize.width < 1023) {\r\n                if (SecondaryNavigationSearch) {\r\n                    searchFocusAddClass = setTimeout(() => {\r\n                        SecondaryNavigationSearch?.classList.remove('secondary-navigation__search--focus');\r\n                    }, 200);\r\n                    SecondaryNavigationSearchBackButton?.classList.remove(\r\n                        'secondary-navigation__search__back-button--active',\r\n                    );\r\n                }\r\n            }\r\n\r\n            if (TrailingHeaderContent) {\r\n                // console.log('%c TrailingHeaderContent', 'color: lime; font-weight: bold;');\r\n                TrailingHeaderContent.style.marginTop = '0px';\r\n            } else {\r\n                TSCMiddle.style.marginTop = '0px';\r\n            }\r\n\r\n            PrimaryNavigation?.classList.remove('primary-navigation--search-focus');\r\n        }\r\n\r\n        return () => {\r\n            if (!searchFocusAddClass) {\r\n                clearTimeout(searchFocusAddClass);\r\n            }\r\n        };\r\n    }, [autocompleteState.isOpen, autocomplete, panelSize.width, autocompleteState]);\r\n\r\n    React.useEffect(() => {\r\n        if (!formRef.current || !panelRef.current || !inputRef.current) {\r\n            return undefined;\r\n        }\r\n\r\n        const { onTouchStart, onTouchMove, onMouseDown } = getEnvironmentProps({\r\n            formElement: formRef.current,\r\n            inputElement: inputRef.current,\r\n            panelElement: panelRef.current,\r\n        });\r\n\r\n        window.addEventListener('touchstart', onTouchStart);\r\n        window.addEventListener('touchmove', onTouchMove);\r\n        window.addEventListener('mousedown', onMouseDown);\r\n\r\n        return () => {\r\n            window.removeEventListener('touchstart', onTouchStart);\r\n            window.removeEventListener('touchmove', onTouchMove);\r\n            window.removeEventListener('mousedown', onMouseDown);\r\n        };\r\n    }, [getEnvironmentProps, autocompleteState.isOpen]);\r\n\r\n    React.useEffect(() => {\r\n        const waitUntil = (condition) => {\r\n            return new Promise((resolve, reject) => {\r\n                const interval = setInterval(() => {\r\n                    if (typeof window.alloy === 'undefined') {\r\n                        return;\r\n                    }\r\n                    clearInterval(interval);\r\n                    //@ts-ignore\r\n                    resolve();\r\n                }, 1500);\r\n\r\n                setTimeout(() => {\r\n                    clearInterval(interval);\r\n                    reject('your error msg');\r\n                }, 1500);\r\n            });\r\n        };\r\n        waitUntil(() => {\r\n            typeof window.alloy !== 'undefined';\r\n        })\r\n            .catch((error) => {\r\n                console.warn('Alloy not loaded');\r\n            })\r\n            .finally(async () => {\r\n                await getUser();\r\n            });\r\n    }, []);\r\n\r\n    /// handler to reset the search\r\n    function setClick() {\r\n        autocomplete.setContext({ reset: true });\r\n        autocomplete.setIsOpen(true);\r\n        autocomplete.refresh();\r\n    }\r\n    function getPanelHeightMobile() {\r\n        if (panelSize.width < 768) {\r\n            if (panelRef.current) {\r\n                const panelDistanceFrom = getPageTopLeft(panelRef.current);\r\n                return { maxHeight: panelSize.height - panelDistanceFrom.top - 3 };\r\n            } else {\r\n                return {};\r\n            }\r\n        } else {\r\n            return {};\r\n        }\r\n    }\r\n    return (\r\n        <div style={{ width: '100%' }}>\r\n            <div className=\"aa-Autocomplete ac__wrap\" {...autocomplete.getRootProps({})}>\r\n                <form\r\n                    ref={formRef}\r\n                    className=\"aa-Form ac__input-wrap\"\r\n                    {...autocomplete.getFormProps({ inputElement: inputRef.current })}\r\n                >\r\n                    <label className=\"aa-Label\" {...autocomplete.getLabelProps({})}>\r\n                        Search\r\n                    </label>\r\n                    {autocompleteState.isOpen && (\r\n                        <div className=\"aa-InputWrapperPrefix\">\r\n                            <button\r\n                                className=\"ac__close-button\"\r\n                                title=\"Close\"\r\n                                type=\"button\"\r\n                                onClick={() => {\r\n                                    autocomplete.setIsOpen(false);\r\n                                }}\r\n                            >\r\n                                <div className=\"ac__close-button--arrow\"></div>\r\n                            </button>\r\n                        </div>\r\n                    )}\r\n                    <div className=\"aa-InputWrapper\">\r\n                        <input\r\n                            className=\"aa-Input\"\r\n                            ref={inputRef}\r\n                            {...autocomplete.getInputProps({ inputElement: inputRef.current })}\r\n                            onClick={setClick}\r\n                            //onKeyPress={handleKeyPress}\r\n                        />\r\n                    </div>\r\n                    {autocompleteState.query.length > 0 && (\r\n                        <div className=\"aa-InputWrapperSuffix\">\r\n                            <button className=\"aa-ClearButton\" title=\"Clear\" type=\"reset\" tabIndex={0}>\r\n                                <CloseSvg />\r\n                            </button>\r\n                        </div>\r\n                    )}\r\n                    <div className=\"aa-InputWrapperSuffix\">\r\n                        <button className=\"aa-SubmitButton\" type=\"submit\" title=\"Submit\" tabIndex={0}>\r\n                            <svg viewBox=\"0 0 41 41\">\r\n                                <path\r\n                                    d=\"M37.39 32.08L24.71 25.2a11.54 11.54 0 10-.9 1.16l12.84 7a.73.73 0 00.7-1.28zm-22.11-3.3a9.89 9.89 0 119.89-9.89 9.9 9.9 0 01-9.89 9.89z\"\r\n                                    fill=\"#231f20\"\r\n                                ></path>\r\n                            </svg>\r\n                        </button>\r\n                    </div>\r\n                </form>\r\n\r\n                {autocompleteState.isOpen && (\r\n                    <>\r\n                        {/* <div className=\"search-overlay\"></div> */}\r\n                        <div\r\n                            ref={panelRef}\r\n                            className={[\r\n                                'aa-Panel',\r\n                                'aa-Panel--desktop',\r\n                                autocompleteState.status === 'stalled' && 'aa-Panel--stalled',\r\n                            ]\r\n                                .filter(Boolean)\r\n                                .join(' ')}\r\n                            {...autocomplete.getPanelProps({})}\r\n                        >\r\n                            <KeyHandler handler={handler} />\r\n                            <div className=\"aa-PanelLayout aa-Panel--scrollable\" style={getPanelHeightMobile()}>\r\n                                <Layout\r\n                                    collection={autocompleteState.collections}\r\n                                    autocomplete={autocomplete}\r\n                                    state={autocompleteState}\r\n                                    client={searchClient}\r\n                                    language={language}\r\n                                    SearchLeftBottomSectionTitle={SearchLeftBottomSectionTitle}\r\n                                    popularCollections={popularCollections}\r\n                                    SearchRightSectionTitle={SearchRightSectionTitle}\r\n                                    insightsClient={insightsClient}\r\n                                ></Layout>\r\n                            </div>\r\n                        </div>\r\n                    </>\r\n                )}\r\n                {noResults && !isStateOne(autocompleteState.query) && (\r\n                    <>\r\n                        <div\r\n                            ref={panelRef}\r\n                            className={[\r\n                                'aa-Panel',\r\n                                'aa-Panel--desktop',\r\n                                autocompleteState.status === 'stalled' && 'aa-Panel--stalled',\r\n                            ]\r\n                                .filter(Boolean)\r\n                                .join(' ')}\r\n                            {...autocomplete.getPanelProps({})}\r\n                        >\r\n                            <div\r\n                                className=\"aa-PanelLayout aa-Panel--scrollable\"\r\n                                style={{ margin: '4%', textAlign: 'center' }}\r\n                            >\r\n                                <h5 className=\"search-title\"> {noResultStr}</h5>\r\n                            </div>\r\n                        </div>\r\n                    </>\r\n                )}\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n","import * as React from 'react';\r\nimport ReactDOM from 'react-dom/client';\r\n\r\nimport { Autocomplete } from './autocomplete.component';\r\nconst ZoneElements = document.querySelectorAll('.algolia-search');\r\nlet dataAPI = {};\r\nconst headerData = document.querySelectorAll('.headerWithLogoAndSearch');\r\n// get the data from header component\r\nif (headerData.length > 0) {\r\n    headerData.forEach((node) => {\r\n        const jsonData = JSON.parse(node.getAttribute('data'));\r\n        dataAPI = { node: node, data: jsonData };\r\n    });\r\n}\r\nlet debug = false;\r\nconst urlParams = new URLSearchParams(window.location.search);\r\n\r\n// parameter to keep panel open\r\nif (urlParams.get('algoliapaneldebug') == 'true') {\r\n    debug = true;\r\n}\r\n\r\nif (ZoneElements.length > 0) {\r\n    ZoneElements.forEach((ZoneElement) => {\r\n        const root = ReactDOM.createRoot(ZoneElement);\r\n        root.render(<Autocomplete placeholder=\"Search\" debug={debug} openOnFocus={true} dataAPI={dataAPI} />);\r\n    });\r\n}\r\n"],"names":["debounce","fn","time","timerId","undefined","_len","arguments","length","args","Array","_key","clearTimeout","setTimeout","apply","createRef","initialValue","current","isPrimitive","obj","Object","isEqual","first","second","keys","_i","_Object$keys","key","noop","createClickedEvent","_ref","item","_ref$items","items","index","__autocomplete_indexName","positions","findIndex","x","objectID","queryID","__autocomplete_queryID","algoliaSource","_slicedToArray","arr","i","isArray","_arrayWithHoles","Symbol","iterator","_s","_e","_x","_r","_arr","_n","_d","call","next","done","push","value","err","return","_iterableToArrayLimit","o","minLen","_arrayLikeToArray","n","prototype","toString","slice","constructor","name","from","test","_unsupportedIterableToArray","TypeError","_nonIterableRest","len","arr2","_excluded","_excluded2","_typeof","_toConsumableArray","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","_objectWithoutProperties","source","excluded","target","sourceKeys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","ownKeys","object","enumerableOnly","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","arg","input","hint","prim","toPrimitive","res","String","Number","_toPrimitive","_toPropertyKey","configurable","writable","mapToInsightsParamsApi","params","map","param","objectIDs","_ref2","createSearchInsightsApi","searchInsights","canSendHeaders","client","_split$map2","version","split","major","minor","isModernInsightsClient","sendToInsights","method","payloads","_items$0$__autocomple","__autocomplete_algoliaCredentials","headers","appId","apiKey","concat","init","setUserToken","userToken","clickedObjectIDsAfterSearch","clickedObjectIDs","_len2","_key2","clickedFilters","_len3","_key3","convertedObjectIDsAfterSearch","_len4","_key4","convertedObjectIDs","_len5","_key5","convertedFilters","_len6","_key6","viewedObjectIDs","_len7","_key7","reduce","acc","_ref3","chunkSize","chunks","chunk","_ref4","payload","_ref5","viewedFilters","_len8","_key8","createViewedEvents","itemsByIndexName","_acc$current$__autoco","indexName","isAlgoliaInsightsHit","hit","ALGOLIA_INSIGHTS_VERSION","ALGOLIA_INSIGHTS_SRC","sendViewedObjectIDs","onItemsChange","insights","state","insightsEvents","event","eventName","createAlgoliaInsightsPlugin","options","_getOptions","_ref8","onSelect","_ref9","onActive","getOptions","providedInsightsClient","insightsClient","onSelectEvent","onActiveEvent","callback","window","safelyRunOnBrowser","pointer","AlgoliaAnalyticsObject","queue","environment","errorMessage","script","document","createElement","async","src","onerror","console","error","body","appendChild","cause","loadInsights","previousItems","debouncedOnStateChange","isOpen","collections","subscribe","setContext","algoliaInsightsPlugin","__algoliaSearchParameters","clickAnalytics","getItems","_ref6","onStateChange","_ref7","__autocomplete_pluginOptions","createStore","reducer","props","onStoreStateChange","list","initialState","getState","dispatch","action","prevState","type","pendingRequests","add","cancelablePromise","finally","cancelAll","promise","cancel","isEmpty","flatten","values","a","b","getItemsCount","sum","collection","autocompleteId","getDefaultProps","pluginSubscribers","_props$id","plugins","debug","openOnFocus","placeholder","autoFocus","defaultActiveItemId","stallThreshold","shouldPanelOpen","reshape","sources","id","activeItemId","query","completion","status","context","_props$onStateChange","_x$onStateChange","onSubmit","_props$onSubmit","_x$onSubmit","onReset","_props$onReset","_x$onReset","getSources","Promise","all","plugin","Boolean","seenSourceIds","resolve","then","maybeSource","sourceId","includes","Error","JSON","stringify","defaultSource","getItemInputValue","getItemUrl","setIsOpen","onResolve","__default","normalizedSource","getNormalizedSources","nested","_x$onSelect","_x$onActive","_x$onResolve","navigator","navigate","itemUrl","location","assign","navigateNewTab","windowReference","open","focus","navigateNewWindow","isDescription","execute","preResolve","itemsOrDescription","description","contextParameters","requesterId","_state$context$key","requests","queries","transformResponse","packed","searchClient","container","find","_container$items","request","maybeDescription","responses","postResolve","store","rawResults","matches","response","results","transform","hits","result","facetHits","_facetHits","facetHit","label","count","_highlightResult","highlighted","every","createInternalCancelablePromise","onfulfilled","onrejected","createCallback","catch","onfinally","onCancelList","isCanceled","callbacks","createCancelablePromise","executor","reject","cancelable","onResult","fallback","getActiveItem","accumulatedCollectionsCount","collectionsCount","nextValue","collectionIndex","getCollectionFromActiveItemId","isOffsetFound","counter","previousItemsOffset","currentCollection","getRelativeActiveItemId","itemInputValue","reason","basePromiseId","latestResolvedId","latestResolvedValue","lastStalledId","runConcurrentSafePromise","currentPromiseId","onInput","_ref$nextState","nextState","refresh","setters","setCollections","setQuery","setActiveItemId","setStatus","_nextState$isOpen","_request","originalSourcesBySourceId","sourcesBySourceId","_nextState$isOpen2","isPanelOpen","highlightedItem","regex","_excluded3","_excluded4","_excluded5","_excluded6","_excluded7","getPropGetters","getAutocompleteId","instanceId","getEnvironmentProps","providedProps","inputElement","formElement","panelElement","onMouseDownOrTouchStart","some","contextNode","parent","child","contains","onTouchStart","onMouseDown","onTouchMove","activeElement","blur","getRootProps","rest","role","getFormProps","noValidate","_providedProps$inputE","preventDefault","_providedProps$inputE2","getLabelProps","sourceIndex","htmlFor","getInputProps","_props$environment$na","onFocus","_ref2$maxLength","maxLength","activeItem","shouldFallbackKeyHint","userAgent","match","isSamsung","enterKeyHint","autoComplete","autoCorrect","autoCapitalize","spellCheck","onChange","currentTarget","onKeyDown","triggerScrollIntoView","nodeItem","getElementById","scrollIntoViewIfNeeded","scrollIntoView","triggerOnActive","nextActiveItemId","metaKey","ctrlKey","shiftKey","altKey","onBlur","onClick","getPanelProps","onMouseLeave","getListProps","getItemProps","__autocomplete_id","onMouseMove","_item","_source","segment","getMetadata","_","_options$__autocomple","_options$__autocomple2","_options$__autocomple3","optionsKey","__autocomplete_metadata","userAgents","extraOptions","ua","getCompletion","_getActiveItem","getNextActiveItemId","moveAmount","baseIndex","itemCount","numericIndex","stateReducer","hasOwnProperty","_nextState","createAutocomplete","subscribers","rawValue","baseItemId","getAutocompleteSetters","propGetters","Event","insightsParams","_plugin$subscribe","_environment$navigato","_environment$navigato2","metadata","metadataContainer","headRef","querySelector","content","injectMetadata","LOCAL_STORAGE_KEY","LOCAL_STORAGE_KEY_TEST","getLocalStorage","localStorage","setItem","removeItem","isLocalStorageSupported","getItem","parse","getTemplates","onRemove","onTapAhead","components","className","viewBox","fill","d","ReverseHighlight","attribute","category","title","stopPropagation","getDefaultSubscribe","inputValue","recentItem","__autocomplete_qsCategory","addItem","createRecentSearchesPlugin","transformSource","storage","onAdd","getAll","createStorageApi","lastItemsRef","templates","data","getAlgoliaSearchParams","_params$facetFilters","_params$hitsPerPage","facetFilters","hitsPerPage","Math","max","addHighlightedAttribute","replace","RegExp","search","limit","toLowerCase","createAlgoliaRequester","fetcher","fetcherParams","_fetcherParams$reques","requesterParams","requestParams","createRequester","_ref$userAgents","addAlgoliaAgent","_getAppIdAndApiKey","transporter","_ref$headers","_ref$queryParameters","queryParameters","APP_ID","API_KEY","getAppIdAndApiKey","searchParameters","highlightPreTag","highlightPostTag","resultIndex","_result$hits","getAlgoliaResults","requester","MapShim","Map","getIndex","entry","class_1","this","__entries__","get","set","delete","entries","splice","has","clear","ctx","_a","isBrowser","global$1","g","self","Function","requestAnimationFrame$1","requestAnimationFrame","bind","Date","now","transitionKeys","mutationObserverSupported","MutationObserver","ResizeObserverController","connected_","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","delay","leadingCall","trailingCall","lastCallTime","resolvePending","proxy","timeoutCallback","timeStamp","throttle","addObserver","observer","connect_","removeObserver","observers","disconnect_","updateObservers_","activeObservers","gatherActive","hasActive","broadcastActive","addEventListener","observe","attributes","childList","characterData","subtree","removeEventListener","disconnect","_b","propertyName","getInstance","instance_","defineConfigurable","getWindowOf","ownerDocument","defaultView","emptyRect","createRectInit","toFloat","parseFloat","getBordersSize","styles","size","position","getHTMLElementContentRect","clientWidth","clientHeight","getComputedStyle","paddings","positions_1","getPaddings","horizPad","left","right","vertPad","top","bottom","width","height","boxSizing","round","documentElement","isDocumentElement","vertScrollbar","horizScrollbar","abs","isSVGGraphicsElement","SVGGraphicsElement","SVGElement","getBBox","getContentRect","bbox","getSVGContentRect","y","ResizeObservation","broadcastWidth","broadcastHeight","contentRect_","isActive","rect","broadcastRect","ResizeObserverEntry","rectInit","Constr","contentRect","DOMRectReadOnly","create","ResizeObserverSPI","controller","callbackCtx","activeObservations_","observations_","callback_","controller_","callbackCtx_","Element","observations","unobserve","clearActive","_this","observation","WeakMap","ResizeObserver","en","TodayShowstopper","Trending","Categories","Brands","in","fr","KeyHandler","handler","brands","autocomplete","language","t","useTranslation","noresults","nameSplited","valueName","link","slugPath","href","e","suggestions","categories","union","globalQuery","innerHTML","stringBuild","labels","fullPath","dangerouslySetInnerHTML","__html","FeaturedBrands","LinkWithoutDomain","LinkText","url","alt","classOk","classError","classLoading","isLoad","setIsLoad","useState","setError","useLayoutEffect","image","Image","onload","style","deriveVariantEdpAndPath","variantImagePath","variantEdpNo","styleVariants","styleVariant","displayName","matchLevel","edp","edps","styleCode","code","imageUrl","trim","edpNo","Matches","products","today","datenum","parseInt","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","seeAll","pricediff","priceIsMin","priceWasMin","isTs","tsFrom","tsTo","badge","displayWasPrice","displayIsPrice","crossPriceNewLine","imageEdp","imagePath","defaultImagePath","getVariantImageAndEdp","productLinkWithoutDomain","priceLabel","lvl1","toUpperCase","wasPriceRange","isPriceRange","tabIndex","Linkall","altItemNo","encodeURIComponent","textAlign","PopularCollections","NavigateUrl","media","srcSet","Picture","MediumImage","Url","SmallImage","ImageAltText","Title","CtaText","TopSuggestions","noResultStr","isStateOne","arraysEqual","createFilterMultipleDimensions","str","arrayDimensions","filterStr","substring","getIndexBySource","visualViewport","getViewportSize","innerWidth","innerHeight","YourSearches","i18n","findCollection","collectionName","Layout","SearchLeftBottomSectionTitle","SearchRightSectionTitle","trendingData","setTrendingData","topSuggestionData","setTopSuggestionData","recentSearches","setRecentSearches","featuredBrands","setFeaturedBrandsData","productData","setProductData","brandsData","setBrandsData","categoriesData","setCategoriesData","popularCollectionsData","setpopularCollectionsData","useEffect","searchEnvironment","urlParams","URLSearchParams","hostname","startsWith","log","firstData","recentSearchesPlugin","createLocalStorage","join","createLocalStorageRecentSearchesPlugin","oldFunction","autocompleteObj","analyticsData","searchTerm","totalRecords","_satellite","track","sessionStorage","autocompleteRef","querycopy","lastColumnOne","Autocomplete","autocompleteState","setAutocompleteState","panelSize","setSize","onResize","newSize","useViewportSize","cookie","addResourceBundle","encrypted","getUser","UserEmail","message","msgUint8","TextEncoder","encode","hashBuffer","crypto","subtle","digest","Uint8Array","padStart","digestMessage","alloy","identity","ECID","getECID","trackInternalSearchEvent","productObjData","element","analyticsProductsObject","isExactProductNumber","regOrderNo","setFilter","datestr","filterString","itemNoFilterString","setExtendedAnalytics","searchByActiveItem","searchActiveItem","filterID","brand","activeLabel","ApiLanguage","noResults","setnoResults","contentfulProducts","dataAPI","SearchMiddleSectionDimensions","contentfulSeoUrl","SearchMiddleSectionSeoUrl","SearchMiddleSectionTitle","featuredData","SearchLeftBottomSection","popularCollections","SearchRightSection","lastID","brandHits","trendingHits","topSuggestionsHits","trendingProductsHits","featuredBrandsProductsHits","categoriesProductsHits","brandsProductsHits","queryProductsHits","reset","maxIndex","allItems","active","DimensionId","dimensionID","dimension","exactPath","localnoResults","attributesToRetrieve","initIndex","querytopsuggestion","facets","sortFacetValuesBy","maxValuesPerFacet","ids","slugPaths","level1","level2","slugPathLevel1","slugPathLevel2","getPrototypeOf","lastIndex","labelBuild","sublevel","subindex","subbreak","ruleContexts","filters","facetsresponse","enArray","getOwnPropertyNames","frArray","valueId","product","trackSearchEvent","getSearchType","urlWithParentId","path","queryObject","filterCategoryString","linkAll","nbHits","queryCategoryLink","dimType","ruleContext","exactNumber","setRuleContext","hitsLength","parentItemNumber","childItemNumber","itemFound","deliveryOption","subLevel","enhancedDeliveryOptions","parentID","deliveryOptions","autocompleteOb","cleanQuery","tempDeliveryContext","subItem","redirectIndex","filterData","trimEnd","destination","fields","targetUrl","firstParameter","keywordParam","inputRef","formRef","panelRef","SecondaryNavigationSearch","SecondaryNavigationSearchBackButton","categoryNavBar","PrimaryNavigation","TrailingHeaderContent","nextElementSibling","TSCMiddle","SecondaryNavigationAAPanel","breakpoint","searchFocusAddClass","classList","SecondaryNavigationAAPanelOffsetHeight","offsetHeight","marginTop","AAPanelNewHeight","SAYT_OVERLAY_HEIGHT_ADJUSTMENT","remove","interval","setInterval","clearInterval","warn","ref","CloseSvg","currColumn","getCurrentColumn","panelDistanceFrom","el","getBoundingClientRect","docEl","pageXOffset","scrollLeft","pageYOffset","scrollTop","getPageTopLeft","maxHeight","getPanelHeightMobile","margin","ZoneElements","querySelectorAll","headerData","node","jsonData","getAttribute","ZoneElement","render"],"sourceRoot":""}