@docsearch/react 3.0.0-alpha.35 → 3.0.0-alpha.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/DocSearchModal.js +1 -1
- package/dist/esm/ResultsScreen.js +1 -1
- package/dist/esm/utils/removeHighlightTags.d.ts +2 -1
- package/dist/esm/utils/removeHighlightTags.js +8 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/umd/index.js +2 -2
- package/dist/umd/index.js.map +1 -1
- package/package.json +2 -2
package/dist/umd/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/icons/ControlKeyIcon.tsx","../../src/icons/SearchIcon.tsx","../../src/DocSearchButton.tsx","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/getItemsCount.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/invariant.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/warn.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/checkOptions.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/createStore.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/flatten.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/generateAutocompleteId.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getNextActiveItemId.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/noop.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getNormalizedSources.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getActiveItem.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/isOrContainsNode.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/getAutocompleteSetters.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/getDefaultProps.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/onInput.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/onKeyDown.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/getPropGetters.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/getCompletion.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/stateReducer.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/createAutocomplete.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/constants/index.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/version.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/search/search.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/search/getAlgoliaResults.js","../../src/AlgoliaLogo.tsx","../../src/Footer.tsx","../../src/Hit.tsx","../../src/icons/LoadingIcon.tsx","../../src/icons/RecentIcon.tsx","../../src/icons/ResetIcon.tsx","../../src/icons/SelectIcon.tsx","../../src/icons/SourceIcon.tsx","../../src/icons/StarIcon.tsx","../../src/icons/ErrorIcon.tsx","../../src/icons/NoResultsIcon.tsx","../../src/ErrorScreen.tsx","../../src/NoResultsScreen.tsx","../../src/Snippet.tsx","../../src/Results.tsx","../../src/utils/groupBy.ts","../../src/utils/identity.ts","../../src/utils/noop.ts","../../src/utils/removeHighlightTags.ts","../../src/ResultsScreen.tsx","../../src/StartScreen.tsx","../../src/ScreenState.tsx","../../src/SearchBox.tsx","../../src/constants.ts","../../src/stored-searches.ts","../../node_modules/algoliasearch/dist/algoliasearch-lite.esm.browser.js","../../src/DocSearchModal.tsx","../../src/useSearchClient.ts","../../src/version.ts","../../src/useTouchEvents.ts","../../src/useTrapFocus.ts","../../src/useDocSearchKeyboardEvents.ts","../../src/DocSearch.tsx"],"sourcesContent":["import React from 'react';\n\nexport function ControlKeyIcon() {\n return (\n <svg width=\"15\" height=\"15\" className=\"DocSearch-Control-Key-Icon\">\n <path\n d=\"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953\"\n strokeWidth=\"1.2\"\n stroke=\"currentColor\"\n fill=\"none\"\n strokeLinecap=\"square\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SearchIcon() {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n className=\"DocSearch-Search-Icon\"\n viewBox=\"0 0 20 20\"\n >\n <path\n d=\"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { ControlKeyIcon } from './icons/ControlKeyIcon';\nimport { SearchIcon } from './icons/SearchIcon';\n\ntype Translations = Partial<{\n buttonText: string;\n buttonAriaLabel: string;\n}>;\n\nexport type DocSearchButtonProps = React.ComponentProps<'button'> & {\n translations?: Translations;\n};\n\nconst ACTION_KEY_DEFAULT = 'Ctrl' as const;\nconst ACTION_KEY_APPLE = '⌘' as const;\n\nfunction isAppleDevice() {\n return /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);\n}\n\nexport const DocSearchButton = React.forwardRef<\n HTMLButtonElement,\n DocSearchButtonProps\n>(({ translations = {}, ...props }, ref) => {\n const { buttonText = 'Search', buttonAriaLabel = 'Search' } = translations;\n\n const [key, setKey] = useState<\n typeof ACTION_KEY_APPLE | typeof ACTION_KEY_DEFAULT | null\n >(null);\n\n useEffect(() => {\n if (typeof navigator !== 'undefined') {\n setKey(isAppleDevice() ? ACTION_KEY_APPLE : ACTION_KEY_DEFAULT);\n }\n }, []);\n\n return (\n <button\n type=\"button\"\n className=\"DocSearch DocSearch-Button\"\n aria-label={buttonAriaLabel}\n {...props}\n ref={ref}\n >\n <span className=\"DocSearch-Button-Container\">\n <SearchIcon />\n <span className=\"DocSearch-Button-Placeholder\">{buttonText}</span>\n </span>\n\n {key !== null && (\n <span className=\"DocSearch-Button-Keys\">\n <span className=\"DocSearch-Button-Key\">\n {key === ACTION_KEY_DEFAULT ? <ControlKeyIcon /> : key}\n </span>\n <span className=\"DocSearch-Button-Key\">K</span>\n </span>\n )}\n </button>\n );\n});\n","export function getItemsCount(state) {\n if (state.collections.length === 0) {\n return 0;\n }\n\n return state.collections.reduce(function (sum, collection) {\n return sum + collection.items.length;\n }, 0);\n}","/**\n * Throws an error if the condition is not met in development mode.\n * This is used to make development a better experience to provide guidance as\n * to where the error comes from.\n */\nexport function invariant(condition, message) {\n if (!(process.env.NODE_ENV !== 'production')) {\n return;\n }\n\n if (!condition) {\n throw new Error(\"[Autocomplete] \".concat(message));\n }\n}","export var warnCache = {\n current: {}\n};\n/**\n * Logs a warning if the condition is not met.\n * This is used to log issues in development environment only.\n */\n\nexport function warn(condition, message) {\n if (!(process.env.NODE_ENV !== 'production')) {\n return;\n }\n\n if (condition) {\n return;\n }\n\n var sanitizedMessage = message.trim();\n var hasAlreadyPrinted = warnCache.current[sanitizedMessage];\n\n if (!hasAlreadyPrinted) {\n warnCache.current[sanitizedMessage] = true; // eslint-disable-next-line no-console\n\n console.warn(\"[Autocomplete] \".concat(sanitizedMessage));\n }\n}","import { warn } from '@algolia/autocomplete-shared';\nexport function checkOptions(options) {\n process.env.NODE_ENV !== 'production' ? warn(!options.debug, 'The `debug` option is meant for development debugging and should not be used in production.') : void 0;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\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\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 };\n}","export function flatten(values) {\n return values.reduce(function (a, b) {\n return a.concat(b);\n }, []);\n}","var autocompleteId = 0;\nexport function generateAutocompleteId() {\n return \"autocomplete-\".concat(autocompleteId++);\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 (moveAmount < 0 && (baseIndex === null || defaultActiveItemId !== null && baseIndex === 0)) {\n return itemCount + moveAmount;\n }\n\n var numericIndex = (baseIndex === null ? -1 : baseIndex) + moveAmount;\n\n if (numericIndex <= -1 || numericIndex >= itemCount) {\n return defaultActiveItemId === null ? null : 0;\n }\n\n return numericIndex;\n}","export var noop = function noop() {};","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport { invariant } from '@algolia/autocomplete-shared';\nimport { noop } from './noop';\nexport function getNormalizedSources(getSources, params) {\n return Promise.resolve(getSources(params)).then(function (sources) {\n invariant(Array.isArray(sources), \"The `getSources` function must return an array of sources but returned type \".concat(JSON.stringify(_typeof(sources)), \":\\n\\n\").concat(JSON.stringify(sources, null, 2)));\n return Promise.all(sources // 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\n var normalizedSource = _objectSpread({\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 }, source);\n\n return Promise.resolve(normalizedSource);\n }));\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 }, []); // Based on the accumulated counts, we can infer the index of the suggestion.\n\n var collectionIndex = accumulatedCollectionsCount.reduce(function (acc, current) {\n if (current <= state.activeItemId) {\n return acc + 1;\n }\n\n return acc;\n }, 0);\n return state.collections[collectionIndex];\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 */\n\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\n while (isOffsetFound === false) {\n var currentCollection = state.collections[counter];\n\n if (currentCollection === collection) {\n isOffsetFound = true;\n break;\n }\n\n previousItemsOffset += currentCollection.items.length;\n counter++;\n }\n\n return state.activeItemId - previousItemsOffset;\n}\n\nexport function getActiveItem(state) {\n var collection = getCollectionFromActiveItemId(state);\n\n if (!collection) {\n return null;\n }\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}","export function isOrContainsNode(parent, child) {\n return parent === child || parent.contains(child);\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { flatten } from './utils';\nexport function getAutocompleteSetters(_ref) {\n var store = _ref.store;\n\n var setActiveItemId = function setActiveItemId(value) {\n store.dispatch('setActiveItemId', value);\n };\n\n var setQuery = function setQuery(value) {\n store.dispatch('setQuery', value);\n };\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 `getAlgoliaHits`\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\n var setIsOpen = function setIsOpen(value) {\n store.dispatch('setIsOpen', value);\n };\n\n var setStatus = function setStatus(value) {\n store.dispatch('setStatus', value);\n };\n\n var setContext = function setContext(value) {\n store.dispatch('setContext', value);\n };\n\n return {\n setActiveItemId: setActiveItemId,\n setQuery: setQuery,\n setCollections: setCollections,\n setIsOpen: setIsOpen,\n setStatus: setStatus,\n setContext: setContext\n };\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\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.\"); }\n\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); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\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; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { getItemsCount } from '@algolia/autocomplete-shared';\nimport { generateAutocompleteId, getNormalizedSources, flatten } from './utils';\nexport function getDefaultProps(props, pluginSubscribers) {\n var _props$id;\n\n var environment = typeof window !== 'undefined' ? window : {};\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 environment: environment,\n shouldPanelOpen: function shouldPanelOpen(_ref) {\n var state = _ref.state;\n return getItemsCount(state) > 0;\n }\n }, props), {}, {\n // Since `generateAutocompleteId` triggers a side effect (it increments\n // and 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\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\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\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\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\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\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\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\n return (_x$onActive = x.onActive) === null || _x$onActive === void 0 ? void 0 : _x$onActive.call(x, params);\n });\n }\n });\n });\n });\n },\n navigator: _objectSpread({\n navigate: function navigate(_ref2) {\n var itemUrl = _ref2.itemUrl;\n environment.location.assign(itemUrl);\n },\n navigateNewTab: function navigateNewTab(_ref3) {\n var itemUrl = _ref3.itemUrl;\n var windowReference = environment.open(itemUrl, '_blank', 'noopener');\n windowReference === null || windowReference === void 0 ? void 0 : windowReference.focus();\n },\n navigateNewWindow: function navigateNewWindow(_ref4) {\n var itemUrl = _ref4.itemUrl;\n environment.open(itemUrl, '_blank', 'noopener');\n }\n }, props.navigator)\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\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; }\n\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; }\n\nimport { invariant } from '@algolia/autocomplete-shared';\nimport { getActiveItem } from './utils';\nvar lastStalledId = null;\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, [\"event\", \"nextState\", \"props\", \"query\", \"refresh\", \"store\"]);\n\n if (lastStalledId) {\n props.environment.clearTimeout(lastStalledId);\n }\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\n if (!query && props.openOnFocus === false) {\n var _nextState$isOpen;\n\n setStatus('idle');\n setCollections(store.getState().collections.map(function (collection) {\n return _objectSpread(_objectSpread({}, collection), {}, {\n items: []\n });\n }));\n setIsOpen((_nextState$isOpen = nextState.isOpen) !== null && _nextState$isOpen !== void 0 ? _nextState$isOpen : props.shouldPanelOpen({\n state: store.getState()\n }));\n return Promise.resolve();\n }\n\n setStatus('loading');\n lastStalledId = props.environment.setTimeout(function () {\n setStatus('stalled');\n }, props.stallThreshold);\n return props.getSources(_objectSpread({\n query: query,\n refresh: refresh,\n state: store.getState()\n }, setters)).then(function (sources) {\n setStatus('loading'); // @TODO: convert `Promise.all` to fetching strategy.\n\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 (items) {\n invariant(Array.isArray(items), \"The `getItems` function must return an array of items but returned type \".concat(JSON.stringify(_typeof(items)), \":\\n\\n\").concat(JSON.stringify(items, null, 2)));\n return {\n source: source,\n items: items\n };\n });\n })).then(function (collections) {\n var _nextState$isOpen2;\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\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 if (lastStalledId) {\n props.environment.clearTimeout(lastStalledId);\n }\n });\n });\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\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; }\n\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; }\n\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, [\"event\", \"props\", \"refresh\", \"store\"]);\n\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n // Default browser behavior changes the caret placement on ArrowUp and\n // Arrow down.\n event.preventDefault();\n store.dispatch(event.key, null);\n var nodeItem = props.environment.document.getElementById(\"\".concat(props.id, \"-item-\").concat(store.getState().activeItemId));\n\n if (nodeItem) {\n if (nodeItem.scrollIntoViewIfNeeded) {\n nodeItem.scrollIntoViewIfNeeded(false);\n } else {\n nodeItem.scrollIntoView(false);\n }\n }\n\n var highlightedItem = getActiveItem(store.getState());\n\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 } 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 } 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 return;\n } // This prevents the `onSubmit` event to be sent because an item is\n // highlighted.\n\n\n event.preventDefault();\n\n var _ref2 = getActiveItem(store.getState()),\n _item = _ref2.item,\n _itemInputValue = _ref2.itemInputValue,\n _itemUrl = _ref2.itemUrl,\n _source = _ref2.source;\n\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\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\n props.navigator.navigateNewWindow({\n itemUrl: _itemUrl,\n item: _item,\n state: store.getState()\n });\n }\n } else if (event.altKey) {// 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\n props.navigator.navigate({\n itemUrl: _itemUrl,\n item: _item,\n state: store.getState()\n });\n return;\n }\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}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\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; }\n\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; }\n\nimport { onInput } from './onInput';\nimport { onKeyDown as _onKeyDown } from './onKeyDown';\nimport { getActiveItem, isOrContainsNode } from './utils';\nexport function getPropGetters(_ref) {\n var props = _ref.props,\n refresh = _ref.refresh,\n store = _ref.store,\n setters = _objectWithoutProperties(_ref, [\"props\", \"refresh\", \"store\"]);\n\n var getEnvironmentProps = function getEnvironmentProps(providedProps) {\n var inputElement = providedProps.inputElement,\n formElement = providedProps.formElement,\n panelElement = providedProps.panelElement,\n rest = _objectWithoutProperties(providedProps, [\"inputElement\", \"formElement\", \"panelElement\"]);\n\n return _objectSpread({\n // On touch devices, we do not rely on the native `blur` event of the\n // input to close the panel, but rather on a custom `touchstart` event\n // outside of the autocomplete elements.\n // This ensures a working experience on mobile because we blur the input\n // on touch devices when the user starts scrolling (`touchmove`).\n onTouchStart: function onTouchStart(event) {\n if (store.getState().isOpen === false || event.target === inputElement) {\n return;\n } // @TODO: support cases where there are multiple Autocomplete instances.\n // Right now, a second instance makes this computation return false.\n\n\n var isTargetWithinAutocomplete = [formElement, panelElement].some(function (contextNode) {\n return isOrContainsNode(contextNode, event.target) || isOrContainsNode(contextNode, props.environment.document.activeElement);\n });\n\n if (isTargetWithinAutocomplete === false) {\n store.dispatch('blur', null);\n }\n },\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\n inputElement.blur();\n }\n }, rest);\n };\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\n var getFormProps = function getFormProps(providedProps) {\n var inputElement = providedProps.inputElement,\n rest = _objectWithoutProperties(providedProps, [\"inputElement\"]);\n\n return _objectSpread({\n action: '',\n noValidate: true,\n role: 'search',\n onSubmit: function onSubmit(event) {\n var _providedProps$inputE;\n\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\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\n var getInputProps = function getInputProps(providedProps) {\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\n store.dispatch('focus', null);\n }\n\n var isTouchDevice = ('ontouchstart' in props.environment);\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, [\"inputElement\", \"maxLength\"]);\n\n var activeItem = getActiveItem(store.getState());\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: activeItem !== null && activeItem !== void 0 && activeItem.itemUrl ? 'go' : 'search',\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 onBlur: function onBlur() {\n // We do rely on the `blur` event on touch devices.\n // See explanation in `onTouchStart`.\n if (!isTouchDevice) {\n store.dispatch('blur', null);\n }\n },\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\n var getLabelProps = function getLabelProps(rest) {\n return _objectSpread({\n htmlFor: \"\".concat(props.id, \"-input\"),\n id: \"\".concat(props.id, \"-label\")\n }, rest);\n };\n\n var getListProps = function getListProps(rest) {\n return _objectSpread({\n role: 'listbox',\n 'aria-labelledby': \"\".concat(props.id, \"-label\"),\n id: \"\".concat(props.id, \"-list\")\n }, rest);\n };\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\n var getItemProps = function getItemProps(providedProps) {\n var item = providedProps.item,\n source = providedProps.source,\n rest = _objectWithoutProperties(providedProps, [\"item\", \"source\"]);\n\n return _objectSpread({\n id: \"\".concat(props.id, \"-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\n store.dispatch('mousemove', item.__autocomplete_id);\n var activeItem = getActiveItem(store.getState());\n\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\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 }); // 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\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\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}","import { getActiveItem } from './utils';\nexport function getCompletion(_ref) {\n var state = _ref.state;\n\n if (state.isOpen === false || state.activeItemId === null) {\n return null;\n }\n\n var _ref2 = getActiveItem(state),\n itemInputValue = _ref2.itemInputValue;\n\n return itemInputValue || null;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\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\n case 'setQuery':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n query: action.payload,\n completion: null\n });\n }\n\n case 'setCollections':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n collections: action.payload\n });\n }\n\n case 'setIsOpen':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n isOpen: action.payload\n });\n }\n\n case 'setStatus':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n status: action.payload\n });\n }\n\n case 'setContext':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n context: _objectSpread(_objectSpread({}, state.context), action.payload)\n });\n }\n\n case 'ArrowDown':\n {\n var nextState = _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: getNextActiveItemId(1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)\n });\n\n return _objectSpread(_objectSpread({}, nextState), {}, {\n completion: getCompletion({\n state: nextState\n })\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\n return _objectSpread(_objectSpread({}, _nextState), {}, {\n completion: getCompletion({\n state: _nextState\n })\n });\n }\n\n case 'Escape':\n {\n if (state.isOpen) {\n return _objectSpread(_objectSpread({}, state), {}, {\n isOpen: false,\n completion: null\n });\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n query: '',\n status: 'idle',\n collections: []\n });\n }\n\n case 'submit':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: null,\n isOpen: false,\n status: 'idle'\n });\n }\n\n case 'reset':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: // 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 // 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\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\n case 'blur':\n {\n if (action.props.debug) {\n return state;\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n isOpen: false,\n activeItemId: null\n });\n }\n\n case 'mousemove':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.payload\n });\n }\n\n case 'mouseleave':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.props.defaultActiveItemId\n });\n }\n\n default:\n invariant(false, \"The reducer action \".concat(JSON.stringify(action.type), \" is not supported.\"));\n return state;\n }\n};","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { checkOptions } from './checkOptions';\nimport { createStore } from './createStore';\nimport { getAutocompleteSetters } from './getAutocompleteSetters';\nimport { getDefaultProps } from './getDefaultProps';\nimport { getPropGetters } from './getPropGetters';\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 }, setters));\n\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 }, setters));\n }\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 query: store.getState().query,\n refresh: refresh,\n store: store\n }, setters));\n }\n\n props.plugins.forEach(function (plugin) {\n var _plugin$subscribe;\n\n return (_plugin$subscribe = plugin.subscribe) === null || _plugin$subscribe === void 0 ? void 0 : _plugin$subscribe.call(plugin, _objectSpread(_objectSpread({}, setters), {}, {\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 }));\n });\n return _objectSpread(_objectSpread({\n refresh: refresh\n }, propGetters), setters);\n}","export var HIGHLIGHT_PRE_TAG = '__aa-highlight__';\nexport var HIGHLIGHT_POST_TAG = '__/aa-highlight__';","export var version = '1.0.0-alpha.44';","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\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.\"); }\n\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); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\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; }\n\nimport { HIGHLIGHT_PRE_TAG, HIGHLIGHT_POST_TAG } from '../constants';\nimport { version } from '../version';\nexport function search(_ref) {\n var searchClient = _ref.searchClient,\n queries = _ref.queries,\n _ref$userAgents = _ref.userAgents,\n userAgents = _ref$userAgents === void 0 ? [] : _ref$userAgents;\n\n if (typeof searchClient.addAlgoliaAgent === 'function') {\n var algoliaAgents = [{\n segment: 'autocomplete-core',\n version: version\n }].concat(_toConsumableArray(userAgents));\n algoliaAgents.forEach(function (_ref2) {\n var segment = _ref2.segment,\n version = _ref2.version;\n searchClient.addAlgoliaAgent(segment, version);\n });\n }\n\n return searchClient.search(queries.map(function (searchParameters) {\n var indexName = searchParameters.indexName,\n query = searchParameters.query,\n params = searchParameters.params;\n return {\n indexName: indexName,\n query: query,\n params: _objectSpread({\n hitsPerPage: 5,\n highlightPreTag: HIGHLIGHT_PRE_TAG,\n highlightPostTag: HIGHLIGHT_POST_TAG\n }, params)\n };\n }));\n}","import { search } from './search';\nexport function getAlgoliaResults(_ref) {\n var searchClient = _ref.searchClient,\n queries = _ref.queries,\n userAgents = _ref.userAgents;\n return search({\n searchClient: searchClient,\n queries: queries,\n userAgents: userAgents\n }).then(function (response) {\n return response.results;\n });\n}","import React from 'react';\n\nexport function AlgoliaLogo() {\n return (\n <a\n href=\"https://www.algolia.com/docsearch\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span className=\"DocSearch-Label\">Search by</span>\n <svg width=\"77\" height=\"19\">\n <path\n d=\"M2.5067 0h14.0245c1.384.001 2.5058 1.1205 2.5068 2.5017V16.5c-.0014 1.3808-1.1232 2.4995-2.5068 2.5H2.5067C1.1232 18.9995.0014 17.8808 0 16.5V2.4958A2.495 2.495 0 01.735.7294 2.505 2.505 0 012.5068 0zM37.95 15.0695c-3.7068.0168-3.7068-2.986-3.7068-3.4634L34.2372.3576 36.498 0v11.1794c0 .2715 0 1.9889 1.452 1.994v1.8961zm-9.1666-1.8388c.694 0 1.2086-.0397 1.5678-.1088v-2.2934a5.3639 5.3639 0 00-1.3303-.1679 4.8283 4.8283 0 00-.758.0582 2.2845 2.2845 0 00-.688.2024c-.2029.0979-.371.2362-.4919.4142-.1268.1788-.185.2826-.185.5533 0 .5297.185.8359.5205 1.0375.3355.2016.7928.3053 1.365.3053v-.0008zm-.1969-8.1817c.7463 0 1.3768.092 1.8856.2767.5088.1838.9195.4428 1.2204.7717.3068.334.5147.7777.6423 1.251.1327.4723.196.991.196 1.5603v5.798c-.5235.1036-1.05.192-1.5787.2649-.7048.1037-1.4976.156-2.3774.156-.5832 0-1.1215-.0582-1.6016-.167a3.385 3.385 0 01-1.2432-.5364 2.6034 2.6034 0 01-.8037-.9565c-.191-.3922-.29-.9447-.29-1.5208 0-.5533.11-.905.3246-1.2863a2.7351 2.7351 0 01.8849-.9329c.376-.242.8029-.415 1.2948-.5187a7.4517 7.4517 0 011.5381-.156 7.1162 7.1162 0 011.6667.2024V8.886c0-.259-.0296-.5061-.093-.7372a1.5847 1.5847 0 00-.3245-.6158 1.5079 1.5079 0 00-.6119-.4158 2.6788 2.6788 0 00-.966-.173c-.5206 0-.9948.0634-1.4283.1384a6.5481 6.5481 0 00-1.065.259l-.2712-1.849c.2831-.0986.7048-.1964 1.2491-.2943a9.2979 9.2979 0 011.752-.1501v.0008zm44.6597 8.1193c.6947 0 1.2086-.0405 1.567-.1097v-2.2942a5.3743 5.3743 0 00-1.3303-.1679c-.2485 0-.503.0177-.7573.0582a2.2853 2.2853 0 00-.688.2024 1.2333 1.2333 0 00-.4918.4142c-.1268.1788-.1843.2826-.1843.5533 0 .5297.1843.8359.5198 1.0375.3414.2066.7927.3053 1.365.3053v.0009zm-.191-8.1767c.7463 0 1.3768.0912 1.8856.2759.5087.1847.9195.4436 1.2204.7717.3.329.5147.7786.6414 1.251a5.7248 5.7248 0 01.197 1.562v5.7972c-.3466.0742-.874.1602-1.5788.2648-.7049.1038-1.4976.1552-2.3774.1552-.5832 0-1.1215-.0573-1.6016-.167a3.385 3.385 0 01-1.2432-.5356 2.6034 2.6034 0 01-.8038-.9565c-.191-.3922-.2898-.9447-.2898-1.5216 0-.5533.1098-.905.3245-1.2854a2.7373 2.7373 0 01.8849-.9338c.376-.2412.8029-.4141 1.2947-.5178a7.4545 7.4545 0 012.325-.1097c.2781.0287.5672.081.879.156v-.3686a2.7781 2.7781 0 00-.092-.738 1.5788 1.5788 0 00-.3246-.6166 1.5079 1.5079 0 00-.612-.415 2.6797 2.6797 0 00-.966-.1729c-.5205 0-.9947.0633-1.4282.1384a6.5608 6.5608 0 00-1.065.259l-.2712-1.8498c.283-.0979.7048-.1957 1.2491-.2935a9.8597 9.8597 0 011.752-.1494zm-6.79-1.072c-.7576.001-1.373-.6103-1.3759-1.3664 0-.755.6128-1.3664 1.376-1.3664.764 0 1.3775.6115 1.3775 1.3664s-.6195 1.3664-1.3776 1.3664zm1.1393 11.1507h-2.2726V5.3409l2.2734-.3568v10.0845l-.0008.0017zm-3.984 0c-3.707.0168-3.707-2.986-3.707-3.4642L59.7069.3576 61.9685 0v11.1794c0 .2715 0 1.9889 1.452 1.994V15.0703zm-7.3512-4.979c0-.975-.2138-1.7873-.6305-2.3516-.4167-.571-.9998-.852-1.747-.852-.7454 0-1.3302.281-1.7452.852-.4166.5702-.6195 1.3765-.6195 2.3516 0 .9851.208 1.6473.6254 2.2183.4158.576.9998.8587 1.7461.8587.7454 0 1.3303-.2885 1.747-.8595.4158-.5761.6237-1.2315.6237-2.2184v.0009zm2.3132-.006c0 .7609-.1099 1.3361-.3356 1.9654a4.654 4.654 0 01-.9533 1.6076A4.214 4.214 0 0155.613 14.69c-.579.2412-1.4697.3795-1.9143.3795-.4462-.005-1.3303-.1324-1.9033-.3795a4.307 4.307 0 01-1.474-1.0316c-.4115-.4445-.7293-.9801-.9609-1.6076a5.3423 5.3423 0 01-.3465-1.9653c0-.7608.104-1.493.3356-2.1155a4.683 4.683 0 01.9719-1.5958 4.3383 4.3383 0 011.479-1.0257c.5739-.242 1.2043-.3567 1.8864-.3567.6829 0 1.3125.1197 1.8906.3567a4.1245 4.1245 0 011.4816 1.0257 4.7587 4.7587 0 01.9592 1.5958c.2426.6225.3643 1.3547.3643 2.1155zm-17.0198 0c0 .9448.208 1.9932.6238 2.431.4166.4386.955.6579 1.6142.6579.3584 0 .6998-.0523 1.0176-.1502.3186-.0978.5721-.2134.775-.3517V7.0784a8.8706 8.8706 0 00-1.4926-.1906c-.8206-.0236-1.4452.312-1.8847.8468-.4335.5365-.6533 1.476-.6533 2.3516v-.0008zm6.2863 4.4485c0 1.5385-.3938 2.662-1.1866 3.3773-.791.7136-2.0005 1.0712-3.6308 1.0712-.5958 0-1.834-.1156-2.8228-.334l.3643-1.7865c.8282.173 1.9202.2193 2.4932.2193.9077 0 1.555-.1847 1.943-.5533.388-.3686.578-.916.578-1.643v-.3687a6.8289 6.8289 0 01-.8848.3349c-.3634.1096-.786.167-1.261.167-.6246 0-1.1917-.0979-1.7055-.2944a3.5554 3.5554 0 01-1.3244-.8645c-.3642-.3796-.6541-.8579-.8561-1.4289-.2028-.571-.3068-1.59-.3068-2.339 0-.7034.1099-1.5856.3245-2.1735.2198-.5871.5316-1.0949.9542-1.515.4167-.42.9255-.743 1.5213-.98a5.5923 5.5923 0 012.052-.3855c.7353 0 1.4114.092 2.0707.2024.6592.1088 1.2204.2236 1.6776.35v8.945-.0008zM11.5026 4.2418v-.6511c-.0005-.4553-.3704-.8241-.8266-.8241H8.749c-.4561 0-.826.3688-.8265.824v.669c0 .0742.0693.1264.1445.1096a6.0346 6.0346 0 011.6768-.2362 6.125 6.125 0 011.6202.2185.1116.1116 0 00.1386-.1097zm-5.2806.852l-.3296-.3282a.8266.8266 0 00-1.168 0l-.393.3922a.8199.8199 0 000 1.164l.3237.323c.0524.0515.1268.0397.1733-.0117.191-.259.3989-.507.6305-.7372.2374-.2362.48-.4437.7462-.6335.0575-.0354.0634-.1155.017-.1687zm3.5159 2.069v2.818c0 .081.0879.1392.1622.0987l2.5102-1.2964c.0574-.0287.0752-.0987.0464-.1552a3.1237 3.1237 0 00-2.603-1.574c-.0575 0-.115.0456-.115.1097l-.0008-.0009zm.0008 6.789c-2.0933.0005-3.7915-1.6912-3.7947-3.7804C5.9468 8.0821 7.6452 6.39 9.7387 6.391c2.0932-.0005 3.7911 1.6914 3.794 3.7804a3.7783 3.7783 0 01-1.1124 2.675 3.7936 3.7936 0 01-2.6824 1.1054h.0008zM9.738 4.8002c-1.9218 0-3.6975 1.0232-4.6584 2.6841a5.359 5.359 0 000 5.3683c.9609 1.661 2.7366 2.6841 4.6584 2.6841a5.3891 5.3891 0 003.8073-1.5725 5.3675 5.3675 0 001.578-3.7987 5.3574 5.3574 0 00-1.5771-3.797A5.379 5.379 0 009.7387 4.801l-.0008-.0008z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n />\n </svg>\n </a>\n );\n}\n","import React from 'react';\n\nimport { AlgoliaLogo } from './AlgoliaLogo';\n\nexport function Footer() {\n return (\n <>\n <div className=\"DocSearch-Logo\">\n <AlgoliaLogo />\n </div>\n <ul className=\"DocSearch-Commands\">\n <li>\n <span className=\"DocSearch-Commands-Key\">\n <CommandIcon>\n <path d=\"M12 3.53088v3c0 1-1 2-2 2H4M7 11.53088l-3-3 3-3\" />\n </CommandIcon>\n </span>\n <span className=\"DocSearch-Label\">to select</span>\n </li>\n <li>\n <span className=\"DocSearch-Commands-Key\">\n <CommandIcon>\n <path d=\"M7.5 3.5v8M10.5 8.5l-3 3-3-3\" />\n </CommandIcon>\n </span>\n <span className=\"DocSearch-Commands-Key\">\n <CommandIcon>\n <path d=\"M7.5 11.5v-8M10.5 6.5l-3-3-3 3\" />\n </CommandIcon>\n </span>\n <span className=\"DocSearch-Label\">to navigate</span>\n </li>\n <li>\n <span className=\"DocSearch-Commands-Key\">\n <CommandIcon>\n <path d=\"M13.6167 8.936c-.1065.3583-.6883.962-1.4875.962-.7993 0-1.653-.9165-1.653-2.1258v-.5678c0-1.2548.7896-2.1016 1.653-2.1016.8634 0 1.3601.4778 1.4875 1.0724M9 6c-.1352-.4735-.7506-.9219-1.46-.8972-.7092.0246-1.344.57-1.344 1.2166s.4198.8812 1.3445.9805C8.465 7.3992 8.968 7.9337 9 8.5c.032.5663-.454 1.398-1.4595 1.398C6.6593 9.898 6 9 5.963 8.4851m-1.4748.5368c-.2635.5941-.8099.876-1.5443.876s-1.7073-.6248-1.7073-2.204v-.4603c0-1.0416.721-2.131 1.7073-2.131.9864 0 1.6425 1.031 1.5443 2.2492h-2.956\" />\n </CommandIcon>\n </span>\n <span className=\"DocSearch-Label\">to close</span>\n </li>\n </ul>\n </>\n );\n}\n\ninterface CommandIconProps {\n children: React.ReactNode;\n}\n\nfunction CommandIcon(props: CommandIconProps) {\n return (\n <svg width=\"15\" height=\"15\">\n <g\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.2\"\n >\n {props.children}\n </g>\n </svg>\n );\n}\n","import React from 'react';\n\nimport { DocSearchHit } from './types';\n\ninterface HitProps {\n hit: DocSearchHit;\n children: React.ReactNode;\n}\n\nexport function Hit({ hit, children }: HitProps) {\n return <a href={hit.url}>{children}</a>;\n}\n","import React from 'react';\n\nexport function LoadingIcon() {\n return (\n <svg viewBox=\"0 0 38 38\" stroke=\"currentColor\" strokeOpacity=\".5\">\n <g fill=\"none\" fillRule=\"evenodd\">\n <g transform=\"translate(1 1)\" strokeWidth=\"2\">\n <circle strokeOpacity=\".3\" cx=\"18\" cy=\"18\" r=\"18\" />\n <path d=\"M36 18c0-9.94-8.06-18-18-18\">\n <animateTransform\n attributeName=\"transform\"\n type=\"rotate\"\n from=\"0 18 18\"\n to=\"360 18 18\"\n dur=\"1s\"\n repeatCount=\"indefinite\"\n />\n </path>\n </g>\n </g>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function RecentIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <g\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3.18 6.6a8.23 8.23 0 1112.93 9.94h0a8.23 8.23 0 01-11.63 0\" />\n <path d=\"M6.44 7.25H2.55V3.36M10.45 6v5.6M10.45 11.6L13 13\" />\n </g>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function ResetIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n d=\"M10 10l5.09-5.09L10 10l5.09 5.09L10 10zm0 0L4.91 4.91 10 10l-5.09 5.09L10 10z\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SelectIcon() {\n return (\n <svg\n className=\"DocSearch-Hit-Select-Icon\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n >\n <g\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 3v4c0 2-2 4-4 4H2\" />\n <path d=\"M8 17l-6-6 6-6\" />\n </g>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SourceIcon(props: { type: string }) {\n switch (props.type) {\n case 'lvl1':\n return <LvlIcon />;\n case 'content':\n return <ContentIcon />;\n default:\n return <AnchorIcon />;\n }\n}\n\nfunction LvlIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n d=\"M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction AnchorIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n d=\"M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction ContentIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n d=\"M17 5H3h14zm0 5H3h14zm0 5H3h14z\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function StarIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n d=\"M10 14.2L5 17l1-5.6-4-4 5.5-.7 2.5-5 2.5 5 5.6.8-4 4 .9 5.5z\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function ErrorIcon() {\n return (\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n fillRule=\"evenodd\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M19 4.8a16 16 0 00-2-1.2m-3.3-1.2A16 16 0 001.1 4.7M16.7 8a12 12 0 00-2.8-1.4M10 6a12 12 0 00-6.7 2M12.3 14.7a4 4 0 00-4.5 0M14.5 11.4A8 8 0 0010 10M3 16L18 2M10 18h0\"></path>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function NoResultsIcon() {\n return (\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n fillRule=\"evenodd\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M15.5 4.8c2 3 1.7 7-1 9.7h0l4.3 4.3-4.3-4.3a7.8 7.8 0 01-9.8 1m-2.2-2.2A7.8 7.8 0 0113.2 2.4M2 18L18 2\"></path>\n </svg>\n );\n}\n","import React from 'react';\n\nimport { ErrorIcon } from './icons';\n\nexport function ErrorScreen() {\n return (\n <div className=\"DocSearch-ErrorScreen\">\n <div className=\"DocSearch-Screen-Icon\">\n <ErrorIcon />\n </div>\n <p className=\"DocSearch-Title\">Unable to fetch results</p>\n <p className=\"DocSearch-Help\">\n You might want to check your network connection.\n </p>\n </div>\n );\n}\n","import React from 'react';\n\nimport { NoResultsIcon } from './icons';\nimport { ScreenStateProps } from './ScreenState';\nimport { InternalDocSearchHit } from './types';\n\ntype NoResultsScreenProps = ScreenStateProps<InternalDocSearchHit>;\n\nexport function NoResultsScreen(props: NoResultsScreenProps) {\n const searchSuggestions: string[] | undefined = props.state.context\n .searchSuggestions as string[];\n\n return (\n <div className=\"DocSearch-NoResults\">\n <div className=\"DocSearch-Screen-Icon\">\n <NoResultsIcon />\n </div>\n <p className=\"DocSearch-Title\">\n No results for \"<strong>{props.state.query}</strong>\"\n </p>\n\n {searchSuggestions && searchSuggestions.length > 0 && (\n <div className=\"DocSearch-NoResults-Prefill-List\">\n <p className=\"DocSearch-Help\">Try searching for:</p>\n <ul>\n {searchSuggestions.slice(0, 3).reduce<React.ReactNode[]>(\n (acc, search) => [\n ...acc,\n <li key={search}>\n <button\n className=\"DocSearch-Prefill\"\n key={search}\n onClick={() => {\n props.setQuery(search.toLowerCase() + ' ');\n props.refresh();\n props.inputRef.current!.focus();\n }}\n >\n {search}\n </button>\n </li>,\n ],\n []\n )}\n </ul>\n </div>\n )}\n\n <p className=\"DocSearch-Help\">\n Believe this query should return results?{' '}\n <a\n href={`https://github.com/algolia/docsearch-configs/issues/new?template=Missing_results.md&title=[${props.indexName}]+Missing+results+for+query+\"${props.state.query}\"`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Let us know\n </a>\n .\n </p>\n </div>\n );\n}\n","import { createElement } from 'react';\n\nimport { StoredDocSearchHit } from './types';\n\nfunction getPropertyByPath(object: object, path: string): any {\n const parts = path.split('.');\n\n return parts.reduce((current, key) => current && current[key], object);\n}\n\ninterface SnippetProps<TItem> {\n [prop: string]: unknown;\n hit: TItem;\n attribute: string;\n tagName?: string;\n}\n\nexport function Snippet<TItem extends StoredDocSearchHit>({\n hit,\n attribute,\n tagName = 'span',\n ...rest\n}: SnippetProps<TItem>) {\n return createElement(tagName, {\n ...rest,\n dangerouslySetInnerHTML: {\n __html:\n getPropertyByPath(hit, `_snippetResult.${attribute}.value`) ||\n getPropertyByPath(hit, attribute),\n },\n });\n}\n","import {\n AutocompleteApi,\n AutocompleteState,\n BaseItem,\n} from '@algolia/autocomplete-core';\nimport React from 'react';\n\nimport { DocSearchProps } from './DocSearch';\nimport { Snippet } from './Snippet';\nimport { InternalDocSearchHit, StoredDocSearchHit } from './types';\n\ninterface ResultsProps<TItem extends BaseItem>\n extends AutocompleteApi<\n TItem,\n React.FormEvent,\n React.MouseEvent,\n React.KeyboardEvent\n > {\n title: string;\n collection: AutocompleteState<TItem>['collections'][0];\n renderIcon(props: { item: TItem; index: number }): React.ReactNode;\n renderAction(props: {\n item: TItem;\n runDeleteTransition: (cb: () => void) => void;\n runFavoriteTransition: (cb: () => void) => void;\n }): React.ReactNode;\n onItemClick(item: TItem): void;\n hitComponent: DocSearchProps['hitComponent'];\n}\n\nexport function Results<TItem extends StoredDocSearchHit>(\n props: ResultsProps<TItem>\n) {\n if (!props.collection || props.collection.items.length === 0) {\n return null;\n }\n\n return (\n <section className=\"DocSearch-Hits\">\n <div className=\"DocSearch-Hit-source\">{props.title}</div>\n\n <ul {...props.getListProps()}>\n {props.collection.items.map((item, index) => {\n return (\n <Result\n key={[props.title, item.objectID].join(':')}\n item={item}\n index={index}\n {...props}\n />\n );\n })}\n </ul>\n </section>\n );\n}\n\ninterface ResultProps<TItem extends BaseItem> extends ResultsProps<TItem> {\n item: TItem;\n index: number;\n}\n\nfunction Result<TItem extends StoredDocSearchHit>({\n item,\n index,\n renderIcon,\n renderAction,\n getItemProps,\n onItemClick,\n collection,\n hitComponent,\n}: ResultProps<TItem>) {\n const [isDeleting, setIsDeleting] = React.useState(false);\n const [isFavoriting, setIsFavoriting] = React.useState(false);\n const action = React.useRef<(() => void) | null>(null);\n const Hit = hitComponent!;\n\n function runDeleteTransition(cb: () => void) {\n setIsDeleting(true);\n action.current = cb;\n }\n\n function runFavoriteTransition(cb: () => void) {\n setIsFavoriting(true);\n action.current = cb;\n }\n\n return (\n <li\n className={[\n 'DocSearch-Hit',\n ((item as unknown) as InternalDocSearchHit).__docsearch_parent &&\n 'DocSearch-Hit--Child',\n isDeleting && 'DocSearch-Hit--deleting',\n isFavoriting && 'DocSearch-Hit--favoriting',\n ]\n .filter(Boolean)\n .join(' ')}\n onTransitionEnd={() => {\n if (action.current) {\n action.current();\n }\n }}\n {...getItemProps({\n item,\n source: collection.source,\n onClick() {\n onItemClick(item);\n },\n })}\n >\n <Hit hit={item}>\n <div className=\"DocSearch-Hit-Container\">\n {renderIcon({ item, index })}\n\n {item.hierarchy[item.type] && item.type === 'lvl1' && (\n <div className=\"DocSearch-Hit-content-wrapper\">\n <Snippet\n className=\"DocSearch-Hit-title\"\n hit={item}\n attribute=\"hierarchy.lvl1\"\n />\n {item.content && (\n <Snippet\n className=\"DocSearch-Hit-path\"\n hit={item}\n attribute=\"content\"\n />\n )}\n </div>\n )}\n\n {item.hierarchy[item.type] &&\n (item.type === 'lvl2' ||\n item.type === 'lvl3' ||\n item.type === 'lvl4' ||\n item.type === 'lvl5' ||\n item.type === 'lvl6') && (\n <div className=\"DocSearch-Hit-content-wrapper\">\n <Snippet\n className=\"DocSearch-Hit-title\"\n hit={item}\n attribute={`hierarchy.${item.type}`}\n />\n <Snippet\n className=\"DocSearch-Hit-path\"\n hit={item}\n attribute=\"hierarchy.lvl1\"\n />\n </div>\n )}\n\n {item.type === 'content' && (\n <div className=\"DocSearch-Hit-content-wrapper\">\n <Snippet\n className=\"DocSearch-Hit-title\"\n hit={item}\n attribute=\"content\"\n />\n <Snippet\n className=\"DocSearch-Hit-path\"\n hit={item}\n attribute=\"hierarchy.lvl1\"\n />\n </div>\n )}\n\n {renderAction({ item, runDeleteTransition, runFavoriteTransition })}\n </div>\n </Hit>\n </li>\n );\n}\n","export function groupBy<TValue extends object>(\n values: TValue[],\n predicate: (value: TValue) => string\n): Record<string, TValue[]> {\n return values.reduce<Record<string, TValue[]>>((acc, item) => {\n const key = predicate(item);\n\n if (!acc.hasOwnProperty(key)) {\n acc[key] = [];\n }\n\n // We limit each section to show 5 hits maximum.\n // This acts as a frontend alternative to `distinct`.\n if (acc[key].length < 5) {\n acc[key].push(item);\n }\n\n return acc;\n }, {});\n}\n","export function identity<TParam>(x: TParam): TParam {\n return x;\n}\n","export function noop(..._args: any[]): void {}\n","const regexHighlightTags = /(<mark>|<\\/mark>)/g;\nconst regexHasHighlightTags = RegExp(regexHighlightTags.source);\n\nexport function removeHighlightTags(value: string): string {\n return value && regexHasHighlightTags.test(value)\n ? value.replace(regexHighlightTags, '')\n : value;\n}\n","import React from 'react';\n\nimport { SelectIcon, SourceIcon } from './icons';\nimport { Results } from './Results';\nimport { ScreenStateProps } from './ScreenState';\nimport { InternalDocSearchHit } from './types';\nimport { removeHighlightTags } from './utils';\n\ntype ResultsScreenProps = ScreenStateProps<InternalDocSearchHit>;\n\nexport function ResultsScreen(props: ResultsScreenProps) {\n return (\n <div className=\"DocSearch-Dropdown-Container\">\n {props.state.collections.map((collection, index) => {\n if (collection.items.length === 0) {\n return null;\n }\n\n const title = removeHighlightTags(\n collection.items[0]._highlightResult.hierarchy.lvl0.value\n );\n\n return (\n <Results\n {...props}\n key={index}\n title={title}\n collection={collection}\n renderIcon={({ item, index }) => (\n <>\n {item.__docsearch_parent && (\n <svg className=\"DocSearch-Hit-Tree\" viewBox=\"0 0 24 54\">\n <g\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n {item.__docsearch_parent !==\n collection.items[index + 1]?.__docsearch_parent ? (\n <path d=\"M8 6v21M20 27H8.3\" />\n ) : (\n <path d=\"M8 6v42M20 27H8.3\" />\n )}\n </g>\n </svg>\n )}\n\n <div className=\"DocSearch-Hit-icon\">\n <SourceIcon type={item.type} />\n </div>\n </>\n )}\n renderAction={() => (\n <div className=\"DocSearch-Hit-action\">\n <SelectIcon />\n </div>\n )}\n />\n );\n })}\n\n {props.resultsFooterComponent && (\n <section className=\"DocSearch-HitsFooter\">\n <props.resultsFooterComponent state={props.state} />\n </section>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport { RecentIcon, ResetIcon, StarIcon } from './icons';\nimport { Results } from './Results';\nimport { ScreenStateProps } from './ScreenState';\nimport { InternalDocSearchHit } from './types';\n\ninterface StartScreenProps extends ScreenStateProps<InternalDocSearchHit> {\n hasCollections: boolean;\n}\n\nexport function StartScreen(props: StartScreenProps) {\n if (props.state.status === 'idle' && props.hasCollections === false) {\n if (props.disableUserPersonalization) {\n return null;\n }\n\n return (\n <div className=\"DocSearch-StartScreen\">\n <p className=\"DocSearch-Help\">No recent searches</p>\n </div>\n );\n }\n\n if (props.hasCollections === false) {\n return null;\n }\n\n return (\n <div className=\"DocSearch-Dropdown-Container\">\n <Results\n {...props}\n title=\"Recent\"\n collection={props.state.collections[0]}\n renderIcon={() => (\n <div className=\"DocSearch-Hit-icon\">\n <RecentIcon />\n </div>\n )}\n renderAction={({\n item,\n runFavoriteTransition,\n runDeleteTransition,\n }) => (\n <>\n <div className=\"DocSearch-Hit-action\">\n <button\n className=\"DocSearch-Hit-action-button\"\n title=\"Save this search\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n runFavoriteTransition(() => {\n props.favoriteSearches.add(item);\n props.recentSearches.remove(item);\n props.refresh();\n });\n }}\n >\n <StarIcon />\n </button>\n </div>\n <div className=\"DocSearch-Hit-action\">\n <button\n className=\"DocSearch-Hit-action-button\"\n title=\"Remove this search from history\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n runDeleteTransition(() => {\n props.recentSearches.remove(item);\n props.refresh();\n });\n }}\n >\n <ResetIcon />\n </button>\n </div>\n </>\n )}\n />\n\n <Results\n {...props}\n title=\"Favorites\"\n collection={props.state.collections[1]}\n renderIcon={() => (\n <div className=\"DocSearch-Hit-icon\">\n <StarIcon />\n </div>\n )}\n renderAction={({ item, runDeleteTransition }) => (\n <div className=\"DocSearch-Hit-action\">\n <button\n className=\"DocSearch-Hit-action-button\"\n title=\"Remove this search from favorites\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n runDeleteTransition(() => {\n props.favoriteSearches.remove(item);\n props.refresh();\n });\n }}\n >\n <ResetIcon />\n </button>\n </div>\n )}\n />\n </div>\n );\n}\n","import {\n AutocompleteApi,\n AutocompleteState,\n BaseItem,\n} from '@algolia/autocomplete-core';\nimport React from 'react';\n\nimport { DocSearchProps } from './DocSearch';\nimport { ErrorScreen } from './ErrorScreen';\nimport { NoResultsScreen } from './NoResultsScreen';\nimport { ResultsScreen } from './ResultsScreen';\nimport { StartScreen } from './StartScreen';\nimport { StoredSearchPlugin } from './stored-searches';\nimport { InternalDocSearchHit, StoredDocSearchHit } from './types';\n\nexport interface ScreenStateProps<TItem extends BaseItem>\n extends AutocompleteApi<\n TItem,\n React.FormEvent,\n React.MouseEvent,\n React.KeyboardEvent\n > {\n state: AutocompleteState<TItem>;\n recentSearches: StoredSearchPlugin<StoredDocSearchHit>;\n favoriteSearches: StoredSearchPlugin<StoredDocSearchHit>;\n onItemClick(item: InternalDocSearchHit): void;\n inputRef: React.MutableRefObject<null | HTMLInputElement>;\n hitComponent: DocSearchProps['hitComponent'];\n indexName: DocSearchProps['indexName'];\n disableUserPersonalization: boolean;\n resultsFooterComponent: DocSearchProps['resultsFooterComponent'];\n}\n\nexport const ScreenState = React.memo(\n (props: ScreenStateProps<InternalDocSearchHit>) => {\n if (props.state.status === 'error') {\n return <ErrorScreen />;\n }\n\n const hasCollections = props.state.collections.some(\n (collection) => collection.items.length > 0\n );\n\n if (!props.state.query) {\n return <StartScreen {...props} hasCollections={hasCollections} />;\n }\n\n if (hasCollections === false) {\n return <NoResultsScreen {...props} />;\n }\n\n return <ResultsScreen {...props} />;\n },\n function areEqual(_prevProps, nextProps) {\n // We don't update the screen when Autocomplete is loading or stalled to\n // avoid UI flashes:\n // - Empty screen → Results screen\n // - NoResults screen → NoResults screen with another query\n return (\n nextProps.state.status === 'loading' ||\n nextProps.state.status === 'stalled'\n );\n }\n);\n","import { AutocompleteApi, AutocompleteState } from '@algolia/autocomplete-core';\nimport React, { MutableRefObject } from 'react';\n\nimport { MAX_QUERY_SIZE } from './constants';\nimport { LoadingIcon } from './icons/LoadingIcon';\nimport { ResetIcon } from './icons/ResetIcon';\nimport { SearchIcon } from './icons/SearchIcon';\nimport { InternalDocSearchHit } from './types';\n\ninterface SearchBoxProps\n extends AutocompleteApi<\n InternalDocSearchHit,\n React.FormEvent,\n React.MouseEvent,\n React.KeyboardEvent\n > {\n state: AutocompleteState<InternalDocSearchHit>;\n autoFocus: boolean;\n inputRef: MutableRefObject<HTMLInputElement | null>;\n onClose(): void;\n isFromSelection: boolean;\n}\n\nexport function SearchBox(props: SearchBoxProps) {\n const { onReset } = props.getFormProps({\n inputElement: props.inputRef.current,\n });\n\n React.useEffect(() => {\n if (props.autoFocus && props.inputRef.current) {\n props.inputRef.current.focus();\n }\n }, [props.autoFocus, props.inputRef]);\n\n React.useEffect(() => {\n if (props.isFromSelection && props.inputRef.current) {\n props.inputRef.current.select();\n }\n }, [props.isFromSelection, props.inputRef]);\n\n return (\n <>\n <form\n className=\"DocSearch-Form\"\n onSubmit={(event) => {\n event.preventDefault();\n }}\n onReset={onReset}\n >\n <label className=\"DocSearch-MagnifierLabel\" {...props.getLabelProps()}>\n <SearchIcon />\n </label>\n\n <div className=\"DocSearch-LoadingIndicator\">\n <LoadingIcon />\n </div>\n\n <input\n className=\"DocSearch-Input\"\n ref={props.inputRef}\n {...props.getInputProps({\n inputElement: props.inputRef.current!,\n autoFocus: props.autoFocus,\n maxLength: MAX_QUERY_SIZE,\n })}\n />\n\n <button\n type=\"reset\"\n title=\"Clear the query\"\n className=\"DocSearch-Reset\"\n hidden={!props.state.query}\n >\n <ResetIcon />\n </button>\n </form>\n\n <button className=\"DocSearch-Cancel\" onClick={props.onClose}>\n Cancel\n </button>\n </>\n );\n}\n","export const MAX_QUERY_SIZE = 64;\n","import { DocSearchHit, StoredDocSearchHit } from './types';\n\nfunction isLocalStorageSupported() {\n const key = '__TEST_KEY__';\n\n try {\n localStorage.setItem(key, '');\n localStorage.removeItem(key);\n\n return true;\n } catch (error) {\n return false;\n }\n}\n\nfunction createStorage<TItem>(key: string) {\n if (isLocalStorageSupported() === false) {\n return {\n setItem() {},\n getItem() {\n return [];\n },\n };\n }\n\n return {\n setItem(item: TItem[]) {\n return window.localStorage.setItem(key, JSON.stringify(item));\n },\n getItem(): TItem[] {\n const item = window.localStorage.getItem(key);\n\n return item ? JSON.parse(item) : [];\n },\n };\n}\n\ntype CreateStoredSearchesOptions = {\n key: string;\n limit?: number;\n};\n\nexport type StoredSearchPlugin<TItem> = {\n add(item: TItem): void;\n remove(item: TItem): void;\n getAll(): TItem[];\n};\n\nexport function createStoredSearches<TItem extends StoredDocSearchHit>({\n key,\n limit = 5,\n}: CreateStoredSearchesOptions): StoredSearchPlugin<TItem> {\n const storage = createStorage<TItem>(key);\n let items = storage.getItem().slice(0, limit);\n\n return {\n add(item: TItem) {\n const {\n _highlightResult,\n _snippetResult,\n ...hit\n } = (item as unknown) as DocSearchHit;\n\n const isQueryAlreadySaved = items.findIndex(\n (x) => x.objectID === hit.objectID\n );\n\n if (isQueryAlreadySaved > -1) {\n items.splice(isQueryAlreadySaved, 1);\n }\n\n items.unshift(hit as TItem);\n items = items.slice(0, limit);\n\n storage.setItem(items);\n },\n remove(item: TItem) {\n items = items.filter((x) => x.objectID !== item.objectID);\n\n storage.setItem(items);\n },\n getAll() {\n return items;\n },\n };\n}\n","function createBrowserLocalStorageCache(options) {\r\n const namespaceKey = `algoliasearch-client-js-${options.key}`;\r\n // eslint-disable-next-line functional/no-let\r\n let storage;\r\n const getStorage = () => {\r\n if (storage === undefined) {\r\n storage = options.localStorage || window.localStorage;\r\n }\r\n return storage;\r\n };\r\n const getNamespace = () => {\r\n return JSON.parse(getStorage().getItem(namespaceKey) || '{}');\r\n };\r\n return {\r\n get(key, defaultValue, events = {\r\n miss: () => Promise.resolve(),\r\n }) {\r\n return Promise.resolve()\r\n .then(() => {\r\n const keyAsString = JSON.stringify(key);\r\n const value = getNamespace()[keyAsString];\r\n return Promise.all([value || defaultValue(), value !== undefined]);\r\n })\r\n .then(([value, exists]) => {\r\n return Promise.all([value, exists || events.miss(value)]);\r\n })\r\n .then(([value]) => value);\r\n },\r\n set(key, value) {\r\n return Promise.resolve().then(() => {\r\n const namespace = getNamespace();\r\n // eslint-disable-next-line functional/immutable-data\r\n namespace[JSON.stringify(key)] = value;\r\n getStorage().setItem(namespaceKey, JSON.stringify(namespace));\r\n return value;\r\n });\r\n },\r\n delete(key) {\r\n return Promise.resolve().then(() => {\r\n const namespace = getNamespace();\r\n // eslint-disable-next-line functional/immutable-data\r\n delete namespace[JSON.stringify(key)];\r\n getStorage().setItem(namespaceKey, JSON.stringify(namespace));\r\n });\r\n },\r\n clear() {\r\n return Promise.resolve().then(() => {\r\n getStorage().removeItem(namespaceKey);\r\n });\r\n },\r\n };\r\n}\n\n// @todo Add logger on options to debug when caches go wrong.\r\nfunction createFallbackableCache(options) {\r\n const caches = [...options.caches];\r\n const current = caches.shift(); // eslint-disable-line functional/immutable-data\r\n if (current === undefined) {\r\n return createNullCache();\r\n }\r\n return {\r\n get(key, defaultValue, events = {\r\n miss: () => Promise.resolve(),\r\n }) {\r\n return current.get(key, defaultValue, events).catch(() => {\r\n return createFallbackableCache({ caches }).get(key, defaultValue, events);\r\n });\r\n },\r\n set(key, value) {\r\n return current.set(key, value).catch(() => {\r\n return createFallbackableCache({ caches }).set(key, value);\r\n });\r\n },\r\n delete(key) {\r\n return current.delete(key).catch(() => {\r\n return createFallbackableCache({ caches }).delete(key);\r\n });\r\n },\r\n clear() {\r\n return current.clear().catch(() => {\r\n return createFallbackableCache({ caches }).clear();\r\n });\r\n },\r\n };\r\n}\n\nfunction createNullCache() {\r\n return {\r\n get(_key, defaultValue, events = {\r\n miss: () => Promise.resolve(),\r\n }) {\r\n const value = defaultValue();\r\n return value\r\n .then(result => Promise.all([result, events.miss(result)]))\r\n .then(([result]) => result);\r\n },\r\n set(_key, value) {\r\n return Promise.resolve(value);\r\n },\r\n delete(_key) {\r\n return Promise.resolve();\r\n },\r\n clear() {\r\n return Promise.resolve();\r\n },\r\n };\r\n}\n\nfunction createInMemoryCache(options = { serializable: true }) {\r\n // eslint-disable-next-line functional/no-let\r\n let cache = {};\r\n return {\r\n get(key, defaultValue, events = {\r\n miss: () => Promise.resolve(),\r\n }) {\r\n const keyAsString = JSON.stringify(key);\r\n if (keyAsString in cache) {\r\n return Promise.resolve(options.serializable ? JSON.parse(cache[keyAsString]) : cache[keyAsString]);\r\n }\r\n const promise = defaultValue();\r\n const miss = (events && events.miss) || (() => Promise.resolve());\r\n return promise.then((value) => miss(value)).then(() => promise);\r\n },\r\n set(key, value) {\r\n // eslint-disable-next-line functional/immutable-data\r\n cache[JSON.stringify(key)] = options.serializable ? JSON.stringify(value) : value;\r\n return Promise.resolve(value);\r\n },\r\n delete(key) {\r\n // eslint-disable-next-line functional/immutable-data\r\n delete cache[JSON.stringify(key)];\r\n return Promise.resolve();\r\n },\r\n clear() {\r\n cache = {};\r\n return Promise.resolve();\r\n },\r\n };\r\n}\n\nfunction createAuth(authMode, appId, apiKey) {\r\n const credentials = {\r\n 'x-algolia-api-key': apiKey,\r\n 'x-algolia-application-id': appId,\r\n };\r\n return {\r\n headers() {\r\n return authMode === AuthMode.WithinHeaders ? credentials : {};\r\n },\r\n queryParameters() {\r\n return authMode === AuthMode.WithinQueryParameters ? credentials : {};\r\n },\r\n };\r\n}\n\n// eslint-disable-next-line functional/prefer-readonly-type\r\nfunction shuffle(array) {\r\n let c = array.length - 1; // eslint-disable-line functional/no-let\r\n // eslint-disable-next-line functional/no-loop-statement\r\n for (c; c > 0; c--) {\r\n const b = Math.floor(Math.random() * (c + 1));\r\n const a = array[c];\r\n array[c] = array[b]; // eslint-disable-line functional/immutable-data, no-param-reassign\r\n array[b] = a; // eslint-disable-line functional/immutable-data, no-param-reassign\r\n }\r\n return array;\r\n}\r\nfunction addMethods(base, methods) {\r\n if (!methods) {\r\n return base;\r\n }\r\n Object.keys(methods).forEach(key => {\r\n // eslint-disable-next-line functional/immutable-data, no-param-reassign\r\n base[key] = methods[key](base);\r\n });\r\n return base;\r\n}\r\nfunction encode(format, ...args) {\r\n // eslint-disable-next-line functional/no-let\r\n let i = 0;\r\n return format.replace(/%s/g, () => encodeURIComponent(args[i++]));\r\n}\n\nconst version = '4.8.5';\n\nconst AuthMode = {\r\n /**\r\n * If auth credentials should be in query parameters.\r\n */\r\n WithinQueryParameters: 0,\r\n /**\r\n * If auth credentials should be in headers.\r\n */\r\n WithinHeaders: 1,\r\n};\n\nfunction createMappedRequestOptions(requestOptions, timeout) {\r\n const options = requestOptions || {};\r\n const data = options.data || {};\r\n Object.keys(options).forEach(key => {\r\n if (['timeout', 'headers', 'queryParameters', 'data', 'cacheable'].indexOf(key) === -1) {\r\n data[key] = options[key]; // eslint-disable-line functional/immutable-data\r\n }\r\n });\r\n return {\r\n data: Object.entries(data).length > 0 ? data : undefined,\r\n timeout: options.timeout || timeout,\r\n headers: options.headers || {},\r\n queryParameters: options.queryParameters || {},\r\n cacheable: options.cacheable,\r\n };\r\n}\n\nconst CallEnum = {\r\n /**\r\n * If the host is read only.\r\n */\r\n Read: 1,\r\n /**\r\n * If the host is write only.\r\n */\r\n Write: 2,\r\n /**\r\n * If the host is both read and write.\r\n */\r\n Any: 3,\r\n};\n\nconst HostStatusEnum = {\r\n Up: 1,\r\n Down: 2,\r\n Timeouted: 3,\r\n};\n\n// By default, API Clients at Algolia have expiration delay\r\n// of 5 mins. In the JavaScript client, we have 2 mins.\r\nconst EXPIRATION_DELAY = 2 * 60 * 1000;\r\nfunction createStatefulHost(host, status = HostStatusEnum.Up) {\r\n return {\r\n ...host,\r\n status,\r\n lastUpdate: Date.now(),\r\n };\r\n}\r\nfunction isStatefulHostUp(host) {\r\n return host.status === HostStatusEnum.Up || Date.now() - host.lastUpdate > EXPIRATION_DELAY;\r\n}\r\nfunction isStatefulHostTimeouted(host) {\r\n return (host.status === HostStatusEnum.Timeouted && Date.now() - host.lastUpdate <= EXPIRATION_DELAY);\r\n}\n\nfunction createStatelessHost(options) {\r\n if (typeof options === 'string') {\r\n return {\r\n protocol: 'https',\r\n url: options,\r\n accept: CallEnum.Any,\r\n };\r\n }\r\n return {\r\n protocol: options.protocol || 'https',\r\n url: options.url,\r\n accept: options.accept || CallEnum.Any,\r\n };\r\n}\n\nconst MethodEnum = {\r\n Delete: 'DELETE',\r\n Get: 'GET',\r\n Post: 'POST',\r\n Put: 'PUT',\r\n};\n\nfunction createRetryableOptions(hostsCache, statelessHosts) {\r\n return Promise.all(statelessHosts.map(statelessHost => {\r\n return hostsCache.get(statelessHost, () => {\r\n return Promise.resolve(createStatefulHost(statelessHost));\r\n });\r\n })).then(statefulHosts => {\r\n const hostsUp = statefulHosts.filter(host => isStatefulHostUp(host));\r\n const hostsTimeouted = statefulHosts.filter(host => isStatefulHostTimeouted(host));\r\n /**\r\n * Note, we put the hosts that previously timeouted on the end of the list.\r\n */\r\n const hostsAvailable = [...hostsUp, ...hostsTimeouted];\r\n const statelessHostsAvailable = hostsAvailable.length > 0\r\n ? hostsAvailable.map(host => createStatelessHost(host))\r\n : statelessHosts;\r\n return {\r\n getTimeout(timeoutsCount, baseTimeout) {\r\n /**\r\n * Imagine that you have 4 hosts, if timeouts will increase\r\n * on the following way: 1 (timeouted) > 4 (timeouted) > 5 (200)\r\n *\r\n * Note that, the very next request, we start from the previous timeout\r\n *\r\n * 5 (timeouted) > 6 (timeouted) > 7 ...\r\n *\r\n * This strategy may need to be reviewed, but is the strategy on the our\r\n * current v3 version.\r\n */\r\n const timeoutMultiplier = hostsTimeouted.length === 0 && timeoutsCount === 0\r\n ? 1\r\n : hostsTimeouted.length + 3 + timeoutsCount;\r\n return timeoutMultiplier * baseTimeout;\r\n },\r\n statelessHosts: statelessHostsAvailable,\r\n };\r\n });\r\n}\n\nconst isNetworkError = ({ isTimedOut, status }) => {\r\n return !isTimedOut && ~~status === 0;\r\n};\r\nconst isRetryable = (response) => {\r\n const status = response.status;\r\n const isTimedOut = response.isTimedOut;\r\n return (isTimedOut || isNetworkError(response) || (~~(status / 100) !== 2 && ~~(status / 100) !== 4));\r\n};\r\nconst isSuccess = ({ status }) => {\r\n return ~~(status / 100) === 2;\r\n};\r\nconst retryDecision = (response, outcomes) => {\r\n if (isRetryable(response)) {\r\n return outcomes.onRetry(response);\r\n }\r\n if (isSuccess(response)) {\r\n return outcomes.onSucess(response);\r\n }\r\n return outcomes.onFail(response);\r\n};\n\nfunction retryableRequest(transporter, statelessHosts, request, requestOptions) {\r\n const stackTrace = []; // eslint-disable-line functional/prefer-readonly-type\r\n /**\r\n * First we prepare the payload that do not depend from hosts.\r\n */\r\n const data = serializeData(request, requestOptions);\r\n const headers = serializeHeaders(transporter, requestOptions);\r\n const method = request.method;\r\n // On `GET`, the data is proxied to query parameters.\r\n const dataQueryParameters = request.method !== MethodEnum.Get\r\n ? {}\r\n : {\r\n ...request.data,\r\n ...requestOptions.data,\r\n };\r\n const queryParameters = {\r\n 'x-algolia-agent': transporter.userAgent.value,\r\n ...transporter.queryParameters,\r\n ...dataQueryParameters,\r\n ...requestOptions.queryParameters,\r\n };\r\n let timeoutsCount = 0; // eslint-disable-line functional/no-let\r\n const retry = (hosts, // eslint-disable-line functional/prefer-readonly-type\r\n getTimeout) => {\r\n /**\r\n * We iterate on each host, until there is no host left.\r\n */\r\n const host = hosts.pop(); // eslint-disable-line functional/immutable-data\r\n if (host === undefined) {\r\n throw createRetryError(stackTraceWithoutCredentials(stackTrace));\r\n }\r\n const payload = {\r\n data,\r\n headers,\r\n method,\r\n url: serializeUrl(host, request.path, queryParameters),\r\n connectTimeout: getTimeout(timeoutsCount, transporter.timeouts.connect),\r\n responseTimeout: getTimeout(timeoutsCount, requestOptions.timeout),\r\n };\r\n /**\r\n * The stackFrame is pushed to the stackTrace so we\r\n * can have information about onRetry and onFailure\r\n * decisions.\r\n */\r\n const pushToStackTrace = (response) => {\r\n const stackFrame = {\r\n request: payload,\r\n response,\r\n host,\r\n triesLeft: hosts.length,\r\n };\r\n // eslint-disable-next-line functional/immutable-data\r\n stackTrace.push(stackFrame);\r\n return stackFrame;\r\n };\r\n const decisions = {\r\n onSucess: response => deserializeSuccess(response),\r\n onRetry(response) {\r\n const stackFrame = pushToStackTrace(response);\r\n /**\r\n * If response is a timeout, we increaset the number of\r\n * timeouts so we can increase the timeout later.\r\n */\r\n if (response.isTimedOut) {\r\n timeoutsCount++;\r\n }\r\n return Promise.all([\r\n /**\r\n * Failures are individually send the logger, allowing\r\n * the end user to debug / store stack frames even\r\n * when a retry error does not happen.\r\n */\r\n transporter.logger.info('Retryable failure', stackFrameWithoutCredentials(stackFrame)),\r\n /**\r\n * We also store the state of the host in failure cases. If the host, is\r\n * down it will remain down for the next 2 minutes. In a timeout situation,\r\n * this host will be added end of the list of hosts on the next request.\r\n */\r\n transporter.hostsCache.set(host, createStatefulHost(host, response.isTimedOut ? HostStatusEnum.Timeouted : HostStatusEnum.Down)),\r\n ]).then(() => retry(hosts, getTimeout));\r\n },\r\n onFail(response) {\r\n pushToStackTrace(response);\r\n throw deserializeFailure(response, stackTraceWithoutCredentials(stackTrace));\r\n },\r\n };\r\n return transporter.requester.send(payload).then(response => {\r\n return retryDecision(response, decisions);\r\n });\r\n };\r\n /**\r\n * Finally, for each retryable host perform request until we got a non\r\n * retryable response. Some notes here:\r\n *\r\n * 1. The reverse here is applied so we can apply a `pop` later on => more performant.\r\n * 2. We also get from the retryable options a timeout multiplier that is tailored\r\n * for the current context.\r\n */\r\n return createRetryableOptions(transporter.hostsCache, statelessHosts).then(options => {\r\n return retry([...options.statelessHosts].reverse(), options.getTimeout);\r\n });\r\n}\n\nfunction createTransporter(options) {\r\n const { hostsCache, logger, requester, requestsCache, responsesCache, timeouts, userAgent, hosts, queryParameters, headers, } = options;\r\n const transporter = {\r\n hostsCache,\r\n logger,\r\n requester,\r\n requestsCache,\r\n responsesCache,\r\n timeouts,\r\n userAgent,\r\n headers,\r\n queryParameters,\r\n hosts: hosts.map(host => createStatelessHost(host)),\r\n read(request, requestOptions) {\r\n /**\r\n * First, we compute the user request options. Now, keep in mind,\r\n * that using request options the user is able to modified the intire\r\n * payload of the request. Such as headers, query parameters, and others.\r\n */\r\n const mappedRequestOptions = createMappedRequestOptions(requestOptions, transporter.timeouts.read);\r\n const createRetryableRequest = () => {\r\n /**\r\n * Then, we prepare a function factory that contains the construction of\r\n * the retryable request. At this point, we may *not* perform the actual\r\n * request. But we want to have the function factory ready.\r\n */\r\n return retryableRequest(transporter, transporter.hosts.filter(host => (host.accept & CallEnum.Read) !== 0), request, mappedRequestOptions);\r\n };\r\n /**\r\n * Once we have the function factory ready, we need to determine of the\r\n * request is \"cacheable\" - should be cached. Note that, once again,\r\n * the user can force this option.\r\n */\r\n const cacheable = mappedRequestOptions.cacheable !== undefined\r\n ? mappedRequestOptions.cacheable\r\n : request.cacheable;\r\n /**\r\n * If is not \"cacheable\", we immediatly trigger the retryable request, no\r\n * need to check cache implementations.\r\n */\r\n if (cacheable !== true) {\r\n return createRetryableRequest();\r\n }\r\n /**\r\n * If the request is \"cacheable\", we need to first compute the key to ask\r\n * the cache implementations if this request is on progress or if the\r\n * response already exists on the cache.\r\n */\r\n const key = {\r\n request,\r\n mappedRequestOptions,\r\n transporter: {\r\n queryParameters: transporter.queryParameters,\r\n headers: transporter.headers,\r\n },\r\n };\r\n /**\r\n * With the computed key, we first ask the responses cache\r\n * implemention if this request was been resolved before.\r\n */\r\n return transporter.responsesCache.get(key, () => {\r\n /**\r\n * If the request has never resolved before, we actually ask if there\r\n * is a current request with the same key on progress.\r\n */\r\n return transporter.requestsCache.get(key, () => {\r\n return (transporter.requestsCache\r\n /**\r\n * Finally, if there is no request in progress with the same key,\r\n * this `createRetryableRequest()` will actually trigger the\r\n * retryable request.\r\n */\r\n .set(key, createRetryableRequest())\r\n .then(response => Promise.all([transporter.requestsCache.delete(key), response]), err => Promise.all([transporter.requestsCache.delete(key), Promise.reject(err)]))\r\n .then(([_, response]) => response));\r\n });\r\n }, {\r\n /**\r\n * Of course, once we get this response back from the server, we\r\n * tell response cache to actually store the received response\r\n * to be used later.\r\n */\r\n miss: response => transporter.responsesCache.set(key, response),\r\n });\r\n },\r\n write(request, requestOptions) {\r\n /**\r\n * On write requests, no cache mechanisms are applied, and we\r\n * proxy the request immediately to the requester.\r\n */\r\n return retryableRequest(transporter, transporter.hosts.filter(host => (host.accept & CallEnum.Write) !== 0), request, createMappedRequestOptions(requestOptions, transporter.timeouts.write));\r\n },\r\n };\r\n return transporter;\r\n}\n\nfunction createUserAgent(version) {\r\n const userAgent = {\r\n value: `Algolia for JavaScript (${version})`,\r\n add(options) {\r\n const addedUserAgent = `; ${options.segment}${options.version !== undefined ? ` (${options.version})` : ''}`;\r\n if (userAgent.value.indexOf(addedUserAgent) === -1) {\r\n // eslint-disable-next-line functional/immutable-data\r\n userAgent.value = `${userAgent.value}${addedUserAgent}`;\r\n }\r\n return userAgent;\r\n },\r\n };\r\n return userAgent;\r\n}\n\nfunction deserializeSuccess(response) {\r\n // eslint-disable-next-line functional/no-try-statement\r\n try {\r\n return JSON.parse(response.content);\r\n }\r\n catch (e) {\r\n throw createDeserializationError(e.message, response);\r\n }\r\n}\r\nfunction deserializeFailure({ content, status }, stackFrame) {\r\n // eslint-disable-next-line functional/no-let\r\n let message = content;\r\n // eslint-disable-next-line functional/no-try-statement\r\n try {\r\n message = JSON.parse(content).message;\r\n }\r\n catch (e) {\r\n // ..\r\n }\r\n return createApiError(message, status, stackFrame);\r\n}\n\nfunction serializeUrl(host, path, queryParameters) {\r\n const queryParametersAsString = serializeQueryParameters(queryParameters);\r\n // eslint-disable-next-line functional/no-let\r\n let url = `${host.protocol}://${host.url}/${path.charAt(0) === '/' ? path.substr(1) : path}`;\r\n if (queryParametersAsString.length) {\r\n url += `?${queryParametersAsString}`;\r\n }\r\n return url;\r\n}\r\nfunction serializeQueryParameters(parameters) {\r\n const isObjectOrArray = (value) => Object.prototype.toString.call(value) === '[object Object]' ||\r\n Object.prototype.toString.call(value) === '[object Array]';\r\n return Object.keys(parameters)\r\n .map(key => encode('%s=%s', key, isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key]))\r\n .join('&');\r\n}\r\nfunction serializeData(request, requestOptions) {\r\n if (request.method === MethodEnum.Get ||\r\n (request.data === undefined && requestOptions.data === undefined)) {\r\n return undefined;\r\n }\r\n const data = Array.isArray(request.data)\r\n ? request.data\r\n : { ...request.data, ...requestOptions.data };\r\n return JSON.stringify(data);\r\n}\r\nfunction serializeHeaders(transporter, requestOptions) {\r\n const headers = {\r\n ...transporter.headers,\r\n ...requestOptions.headers,\r\n };\r\n const serializedHeaders = {};\r\n Object.keys(headers).forEach(header => {\r\n const value = headers[header];\r\n // @ts-ignore\r\n // eslint-disable-next-line functional/immutable-data\r\n serializedHeaders[header.toLowerCase()] = value;\r\n });\r\n return serializedHeaders;\r\n}\n\nfunction stackTraceWithoutCredentials(stackTrace) {\r\n return stackTrace.map(stackFrame => stackFrameWithoutCredentials(stackFrame));\r\n}\r\nfunction stackFrameWithoutCredentials(stackFrame) {\r\n const modifiedHeaders = stackFrame.request.headers['x-algolia-api-key']\r\n ? { 'x-algolia-api-key': '*****' }\r\n : {};\r\n return {\r\n ...stackFrame,\r\n request: {\r\n ...stackFrame.request,\r\n headers: {\r\n ...stackFrame.request.headers,\r\n ...modifiedHeaders,\r\n },\r\n },\r\n };\r\n}\n\nfunction createApiError(message, status, transporterStackTrace) {\r\n return {\r\n name: 'ApiError',\r\n message,\r\n status,\r\n transporterStackTrace,\r\n };\r\n}\n\nfunction createDeserializationError(message, response) {\r\n return {\r\n name: 'DeserializationError',\r\n message,\r\n response,\r\n };\r\n}\n\nfunction createRetryError(transporterStackTrace) {\r\n return {\r\n name: 'RetryError',\r\n message: 'Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.',\r\n transporterStackTrace,\r\n };\r\n}\n\nconst createSearchClient = options => {\r\n const appId = options.appId;\r\n const auth = createAuth(options.authMode !== undefined ? options.authMode : AuthMode.WithinHeaders, appId, options.apiKey);\r\n const transporter = createTransporter({\r\n hosts: [\r\n { url: `${appId}-dsn.algolia.net`, accept: CallEnum.Read },\r\n { url: `${appId}.algolia.net`, accept: CallEnum.Write },\r\n ].concat(shuffle([\r\n { url: `${appId}-1.algolianet.com` },\r\n { url: `${appId}-2.algolianet.com` },\r\n { url: `${appId}-3.algolianet.com` },\r\n ])),\r\n ...options,\r\n headers: {\r\n ...auth.headers(),\r\n ...{ 'content-type': 'application/x-www-form-urlencoded' },\r\n ...options.headers,\r\n },\r\n queryParameters: {\r\n ...auth.queryParameters(),\r\n ...options.queryParameters,\r\n },\r\n });\r\n const base = {\r\n transporter,\r\n appId,\r\n addAlgoliaAgent(segment, version) {\r\n transporter.userAgent.add({ segment, version });\r\n },\r\n clearCache() {\r\n return Promise.all([\r\n transporter.requestsCache.clear(),\r\n transporter.responsesCache.clear(),\r\n ]).then(() => undefined);\r\n },\r\n };\r\n return addMethods(base, options.methods);\r\n};\n\nconst initIndex = (base) => {\r\n return (indexName, options = {}) => {\r\n const searchIndex = {\r\n transporter: base.transporter,\r\n appId: base.appId,\r\n indexName,\r\n };\r\n return addMethods(searchIndex, options.methods);\r\n };\r\n};\n\nconst multipleQueries = (base) => {\r\n return (queries, requestOptions) => {\r\n const requests = queries.map(query => {\r\n return {\r\n ...query,\r\n params: serializeQueryParameters(query.params || {}),\r\n };\r\n });\r\n return base.transporter.read({\r\n method: MethodEnum.Post,\r\n path: '1/indexes/*/queries',\r\n data: {\r\n requests,\r\n },\r\n cacheable: true,\r\n }, requestOptions);\r\n };\r\n};\n\nconst multipleSearchForFacetValues = (base) => {\r\n return (queries, requestOptions) => {\r\n return Promise.all(queries.map(query => {\r\n const { facetName, facetQuery, ...params } = query.params;\r\n return initIndex(base)(query.indexName, {\r\n methods: { searchForFacetValues },\r\n }).searchForFacetValues(facetName, facetQuery, {\r\n ...requestOptions,\r\n ...params,\r\n });\r\n }));\r\n };\r\n};\n\nconst findAnswers = (base) => {\r\n return (query, queryLanguages, requestOptions) => {\r\n return base.transporter.read({\r\n method: MethodEnum.Post,\r\n path: encode('1/answers/%s/prediction', base.indexName),\r\n data: {\r\n query,\r\n queryLanguages,\r\n },\r\n cacheable: true,\r\n }, requestOptions);\r\n };\r\n};\n\nconst search = (base) => {\r\n return (query, requestOptions) => {\r\n return base.transporter.read({\r\n method: MethodEnum.Post,\r\n path: encode('1/indexes/%s/query', base.indexName),\r\n data: {\r\n query,\r\n },\r\n cacheable: true,\r\n }, requestOptions);\r\n };\r\n};\n\nconst searchForFacetValues = (base) => {\r\n return (facetName, facetQuery, requestOptions) => {\r\n return base.transporter.read({\r\n method: MethodEnum.Post,\r\n path: encode('1/indexes/%s/facets/%s/query', base.indexName, facetName),\r\n data: {\r\n facetQuery,\r\n },\r\n cacheable: true,\r\n }, requestOptions);\r\n };\r\n};\n\nconst LogLevelEnum = {\r\n Debug: 1,\r\n Info: 2,\r\n Error: 3,\r\n};\n\n/* eslint no-console: 0 */\r\nfunction createConsoleLogger(logLevel) {\r\n return {\r\n debug(message, args) {\r\n if (LogLevelEnum.Debug >= logLevel) {\r\n console.debug(message, args);\r\n }\r\n return Promise.resolve();\r\n },\r\n info(message, args) {\r\n if (LogLevelEnum.Info >= logLevel) {\r\n console.info(message, args);\r\n }\r\n return Promise.resolve();\r\n },\r\n error(message, args) {\r\n console.error(message, args);\r\n return Promise.resolve();\r\n },\r\n };\r\n}\n\nfunction createBrowserXhrRequester() {\r\n return {\r\n send(request) {\r\n return new Promise((resolve) => {\r\n const baseRequester = new XMLHttpRequest();\r\n baseRequester.open(request.method, request.url, true);\r\n Object.keys(request.headers).forEach(key => baseRequester.setRequestHeader(key, request.headers[key]));\r\n const createTimeout = (timeout, content) => {\r\n return setTimeout(() => {\r\n baseRequester.abort();\r\n resolve({\r\n status: 0,\r\n content,\r\n isTimedOut: true,\r\n });\r\n }, timeout * 1000);\r\n };\r\n const connectTimeout = createTimeout(request.connectTimeout, 'Connection timeout');\r\n // eslint-disable-next-line functional/no-let\r\n let responseTimeout;\r\n // eslint-disable-next-line functional/immutable-data\r\n baseRequester.onreadystatechange = () => {\r\n if (baseRequester.readyState > baseRequester.OPENED && responseTimeout === undefined) {\r\n clearTimeout(connectTimeout);\r\n responseTimeout = createTimeout(request.responseTimeout, 'Socket timeout');\r\n }\r\n };\r\n // eslint-disable-next-line functional/immutable-data\r\n baseRequester.onerror = () => {\r\n // istanbul ignore next\r\n if (baseRequester.status === 0) {\r\n clearTimeout(connectTimeout);\r\n clearTimeout(responseTimeout);\r\n resolve({\r\n content: baseRequester.responseText || 'Network request failed',\r\n status: baseRequester.status,\r\n isTimedOut: false,\r\n });\r\n }\r\n };\r\n // eslint-disable-next-line functional/immutable-data\r\n baseRequester.onload = () => {\r\n clearTimeout(connectTimeout);\r\n clearTimeout(responseTimeout);\r\n resolve({\r\n content: baseRequester.responseText,\r\n status: baseRequester.status,\r\n isTimedOut: false,\r\n });\r\n };\r\n baseRequester.send(request.data);\r\n });\r\n },\r\n };\r\n}\n\nfunction algoliasearch(appId, apiKey, options) {\r\n const commonOptions = {\r\n appId,\r\n apiKey,\r\n timeouts: {\r\n connect: 1,\r\n read: 2,\r\n write: 30,\r\n },\r\n requester: createBrowserXhrRequester(),\r\n logger: createConsoleLogger(LogLevelEnum.Error),\r\n responsesCache: createInMemoryCache(),\r\n requestsCache: createInMemoryCache({ serializable: false }),\r\n hostsCache: createFallbackableCache({\r\n caches: [\r\n createBrowserLocalStorageCache({ key: `${version}-${appId}` }),\r\n createInMemoryCache(),\r\n ],\r\n }),\r\n userAgent: createUserAgent(version).add({\r\n segment: 'Browser',\r\n version: 'lite',\r\n }),\r\n authMode: AuthMode.WithinQueryParameters,\r\n };\r\n return createSearchClient({\r\n ...commonOptions,\r\n ...options,\r\n methods: {\r\n search: multipleQueries,\r\n searchForFacetValues: multipleSearchForFacetValues,\r\n multipleQueries,\r\n multipleSearchForFacetValues,\r\n initIndex: base => (indexName) => {\r\n return initIndex(base)(indexName, {\r\n methods: { search, searchForFacetValues, findAnswers },\r\n });\r\n },\r\n },\r\n });\r\n}\r\n// eslint-disable-next-line functional/immutable-data\r\nalgoliasearch.version = version;\n\nexport default algoliasearch;\n","import {\n AutocompleteState,\n createAutocomplete,\n} from '@algolia/autocomplete-core';\nimport { getAlgoliaResults } from '@algolia/autocomplete-preset-algolia';\nimport React from 'react';\n\nimport { MAX_QUERY_SIZE } from './constants';\nimport { DocSearchProps } from './DocSearch';\nimport { Footer } from './Footer';\nimport { Hit } from './Hit';\nimport { ScreenState } from './ScreenState';\nimport { SearchBox } from './SearchBox';\nimport { createStoredSearches } from './stored-searches';\nimport {\n DocSearchHit,\n InternalDocSearchHit,\n StoredDocSearchHit,\n} from './types';\nimport { useSearchClient } from './useSearchClient';\nimport { useTouchEvents } from './useTouchEvents';\nimport { useTrapFocus } from './useTrapFocus';\nimport { groupBy, identity, noop, removeHighlightTags } from './utils';\n\nexport interface DocSearchModalProps extends DocSearchProps {\n initialScrollY: number;\n onClose?(): void;\n}\n\nexport function DocSearchModal({\n appId = 'BH4D9OD16A',\n apiKey,\n indexName,\n placeholder = 'Search docs',\n searchParameters,\n onClose = noop,\n transformItems = identity,\n hitComponent = Hit,\n resultsFooterComponent = () => null,\n navigator,\n initialScrollY = 0,\n transformSearchClient = identity,\n disableUserPersonalization = false,\n initialQuery: initialQueryFromProp = '',\n}: DocSearchModalProps) {\n const [state, setState] = React.useState<\n AutocompleteState<InternalDocSearchHit>\n >({\n query: '',\n collections: [],\n completion: null,\n context: {},\n isOpen: false,\n activeItemId: null,\n status: 'idle',\n });\n\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const modalRef = React.useRef<HTMLDivElement | null>(null);\n const formElementRef = React.useRef<HTMLDivElement | null>(null);\n const dropdownRef = React.useRef<HTMLDivElement | null>(null);\n const inputRef = React.useRef<HTMLInputElement | null>(null);\n const snippetLength = React.useRef<number>(10);\n const initialQueryFromSelection = React.useRef(\n typeof window !== 'undefined'\n ? window.getSelection()!.toString().slice(0, MAX_QUERY_SIZE)\n : ''\n ).current;\n const initialQuery = React.useRef(\n initialQueryFromProp || initialQueryFromSelection\n ).current;\n\n const searchClient = useSearchClient(appId, apiKey, transformSearchClient);\n const favoriteSearches = React.useRef(\n createStoredSearches<StoredDocSearchHit>({\n key: `__DOCSEARCH_FAVORITE_SEARCHES__${indexName}`,\n limit: 10,\n })\n ).current;\n const recentSearches = React.useRef(\n createStoredSearches<StoredDocSearchHit>({\n key: `__DOCSEARCH_RECENT_SEARCHES__${indexName}`,\n // We display 7 recent searches and there's no favorites, but only\n // 4 when there are favorites.\n limit: favoriteSearches.getAll().length === 0 ? 7 : 4,\n })\n ).current;\n\n const saveRecentSearch = React.useCallback(\n function saveRecentSearch(item: InternalDocSearchHit) {\n if (disableUserPersonalization) {\n return;\n }\n\n // We don't store `content` record, but their parent if available.\n const search = item.type === 'content' ? item.__docsearch_parent : item;\n\n // We save the recent search only if it's not favorited.\n if (\n search &&\n favoriteSearches\n .getAll()\n .findIndex((x) => x.objectID === search.objectID) === -1\n ) {\n recentSearches.add(search);\n }\n },\n [favoriteSearches, recentSearches, disableUserPersonalization]\n );\n\n const autocomplete = React.useMemo(\n () =>\n createAutocomplete<\n InternalDocSearchHit,\n React.FormEvent<HTMLFormElement>,\n React.MouseEvent,\n React.KeyboardEvent\n >({\n id: 'docsearch',\n defaultActiveItemId: 0,\n placeholder,\n openOnFocus: true,\n initialState: {\n query: initialQuery,\n context: {\n searchSuggestions: [],\n },\n },\n navigator,\n onStateChange({ state }) {\n setState(state as any);\n },\n // @ts-ignore Temporarily ignore bad typing in autocomplete-core.\n getSources({ query, state, setContext, setStatus }) {\n if (!query) {\n if (disableUserPersonalization) {\n return [];\n }\n\n return [\n {\n sourceId: 'recentSearches',\n onSelect({ item, event }) {\n saveRecentSearch(item);\n\n if (!event.shiftKey && !event.ctrlKey && !event.metaKey) {\n onClose();\n }\n },\n getItemUrl({ item }) {\n return item.url;\n },\n getItems() {\n return recentSearches.getAll();\n },\n },\n {\n sourceId: 'favoriteSearches',\n onSelect({ item, event }) {\n saveRecentSearch(item);\n\n if (!event.shiftKey && !event.ctrlKey && !event.metaKey) {\n onClose();\n }\n },\n getItemUrl({ item }) {\n return item.url;\n },\n getItems() {\n return favoriteSearches.getAll();\n },\n },\n ];\n }\n\n return getAlgoliaResults<DocSearchHit>({\n searchClient,\n queries: [\n {\n indexName,\n query,\n params: {\n attributesToRetrieve: [\n 'hierarchy.lvl0',\n 'hierarchy.lvl1',\n 'hierarchy.lvl2',\n 'hierarchy.lvl3',\n 'hierarchy.lvl4',\n 'hierarchy.lvl5',\n 'hierarchy.lvl6',\n 'content',\n 'type',\n 'url',\n ],\n attributesToSnippet: [\n `hierarchy.lvl1:${snippetLength.current}`,\n `hierarchy.lvl2:${snippetLength.current}`,\n `hierarchy.lvl3:${snippetLength.current}`,\n `hierarchy.lvl4:${snippetLength.current}`,\n `hierarchy.lvl5:${snippetLength.current}`,\n `hierarchy.lvl6:${snippetLength.current}`,\n `content:${snippetLength.current}`,\n ],\n snippetEllipsisText: '…',\n highlightPreTag: '<mark>',\n highlightPostTag: '</mark>',\n hitsPerPage: 20,\n ...searchParameters,\n },\n },\n ],\n })\n .catch((error) => {\n // The Algolia `RetryError` happens when all the servers have\n // failed, meaning that there's no chance the response comes\n // back. This is the right time to display an error.\n // See https://github.com/algolia/algoliasearch-client-javascript/blob/2ffddf59bc765cd1b664ee0346b28f00229d6e12/packages/transporter/src/errors/createRetryError.ts#L5\n if (error.name === 'RetryError') {\n setStatus('error');\n }\n\n throw error;\n })\n .then((results) => {\n const hits = results[0].hits;\n const nbHits: number = results[0].nbHits;\n const sources = groupBy(hits, (hit) =>\n removeHighlightTags(hit.hierarchy.lvl0)\n );\n\n // We store the `lvl0`s to display them as search suggestions\n // in the “no results“ screen.\n if (\n (state.context.searchSuggestions as any[]).length <\n Object.keys(sources).length\n ) {\n setContext({\n searchSuggestions: Object.keys(sources),\n });\n }\n\n setContext({ nbHits });\n\n return Object.values<DocSearchHit[]>(sources).map(\n (items, index) => {\n return {\n sourceId: `hits${index}`,\n onSelect({ item, event }) {\n saveRecentSearch(item);\n\n if (!event.shiftKey && !event.ctrlKey && !event.metaKey) {\n onClose();\n }\n },\n getItemUrl({ item }) {\n return item.url;\n },\n getItems() {\n return Object.values(\n groupBy(items, (item) => item.hierarchy.lvl1)\n )\n .map(transformItems)\n .map((hits) =>\n hits.map((item) => {\n return {\n ...item,\n // eslint-disable-next-line @typescript-eslint/camelcase\n __docsearch_parent:\n item.type !== 'lvl1' &&\n hits.find(\n (siblingItem) =>\n siblingItem.type === 'lvl1' &&\n siblingItem.hierarchy.lvl1 ===\n item.hierarchy.lvl1\n ),\n };\n })\n )\n .flat();\n },\n };\n }\n );\n });\n },\n }),\n [\n indexName,\n searchParameters,\n searchClient,\n onClose,\n recentSearches,\n favoriteSearches,\n saveRecentSearch,\n initialQuery,\n placeholder,\n navigator,\n transformItems,\n disableUserPersonalization,\n ]\n );\n\n const { getEnvironmentProps, getRootProps, refresh } = autocomplete;\n\n useTouchEvents({\n getEnvironmentProps,\n panelElement: dropdownRef.current,\n formElement: formElementRef.current,\n inputElement: inputRef.current,\n });\n useTrapFocus({ container: containerRef.current });\n\n React.useEffect(() => {\n document.body.classList.add('DocSearch--active');\n\n return () => {\n document.body.classList.remove('DocSearch--active');\n\n // IE11 doesn't support `scrollTo` so we check that the method exists\n // first.\n window.scrollTo?.(0, initialScrollY);\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n const isMobileMediaQuery = window.matchMedia('(max-width: 750px)');\n\n if (isMobileMediaQuery.matches) {\n snippetLength.current = 5;\n }\n }, []);\n\n React.useEffect(() => {\n if (dropdownRef.current) {\n dropdownRef.current.scrollTop = 0;\n }\n }, [state.query]);\n\n // We don't focus the input when there's an initial query (i.e. Selection\n // Search) because users rather want to see the results directly, without the\n // keyboard appearing.\n // We therefore need to refresh the autocomplete instance to load all the\n // results, which is usually triggered on focus.\n React.useEffect(() => {\n if (initialQuery.length > 0) {\n refresh();\n\n if (inputRef.current) {\n inputRef.current.focus();\n }\n }\n }, [initialQuery, refresh]);\n\n // We rely on a CSS property to set the modal height to the full viewport height\n // because all mobile browsers don't compute their height the same way.\n // See https://css-tricks.com/the-trick-to-viewport-units-on-mobile/\n React.useEffect(() => {\n function setFullViewportHeight() {\n if (modalRef.current) {\n const vh = window.innerHeight * 0.01;\n modalRef.current.style.setProperty('--docsearch-vh', `${vh}px`);\n }\n }\n\n setFullViewportHeight();\n\n window.addEventListener('resize', setFullViewportHeight);\n\n return () => {\n window.removeEventListener('resize', setFullViewportHeight);\n };\n }, []);\n\n return (\n <div\n ref={containerRef}\n {...getRootProps({\n 'aria-expanded': true,\n })}\n className={[\n 'DocSearch',\n 'DocSearch-Container',\n state.status === 'stalled' && 'DocSearch-Container--Stalled',\n state.status === 'error' && 'DocSearch-Container--Errored',\n ]\n .filter(Boolean)\n .join(' ')}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) {\n onClose();\n }\n }}\n >\n <div className=\"DocSearch-Modal\" ref={modalRef}>\n <header className=\"DocSearch-SearchBar\" ref={formElementRef}>\n <SearchBox\n {...autocomplete}\n state={state}\n autoFocus={initialQuery.length === 0}\n onClose={onClose}\n inputRef={inputRef}\n isFromSelection={\n Boolean(initialQuery) &&\n initialQuery === initialQueryFromSelection\n }\n />\n </header>\n\n <div className=\"DocSearch-Dropdown\" ref={dropdownRef}>\n <ScreenState\n {...autocomplete}\n indexName={indexName}\n state={state}\n hitComponent={hitComponent}\n resultsFooterComponent={resultsFooterComponent}\n disableUserPersonalization={disableUserPersonalization}\n recentSearches={recentSearches}\n favoriteSearches={favoriteSearches}\n onItemClick={(item) => {\n saveRecentSearch(item);\n onClose();\n }}\n inputRef={inputRef}\n />\n </div>\n\n <footer className=\"DocSearch-Footer\">\n <Footer />\n </footer>\n </div>\n </div>\n );\n}\n","import algoliasearch from 'algoliasearch/dist/algoliasearch-lite.esm.browser';\nimport React from 'react';\n\nimport { SearchClient } from './types';\nimport { version } from './version';\n\nexport function useSearchClient(\n appId: string,\n apiKey: string,\n transformSearchClient: (searchClient: SearchClient) => SearchClient\n): SearchClient {\n const searchClient = React.useMemo(() => {\n const client = algoliasearch(appId, apiKey);\n client.addAlgoliaAgent('docsearch', version);\n\n // Since DocSearch.js relies on DocSearch React with an alias to Preact,\n // we cannot add the `docsearch-react` user agent by default, otherwise\n // it would also be sent on a DocSearch.js integration.\n // We therefore only add the `docsearch-react` user agent if `docsearch.js`\n // is not present.\n if (\n /docsearch.js \\(.*\\)/.test(client.transporter.userAgent.value) === false\n ) {\n client.addAlgoliaAgent('docsearch-react', version);\n }\n\n return transformSearchClient(client);\n }, [appId, apiKey, transformSearchClient]);\n\n return searchClient;\n}\n","export const version = '3.0.0-alpha.35';\n","import { AutocompleteApi } from '@algolia/autocomplete-core';\nimport React from 'react';\n\ninterface UseTouchEventsProps {\n getEnvironmentProps: AutocompleteApi<any>['getEnvironmentProps'];\n panelElement: HTMLDivElement | null;\n formElement: HTMLDivElement | null;\n inputElement: HTMLInputElement | null;\n}\n\nexport function useTouchEvents({\n getEnvironmentProps,\n panelElement,\n formElement,\n inputElement,\n}: UseTouchEventsProps) {\n React.useEffect(() => {\n if (!(panelElement && formElement && inputElement)) {\n return undefined;\n }\n\n const { onTouchStart, onTouchMove } = getEnvironmentProps({\n panelElement,\n formElement,\n inputElement,\n });\n\n window.addEventListener('touchstart', onTouchStart);\n window.addEventListener('touchmove', onTouchMove);\n\n return () => {\n window.removeEventListener('touchstart', onTouchStart);\n window.removeEventListener('touchmove', onTouchMove);\n };\n }, [getEnvironmentProps, panelElement, formElement, inputElement]);\n}\n","import React from 'react';\n\ninterface UseTrapFocusProps {\n container: HTMLElement | null;\n}\n\nexport function useTrapFocus({ container }: UseTrapFocusProps) {\n React.useEffect(() => {\n if (!container) {\n return undefined;\n }\n\n const focusableElements = container.querySelectorAll<HTMLElement>(\n 'a[href]:not([disabled]), button:not([disabled]), input:not([disabled])'\n );\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n function trapFocus(event: KeyboardEvent) {\n if (event.key !== 'Tab') {\n return;\n }\n\n if (event.shiftKey) {\n if (document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n } else if (document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n\n container.addEventListener('keydown', trapFocus);\n\n return () => {\n container.removeEventListener('keydown', trapFocus);\n };\n }, [container]);\n}\n","import React from 'react';\n\nexport interface UseDocSearchKeyboardEventsProps {\n isOpen: boolean;\n onOpen(): void;\n onClose(): void;\n onInput?(event: KeyboardEvent): void;\n searchButtonRef?: React.RefObject<HTMLButtonElement>;\n}\n\nfunction isEditingContent(event: KeyboardEvent): boolean {\n const element = event.target as HTMLElement;\n const tagName = element.tagName;\n\n return (\n element.isContentEditable ||\n tagName === 'INPUT' ||\n tagName === 'SELECT' ||\n tagName === 'TEXTAREA'\n );\n}\n\nexport function useDocSearchKeyboardEvents({\n isOpen,\n onOpen,\n onClose,\n onInput,\n searchButtonRef,\n}: UseDocSearchKeyboardEventsProps) {\n React.useEffect(() => {\n function onKeyDown(event: KeyboardEvent) {\n function open() {\n // We check that no other DocSearch modal is showing before opening\n // another one.\n if (!document.body.classList.contains('DocSearch--active')) {\n onOpen();\n }\n }\n if (\n (event.keyCode === 27 && isOpen) ||\n // The `Cmd+K` shortcut both opens and closes the modal.\n (event.key === 'k' && (event.metaKey || event.ctrlKey)) ||\n // The `/` shortcut opens but doesn't close the modal because it's\n // a character.\n (!isEditingContent(event) && event.key === '/' && !isOpen)\n ) {\n event.preventDefault();\n\n if (isOpen) {\n onClose();\n } else if (!document.body.classList.contains('DocSearch--active')) {\n open();\n }\n }\n\n if (\n searchButtonRef &&\n searchButtonRef.current === document.activeElement &&\n onInput\n ) {\n if (/[a-zA-Z0-9]/.test(String.fromCharCode(event.keyCode))) {\n onInput(event);\n }\n }\n }\n\n window.addEventListener('keydown', onKeyDown);\n\n return () => {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [isOpen, onOpen, onClose, onInput, searchButtonRef]);\n}\n","import {\n AutocompleteState,\n AutocompleteOptions,\n} from '@algolia/autocomplete-core';\nimport React from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { DocSearchButton } from './DocSearchButton';\nimport { DocSearchModal } from './DocSearchModal';\nimport {\n DocSearchHit,\n InternalDocSearchHit,\n StoredDocSearchHit,\n SearchClient,\n} from './types';\nimport { useDocSearchKeyboardEvents } from './useDocSearchKeyboardEvents';\n\nexport interface DocSearchProps {\n appId?: string;\n apiKey: string;\n indexName: string;\n placeholder?: string;\n searchParameters?: any;\n transformItems?(items: DocSearchHit[]): DocSearchHit[];\n hitComponent?(props: {\n hit: InternalDocSearchHit | StoredDocSearchHit;\n children: React.ReactNode;\n }): JSX.Element;\n resultsFooterComponent?(props: {\n state: AutocompleteState<InternalDocSearchHit>;\n }): JSX.Element | null;\n transformSearchClient?(searchClient: SearchClient): SearchClient;\n disableUserPersonalization?: boolean;\n initialQuery?: string;\n navigator?: AutocompleteOptions<InternalDocSearchHit>['navigator'];\n}\n\nexport function DocSearch(props: DocSearchProps) {\n const searchButtonRef = React.useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = React.useState(false);\n const [initialQuery, setInitialQuery] = React.useState<string | undefined>(\n undefined\n );\n\n const onOpen = React.useCallback(() => {\n setIsOpen(true);\n }, [setIsOpen]);\n\n const onClose = React.useCallback(() => {\n setIsOpen(false);\n }, [setIsOpen]);\n\n const onInput = React.useCallback(\n (event: KeyboardEvent) => {\n setIsOpen(true);\n setInitialQuery(event.key);\n },\n [setIsOpen, setInitialQuery]\n );\n\n useDocSearchKeyboardEvents({\n isOpen,\n onOpen,\n onClose,\n onInput,\n searchButtonRef,\n });\n\n return (\n <>\n <DocSearchButton onClick={onOpen} ref={searchButtonRef} />\n\n {isOpen &&\n createPortal(\n <DocSearchModal\n {...props}\n initialScrollY={window.scrollY}\n initialQuery={initialQuery}\n onClose={onClose}\n />,\n document.body\n )}\n </>\n );\n}\n"],"names":["ControlKeyIcon","React","width","height","className","d","strokeWidth","stroke","fill","strokeLinecap","SearchIcon","viewBox","fillRule","strokeLinejoin","DocSearchButton","forwardRef","ref","translations","props","buttonText","buttonAriaLabel","useState","key","setKey","useEffect","navigator","test","platform","type","getItemsCount","state","collections","length","reduce","sum","collection","items","invariant","condition","message","process","env","NODE_ENV","Error","concat","warnCache","current","checkOptions","options","sanitizedMessage","trim","console","warn","debug","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_defineProperty","obj","value","defineProperty","configurable","writable","createStore","reducer","onStoreStateChange","initialState","getState","dispatch","action","payload","prevState","target","i","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties","_objectSpread","flatten","values","a","b","autocompleteId","getNextActiveItemId","moveAmount","baseIndex","itemCount","defaultActiveItemId","numericIndex","noop","_typeof","Symbol","iterator","constructor","prototype","getNormalizedSources","getSources","params","Promise","resolve","then","sources","Array","isArray","JSON","stringify","all","maybeSource","Boolean","map","sourceId","normalizedSource","getItemInputValue","_ref","query","getItemUrl","onSelect","_ref2","setIsOpen","onActive","getActiveItem","collectionIndex","acc","collectionsCount","index","nextValue","activeItemId","getCollectionFromActiveItemId","item","isOffsetFound","counter","previousItemsOffset","currentCollection","getRelativeActiveItemId","itemInputValue","itemUrl","isOrContainsNode","parent","child","contains","_toConsumableArray","arr","_arrayLikeToArray","_arrayWithoutHoles","iter","from","_iterableToArray","o","minLen","n","toString","call","slice","name","_unsupportedIterableToArray","TypeError","_nonIterableSpread","len","arr2","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","lastStalledId","onInput","event","_ref$nextState","nextState","refresh","store","setters","environment","clearTimeout","_nextState$isOpen","setCollections","setQuery","setActiveItemId","setStatus","openOnFocus","setTimeout","stallThreshold","getItems","_nextState$isOpen2","isPanelOpen","shouldPanelOpen","isOpen","highlightedItem","finally","getPropGetters","getEnvironmentProps","providedProps","inputElement","formElement","panelElement","onTouchStart","some","contextNode","document","activeElement","onTouchMove","blur","getRootProps","rest","role","id","undefined","getFormProps","noValidate","onSubmit","_providedProps$inputE","preventDefault","onReset","_providedProps$inputE2","focus","getLabelProps","htmlFor","getInputProps","onFocus","completion","isTouchDevice","_ref2$maxLength","maxLength","activeItem","autoComplete","autoCorrect","autoCapitalize","enterKeyHint","spellCheck","autoFocus","placeholder","onChange","currentTarget","onKeyDown","nodeItem","getElementById","scrollIntoViewIfNeeded","scrollIntoView","every","_item","_itemInputValue","_itemUrl","_source","metaKey","ctrlKey","navigateNewTab","shiftKey","navigateNewWindow","altKey","navigate","_onKeyDown","onBlur","onClick","getPanelProps","onMouseDown","onMouseLeave","getListProps","getItemProps","__autocomplete_id","onMouseMove","getCompletion","stateReducer","status","context","_nextState","createAutocomplete","subscribers","pluginSubscribers","_props$id","window","plugins","onStateChange","_props$onStateChange","x","_x$onStateChange","_props$onSubmit","_x$onSubmit","_props$onReset","_x$onReset","plugin","nested","_x$onSelect","_x$onActive","location","assign","_ref3","windowReference","open","_ref4","getDefaultProps","rawValue","baseItemId","setContext","getAutocompleteSetters","propGetters","Event","_plugin$subscribe","subscribe","fn","version","getAlgoliaResults","searchClient","queries","_ref$userAgents","userAgents","addAlgoliaAgent","segment","search","searchParameters","indexName","hitsPerPage","highlightPreTag","highlightPostTag","response","results","AlgoliaLogo","href","rel","Footer","CommandIcon","children","Hit","hit","url","LoadingIcon","strokeOpacity","transform","cx","cy","r","attributeName","to","dur","repeatCount","RecentIcon","ResetIcon","SelectIcon","SourceIcon","LvlIcon","ContentIcon","AnchorIcon","StarIcon","ErrorIcon","NoResultsIcon","ErrorScreen","NoResultsScreen","searchSuggestions","toLowerCase","inputRef","getPropertyByPath","path","split","Snippet","attribute","tagName","createElement","dangerouslySetInnerHTML","__html","Results","title","Result","objectID","join","renderIcon","renderAction","onItemClick","hitComponent","isDeleting","setIsDeleting","isFavoriting","setIsFavoriting","useRef","__docsearch_parent","onTransitionEnd","hierarchy","content","runDeleteTransition","cb","runFavoriteTransition","groupBy","predicate","hasOwnProperty","identity","regexHighlightTags","regexHasHighlightTags","RegExp","removeHighlightTags","replace","ResultsScreen","_highlightResult","lvl0","_collection$items","resultsFooterComponent","StartScreen","hasCollections","disableUserPersonalization","stopPropagation","favoriteSearches","add","recentSearches","remove","ScreenState","memo","_prevProps","nextProps","SearchBox","isFromSelection","select","hidden","onClose","createStorage","localStorage","setItem","removeItem","error","isLocalStorageSupported","getItem","parse","createStoredSearches","limit","storage","_snippetResult","isQueryAlreadySaved","findIndex","splice","unshift","getAll","createBrowserLocalStorageCache","namespaceKey","getStorage","getNamespace","get","defaultValue","events","miss","keyAsString","exists","set","namespace","delete","clear","createFallbackableCache","caches","shift","_key","result","catch","createInMemoryCache","serializable","cache","[object Object]","promise","shuffle","array","c","Math","floor","random","addMethods","base","methods","encode","format","args","encodeURIComponent","AuthMode","WithinQueryParameters","WithinHeaders","createMappedRequestOptions","requestOptions","timeout","data","entries","headers","queryParameters","cacheable","CallEnum","Read","Write","Any","HostStatusEnum","createStatefulHost","host","lastUpdate","Date","now","createStatelessHost","protocol","accept","MethodEnum","createRetryableOptions","hostsCache","statelessHosts","statelessHost","statefulHosts","hostsUp","isStatefulHostUp","hostsTimeouted","isStatefulHostTimeouted","hostsAvailable","getTimeout","timeoutsCount","baseTimeout","retryableRequest","transporter","request","stackTrace","method","serializeData","serializedHeaders","header","serializeHeaders","dataQueryParameters","x-algolia-agent","userAgent","retry","hosts","pop","transporterStackTrace","stackTraceWithoutCredentials","serializeUrl","connectTimeout","timeouts","connect","responseTimeout","pushToStackTrace","stackFrame","triesLeft","decisions","onSucess","e","createDeserializationError","deserializeSuccess","isTimedOut","logger","info","stackFrameWithoutCredentials","createApiError","deserializeFailure","requester","send","outcomes","isNetworkError","isRetryable","onRetry","isSuccess","onFail","retryDecision","reverse","createUserAgent","addedUserAgent","queryParametersAsString","serializeQueryParameters","charAt","substr","parameters","modifiedHeaders","x-algolia-api-key","createSearchClient","appId","auth","authMode","apiKey","credentials","x-algolia-application-id","createAuth","requestsCache","responsesCache","mappedRequestOptions","read","createRetryableRequest","err","reject","_","write","createTransporter","content-type","clearCache","initIndex","multipleQueries","requests","multipleSearchForFacetValues","facetName","facetQuery","searchForFacetValues","findAnswers","queryLanguages","LogLevelEnum","algoliasearch","commonOptions","baseRequester","XMLHttpRequest","setRequestHeader","createTimeout","abort","onreadystatechange","readyState","OPENED","onerror","responseText","onload","logLevel","DocSearchModal","transformItems","initialScrollY","transformSearchClient","initialQuery","initialQueryFromProp","setState","containerRef","modalRef","formElementRef","dropdownRef","snippetLength","initialQueryFromSelection","getSelection","useMemo","client","useSearchClient","saveRecentSearch","useCallback","autocomplete","attributesToRetrieve","attributesToSnippet","snippetEllipsisText","hits","nbHits","lvl1","find","siblingItem","flat","addEventListener","removeEventListener","useTouchEvents","container","focusableElements","querySelectorAll","firstElement","lastElement","trapFocus","useTrapFocus","body","classList","scrollTo","matchMedia","matches","scrollTop","setFullViewportHeight","vh","innerHeight","style","setProperty","useDocSearchKeyboardEvents","onOpen","searchButtonRef","keyCode","element","isContentEditable","isEditingContent","String","fromCharCode","setInitialQuery","createPortal","scrollY"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/icons/ControlKeyIcon.tsx","../../src/icons/SearchIcon.tsx","../../src/DocSearchButton.tsx","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/getItemsCount.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/invariant.js","../../../../node_modules/@algolia/autocomplete-shared/dist/esm/warn.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/checkOptions.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/createStore.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/flatten.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/generateAutocompleteId.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getNextActiveItemId.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/noop.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getNormalizedSources.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getActiveItem.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/utils/isOrContainsNode.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/getAutocompleteSetters.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/getDefaultProps.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/onInput.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/onKeyDown.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/getPropGetters.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/getCompletion.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/stateReducer.js","../../../../node_modules/@algolia/autocomplete-core/dist/esm/createAutocomplete.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/constants/index.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/version.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/search/search.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/search/getAlgoliaResults.js","../../src/AlgoliaLogo.tsx","../../src/Footer.tsx","../../src/Hit.tsx","../../src/icons/LoadingIcon.tsx","../../src/icons/RecentIcon.tsx","../../src/icons/ResetIcon.tsx","../../src/icons/SelectIcon.tsx","../../src/icons/SourceIcon.tsx","../../src/icons/StarIcon.tsx","../../src/icons/ErrorIcon.tsx","../../src/icons/NoResultsIcon.tsx","../../src/ErrorScreen.tsx","../../src/NoResultsScreen.tsx","../../src/Snippet.tsx","../../src/Results.tsx","../../src/utils/groupBy.ts","../../src/utils/identity.ts","../../src/utils/noop.ts","../../src/utils/removeHighlightTags.ts","../../src/ResultsScreen.tsx","../../src/StartScreen.tsx","../../src/ScreenState.tsx","../../src/SearchBox.tsx","../../src/constants.ts","../../src/stored-searches.ts","../../node_modules/algoliasearch/dist/algoliasearch-lite.esm.browser.js","../../src/DocSearchModal.tsx","../../src/useSearchClient.ts","../../src/version.ts","../../src/useTouchEvents.ts","../../src/useTrapFocus.ts","../../src/useDocSearchKeyboardEvents.ts","../../src/DocSearch.tsx"],"sourcesContent":["import React from 'react';\n\nexport function ControlKeyIcon() {\n return (\n <svg width=\"15\" height=\"15\" className=\"DocSearch-Control-Key-Icon\">\n <path\n d=\"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953\"\n strokeWidth=\"1.2\"\n stroke=\"currentColor\"\n fill=\"none\"\n strokeLinecap=\"square\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SearchIcon() {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n className=\"DocSearch-Search-Icon\"\n viewBox=\"0 0 20 20\"\n >\n <path\n d=\"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { ControlKeyIcon } from './icons/ControlKeyIcon';\nimport { SearchIcon } from './icons/SearchIcon';\n\ntype Translations = Partial<{\n buttonText: string;\n buttonAriaLabel: string;\n}>;\n\nexport type DocSearchButtonProps = React.ComponentProps<'button'> & {\n translations?: Translations;\n};\n\nconst ACTION_KEY_DEFAULT = 'Ctrl' as const;\nconst ACTION_KEY_APPLE = '⌘' as const;\n\nfunction isAppleDevice() {\n return /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);\n}\n\nexport const DocSearchButton = React.forwardRef<\n HTMLButtonElement,\n DocSearchButtonProps\n>(({ translations = {}, ...props }, ref) => {\n const { buttonText = 'Search', buttonAriaLabel = 'Search' } = translations;\n\n const [key, setKey] = useState<\n typeof ACTION_KEY_APPLE | typeof ACTION_KEY_DEFAULT | null\n >(null);\n\n useEffect(() => {\n if (typeof navigator !== 'undefined') {\n setKey(isAppleDevice() ? ACTION_KEY_APPLE : ACTION_KEY_DEFAULT);\n }\n }, []);\n\n return (\n <button\n type=\"button\"\n className=\"DocSearch DocSearch-Button\"\n aria-label={buttonAriaLabel}\n {...props}\n ref={ref}\n >\n <span className=\"DocSearch-Button-Container\">\n <SearchIcon />\n <span className=\"DocSearch-Button-Placeholder\">{buttonText}</span>\n </span>\n\n {key !== null && (\n <span className=\"DocSearch-Button-Keys\">\n <span className=\"DocSearch-Button-Key\">\n {key === ACTION_KEY_DEFAULT ? <ControlKeyIcon /> : key}\n </span>\n <span className=\"DocSearch-Button-Key\">K</span>\n </span>\n )}\n </button>\n );\n});\n","export function getItemsCount(state) {\n if (state.collections.length === 0) {\n return 0;\n }\n\n return state.collections.reduce(function (sum, collection) {\n return sum + collection.items.length;\n }, 0);\n}","/**\n * Throws an error if the condition is not met in development mode.\n * This is used to make development a better experience to provide guidance as\n * to where the error comes from.\n */\nexport function invariant(condition, message) {\n if (!(process.env.NODE_ENV !== 'production')) {\n return;\n }\n\n if (!condition) {\n throw new Error(\"[Autocomplete] \".concat(message));\n }\n}","export var warnCache = {\n current: {}\n};\n/**\n * Logs a warning if the condition is not met.\n * This is used to log issues in development environment only.\n */\n\nexport function warn(condition, message) {\n if (!(process.env.NODE_ENV !== 'production')) {\n return;\n }\n\n if (condition) {\n return;\n }\n\n var sanitizedMessage = message.trim();\n var hasAlreadyPrinted = warnCache.current[sanitizedMessage];\n\n if (!hasAlreadyPrinted) {\n warnCache.current[sanitizedMessage] = true; // eslint-disable-next-line no-console\n\n console.warn(\"[Autocomplete] \".concat(sanitizedMessage));\n }\n}","import { warn } from '@algolia/autocomplete-shared';\nexport function checkOptions(options) {\n process.env.NODE_ENV !== 'production' ? warn(!options.debug, 'The `debug` option is meant for development debugging and should not be used in production.') : void 0;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\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\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 };\n}","export function flatten(values) {\n return values.reduce(function (a, b) {\n return a.concat(b);\n }, []);\n}","var autocompleteId = 0;\nexport function generateAutocompleteId() {\n return \"autocomplete-\".concat(autocompleteId++);\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 (moveAmount < 0 && (baseIndex === null || defaultActiveItemId !== null && baseIndex === 0)) {\n return itemCount + moveAmount;\n }\n\n var numericIndex = (baseIndex === null ? -1 : baseIndex) + moveAmount;\n\n if (numericIndex <= -1 || numericIndex >= itemCount) {\n return defaultActiveItemId === null ? null : 0;\n }\n\n return numericIndex;\n}","export var noop = function noop() {};","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport { invariant } from '@algolia/autocomplete-shared';\nimport { noop } from './noop';\nexport function getNormalizedSources(getSources, params) {\n return Promise.resolve(getSources(params)).then(function (sources) {\n invariant(Array.isArray(sources), \"The `getSources` function must return an array of sources but returned type \".concat(JSON.stringify(_typeof(sources)), \":\\n\\n\").concat(JSON.stringify(sources, null, 2)));\n return Promise.all(sources // 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\n var normalizedSource = _objectSpread({\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 }, source);\n\n return Promise.resolve(normalizedSource);\n }));\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 }, []); // Based on the accumulated counts, we can infer the index of the suggestion.\n\n var collectionIndex = accumulatedCollectionsCount.reduce(function (acc, current) {\n if (current <= state.activeItemId) {\n return acc + 1;\n }\n\n return acc;\n }, 0);\n return state.collections[collectionIndex];\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 */\n\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\n while (isOffsetFound === false) {\n var currentCollection = state.collections[counter];\n\n if (currentCollection === collection) {\n isOffsetFound = true;\n break;\n }\n\n previousItemsOffset += currentCollection.items.length;\n counter++;\n }\n\n return state.activeItemId - previousItemsOffset;\n}\n\nexport function getActiveItem(state) {\n var collection = getCollectionFromActiveItemId(state);\n\n if (!collection) {\n return null;\n }\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}","export function isOrContainsNode(parent, child) {\n return parent === child || parent.contains(child);\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { flatten } from './utils';\nexport function getAutocompleteSetters(_ref) {\n var store = _ref.store;\n\n var setActiveItemId = function setActiveItemId(value) {\n store.dispatch('setActiveItemId', value);\n };\n\n var setQuery = function setQuery(value) {\n store.dispatch('setQuery', value);\n };\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 `getAlgoliaHits`\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\n var setIsOpen = function setIsOpen(value) {\n store.dispatch('setIsOpen', value);\n };\n\n var setStatus = function setStatus(value) {\n store.dispatch('setStatus', value);\n };\n\n var setContext = function setContext(value) {\n store.dispatch('setContext', value);\n };\n\n return {\n setActiveItemId: setActiveItemId,\n setQuery: setQuery,\n setCollections: setCollections,\n setIsOpen: setIsOpen,\n setStatus: setStatus,\n setContext: setContext\n };\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\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.\"); }\n\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); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\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; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { getItemsCount } from '@algolia/autocomplete-shared';\nimport { generateAutocompleteId, getNormalizedSources, flatten } from './utils';\nexport function getDefaultProps(props, pluginSubscribers) {\n var _props$id;\n\n var environment = typeof window !== 'undefined' ? window : {};\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 environment: environment,\n shouldPanelOpen: function shouldPanelOpen(_ref) {\n var state = _ref.state;\n return getItemsCount(state) > 0;\n }\n }, props), {}, {\n // Since `generateAutocompleteId` triggers a side effect (it increments\n // and 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\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\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\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\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\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\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\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\n return (_x$onActive = x.onActive) === null || _x$onActive === void 0 ? void 0 : _x$onActive.call(x, params);\n });\n }\n });\n });\n });\n },\n navigator: _objectSpread({\n navigate: function navigate(_ref2) {\n var itemUrl = _ref2.itemUrl;\n environment.location.assign(itemUrl);\n },\n navigateNewTab: function navigateNewTab(_ref3) {\n var itemUrl = _ref3.itemUrl;\n var windowReference = environment.open(itemUrl, '_blank', 'noopener');\n windowReference === null || windowReference === void 0 ? void 0 : windowReference.focus();\n },\n navigateNewWindow: function navigateNewWindow(_ref4) {\n var itemUrl = _ref4.itemUrl;\n environment.open(itemUrl, '_blank', 'noopener');\n }\n }, props.navigator)\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\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; }\n\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; }\n\nimport { invariant } from '@algolia/autocomplete-shared';\nimport { getActiveItem } from './utils';\nvar lastStalledId = null;\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, [\"event\", \"nextState\", \"props\", \"query\", \"refresh\", \"store\"]);\n\n if (lastStalledId) {\n props.environment.clearTimeout(lastStalledId);\n }\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\n if (!query && props.openOnFocus === false) {\n var _nextState$isOpen;\n\n setStatus('idle');\n setCollections(store.getState().collections.map(function (collection) {\n return _objectSpread(_objectSpread({}, collection), {}, {\n items: []\n });\n }));\n setIsOpen((_nextState$isOpen = nextState.isOpen) !== null && _nextState$isOpen !== void 0 ? _nextState$isOpen : props.shouldPanelOpen({\n state: store.getState()\n }));\n return Promise.resolve();\n }\n\n setStatus('loading');\n lastStalledId = props.environment.setTimeout(function () {\n setStatus('stalled');\n }, props.stallThreshold);\n return props.getSources(_objectSpread({\n query: query,\n refresh: refresh,\n state: store.getState()\n }, setters)).then(function (sources) {\n setStatus('loading'); // @TODO: convert `Promise.all` to fetching strategy.\n\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 (items) {\n invariant(Array.isArray(items), \"The `getItems` function must return an array of items but returned type \".concat(JSON.stringify(_typeof(items)), \":\\n\\n\").concat(JSON.stringify(items, null, 2)));\n return {\n source: source,\n items: items\n };\n });\n })).then(function (collections) {\n var _nextState$isOpen2;\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\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 if (lastStalledId) {\n props.environment.clearTimeout(lastStalledId);\n }\n });\n });\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\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; }\n\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; }\n\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, [\"event\", \"props\", \"refresh\", \"store\"]);\n\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n // Default browser behavior changes the caret placement on ArrowUp and\n // Arrow down.\n event.preventDefault();\n store.dispatch(event.key, null);\n var nodeItem = props.environment.document.getElementById(\"\".concat(props.id, \"-item-\").concat(store.getState().activeItemId));\n\n if (nodeItem) {\n if (nodeItem.scrollIntoViewIfNeeded) {\n nodeItem.scrollIntoViewIfNeeded(false);\n } else {\n nodeItem.scrollIntoView(false);\n }\n }\n\n var highlightedItem = getActiveItem(store.getState());\n\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 } 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 } 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 return;\n } // This prevents the `onSubmit` event to be sent because an item is\n // highlighted.\n\n\n event.preventDefault();\n\n var _ref2 = getActiveItem(store.getState()),\n _item = _ref2.item,\n _itemInputValue = _ref2.itemInputValue,\n _itemUrl = _ref2.itemUrl,\n _source = _ref2.source;\n\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\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\n props.navigator.navigateNewWindow({\n itemUrl: _itemUrl,\n item: _item,\n state: store.getState()\n });\n }\n } else if (event.altKey) {// 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\n props.navigator.navigate({\n itemUrl: _itemUrl,\n item: _item,\n state: store.getState()\n });\n return;\n }\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}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\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; }\n\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; }\n\nimport { onInput } from './onInput';\nimport { onKeyDown as _onKeyDown } from './onKeyDown';\nimport { getActiveItem, isOrContainsNode } from './utils';\nexport function getPropGetters(_ref) {\n var props = _ref.props,\n refresh = _ref.refresh,\n store = _ref.store,\n setters = _objectWithoutProperties(_ref, [\"props\", \"refresh\", \"store\"]);\n\n var getEnvironmentProps = function getEnvironmentProps(providedProps) {\n var inputElement = providedProps.inputElement,\n formElement = providedProps.formElement,\n panelElement = providedProps.panelElement,\n rest = _objectWithoutProperties(providedProps, [\"inputElement\", \"formElement\", \"panelElement\"]);\n\n return _objectSpread({\n // On touch devices, we do not rely on the native `blur` event of the\n // input to close the panel, but rather on a custom `touchstart` event\n // outside of the autocomplete elements.\n // This ensures a working experience on mobile because we blur the input\n // on touch devices when the user starts scrolling (`touchmove`).\n onTouchStart: function onTouchStart(event) {\n if (store.getState().isOpen === false || event.target === inputElement) {\n return;\n } // @TODO: support cases where there are multiple Autocomplete instances.\n // Right now, a second instance makes this computation return false.\n\n\n var isTargetWithinAutocomplete = [formElement, panelElement].some(function (contextNode) {\n return isOrContainsNode(contextNode, event.target) || isOrContainsNode(contextNode, props.environment.document.activeElement);\n });\n\n if (isTargetWithinAutocomplete === false) {\n store.dispatch('blur', null);\n }\n },\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\n inputElement.blur();\n }\n }, rest);\n };\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\n var getFormProps = function getFormProps(providedProps) {\n var inputElement = providedProps.inputElement,\n rest = _objectWithoutProperties(providedProps, [\"inputElement\"]);\n\n return _objectSpread({\n action: '',\n noValidate: true,\n role: 'search',\n onSubmit: function onSubmit(event) {\n var _providedProps$inputE;\n\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\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\n var getInputProps = function getInputProps(providedProps) {\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\n store.dispatch('focus', null);\n }\n\n var isTouchDevice = ('ontouchstart' in props.environment);\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, [\"inputElement\", \"maxLength\"]);\n\n var activeItem = getActiveItem(store.getState());\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: activeItem !== null && activeItem !== void 0 && activeItem.itemUrl ? 'go' : 'search',\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 onBlur: function onBlur() {\n // We do rely on the `blur` event on touch devices.\n // See explanation in `onTouchStart`.\n if (!isTouchDevice) {\n store.dispatch('blur', null);\n }\n },\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\n var getLabelProps = function getLabelProps(rest) {\n return _objectSpread({\n htmlFor: \"\".concat(props.id, \"-input\"),\n id: \"\".concat(props.id, \"-label\")\n }, rest);\n };\n\n var getListProps = function getListProps(rest) {\n return _objectSpread({\n role: 'listbox',\n 'aria-labelledby': \"\".concat(props.id, \"-label\"),\n id: \"\".concat(props.id, \"-list\")\n }, rest);\n };\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\n var getItemProps = function getItemProps(providedProps) {\n var item = providedProps.item,\n source = providedProps.source,\n rest = _objectWithoutProperties(providedProps, [\"item\", \"source\"]);\n\n return _objectSpread({\n id: \"\".concat(props.id, \"-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\n store.dispatch('mousemove', item.__autocomplete_id);\n var activeItem = getActiveItem(store.getState());\n\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\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 }); // 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\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\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}","import { getActiveItem } from './utils';\nexport function getCompletion(_ref) {\n var state = _ref.state;\n\n if (state.isOpen === false || state.activeItemId === null) {\n return null;\n }\n\n var _ref2 = getActiveItem(state),\n itemInputValue = _ref2.itemInputValue;\n\n return itemInputValue || null;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\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\n case 'setQuery':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n query: action.payload,\n completion: null\n });\n }\n\n case 'setCollections':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n collections: action.payload\n });\n }\n\n case 'setIsOpen':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n isOpen: action.payload\n });\n }\n\n case 'setStatus':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n status: action.payload\n });\n }\n\n case 'setContext':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n context: _objectSpread(_objectSpread({}, state.context), action.payload)\n });\n }\n\n case 'ArrowDown':\n {\n var nextState = _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: getNextActiveItemId(1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)\n });\n\n return _objectSpread(_objectSpread({}, nextState), {}, {\n completion: getCompletion({\n state: nextState\n })\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\n return _objectSpread(_objectSpread({}, _nextState), {}, {\n completion: getCompletion({\n state: _nextState\n })\n });\n }\n\n case 'Escape':\n {\n if (state.isOpen) {\n return _objectSpread(_objectSpread({}, state), {}, {\n isOpen: false,\n completion: null\n });\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n query: '',\n status: 'idle',\n collections: []\n });\n }\n\n case 'submit':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: null,\n isOpen: false,\n status: 'idle'\n });\n }\n\n case 'reset':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: // 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 // 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\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\n case 'blur':\n {\n if (action.props.debug) {\n return state;\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n isOpen: false,\n activeItemId: null\n });\n }\n\n case 'mousemove':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.payload\n });\n }\n\n case 'mouseleave':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.props.defaultActiveItemId\n });\n }\n\n default:\n invariant(false, \"The reducer action \".concat(JSON.stringify(action.type), \" is not supported.\"));\n return state;\n }\n};","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { checkOptions } from './checkOptions';\nimport { createStore } from './createStore';\nimport { getAutocompleteSetters } from './getAutocompleteSetters';\nimport { getDefaultProps } from './getDefaultProps';\nimport { getPropGetters } from './getPropGetters';\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 }, setters));\n\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 }, setters));\n }\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 query: store.getState().query,\n refresh: refresh,\n store: store\n }, setters));\n }\n\n props.plugins.forEach(function (plugin) {\n var _plugin$subscribe;\n\n return (_plugin$subscribe = plugin.subscribe) === null || _plugin$subscribe === void 0 ? void 0 : _plugin$subscribe.call(plugin, _objectSpread(_objectSpread({}, setters), {}, {\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 }));\n });\n return _objectSpread(_objectSpread({\n refresh: refresh\n }, propGetters), setters);\n}","export var HIGHLIGHT_PRE_TAG = '__aa-highlight__';\nexport var HIGHLIGHT_POST_TAG = '__/aa-highlight__';","export var version = '1.0.0-alpha.44';","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\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.\"); }\n\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); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\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; }\n\nimport { HIGHLIGHT_PRE_TAG, HIGHLIGHT_POST_TAG } from '../constants';\nimport { version } from '../version';\nexport function search(_ref) {\n var searchClient = _ref.searchClient,\n queries = _ref.queries,\n _ref$userAgents = _ref.userAgents,\n userAgents = _ref$userAgents === void 0 ? [] : _ref$userAgents;\n\n if (typeof searchClient.addAlgoliaAgent === 'function') {\n var algoliaAgents = [{\n segment: 'autocomplete-core',\n version: version\n }].concat(_toConsumableArray(userAgents));\n algoliaAgents.forEach(function (_ref2) {\n var segment = _ref2.segment,\n version = _ref2.version;\n searchClient.addAlgoliaAgent(segment, version);\n });\n }\n\n return searchClient.search(queries.map(function (searchParameters) {\n var indexName = searchParameters.indexName,\n query = searchParameters.query,\n params = searchParameters.params;\n return {\n indexName: indexName,\n query: query,\n params: _objectSpread({\n hitsPerPage: 5,\n highlightPreTag: HIGHLIGHT_PRE_TAG,\n highlightPostTag: HIGHLIGHT_POST_TAG\n }, params)\n };\n }));\n}","import { search } from './search';\nexport function getAlgoliaResults(_ref) {\n var searchClient = _ref.searchClient,\n queries = _ref.queries,\n userAgents = _ref.userAgents;\n return search({\n searchClient: searchClient,\n queries: queries,\n userAgents: userAgents\n }).then(function (response) {\n return response.results;\n });\n}","import React from 'react';\n\nexport function AlgoliaLogo() {\n return (\n <a\n href=\"https://www.algolia.com/docsearch\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span className=\"DocSearch-Label\">Search by</span>\n <svg width=\"77\" height=\"19\">\n <path\n d=\"M2.5067 0h14.0245c1.384.001 2.5058 1.1205 2.5068 2.5017V16.5c-.0014 1.3808-1.1232 2.4995-2.5068 2.5H2.5067C1.1232 18.9995.0014 17.8808 0 16.5V2.4958A2.495 2.495 0 01.735.7294 2.505 2.505 0 012.5068 0zM37.95 15.0695c-3.7068.0168-3.7068-2.986-3.7068-3.4634L34.2372.3576 36.498 0v11.1794c0 .2715 0 1.9889 1.452 1.994v1.8961zm-9.1666-1.8388c.694 0 1.2086-.0397 1.5678-.1088v-2.2934a5.3639 5.3639 0 00-1.3303-.1679 4.8283 4.8283 0 00-.758.0582 2.2845 2.2845 0 00-.688.2024c-.2029.0979-.371.2362-.4919.4142-.1268.1788-.185.2826-.185.5533 0 .5297.185.8359.5205 1.0375.3355.2016.7928.3053 1.365.3053v-.0008zm-.1969-8.1817c.7463 0 1.3768.092 1.8856.2767.5088.1838.9195.4428 1.2204.7717.3068.334.5147.7777.6423 1.251.1327.4723.196.991.196 1.5603v5.798c-.5235.1036-1.05.192-1.5787.2649-.7048.1037-1.4976.156-2.3774.156-.5832 0-1.1215-.0582-1.6016-.167a3.385 3.385 0 01-1.2432-.5364 2.6034 2.6034 0 01-.8037-.9565c-.191-.3922-.29-.9447-.29-1.5208 0-.5533.11-.905.3246-1.2863a2.7351 2.7351 0 01.8849-.9329c.376-.242.8029-.415 1.2948-.5187a7.4517 7.4517 0 011.5381-.156 7.1162 7.1162 0 011.6667.2024V8.886c0-.259-.0296-.5061-.093-.7372a1.5847 1.5847 0 00-.3245-.6158 1.5079 1.5079 0 00-.6119-.4158 2.6788 2.6788 0 00-.966-.173c-.5206 0-.9948.0634-1.4283.1384a6.5481 6.5481 0 00-1.065.259l-.2712-1.849c.2831-.0986.7048-.1964 1.2491-.2943a9.2979 9.2979 0 011.752-.1501v.0008zm44.6597 8.1193c.6947 0 1.2086-.0405 1.567-.1097v-2.2942a5.3743 5.3743 0 00-1.3303-.1679c-.2485 0-.503.0177-.7573.0582a2.2853 2.2853 0 00-.688.2024 1.2333 1.2333 0 00-.4918.4142c-.1268.1788-.1843.2826-.1843.5533 0 .5297.1843.8359.5198 1.0375.3414.2066.7927.3053 1.365.3053v.0009zm-.191-8.1767c.7463 0 1.3768.0912 1.8856.2759.5087.1847.9195.4436 1.2204.7717.3.329.5147.7786.6414 1.251a5.7248 5.7248 0 01.197 1.562v5.7972c-.3466.0742-.874.1602-1.5788.2648-.7049.1038-1.4976.1552-2.3774.1552-.5832 0-1.1215-.0573-1.6016-.167a3.385 3.385 0 01-1.2432-.5356 2.6034 2.6034 0 01-.8038-.9565c-.191-.3922-.2898-.9447-.2898-1.5216 0-.5533.1098-.905.3245-1.2854a2.7373 2.7373 0 01.8849-.9338c.376-.2412.8029-.4141 1.2947-.5178a7.4545 7.4545 0 012.325-.1097c.2781.0287.5672.081.879.156v-.3686a2.7781 2.7781 0 00-.092-.738 1.5788 1.5788 0 00-.3246-.6166 1.5079 1.5079 0 00-.612-.415 2.6797 2.6797 0 00-.966-.1729c-.5205 0-.9947.0633-1.4282.1384a6.5608 6.5608 0 00-1.065.259l-.2712-1.8498c.283-.0979.7048-.1957 1.2491-.2935a9.8597 9.8597 0 011.752-.1494zm-6.79-1.072c-.7576.001-1.373-.6103-1.3759-1.3664 0-.755.6128-1.3664 1.376-1.3664.764 0 1.3775.6115 1.3775 1.3664s-.6195 1.3664-1.3776 1.3664zm1.1393 11.1507h-2.2726V5.3409l2.2734-.3568v10.0845l-.0008.0017zm-3.984 0c-3.707.0168-3.707-2.986-3.707-3.4642L59.7069.3576 61.9685 0v11.1794c0 .2715 0 1.9889 1.452 1.994V15.0703zm-7.3512-4.979c0-.975-.2138-1.7873-.6305-2.3516-.4167-.571-.9998-.852-1.747-.852-.7454 0-1.3302.281-1.7452.852-.4166.5702-.6195 1.3765-.6195 2.3516 0 .9851.208 1.6473.6254 2.2183.4158.576.9998.8587 1.7461.8587.7454 0 1.3303-.2885 1.747-.8595.4158-.5761.6237-1.2315.6237-2.2184v.0009zm2.3132-.006c0 .7609-.1099 1.3361-.3356 1.9654a4.654 4.654 0 01-.9533 1.6076A4.214 4.214 0 0155.613 14.69c-.579.2412-1.4697.3795-1.9143.3795-.4462-.005-1.3303-.1324-1.9033-.3795a4.307 4.307 0 01-1.474-1.0316c-.4115-.4445-.7293-.9801-.9609-1.6076a5.3423 5.3423 0 01-.3465-1.9653c0-.7608.104-1.493.3356-2.1155a4.683 4.683 0 01.9719-1.5958 4.3383 4.3383 0 011.479-1.0257c.5739-.242 1.2043-.3567 1.8864-.3567.6829 0 1.3125.1197 1.8906.3567a4.1245 4.1245 0 011.4816 1.0257 4.7587 4.7587 0 01.9592 1.5958c.2426.6225.3643 1.3547.3643 2.1155zm-17.0198 0c0 .9448.208 1.9932.6238 2.431.4166.4386.955.6579 1.6142.6579.3584 0 .6998-.0523 1.0176-.1502.3186-.0978.5721-.2134.775-.3517V7.0784a8.8706 8.8706 0 00-1.4926-.1906c-.8206-.0236-1.4452.312-1.8847.8468-.4335.5365-.6533 1.476-.6533 2.3516v-.0008zm6.2863 4.4485c0 1.5385-.3938 2.662-1.1866 3.3773-.791.7136-2.0005 1.0712-3.6308 1.0712-.5958 0-1.834-.1156-2.8228-.334l.3643-1.7865c.8282.173 1.9202.2193 2.4932.2193.9077 0 1.555-.1847 1.943-.5533.388-.3686.578-.916.578-1.643v-.3687a6.8289 6.8289 0 01-.8848.3349c-.3634.1096-.786.167-1.261.167-.6246 0-1.1917-.0979-1.7055-.2944a3.5554 3.5554 0 01-1.3244-.8645c-.3642-.3796-.6541-.8579-.8561-1.4289-.2028-.571-.3068-1.59-.3068-2.339 0-.7034.1099-1.5856.3245-2.1735.2198-.5871.5316-1.0949.9542-1.515.4167-.42.9255-.743 1.5213-.98a5.5923 5.5923 0 012.052-.3855c.7353 0 1.4114.092 2.0707.2024.6592.1088 1.2204.2236 1.6776.35v8.945-.0008zM11.5026 4.2418v-.6511c-.0005-.4553-.3704-.8241-.8266-.8241H8.749c-.4561 0-.826.3688-.8265.824v.669c0 .0742.0693.1264.1445.1096a6.0346 6.0346 0 011.6768-.2362 6.125 6.125 0 011.6202.2185.1116.1116 0 00.1386-.1097zm-5.2806.852l-.3296-.3282a.8266.8266 0 00-1.168 0l-.393.3922a.8199.8199 0 000 1.164l.3237.323c.0524.0515.1268.0397.1733-.0117.191-.259.3989-.507.6305-.7372.2374-.2362.48-.4437.7462-.6335.0575-.0354.0634-.1155.017-.1687zm3.5159 2.069v2.818c0 .081.0879.1392.1622.0987l2.5102-1.2964c.0574-.0287.0752-.0987.0464-.1552a3.1237 3.1237 0 00-2.603-1.574c-.0575 0-.115.0456-.115.1097l-.0008-.0009zm.0008 6.789c-2.0933.0005-3.7915-1.6912-3.7947-3.7804C5.9468 8.0821 7.6452 6.39 9.7387 6.391c2.0932-.0005 3.7911 1.6914 3.794 3.7804a3.7783 3.7783 0 01-1.1124 2.675 3.7936 3.7936 0 01-2.6824 1.1054h.0008zM9.738 4.8002c-1.9218 0-3.6975 1.0232-4.6584 2.6841a5.359 5.359 0 000 5.3683c.9609 1.661 2.7366 2.6841 4.6584 2.6841a5.3891 5.3891 0 003.8073-1.5725 5.3675 5.3675 0 001.578-3.7987 5.3574 5.3574 0 00-1.5771-3.797A5.379 5.379 0 009.7387 4.801l-.0008-.0008z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n />\n </svg>\n </a>\n );\n}\n","import React from 'react';\n\nimport { AlgoliaLogo } from './AlgoliaLogo';\n\nexport function Footer() {\n return (\n <>\n <div className=\"DocSearch-Logo\">\n <AlgoliaLogo />\n </div>\n <ul className=\"DocSearch-Commands\">\n <li>\n <span className=\"DocSearch-Commands-Key\">\n <CommandIcon>\n <path d=\"M12 3.53088v3c0 1-1 2-2 2H4M7 11.53088l-3-3 3-3\" />\n </CommandIcon>\n </span>\n <span className=\"DocSearch-Label\">to select</span>\n </li>\n <li>\n <span className=\"DocSearch-Commands-Key\">\n <CommandIcon>\n <path d=\"M7.5 3.5v8M10.5 8.5l-3 3-3-3\" />\n </CommandIcon>\n </span>\n <span className=\"DocSearch-Commands-Key\">\n <CommandIcon>\n <path d=\"M7.5 11.5v-8M10.5 6.5l-3-3-3 3\" />\n </CommandIcon>\n </span>\n <span className=\"DocSearch-Label\">to navigate</span>\n </li>\n <li>\n <span className=\"DocSearch-Commands-Key\">\n <CommandIcon>\n <path d=\"M13.6167 8.936c-.1065.3583-.6883.962-1.4875.962-.7993 0-1.653-.9165-1.653-2.1258v-.5678c0-1.2548.7896-2.1016 1.653-2.1016.8634 0 1.3601.4778 1.4875 1.0724M9 6c-.1352-.4735-.7506-.9219-1.46-.8972-.7092.0246-1.344.57-1.344 1.2166s.4198.8812 1.3445.9805C8.465 7.3992 8.968 7.9337 9 8.5c.032.5663-.454 1.398-1.4595 1.398C6.6593 9.898 6 9 5.963 8.4851m-1.4748.5368c-.2635.5941-.8099.876-1.5443.876s-1.7073-.6248-1.7073-2.204v-.4603c0-1.0416.721-2.131 1.7073-2.131.9864 0 1.6425 1.031 1.5443 2.2492h-2.956\" />\n </CommandIcon>\n </span>\n <span className=\"DocSearch-Label\">to close</span>\n </li>\n </ul>\n </>\n );\n}\n\ninterface CommandIconProps {\n children: React.ReactNode;\n}\n\nfunction CommandIcon(props: CommandIconProps) {\n return (\n <svg width=\"15\" height=\"15\">\n <g\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.2\"\n >\n {props.children}\n </g>\n </svg>\n );\n}\n","import React from 'react';\n\nimport { DocSearchHit } from './types';\n\ninterface HitProps {\n hit: DocSearchHit;\n children: React.ReactNode;\n}\n\nexport function Hit({ hit, children }: HitProps) {\n return <a href={hit.url}>{children}</a>;\n}\n","import React from 'react';\n\nexport function LoadingIcon() {\n return (\n <svg viewBox=\"0 0 38 38\" stroke=\"currentColor\" strokeOpacity=\".5\">\n <g fill=\"none\" fillRule=\"evenodd\">\n <g transform=\"translate(1 1)\" strokeWidth=\"2\">\n <circle strokeOpacity=\".3\" cx=\"18\" cy=\"18\" r=\"18\" />\n <path d=\"M36 18c0-9.94-8.06-18-18-18\">\n <animateTransform\n attributeName=\"transform\"\n type=\"rotate\"\n from=\"0 18 18\"\n to=\"360 18 18\"\n dur=\"1s\"\n repeatCount=\"indefinite\"\n />\n </path>\n </g>\n </g>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function RecentIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <g\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3.18 6.6a8.23 8.23 0 1112.93 9.94h0a8.23 8.23 0 01-11.63 0\" />\n <path d=\"M6.44 7.25H2.55V3.36M10.45 6v5.6M10.45 11.6L13 13\" />\n </g>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function ResetIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n d=\"M10 10l5.09-5.09L10 10l5.09 5.09L10 10zm0 0L4.91 4.91 10 10l-5.09 5.09L10 10z\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SelectIcon() {\n return (\n <svg\n className=\"DocSearch-Hit-Select-Icon\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n >\n <g\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 3v4c0 2-2 4-4 4H2\" />\n <path d=\"M8 17l-6-6 6-6\" />\n </g>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SourceIcon(props: { type: string }) {\n switch (props.type) {\n case 'lvl1':\n return <LvlIcon />;\n case 'content':\n return <ContentIcon />;\n default:\n return <AnchorIcon />;\n }\n}\n\nfunction LvlIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n d=\"M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction AnchorIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n d=\"M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction ContentIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n d=\"M17 5H3h14zm0 5H3h14zm0 5H3h14z\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function StarIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n d=\"M10 14.2L5 17l1-5.6-4-4 5.5-.7 2.5-5 2.5 5 5.6.8-4 4 .9 5.5z\"\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function ErrorIcon() {\n return (\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n fillRule=\"evenodd\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M19 4.8a16 16 0 00-2-1.2m-3.3-1.2A16 16 0 001.1 4.7M16.7 8a12 12 0 00-2.8-1.4M10 6a12 12 0 00-6.7 2M12.3 14.7a4 4 0 00-4.5 0M14.5 11.4A8 8 0 0010 10M3 16L18 2M10 18h0\"></path>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function NoResultsIcon() {\n return (\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n fillRule=\"evenodd\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M15.5 4.8c2 3 1.7 7-1 9.7h0l4.3 4.3-4.3-4.3a7.8 7.8 0 01-9.8 1m-2.2-2.2A7.8 7.8 0 0113.2 2.4M2 18L18 2\"></path>\n </svg>\n );\n}\n","import React from 'react';\n\nimport { ErrorIcon } from './icons';\n\nexport function ErrorScreen() {\n return (\n <div className=\"DocSearch-ErrorScreen\">\n <div className=\"DocSearch-Screen-Icon\">\n <ErrorIcon />\n </div>\n <p className=\"DocSearch-Title\">Unable to fetch results</p>\n <p className=\"DocSearch-Help\">\n You might want to check your network connection.\n </p>\n </div>\n );\n}\n","import React from 'react';\n\nimport { NoResultsIcon } from './icons';\nimport { ScreenStateProps } from './ScreenState';\nimport { InternalDocSearchHit } from './types';\n\ntype NoResultsScreenProps = ScreenStateProps<InternalDocSearchHit>;\n\nexport function NoResultsScreen(props: NoResultsScreenProps) {\n const searchSuggestions: string[] | undefined = props.state.context\n .searchSuggestions as string[];\n\n return (\n <div className=\"DocSearch-NoResults\">\n <div className=\"DocSearch-Screen-Icon\">\n <NoResultsIcon />\n </div>\n <p className=\"DocSearch-Title\">\n No results for \"<strong>{props.state.query}</strong>\"\n </p>\n\n {searchSuggestions && searchSuggestions.length > 0 && (\n <div className=\"DocSearch-NoResults-Prefill-List\">\n <p className=\"DocSearch-Help\">Try searching for:</p>\n <ul>\n {searchSuggestions.slice(0, 3).reduce<React.ReactNode[]>(\n (acc, search) => [\n ...acc,\n <li key={search}>\n <button\n className=\"DocSearch-Prefill\"\n key={search}\n onClick={() => {\n props.setQuery(search.toLowerCase() + ' ');\n props.refresh();\n props.inputRef.current!.focus();\n }}\n >\n {search}\n </button>\n </li>,\n ],\n []\n )}\n </ul>\n </div>\n )}\n\n <p className=\"DocSearch-Help\">\n Believe this query should return results?{' '}\n <a\n href={`https://github.com/algolia/docsearch-configs/issues/new?template=Missing_results.md&title=[${props.indexName}]+Missing+results+for+query+\"${props.state.query}\"`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Let us know\n </a>\n .\n </p>\n </div>\n );\n}\n","import { createElement } from 'react';\n\nimport { StoredDocSearchHit } from './types';\n\nfunction getPropertyByPath(object: object, path: string): any {\n const parts = path.split('.');\n\n return parts.reduce((current, key) => current && current[key], object);\n}\n\ninterface SnippetProps<TItem> {\n [prop: string]: unknown;\n hit: TItem;\n attribute: string;\n tagName?: string;\n}\n\nexport function Snippet<TItem extends StoredDocSearchHit>({\n hit,\n attribute,\n tagName = 'span',\n ...rest\n}: SnippetProps<TItem>) {\n return createElement(tagName, {\n ...rest,\n dangerouslySetInnerHTML: {\n __html:\n getPropertyByPath(hit, `_snippetResult.${attribute}.value`) ||\n getPropertyByPath(hit, attribute),\n },\n });\n}\n","import {\n AutocompleteApi,\n AutocompleteState,\n BaseItem,\n} from '@algolia/autocomplete-core';\nimport React from 'react';\n\nimport { DocSearchProps } from './DocSearch';\nimport { Snippet } from './Snippet';\nimport { InternalDocSearchHit, StoredDocSearchHit } from './types';\n\ninterface ResultsProps<TItem extends BaseItem>\n extends AutocompleteApi<\n TItem,\n React.FormEvent,\n React.MouseEvent,\n React.KeyboardEvent\n > {\n title: string;\n collection: AutocompleteState<TItem>['collections'][0];\n renderIcon(props: { item: TItem; index: number }): React.ReactNode;\n renderAction(props: {\n item: TItem;\n runDeleteTransition: (cb: () => void) => void;\n runFavoriteTransition: (cb: () => void) => void;\n }): React.ReactNode;\n onItemClick(item: TItem): void;\n hitComponent: DocSearchProps['hitComponent'];\n}\n\nexport function Results<TItem extends StoredDocSearchHit>(\n props: ResultsProps<TItem>\n) {\n if (!props.collection || props.collection.items.length === 0) {\n return null;\n }\n\n return (\n <section className=\"DocSearch-Hits\">\n <div className=\"DocSearch-Hit-source\">{props.title}</div>\n\n <ul {...props.getListProps()}>\n {props.collection.items.map((item, index) => {\n return (\n <Result\n key={[props.title, item.objectID].join(':')}\n item={item}\n index={index}\n {...props}\n />\n );\n })}\n </ul>\n </section>\n );\n}\n\ninterface ResultProps<TItem extends BaseItem> extends ResultsProps<TItem> {\n item: TItem;\n index: number;\n}\n\nfunction Result<TItem extends StoredDocSearchHit>({\n item,\n index,\n renderIcon,\n renderAction,\n getItemProps,\n onItemClick,\n collection,\n hitComponent,\n}: ResultProps<TItem>) {\n const [isDeleting, setIsDeleting] = React.useState(false);\n const [isFavoriting, setIsFavoriting] = React.useState(false);\n const action = React.useRef<(() => void) | null>(null);\n const Hit = hitComponent!;\n\n function runDeleteTransition(cb: () => void) {\n setIsDeleting(true);\n action.current = cb;\n }\n\n function runFavoriteTransition(cb: () => void) {\n setIsFavoriting(true);\n action.current = cb;\n }\n\n return (\n <li\n className={[\n 'DocSearch-Hit',\n ((item as unknown) as InternalDocSearchHit).__docsearch_parent &&\n 'DocSearch-Hit--Child',\n isDeleting && 'DocSearch-Hit--deleting',\n isFavoriting && 'DocSearch-Hit--favoriting',\n ]\n .filter(Boolean)\n .join(' ')}\n onTransitionEnd={() => {\n if (action.current) {\n action.current();\n }\n }}\n {...getItemProps({\n item,\n source: collection.source,\n onClick() {\n onItemClick(item);\n },\n })}\n >\n <Hit hit={item}>\n <div className=\"DocSearch-Hit-Container\">\n {renderIcon({ item, index })}\n\n {item.hierarchy[item.type] && item.type === 'lvl1' && (\n <div className=\"DocSearch-Hit-content-wrapper\">\n <Snippet\n className=\"DocSearch-Hit-title\"\n hit={item}\n attribute=\"hierarchy.lvl1\"\n />\n {item.content && (\n <Snippet\n className=\"DocSearch-Hit-path\"\n hit={item}\n attribute=\"content\"\n />\n )}\n </div>\n )}\n\n {item.hierarchy[item.type] &&\n (item.type === 'lvl2' ||\n item.type === 'lvl3' ||\n item.type === 'lvl4' ||\n item.type === 'lvl5' ||\n item.type === 'lvl6') && (\n <div className=\"DocSearch-Hit-content-wrapper\">\n <Snippet\n className=\"DocSearch-Hit-title\"\n hit={item}\n attribute={`hierarchy.${item.type}`}\n />\n <Snippet\n className=\"DocSearch-Hit-path\"\n hit={item}\n attribute=\"hierarchy.lvl1\"\n />\n </div>\n )}\n\n {item.type === 'content' && (\n <div className=\"DocSearch-Hit-content-wrapper\">\n <Snippet\n className=\"DocSearch-Hit-title\"\n hit={item}\n attribute=\"content\"\n />\n <Snippet\n className=\"DocSearch-Hit-path\"\n hit={item}\n attribute=\"hierarchy.lvl1\"\n />\n </div>\n )}\n\n {renderAction({ item, runDeleteTransition, runFavoriteTransition })}\n </div>\n </Hit>\n </li>\n );\n}\n","export function groupBy<TValue extends object>(\n values: TValue[],\n predicate: (value: TValue) => string\n): Record<string, TValue[]> {\n return values.reduce<Record<string, TValue[]>>((acc, item) => {\n const key = predicate(item);\n\n if (!acc.hasOwnProperty(key)) {\n acc[key] = [];\n }\n\n // We limit each section to show 5 hits maximum.\n // This acts as a frontend alternative to `distinct`.\n if (acc[key].length < 5) {\n acc[key].push(item);\n }\n\n return acc;\n }, {});\n}\n","export function identity<TParam>(x: TParam): TParam {\n return x;\n}\n","export function noop(..._args: any[]): void {}\n","import { DocSearchHit, InternalDocSearchHit } from './../types';\n\nconst regexHighlightTags = /(<mark>|<\\/mark>)/g;\nconst regexHasHighlightTags = RegExp(regexHighlightTags.source);\n\nexport function removeHighlightTags(\n hit: DocSearchHit | InternalDocSearchHit\n): string {\n if (\n !(hit as InternalDocSearchHit).__docsearch_parent &&\n !hit._highlightResult\n ) {\n return hit.hierarchy.lvl0;\n }\n\n const { value } = hit._highlightResult\n ? hit._highlightResult.hierarchy.lvl0\n : (hit as InternalDocSearchHit).__docsearch_parent!._highlightResult\n .hierarchy.lvl0;\n\n return value && regexHasHighlightTags.test(value)\n ? value.replace(regexHighlightTags, '')\n : value;\n}\n","import React from 'react';\n\nimport { SelectIcon, SourceIcon } from './icons';\nimport { Results } from './Results';\nimport { ScreenStateProps } from './ScreenState';\nimport { InternalDocSearchHit } from './types';\nimport { removeHighlightTags } from './utils';\n\ntype ResultsScreenProps = ScreenStateProps<InternalDocSearchHit>;\n\nexport function ResultsScreen(props: ResultsScreenProps) {\n return (\n <div className=\"DocSearch-Dropdown-Container\">\n {props.state.collections.map((collection, index) => {\n if (collection.items.length === 0) {\n return null;\n }\n\n const title = removeHighlightTags(collection.items[0]);\n\n return (\n <Results\n {...props}\n key={index}\n title={title}\n collection={collection}\n renderIcon={({ item, index }) => (\n <>\n {item.__docsearch_parent && (\n <svg className=\"DocSearch-Hit-Tree\" viewBox=\"0 0 24 54\">\n <g\n stroke=\"currentColor\"\n fill=\"none\"\n fillRule=\"evenodd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n {item.__docsearch_parent !==\n collection.items[index + 1]?.__docsearch_parent ? (\n <path d=\"M8 6v21M20 27H8.3\" />\n ) : (\n <path d=\"M8 6v42M20 27H8.3\" />\n )}\n </g>\n </svg>\n )}\n\n <div className=\"DocSearch-Hit-icon\">\n <SourceIcon type={item.type} />\n </div>\n </>\n )}\n renderAction={() => (\n <div className=\"DocSearch-Hit-action\">\n <SelectIcon />\n </div>\n )}\n />\n );\n })}\n\n {props.resultsFooterComponent && (\n <section className=\"DocSearch-HitsFooter\">\n <props.resultsFooterComponent state={props.state} />\n </section>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport { RecentIcon, ResetIcon, StarIcon } from './icons';\nimport { Results } from './Results';\nimport { ScreenStateProps } from './ScreenState';\nimport { InternalDocSearchHit } from './types';\n\ninterface StartScreenProps extends ScreenStateProps<InternalDocSearchHit> {\n hasCollections: boolean;\n}\n\nexport function StartScreen(props: StartScreenProps) {\n if (props.state.status === 'idle' && props.hasCollections === false) {\n if (props.disableUserPersonalization) {\n return null;\n }\n\n return (\n <div className=\"DocSearch-StartScreen\">\n <p className=\"DocSearch-Help\">No recent searches</p>\n </div>\n );\n }\n\n if (props.hasCollections === false) {\n return null;\n }\n\n return (\n <div className=\"DocSearch-Dropdown-Container\">\n <Results\n {...props}\n title=\"Recent\"\n collection={props.state.collections[0]}\n renderIcon={() => (\n <div className=\"DocSearch-Hit-icon\">\n <RecentIcon />\n </div>\n )}\n renderAction={({\n item,\n runFavoriteTransition,\n runDeleteTransition,\n }) => (\n <>\n <div className=\"DocSearch-Hit-action\">\n <button\n className=\"DocSearch-Hit-action-button\"\n title=\"Save this search\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n runFavoriteTransition(() => {\n props.favoriteSearches.add(item);\n props.recentSearches.remove(item);\n props.refresh();\n });\n }}\n >\n <StarIcon />\n </button>\n </div>\n <div className=\"DocSearch-Hit-action\">\n <button\n className=\"DocSearch-Hit-action-button\"\n title=\"Remove this search from history\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n runDeleteTransition(() => {\n props.recentSearches.remove(item);\n props.refresh();\n });\n }}\n >\n <ResetIcon />\n </button>\n </div>\n </>\n )}\n />\n\n <Results\n {...props}\n title=\"Favorites\"\n collection={props.state.collections[1]}\n renderIcon={() => (\n <div className=\"DocSearch-Hit-icon\">\n <StarIcon />\n </div>\n )}\n renderAction={({ item, runDeleteTransition }) => (\n <div className=\"DocSearch-Hit-action\">\n <button\n className=\"DocSearch-Hit-action-button\"\n title=\"Remove this search from favorites\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n runDeleteTransition(() => {\n props.favoriteSearches.remove(item);\n props.refresh();\n });\n }}\n >\n <ResetIcon />\n </button>\n </div>\n )}\n />\n </div>\n );\n}\n","import {\n AutocompleteApi,\n AutocompleteState,\n BaseItem,\n} from '@algolia/autocomplete-core';\nimport React from 'react';\n\nimport { DocSearchProps } from './DocSearch';\nimport { ErrorScreen } from './ErrorScreen';\nimport { NoResultsScreen } from './NoResultsScreen';\nimport { ResultsScreen } from './ResultsScreen';\nimport { StartScreen } from './StartScreen';\nimport { StoredSearchPlugin } from './stored-searches';\nimport { InternalDocSearchHit, StoredDocSearchHit } from './types';\n\nexport interface ScreenStateProps<TItem extends BaseItem>\n extends AutocompleteApi<\n TItem,\n React.FormEvent,\n React.MouseEvent,\n React.KeyboardEvent\n > {\n state: AutocompleteState<TItem>;\n recentSearches: StoredSearchPlugin<StoredDocSearchHit>;\n favoriteSearches: StoredSearchPlugin<StoredDocSearchHit>;\n onItemClick(item: InternalDocSearchHit): void;\n inputRef: React.MutableRefObject<null | HTMLInputElement>;\n hitComponent: DocSearchProps['hitComponent'];\n indexName: DocSearchProps['indexName'];\n disableUserPersonalization: boolean;\n resultsFooterComponent: DocSearchProps['resultsFooterComponent'];\n}\n\nexport const ScreenState = React.memo(\n (props: ScreenStateProps<InternalDocSearchHit>) => {\n if (props.state.status === 'error') {\n return <ErrorScreen />;\n }\n\n const hasCollections = props.state.collections.some(\n (collection) => collection.items.length > 0\n );\n\n if (!props.state.query) {\n return <StartScreen {...props} hasCollections={hasCollections} />;\n }\n\n if (hasCollections === false) {\n return <NoResultsScreen {...props} />;\n }\n\n return <ResultsScreen {...props} />;\n },\n function areEqual(_prevProps, nextProps) {\n // We don't update the screen when Autocomplete is loading or stalled to\n // avoid UI flashes:\n // - Empty screen → Results screen\n // - NoResults screen → NoResults screen with another query\n return (\n nextProps.state.status === 'loading' ||\n nextProps.state.status === 'stalled'\n );\n }\n);\n","import { AutocompleteApi, AutocompleteState } from '@algolia/autocomplete-core';\nimport React, { MutableRefObject } from 'react';\n\nimport { MAX_QUERY_SIZE } from './constants';\nimport { LoadingIcon } from './icons/LoadingIcon';\nimport { ResetIcon } from './icons/ResetIcon';\nimport { SearchIcon } from './icons/SearchIcon';\nimport { InternalDocSearchHit } from './types';\n\ninterface SearchBoxProps\n extends AutocompleteApi<\n InternalDocSearchHit,\n React.FormEvent,\n React.MouseEvent,\n React.KeyboardEvent\n > {\n state: AutocompleteState<InternalDocSearchHit>;\n autoFocus: boolean;\n inputRef: MutableRefObject<HTMLInputElement | null>;\n onClose(): void;\n isFromSelection: boolean;\n}\n\nexport function SearchBox(props: SearchBoxProps) {\n const { onReset } = props.getFormProps({\n inputElement: props.inputRef.current,\n });\n\n React.useEffect(() => {\n if (props.autoFocus && props.inputRef.current) {\n props.inputRef.current.focus();\n }\n }, [props.autoFocus, props.inputRef]);\n\n React.useEffect(() => {\n if (props.isFromSelection && props.inputRef.current) {\n props.inputRef.current.select();\n }\n }, [props.isFromSelection, props.inputRef]);\n\n return (\n <>\n <form\n className=\"DocSearch-Form\"\n onSubmit={(event) => {\n event.preventDefault();\n }}\n onReset={onReset}\n >\n <label className=\"DocSearch-MagnifierLabel\" {...props.getLabelProps()}>\n <SearchIcon />\n </label>\n\n <div className=\"DocSearch-LoadingIndicator\">\n <LoadingIcon />\n </div>\n\n <input\n className=\"DocSearch-Input\"\n ref={props.inputRef}\n {...props.getInputProps({\n inputElement: props.inputRef.current!,\n autoFocus: props.autoFocus,\n maxLength: MAX_QUERY_SIZE,\n })}\n />\n\n <button\n type=\"reset\"\n title=\"Clear the query\"\n className=\"DocSearch-Reset\"\n hidden={!props.state.query}\n >\n <ResetIcon />\n </button>\n </form>\n\n <button className=\"DocSearch-Cancel\" onClick={props.onClose}>\n Cancel\n </button>\n </>\n );\n}\n","export const MAX_QUERY_SIZE = 64;\n","import { DocSearchHit, StoredDocSearchHit } from './types';\n\nfunction isLocalStorageSupported() {\n const key = '__TEST_KEY__';\n\n try {\n localStorage.setItem(key, '');\n localStorage.removeItem(key);\n\n return true;\n } catch (error) {\n return false;\n }\n}\n\nfunction createStorage<TItem>(key: string) {\n if (isLocalStorageSupported() === false) {\n return {\n setItem() {},\n getItem() {\n return [];\n },\n };\n }\n\n return {\n setItem(item: TItem[]) {\n return window.localStorage.setItem(key, JSON.stringify(item));\n },\n getItem(): TItem[] {\n const item = window.localStorage.getItem(key);\n\n return item ? JSON.parse(item) : [];\n },\n };\n}\n\ntype CreateStoredSearchesOptions = {\n key: string;\n limit?: number;\n};\n\nexport type StoredSearchPlugin<TItem> = {\n add(item: TItem): void;\n remove(item: TItem): void;\n getAll(): TItem[];\n};\n\nexport function createStoredSearches<TItem extends StoredDocSearchHit>({\n key,\n limit = 5,\n}: CreateStoredSearchesOptions): StoredSearchPlugin<TItem> {\n const storage = createStorage<TItem>(key);\n let items = storage.getItem().slice(0, limit);\n\n return {\n add(item: TItem) {\n const {\n _highlightResult,\n _snippetResult,\n ...hit\n } = (item as unknown) as DocSearchHit;\n\n const isQueryAlreadySaved = items.findIndex(\n (x) => x.objectID === hit.objectID\n );\n\n if (isQueryAlreadySaved > -1) {\n items.splice(isQueryAlreadySaved, 1);\n }\n\n items.unshift(hit as TItem);\n items = items.slice(0, limit);\n\n storage.setItem(items);\n },\n remove(item: TItem) {\n items = items.filter((x) => x.objectID !== item.objectID);\n\n storage.setItem(items);\n },\n getAll() {\n return items;\n },\n };\n}\n","function createBrowserLocalStorageCache(options) {\r\n const namespaceKey = `algoliasearch-client-js-${options.key}`;\r\n // eslint-disable-next-line functional/no-let\r\n let storage;\r\n const getStorage = () => {\r\n if (storage === undefined) {\r\n storage = options.localStorage || window.localStorage;\r\n }\r\n return storage;\r\n };\r\n const getNamespace = () => {\r\n return JSON.parse(getStorage().getItem(namespaceKey) || '{}');\r\n };\r\n return {\r\n get(key, defaultValue, events = {\r\n miss: () => Promise.resolve(),\r\n }) {\r\n return Promise.resolve()\r\n .then(() => {\r\n const keyAsString = JSON.stringify(key);\r\n const value = getNamespace()[keyAsString];\r\n return Promise.all([value || defaultValue(), value !== undefined]);\r\n })\r\n .then(([value, exists]) => {\r\n return Promise.all([value, exists || events.miss(value)]);\r\n })\r\n .then(([value]) => value);\r\n },\r\n set(key, value) {\r\n return Promise.resolve().then(() => {\r\n const namespace = getNamespace();\r\n // eslint-disable-next-line functional/immutable-data\r\n namespace[JSON.stringify(key)] = value;\r\n getStorage().setItem(namespaceKey, JSON.stringify(namespace));\r\n return value;\r\n });\r\n },\r\n delete(key) {\r\n return Promise.resolve().then(() => {\r\n const namespace = getNamespace();\r\n // eslint-disable-next-line functional/immutable-data\r\n delete namespace[JSON.stringify(key)];\r\n getStorage().setItem(namespaceKey, JSON.stringify(namespace));\r\n });\r\n },\r\n clear() {\r\n return Promise.resolve().then(() => {\r\n getStorage().removeItem(namespaceKey);\r\n });\r\n },\r\n };\r\n}\n\n// @todo Add logger on options to debug when caches go wrong.\r\nfunction createFallbackableCache(options) {\r\n const caches = [...options.caches];\r\n const current = caches.shift(); // eslint-disable-line functional/immutable-data\r\n if (current === undefined) {\r\n return createNullCache();\r\n }\r\n return {\r\n get(key, defaultValue, events = {\r\n miss: () => Promise.resolve(),\r\n }) {\r\n return current.get(key, defaultValue, events).catch(() => {\r\n return createFallbackableCache({ caches }).get(key, defaultValue, events);\r\n });\r\n },\r\n set(key, value) {\r\n return current.set(key, value).catch(() => {\r\n return createFallbackableCache({ caches }).set(key, value);\r\n });\r\n },\r\n delete(key) {\r\n return current.delete(key).catch(() => {\r\n return createFallbackableCache({ caches }).delete(key);\r\n });\r\n },\r\n clear() {\r\n return current.clear().catch(() => {\r\n return createFallbackableCache({ caches }).clear();\r\n });\r\n },\r\n };\r\n}\n\nfunction createNullCache() {\r\n return {\r\n get(_key, defaultValue, events = {\r\n miss: () => Promise.resolve(),\r\n }) {\r\n const value = defaultValue();\r\n return value\r\n .then(result => Promise.all([result, events.miss(result)]))\r\n .then(([result]) => result);\r\n },\r\n set(_key, value) {\r\n return Promise.resolve(value);\r\n },\r\n delete(_key) {\r\n return Promise.resolve();\r\n },\r\n clear() {\r\n return Promise.resolve();\r\n },\r\n };\r\n}\n\nfunction createInMemoryCache(options = { serializable: true }) {\r\n // eslint-disable-next-line functional/no-let\r\n let cache = {};\r\n return {\r\n get(key, defaultValue, events = {\r\n miss: () => Promise.resolve(),\r\n }) {\r\n const keyAsString = JSON.stringify(key);\r\n if (keyAsString in cache) {\r\n return Promise.resolve(options.serializable ? JSON.parse(cache[keyAsString]) : cache[keyAsString]);\r\n }\r\n const promise = defaultValue();\r\n const miss = (events && events.miss) || (() => Promise.resolve());\r\n return promise.then((value) => miss(value)).then(() => promise);\r\n },\r\n set(key, value) {\r\n // eslint-disable-next-line functional/immutable-data\r\n cache[JSON.stringify(key)] = options.serializable ? JSON.stringify(value) : value;\r\n return Promise.resolve(value);\r\n },\r\n delete(key) {\r\n // eslint-disable-next-line functional/immutable-data\r\n delete cache[JSON.stringify(key)];\r\n return Promise.resolve();\r\n },\r\n clear() {\r\n cache = {};\r\n return Promise.resolve();\r\n },\r\n };\r\n}\n\nfunction createAuth(authMode, appId, apiKey) {\r\n const credentials = {\r\n 'x-algolia-api-key': apiKey,\r\n 'x-algolia-application-id': appId,\r\n };\r\n return {\r\n headers() {\r\n return authMode === AuthMode.WithinHeaders ? credentials : {};\r\n },\r\n queryParameters() {\r\n return authMode === AuthMode.WithinQueryParameters ? credentials : {};\r\n },\r\n };\r\n}\n\n// eslint-disable-next-line functional/prefer-readonly-type\r\nfunction shuffle(array) {\r\n let c = array.length - 1; // eslint-disable-line functional/no-let\r\n // eslint-disable-next-line functional/no-loop-statement\r\n for (c; c > 0; c--) {\r\n const b = Math.floor(Math.random() * (c + 1));\r\n const a = array[c];\r\n array[c] = array[b]; // eslint-disable-line functional/immutable-data, no-param-reassign\r\n array[b] = a; // eslint-disable-line functional/immutable-data, no-param-reassign\r\n }\r\n return array;\r\n}\r\nfunction addMethods(base, methods) {\r\n if (!methods) {\r\n return base;\r\n }\r\n Object.keys(methods).forEach(key => {\r\n // eslint-disable-next-line functional/immutable-data, no-param-reassign\r\n base[key] = methods[key](base);\r\n });\r\n return base;\r\n}\r\nfunction encode(format, ...args) {\r\n // eslint-disable-next-line functional/no-let\r\n let i = 0;\r\n return format.replace(/%s/g, () => encodeURIComponent(args[i++]));\r\n}\n\nconst version = '4.8.5';\n\nconst AuthMode = {\r\n /**\r\n * If auth credentials should be in query parameters.\r\n */\r\n WithinQueryParameters: 0,\r\n /**\r\n * If auth credentials should be in headers.\r\n */\r\n WithinHeaders: 1,\r\n};\n\nfunction createMappedRequestOptions(requestOptions, timeout) {\r\n const options = requestOptions || {};\r\n const data = options.data || {};\r\n Object.keys(options).forEach(key => {\r\n if (['timeout', 'headers', 'queryParameters', 'data', 'cacheable'].indexOf(key) === -1) {\r\n data[key] = options[key]; // eslint-disable-line functional/immutable-data\r\n }\r\n });\r\n return {\r\n data: Object.entries(data).length > 0 ? data : undefined,\r\n timeout: options.timeout || timeout,\r\n headers: options.headers || {},\r\n queryParameters: options.queryParameters || {},\r\n cacheable: options.cacheable,\r\n };\r\n}\n\nconst CallEnum = {\r\n /**\r\n * If the host is read only.\r\n */\r\n Read: 1,\r\n /**\r\n * If the host is write only.\r\n */\r\n Write: 2,\r\n /**\r\n * If the host is both read and write.\r\n */\r\n Any: 3,\r\n};\n\nconst HostStatusEnum = {\r\n Up: 1,\r\n Down: 2,\r\n Timeouted: 3,\r\n};\n\n// By default, API Clients at Algolia have expiration delay\r\n// of 5 mins. In the JavaScript client, we have 2 mins.\r\nconst EXPIRATION_DELAY = 2 * 60 * 1000;\r\nfunction createStatefulHost(host, status = HostStatusEnum.Up) {\r\n return {\r\n ...host,\r\n status,\r\n lastUpdate: Date.now(),\r\n };\r\n}\r\nfunction isStatefulHostUp(host) {\r\n return host.status === HostStatusEnum.Up || Date.now() - host.lastUpdate > EXPIRATION_DELAY;\r\n}\r\nfunction isStatefulHostTimeouted(host) {\r\n return (host.status === HostStatusEnum.Timeouted && Date.now() - host.lastUpdate <= EXPIRATION_DELAY);\r\n}\n\nfunction createStatelessHost(options) {\r\n if (typeof options === 'string') {\r\n return {\r\n protocol: 'https',\r\n url: options,\r\n accept: CallEnum.Any,\r\n };\r\n }\r\n return {\r\n protocol: options.protocol || 'https',\r\n url: options.url,\r\n accept: options.accept || CallEnum.Any,\r\n };\r\n}\n\nconst MethodEnum = {\r\n Delete: 'DELETE',\r\n Get: 'GET',\r\n Post: 'POST',\r\n Put: 'PUT',\r\n};\n\nfunction createRetryableOptions(hostsCache, statelessHosts) {\r\n return Promise.all(statelessHosts.map(statelessHost => {\r\n return hostsCache.get(statelessHost, () => {\r\n return Promise.resolve(createStatefulHost(statelessHost));\r\n });\r\n })).then(statefulHosts => {\r\n const hostsUp = statefulHosts.filter(host => isStatefulHostUp(host));\r\n const hostsTimeouted = statefulHosts.filter(host => isStatefulHostTimeouted(host));\r\n /**\r\n * Note, we put the hosts that previously timeouted on the end of the list.\r\n */\r\n const hostsAvailable = [...hostsUp, ...hostsTimeouted];\r\n const statelessHostsAvailable = hostsAvailable.length > 0\r\n ? hostsAvailable.map(host => createStatelessHost(host))\r\n : statelessHosts;\r\n return {\r\n getTimeout(timeoutsCount, baseTimeout) {\r\n /**\r\n * Imagine that you have 4 hosts, if timeouts will increase\r\n * on the following way: 1 (timeouted) > 4 (timeouted) > 5 (200)\r\n *\r\n * Note that, the very next request, we start from the previous timeout\r\n *\r\n * 5 (timeouted) > 6 (timeouted) > 7 ...\r\n *\r\n * This strategy may need to be reviewed, but is the strategy on the our\r\n * current v3 version.\r\n */\r\n const timeoutMultiplier = hostsTimeouted.length === 0 && timeoutsCount === 0\r\n ? 1\r\n : hostsTimeouted.length + 3 + timeoutsCount;\r\n return timeoutMultiplier * baseTimeout;\r\n },\r\n statelessHosts: statelessHostsAvailable,\r\n };\r\n });\r\n}\n\nconst isNetworkError = ({ isTimedOut, status }) => {\r\n return !isTimedOut && ~~status === 0;\r\n};\r\nconst isRetryable = (response) => {\r\n const status = response.status;\r\n const isTimedOut = response.isTimedOut;\r\n return (isTimedOut || isNetworkError(response) || (~~(status / 100) !== 2 && ~~(status / 100) !== 4));\r\n};\r\nconst isSuccess = ({ status }) => {\r\n return ~~(status / 100) === 2;\r\n};\r\nconst retryDecision = (response, outcomes) => {\r\n if (isRetryable(response)) {\r\n return outcomes.onRetry(response);\r\n }\r\n if (isSuccess(response)) {\r\n return outcomes.onSucess(response);\r\n }\r\n return outcomes.onFail(response);\r\n};\n\nfunction retryableRequest(transporter, statelessHosts, request, requestOptions) {\r\n const stackTrace = []; // eslint-disable-line functional/prefer-readonly-type\r\n /**\r\n * First we prepare the payload that do not depend from hosts.\r\n */\r\n const data = serializeData(request, requestOptions);\r\n const headers = serializeHeaders(transporter, requestOptions);\r\n const method = request.method;\r\n // On `GET`, the data is proxied to query parameters.\r\n const dataQueryParameters = request.method !== MethodEnum.Get\r\n ? {}\r\n : {\r\n ...request.data,\r\n ...requestOptions.data,\r\n };\r\n const queryParameters = {\r\n 'x-algolia-agent': transporter.userAgent.value,\r\n ...transporter.queryParameters,\r\n ...dataQueryParameters,\r\n ...requestOptions.queryParameters,\r\n };\r\n let timeoutsCount = 0; // eslint-disable-line functional/no-let\r\n const retry = (hosts, // eslint-disable-line functional/prefer-readonly-type\r\n getTimeout) => {\r\n /**\r\n * We iterate on each host, until there is no host left.\r\n */\r\n const host = hosts.pop(); // eslint-disable-line functional/immutable-data\r\n if (host === undefined) {\r\n throw createRetryError(stackTraceWithoutCredentials(stackTrace));\r\n }\r\n const payload = {\r\n data,\r\n headers,\r\n method,\r\n url: serializeUrl(host, request.path, queryParameters),\r\n connectTimeout: getTimeout(timeoutsCount, transporter.timeouts.connect),\r\n responseTimeout: getTimeout(timeoutsCount, requestOptions.timeout),\r\n };\r\n /**\r\n * The stackFrame is pushed to the stackTrace so we\r\n * can have information about onRetry and onFailure\r\n * decisions.\r\n */\r\n const pushToStackTrace = (response) => {\r\n const stackFrame = {\r\n request: payload,\r\n response,\r\n host,\r\n triesLeft: hosts.length,\r\n };\r\n // eslint-disable-next-line functional/immutable-data\r\n stackTrace.push(stackFrame);\r\n return stackFrame;\r\n };\r\n const decisions = {\r\n onSucess: response => deserializeSuccess(response),\r\n onRetry(response) {\r\n const stackFrame = pushToStackTrace(response);\r\n /**\r\n * If response is a timeout, we increaset the number of\r\n * timeouts so we can increase the timeout later.\r\n */\r\n if (response.isTimedOut) {\r\n timeoutsCount++;\r\n }\r\n return Promise.all([\r\n /**\r\n * Failures are individually send the logger, allowing\r\n * the end user to debug / store stack frames even\r\n * when a retry error does not happen.\r\n */\r\n transporter.logger.info('Retryable failure', stackFrameWithoutCredentials(stackFrame)),\r\n /**\r\n * We also store the state of the host in failure cases. If the host, is\r\n * down it will remain down for the next 2 minutes. In a timeout situation,\r\n * this host will be added end of the list of hosts on the next request.\r\n */\r\n transporter.hostsCache.set(host, createStatefulHost(host, response.isTimedOut ? HostStatusEnum.Timeouted : HostStatusEnum.Down)),\r\n ]).then(() => retry(hosts, getTimeout));\r\n },\r\n onFail(response) {\r\n pushToStackTrace(response);\r\n throw deserializeFailure(response, stackTraceWithoutCredentials(stackTrace));\r\n },\r\n };\r\n return transporter.requester.send(payload).then(response => {\r\n return retryDecision(response, decisions);\r\n });\r\n };\r\n /**\r\n * Finally, for each retryable host perform request until we got a non\r\n * retryable response. Some notes here:\r\n *\r\n * 1. The reverse here is applied so we can apply a `pop` later on => more performant.\r\n * 2. We also get from the retryable options a timeout multiplier that is tailored\r\n * for the current context.\r\n */\r\n return createRetryableOptions(transporter.hostsCache, statelessHosts).then(options => {\r\n return retry([...options.statelessHosts].reverse(), options.getTimeout);\r\n });\r\n}\n\nfunction createTransporter(options) {\r\n const { hostsCache, logger, requester, requestsCache, responsesCache, timeouts, userAgent, hosts, queryParameters, headers, } = options;\r\n const transporter = {\r\n hostsCache,\r\n logger,\r\n requester,\r\n requestsCache,\r\n responsesCache,\r\n timeouts,\r\n userAgent,\r\n headers,\r\n queryParameters,\r\n hosts: hosts.map(host => createStatelessHost(host)),\r\n read(request, requestOptions) {\r\n /**\r\n * First, we compute the user request options. Now, keep in mind,\r\n * that using request options the user is able to modified the intire\r\n * payload of the request. Such as headers, query parameters, and others.\r\n */\r\n const mappedRequestOptions = createMappedRequestOptions(requestOptions, transporter.timeouts.read);\r\n const createRetryableRequest = () => {\r\n /**\r\n * Then, we prepare a function factory that contains the construction of\r\n * the retryable request. At this point, we may *not* perform the actual\r\n * request. But we want to have the function factory ready.\r\n */\r\n return retryableRequest(transporter, transporter.hosts.filter(host => (host.accept & CallEnum.Read) !== 0), request, mappedRequestOptions);\r\n };\r\n /**\r\n * Once we have the function factory ready, we need to determine of the\r\n * request is \"cacheable\" - should be cached. Note that, once again,\r\n * the user can force this option.\r\n */\r\n const cacheable = mappedRequestOptions.cacheable !== undefined\r\n ? mappedRequestOptions.cacheable\r\n : request.cacheable;\r\n /**\r\n * If is not \"cacheable\", we immediatly trigger the retryable request, no\r\n * need to check cache implementations.\r\n */\r\n if (cacheable !== true) {\r\n return createRetryableRequest();\r\n }\r\n /**\r\n * If the request is \"cacheable\", we need to first compute the key to ask\r\n * the cache implementations if this request is on progress or if the\r\n * response already exists on the cache.\r\n */\r\n const key = {\r\n request,\r\n mappedRequestOptions,\r\n transporter: {\r\n queryParameters: transporter.queryParameters,\r\n headers: transporter.headers,\r\n },\r\n };\r\n /**\r\n * With the computed key, we first ask the responses cache\r\n * implemention if this request was been resolved before.\r\n */\r\n return transporter.responsesCache.get(key, () => {\r\n /**\r\n * If the request has never resolved before, we actually ask if there\r\n * is a current request with the same key on progress.\r\n */\r\n return transporter.requestsCache.get(key, () => {\r\n return (transporter.requestsCache\r\n /**\r\n * Finally, if there is no request in progress with the same key,\r\n * this `createRetryableRequest()` will actually trigger the\r\n * retryable request.\r\n */\r\n .set(key, createRetryableRequest())\r\n .then(response => Promise.all([transporter.requestsCache.delete(key), response]), err => Promise.all([transporter.requestsCache.delete(key), Promise.reject(err)]))\r\n .then(([_, response]) => response));\r\n });\r\n }, {\r\n /**\r\n * Of course, once we get this response back from the server, we\r\n * tell response cache to actually store the received response\r\n * to be used later.\r\n */\r\n miss: response => transporter.responsesCache.set(key, response),\r\n });\r\n },\r\n write(request, requestOptions) {\r\n /**\r\n * On write requests, no cache mechanisms are applied, and we\r\n * proxy the request immediately to the requester.\r\n */\r\n return retryableRequest(transporter, transporter.hosts.filter(host => (host.accept & CallEnum.Write) !== 0), request, createMappedRequestOptions(requestOptions, transporter.timeouts.write));\r\n },\r\n };\r\n return transporter;\r\n}\n\nfunction createUserAgent(version) {\r\n const userAgent = {\r\n value: `Algolia for JavaScript (${version})`,\r\n add(options) {\r\n const addedUserAgent = `; ${options.segment}${options.version !== undefined ? ` (${options.version})` : ''}`;\r\n if (userAgent.value.indexOf(addedUserAgent) === -1) {\r\n // eslint-disable-next-line functional/immutable-data\r\n userAgent.value = `${userAgent.value}${addedUserAgent}`;\r\n }\r\n return userAgent;\r\n },\r\n };\r\n return userAgent;\r\n}\n\nfunction deserializeSuccess(response) {\r\n // eslint-disable-next-line functional/no-try-statement\r\n try {\r\n return JSON.parse(response.content);\r\n }\r\n catch (e) {\r\n throw createDeserializationError(e.message, response);\r\n }\r\n}\r\nfunction deserializeFailure({ content, status }, stackFrame) {\r\n // eslint-disable-next-line functional/no-let\r\n let message = content;\r\n // eslint-disable-next-line functional/no-try-statement\r\n try {\r\n message = JSON.parse(content).message;\r\n }\r\n catch (e) {\r\n // ..\r\n }\r\n return createApiError(message, status, stackFrame);\r\n}\n\nfunction serializeUrl(host, path, queryParameters) {\r\n const queryParametersAsString = serializeQueryParameters(queryParameters);\r\n // eslint-disable-next-line functional/no-let\r\n let url = `${host.protocol}://${host.url}/${path.charAt(0) === '/' ? path.substr(1) : path}`;\r\n if (queryParametersAsString.length) {\r\n url += `?${queryParametersAsString}`;\r\n }\r\n return url;\r\n}\r\nfunction serializeQueryParameters(parameters) {\r\n const isObjectOrArray = (value) => Object.prototype.toString.call(value) === '[object Object]' ||\r\n Object.prototype.toString.call(value) === '[object Array]';\r\n return Object.keys(parameters)\r\n .map(key => encode('%s=%s', key, isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key]))\r\n .join('&');\r\n}\r\nfunction serializeData(request, requestOptions) {\r\n if (request.method === MethodEnum.Get ||\r\n (request.data === undefined && requestOptions.data === undefined)) {\r\n return undefined;\r\n }\r\n const data = Array.isArray(request.data)\r\n ? request.data\r\n : { ...request.data, ...requestOptions.data };\r\n return JSON.stringify(data);\r\n}\r\nfunction serializeHeaders(transporter, requestOptions) {\r\n const headers = {\r\n ...transporter.headers,\r\n ...requestOptions.headers,\r\n };\r\n const serializedHeaders = {};\r\n Object.keys(headers).forEach(header => {\r\n const value = headers[header];\r\n // @ts-ignore\r\n // eslint-disable-next-line functional/immutable-data\r\n serializedHeaders[header.toLowerCase()] = value;\r\n });\r\n return serializedHeaders;\r\n}\n\nfunction stackTraceWithoutCredentials(stackTrace) {\r\n return stackTrace.map(stackFrame => stackFrameWithoutCredentials(stackFrame));\r\n}\r\nfunction stackFrameWithoutCredentials(stackFrame) {\r\n const modifiedHeaders = stackFrame.request.headers['x-algolia-api-key']\r\n ? { 'x-algolia-api-key': '*****' }\r\n : {};\r\n return {\r\n ...stackFrame,\r\n request: {\r\n ...stackFrame.request,\r\n headers: {\r\n ...stackFrame.request.headers,\r\n ...modifiedHeaders,\r\n },\r\n },\r\n };\r\n}\n\nfunction createApiError(message, status, transporterStackTrace) {\r\n return {\r\n name: 'ApiError',\r\n message,\r\n status,\r\n transporterStackTrace,\r\n };\r\n}\n\nfunction createDeserializationError(message, response) {\r\n return {\r\n name: 'DeserializationError',\r\n message,\r\n response,\r\n };\r\n}\n\nfunction createRetryError(transporterStackTrace) {\r\n return {\r\n name: 'RetryError',\r\n message: 'Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.',\r\n transporterStackTrace,\r\n };\r\n}\n\nconst createSearchClient = options => {\r\n const appId = options.appId;\r\n const auth = createAuth(options.authMode !== undefined ? options.authMode : AuthMode.WithinHeaders, appId, options.apiKey);\r\n const transporter = createTransporter({\r\n hosts: [\r\n { url: `${appId}-dsn.algolia.net`, accept: CallEnum.Read },\r\n { url: `${appId}.algolia.net`, accept: CallEnum.Write },\r\n ].concat(shuffle([\r\n { url: `${appId}-1.algolianet.com` },\r\n { url: `${appId}-2.algolianet.com` },\r\n { url: `${appId}-3.algolianet.com` },\r\n ])),\r\n ...options,\r\n headers: {\r\n ...auth.headers(),\r\n ...{ 'content-type': 'application/x-www-form-urlencoded' },\r\n ...options.headers,\r\n },\r\n queryParameters: {\r\n ...auth.queryParameters(),\r\n ...options.queryParameters,\r\n },\r\n });\r\n const base = {\r\n transporter,\r\n appId,\r\n addAlgoliaAgent(segment, version) {\r\n transporter.userAgent.add({ segment, version });\r\n },\r\n clearCache() {\r\n return Promise.all([\r\n transporter.requestsCache.clear(),\r\n transporter.responsesCache.clear(),\r\n ]).then(() => undefined);\r\n },\r\n };\r\n return addMethods(base, options.methods);\r\n};\n\nconst initIndex = (base) => {\r\n return (indexName, options = {}) => {\r\n const searchIndex = {\r\n transporter: base.transporter,\r\n appId: base.appId,\r\n indexName,\r\n };\r\n return addMethods(searchIndex, options.methods);\r\n };\r\n};\n\nconst multipleQueries = (base) => {\r\n return (queries, requestOptions) => {\r\n const requests = queries.map(query => {\r\n return {\r\n ...query,\r\n params: serializeQueryParameters(query.params || {}),\r\n };\r\n });\r\n return base.transporter.read({\r\n method: MethodEnum.Post,\r\n path: '1/indexes/*/queries',\r\n data: {\r\n requests,\r\n },\r\n cacheable: true,\r\n }, requestOptions);\r\n };\r\n};\n\nconst multipleSearchForFacetValues = (base) => {\r\n return (queries, requestOptions) => {\r\n return Promise.all(queries.map(query => {\r\n const { facetName, facetQuery, ...params } = query.params;\r\n return initIndex(base)(query.indexName, {\r\n methods: { searchForFacetValues },\r\n }).searchForFacetValues(facetName, facetQuery, {\r\n ...requestOptions,\r\n ...params,\r\n });\r\n }));\r\n };\r\n};\n\nconst findAnswers = (base) => {\r\n return (query, queryLanguages, requestOptions) => {\r\n return base.transporter.read({\r\n method: MethodEnum.Post,\r\n path: encode('1/answers/%s/prediction', base.indexName),\r\n data: {\r\n query,\r\n queryLanguages,\r\n },\r\n cacheable: true,\r\n }, requestOptions);\r\n };\r\n};\n\nconst search = (base) => {\r\n return (query, requestOptions) => {\r\n return base.transporter.read({\r\n method: MethodEnum.Post,\r\n path: encode('1/indexes/%s/query', base.indexName),\r\n data: {\r\n query,\r\n },\r\n cacheable: true,\r\n }, requestOptions);\r\n };\r\n};\n\nconst searchForFacetValues = (base) => {\r\n return (facetName, facetQuery, requestOptions) => {\r\n return base.transporter.read({\r\n method: MethodEnum.Post,\r\n path: encode('1/indexes/%s/facets/%s/query', base.indexName, facetName),\r\n data: {\r\n facetQuery,\r\n },\r\n cacheable: true,\r\n }, requestOptions);\r\n };\r\n};\n\nconst LogLevelEnum = {\r\n Debug: 1,\r\n Info: 2,\r\n Error: 3,\r\n};\n\n/* eslint no-console: 0 */\r\nfunction createConsoleLogger(logLevel) {\r\n return {\r\n debug(message, args) {\r\n if (LogLevelEnum.Debug >= logLevel) {\r\n console.debug(message, args);\r\n }\r\n return Promise.resolve();\r\n },\r\n info(message, args) {\r\n if (LogLevelEnum.Info >= logLevel) {\r\n console.info(message, args);\r\n }\r\n return Promise.resolve();\r\n },\r\n error(message, args) {\r\n console.error(message, args);\r\n return Promise.resolve();\r\n },\r\n };\r\n}\n\nfunction createBrowserXhrRequester() {\r\n return {\r\n send(request) {\r\n return new Promise((resolve) => {\r\n const baseRequester = new XMLHttpRequest();\r\n baseRequester.open(request.method, request.url, true);\r\n Object.keys(request.headers).forEach(key => baseRequester.setRequestHeader(key, request.headers[key]));\r\n const createTimeout = (timeout, content) => {\r\n return setTimeout(() => {\r\n baseRequester.abort();\r\n resolve({\r\n status: 0,\r\n content,\r\n isTimedOut: true,\r\n });\r\n }, timeout * 1000);\r\n };\r\n const connectTimeout = createTimeout(request.connectTimeout, 'Connection timeout');\r\n // eslint-disable-next-line functional/no-let\r\n let responseTimeout;\r\n // eslint-disable-next-line functional/immutable-data\r\n baseRequester.onreadystatechange = () => {\r\n if (baseRequester.readyState > baseRequester.OPENED && responseTimeout === undefined) {\r\n clearTimeout(connectTimeout);\r\n responseTimeout = createTimeout(request.responseTimeout, 'Socket timeout');\r\n }\r\n };\r\n // eslint-disable-next-line functional/immutable-data\r\n baseRequester.onerror = () => {\r\n // istanbul ignore next\r\n if (baseRequester.status === 0) {\r\n clearTimeout(connectTimeout);\r\n clearTimeout(responseTimeout);\r\n resolve({\r\n content: baseRequester.responseText || 'Network request failed',\r\n status: baseRequester.status,\r\n isTimedOut: false,\r\n });\r\n }\r\n };\r\n // eslint-disable-next-line functional/immutable-data\r\n baseRequester.onload = () => {\r\n clearTimeout(connectTimeout);\r\n clearTimeout(responseTimeout);\r\n resolve({\r\n content: baseRequester.responseText,\r\n status: baseRequester.status,\r\n isTimedOut: false,\r\n });\r\n };\r\n baseRequester.send(request.data);\r\n });\r\n },\r\n };\r\n}\n\nfunction algoliasearch(appId, apiKey, options) {\r\n const commonOptions = {\r\n appId,\r\n apiKey,\r\n timeouts: {\r\n connect: 1,\r\n read: 2,\r\n write: 30,\r\n },\r\n requester: createBrowserXhrRequester(),\r\n logger: createConsoleLogger(LogLevelEnum.Error),\r\n responsesCache: createInMemoryCache(),\r\n requestsCache: createInMemoryCache({ serializable: false }),\r\n hostsCache: createFallbackableCache({\r\n caches: [\r\n createBrowserLocalStorageCache({ key: `${version}-${appId}` }),\r\n createInMemoryCache(),\r\n ],\r\n }),\r\n userAgent: createUserAgent(version).add({\r\n segment: 'Browser',\r\n version: 'lite',\r\n }),\r\n authMode: AuthMode.WithinQueryParameters,\r\n };\r\n return createSearchClient({\r\n ...commonOptions,\r\n ...options,\r\n methods: {\r\n search: multipleQueries,\r\n searchForFacetValues: multipleSearchForFacetValues,\r\n multipleQueries,\r\n multipleSearchForFacetValues,\r\n initIndex: base => (indexName) => {\r\n return initIndex(base)(indexName, {\r\n methods: { search, searchForFacetValues, findAnswers },\r\n });\r\n },\r\n },\r\n });\r\n}\r\n// eslint-disable-next-line functional/immutable-data\r\nalgoliasearch.version = version;\n\nexport default algoliasearch;\n","import {\n AutocompleteState,\n createAutocomplete,\n} from '@algolia/autocomplete-core';\nimport { getAlgoliaResults } from '@algolia/autocomplete-preset-algolia';\nimport React from 'react';\n\nimport { MAX_QUERY_SIZE } from './constants';\nimport { DocSearchProps } from './DocSearch';\nimport { Footer } from './Footer';\nimport { Hit } from './Hit';\nimport { ScreenState } from './ScreenState';\nimport { SearchBox } from './SearchBox';\nimport { createStoredSearches } from './stored-searches';\nimport {\n DocSearchHit,\n InternalDocSearchHit,\n StoredDocSearchHit,\n} from './types';\nimport { useSearchClient } from './useSearchClient';\nimport { useTouchEvents } from './useTouchEvents';\nimport { useTrapFocus } from './useTrapFocus';\nimport { groupBy, identity, noop, removeHighlightTags } from './utils';\n\nexport interface DocSearchModalProps extends DocSearchProps {\n initialScrollY: number;\n onClose?(): void;\n}\n\nexport function DocSearchModal({\n appId = 'BH4D9OD16A',\n apiKey,\n indexName,\n placeholder = 'Search docs',\n searchParameters,\n onClose = noop,\n transformItems = identity,\n hitComponent = Hit,\n resultsFooterComponent = () => null,\n navigator,\n initialScrollY = 0,\n transformSearchClient = identity,\n disableUserPersonalization = false,\n initialQuery: initialQueryFromProp = '',\n}: DocSearchModalProps) {\n const [state, setState] = React.useState<\n AutocompleteState<InternalDocSearchHit>\n >({\n query: '',\n collections: [],\n completion: null,\n context: {},\n isOpen: false,\n activeItemId: null,\n status: 'idle',\n });\n\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const modalRef = React.useRef<HTMLDivElement | null>(null);\n const formElementRef = React.useRef<HTMLDivElement | null>(null);\n const dropdownRef = React.useRef<HTMLDivElement | null>(null);\n const inputRef = React.useRef<HTMLInputElement | null>(null);\n const snippetLength = React.useRef<number>(10);\n const initialQueryFromSelection = React.useRef(\n typeof window !== 'undefined'\n ? window.getSelection()!.toString().slice(0, MAX_QUERY_SIZE)\n : ''\n ).current;\n const initialQuery = React.useRef(\n initialQueryFromProp || initialQueryFromSelection\n ).current;\n\n const searchClient = useSearchClient(appId, apiKey, transformSearchClient);\n const favoriteSearches = React.useRef(\n createStoredSearches<StoredDocSearchHit>({\n key: `__DOCSEARCH_FAVORITE_SEARCHES__${indexName}`,\n limit: 10,\n })\n ).current;\n const recentSearches = React.useRef(\n createStoredSearches<StoredDocSearchHit>({\n key: `__DOCSEARCH_RECENT_SEARCHES__${indexName}`,\n // We display 7 recent searches and there's no favorites, but only\n // 4 when there are favorites.\n limit: favoriteSearches.getAll().length === 0 ? 7 : 4,\n })\n ).current;\n\n const saveRecentSearch = React.useCallback(\n function saveRecentSearch(item: InternalDocSearchHit) {\n if (disableUserPersonalization) {\n return;\n }\n\n // We don't store `content` record, but their parent if available.\n const search = item.type === 'content' ? item.__docsearch_parent : item;\n\n // We save the recent search only if it's not favorited.\n if (\n search &&\n favoriteSearches\n .getAll()\n .findIndex((x) => x.objectID === search.objectID) === -1\n ) {\n recentSearches.add(search);\n }\n },\n [favoriteSearches, recentSearches, disableUserPersonalization]\n );\n\n const autocomplete = React.useMemo(\n () =>\n createAutocomplete<\n InternalDocSearchHit,\n React.FormEvent<HTMLFormElement>,\n React.MouseEvent,\n React.KeyboardEvent\n >({\n id: 'docsearch',\n defaultActiveItemId: 0,\n placeholder,\n openOnFocus: true,\n initialState: {\n query: initialQuery,\n context: {\n searchSuggestions: [],\n },\n },\n navigator,\n onStateChange({ state }) {\n setState(state as any);\n },\n // @ts-ignore Temporarily ignore bad typing in autocomplete-core.\n getSources({ query, state, setContext, setStatus }) {\n if (!query) {\n if (disableUserPersonalization) {\n return [];\n }\n\n return [\n {\n sourceId: 'recentSearches',\n onSelect({ item, event }) {\n saveRecentSearch(item);\n\n if (!event.shiftKey && !event.ctrlKey && !event.metaKey) {\n onClose();\n }\n },\n getItemUrl({ item }) {\n return item.url;\n },\n getItems() {\n return recentSearches.getAll();\n },\n },\n {\n sourceId: 'favoriteSearches',\n onSelect({ item, event }) {\n saveRecentSearch(item);\n\n if (!event.shiftKey && !event.ctrlKey && !event.metaKey) {\n onClose();\n }\n },\n getItemUrl({ item }) {\n return item.url;\n },\n getItems() {\n return favoriteSearches.getAll();\n },\n },\n ];\n }\n\n return getAlgoliaResults<DocSearchHit>({\n searchClient,\n queries: [\n {\n indexName,\n query,\n params: {\n attributesToRetrieve: [\n 'hierarchy.lvl0',\n 'hierarchy.lvl1',\n 'hierarchy.lvl2',\n 'hierarchy.lvl3',\n 'hierarchy.lvl4',\n 'hierarchy.lvl5',\n 'hierarchy.lvl6',\n 'content',\n 'type',\n 'url',\n ],\n attributesToSnippet: [\n `hierarchy.lvl1:${snippetLength.current}`,\n `hierarchy.lvl2:${snippetLength.current}`,\n `hierarchy.lvl3:${snippetLength.current}`,\n `hierarchy.lvl4:${snippetLength.current}`,\n `hierarchy.lvl5:${snippetLength.current}`,\n `hierarchy.lvl6:${snippetLength.current}`,\n `content:${snippetLength.current}`,\n ],\n snippetEllipsisText: '…',\n highlightPreTag: '<mark>',\n highlightPostTag: '</mark>',\n hitsPerPage: 20,\n ...searchParameters,\n },\n },\n ],\n })\n .catch((error) => {\n // The Algolia `RetryError` happens when all the servers have\n // failed, meaning that there's no chance the response comes\n // back. This is the right time to display an error.\n // See https://github.com/algolia/algoliasearch-client-javascript/blob/2ffddf59bc765cd1b664ee0346b28f00229d6e12/packages/transporter/src/errors/createRetryError.ts#L5\n if (error.name === 'RetryError') {\n setStatus('error');\n }\n\n throw error;\n })\n .then((results) => {\n const hits = results[0].hits;\n const nbHits: number = results[0].nbHits;\n const sources = groupBy(hits, (hit) => removeHighlightTags(hit));\n\n // We store the `lvl0`s to display them as search suggestions\n // in the “no results“ screen.\n if (\n (state.context.searchSuggestions as any[]).length <\n Object.keys(sources).length\n ) {\n setContext({\n searchSuggestions: Object.keys(sources),\n });\n }\n\n setContext({ nbHits });\n\n return Object.values<DocSearchHit[]>(sources).map(\n (items, index) => {\n return {\n sourceId: `hits${index}`,\n onSelect({ item, event }) {\n saveRecentSearch(item);\n\n if (!event.shiftKey && !event.ctrlKey && !event.metaKey) {\n onClose();\n }\n },\n getItemUrl({ item }) {\n return item.url;\n },\n getItems() {\n return Object.values(\n groupBy(items, (item) => item.hierarchy.lvl1)\n )\n .map(transformItems)\n .map((hits) =>\n hits.map((item) => {\n return {\n ...item,\n // eslint-disable-next-line @typescript-eslint/camelcase\n __docsearch_parent:\n item.type !== 'lvl1' &&\n hits.find(\n (siblingItem) =>\n siblingItem.type === 'lvl1' &&\n siblingItem.hierarchy.lvl1 ===\n item.hierarchy.lvl1\n ),\n };\n })\n )\n .flat();\n },\n };\n }\n );\n });\n },\n }),\n [\n indexName,\n searchParameters,\n searchClient,\n onClose,\n recentSearches,\n favoriteSearches,\n saveRecentSearch,\n initialQuery,\n placeholder,\n navigator,\n transformItems,\n disableUserPersonalization,\n ]\n );\n\n const { getEnvironmentProps, getRootProps, refresh } = autocomplete;\n\n useTouchEvents({\n getEnvironmentProps,\n panelElement: dropdownRef.current,\n formElement: formElementRef.current,\n inputElement: inputRef.current,\n });\n useTrapFocus({ container: containerRef.current });\n\n React.useEffect(() => {\n document.body.classList.add('DocSearch--active');\n\n return () => {\n document.body.classList.remove('DocSearch--active');\n\n // IE11 doesn't support `scrollTo` so we check that the method exists\n // first.\n window.scrollTo?.(0, initialScrollY);\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n const isMobileMediaQuery = window.matchMedia('(max-width: 750px)');\n\n if (isMobileMediaQuery.matches) {\n snippetLength.current = 5;\n }\n }, []);\n\n React.useEffect(() => {\n if (dropdownRef.current) {\n dropdownRef.current.scrollTop = 0;\n }\n }, [state.query]);\n\n // We don't focus the input when there's an initial query (i.e. Selection\n // Search) because users rather want to see the results directly, without the\n // keyboard appearing.\n // We therefore need to refresh the autocomplete instance to load all the\n // results, which is usually triggered on focus.\n React.useEffect(() => {\n if (initialQuery.length > 0) {\n refresh();\n\n if (inputRef.current) {\n inputRef.current.focus();\n }\n }\n }, [initialQuery, refresh]);\n\n // We rely on a CSS property to set the modal height to the full viewport height\n // because all mobile browsers don't compute their height the same way.\n // See https://css-tricks.com/the-trick-to-viewport-units-on-mobile/\n React.useEffect(() => {\n function setFullViewportHeight() {\n if (modalRef.current) {\n const vh = window.innerHeight * 0.01;\n modalRef.current.style.setProperty('--docsearch-vh', `${vh}px`);\n }\n }\n\n setFullViewportHeight();\n\n window.addEventListener('resize', setFullViewportHeight);\n\n return () => {\n window.removeEventListener('resize', setFullViewportHeight);\n };\n }, []);\n\n return (\n <div\n ref={containerRef}\n {...getRootProps({\n 'aria-expanded': true,\n })}\n className={[\n 'DocSearch',\n 'DocSearch-Container',\n state.status === 'stalled' && 'DocSearch-Container--Stalled',\n state.status === 'error' && 'DocSearch-Container--Errored',\n ]\n .filter(Boolean)\n .join(' ')}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) {\n onClose();\n }\n }}\n >\n <div className=\"DocSearch-Modal\" ref={modalRef}>\n <header className=\"DocSearch-SearchBar\" ref={formElementRef}>\n <SearchBox\n {...autocomplete}\n state={state}\n autoFocus={initialQuery.length === 0}\n onClose={onClose}\n inputRef={inputRef}\n isFromSelection={\n Boolean(initialQuery) &&\n initialQuery === initialQueryFromSelection\n }\n />\n </header>\n\n <div className=\"DocSearch-Dropdown\" ref={dropdownRef}>\n <ScreenState\n {...autocomplete}\n indexName={indexName}\n state={state}\n hitComponent={hitComponent}\n resultsFooterComponent={resultsFooterComponent}\n disableUserPersonalization={disableUserPersonalization}\n recentSearches={recentSearches}\n favoriteSearches={favoriteSearches}\n onItemClick={(item) => {\n saveRecentSearch(item);\n onClose();\n }}\n inputRef={inputRef}\n />\n </div>\n\n <footer className=\"DocSearch-Footer\">\n <Footer />\n </footer>\n </div>\n </div>\n );\n}\n","import algoliasearch from 'algoliasearch/dist/algoliasearch-lite.esm.browser';\nimport React from 'react';\n\nimport { SearchClient } from './types';\nimport { version } from './version';\n\nexport function useSearchClient(\n appId: string,\n apiKey: string,\n transformSearchClient: (searchClient: SearchClient) => SearchClient\n): SearchClient {\n const searchClient = React.useMemo(() => {\n const client = algoliasearch(appId, apiKey);\n client.addAlgoliaAgent('docsearch', version);\n\n // Since DocSearch.js relies on DocSearch React with an alias to Preact,\n // we cannot add the `docsearch-react` user agent by default, otherwise\n // it would also be sent on a DocSearch.js integration.\n // We therefore only add the `docsearch-react` user agent if `docsearch.js`\n // is not present.\n if (\n /docsearch.js \\(.*\\)/.test(client.transporter.userAgent.value) === false\n ) {\n client.addAlgoliaAgent('docsearch-react', version);\n }\n\n return transformSearchClient(client);\n }, [appId, apiKey, transformSearchClient]);\n\n return searchClient;\n}\n","export const version = '3.0.0-alpha.36';\n","import { AutocompleteApi } from '@algolia/autocomplete-core';\nimport React from 'react';\n\ninterface UseTouchEventsProps {\n getEnvironmentProps: AutocompleteApi<any>['getEnvironmentProps'];\n panelElement: HTMLDivElement | null;\n formElement: HTMLDivElement | null;\n inputElement: HTMLInputElement | null;\n}\n\nexport function useTouchEvents({\n getEnvironmentProps,\n panelElement,\n formElement,\n inputElement,\n}: UseTouchEventsProps) {\n React.useEffect(() => {\n if (!(panelElement && formElement && inputElement)) {\n return undefined;\n }\n\n const { onTouchStart, onTouchMove } = getEnvironmentProps({\n panelElement,\n formElement,\n inputElement,\n });\n\n window.addEventListener('touchstart', onTouchStart);\n window.addEventListener('touchmove', onTouchMove);\n\n return () => {\n window.removeEventListener('touchstart', onTouchStart);\n window.removeEventListener('touchmove', onTouchMove);\n };\n }, [getEnvironmentProps, panelElement, formElement, inputElement]);\n}\n","import React from 'react';\n\ninterface UseTrapFocusProps {\n container: HTMLElement | null;\n}\n\nexport function useTrapFocus({ container }: UseTrapFocusProps) {\n React.useEffect(() => {\n if (!container) {\n return undefined;\n }\n\n const focusableElements = container.querySelectorAll<HTMLElement>(\n 'a[href]:not([disabled]), button:not([disabled]), input:not([disabled])'\n );\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n function trapFocus(event: KeyboardEvent) {\n if (event.key !== 'Tab') {\n return;\n }\n\n if (event.shiftKey) {\n if (document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n } else if (document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n\n container.addEventListener('keydown', trapFocus);\n\n return () => {\n container.removeEventListener('keydown', trapFocus);\n };\n }, [container]);\n}\n","import React from 'react';\n\nexport interface UseDocSearchKeyboardEventsProps {\n isOpen: boolean;\n onOpen(): void;\n onClose(): void;\n onInput?(event: KeyboardEvent): void;\n searchButtonRef?: React.RefObject<HTMLButtonElement>;\n}\n\nfunction isEditingContent(event: KeyboardEvent): boolean {\n const element = event.target as HTMLElement;\n const tagName = element.tagName;\n\n return (\n element.isContentEditable ||\n tagName === 'INPUT' ||\n tagName === 'SELECT' ||\n tagName === 'TEXTAREA'\n );\n}\n\nexport function useDocSearchKeyboardEvents({\n isOpen,\n onOpen,\n onClose,\n onInput,\n searchButtonRef,\n}: UseDocSearchKeyboardEventsProps) {\n React.useEffect(() => {\n function onKeyDown(event: KeyboardEvent) {\n function open() {\n // We check that no other DocSearch modal is showing before opening\n // another one.\n if (!document.body.classList.contains('DocSearch--active')) {\n onOpen();\n }\n }\n if (\n (event.keyCode === 27 && isOpen) ||\n // The `Cmd+K` shortcut both opens and closes the modal.\n (event.key === 'k' && (event.metaKey || event.ctrlKey)) ||\n // The `/` shortcut opens but doesn't close the modal because it's\n // a character.\n (!isEditingContent(event) && event.key === '/' && !isOpen)\n ) {\n event.preventDefault();\n\n if (isOpen) {\n onClose();\n } else if (!document.body.classList.contains('DocSearch--active')) {\n open();\n }\n }\n\n if (\n searchButtonRef &&\n searchButtonRef.current === document.activeElement &&\n onInput\n ) {\n if (/[a-zA-Z0-9]/.test(String.fromCharCode(event.keyCode))) {\n onInput(event);\n }\n }\n }\n\n window.addEventListener('keydown', onKeyDown);\n\n return () => {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [isOpen, onOpen, onClose, onInput, searchButtonRef]);\n}\n","import {\n AutocompleteState,\n AutocompleteOptions,\n} from '@algolia/autocomplete-core';\nimport React from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { DocSearchButton } from './DocSearchButton';\nimport { DocSearchModal } from './DocSearchModal';\nimport {\n DocSearchHit,\n InternalDocSearchHit,\n StoredDocSearchHit,\n SearchClient,\n} from './types';\nimport { useDocSearchKeyboardEvents } from './useDocSearchKeyboardEvents';\n\nexport interface DocSearchProps {\n appId?: string;\n apiKey: string;\n indexName: string;\n placeholder?: string;\n searchParameters?: any;\n transformItems?(items: DocSearchHit[]): DocSearchHit[];\n hitComponent?(props: {\n hit: InternalDocSearchHit | StoredDocSearchHit;\n children: React.ReactNode;\n }): JSX.Element;\n resultsFooterComponent?(props: {\n state: AutocompleteState<InternalDocSearchHit>;\n }): JSX.Element | null;\n transformSearchClient?(searchClient: SearchClient): SearchClient;\n disableUserPersonalization?: boolean;\n initialQuery?: string;\n navigator?: AutocompleteOptions<InternalDocSearchHit>['navigator'];\n}\n\nexport function DocSearch(props: DocSearchProps) {\n const searchButtonRef = React.useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = React.useState(false);\n const [initialQuery, setInitialQuery] = React.useState<string | undefined>(\n undefined\n );\n\n const onOpen = React.useCallback(() => {\n setIsOpen(true);\n }, [setIsOpen]);\n\n const onClose = React.useCallback(() => {\n setIsOpen(false);\n }, [setIsOpen]);\n\n const onInput = React.useCallback(\n (event: KeyboardEvent) => {\n setIsOpen(true);\n setInitialQuery(event.key);\n },\n [setIsOpen, setInitialQuery]\n );\n\n useDocSearchKeyboardEvents({\n isOpen,\n onOpen,\n onClose,\n onInput,\n searchButtonRef,\n });\n\n return (\n <>\n <DocSearchButton onClick={onOpen} ref={searchButtonRef} />\n\n {isOpen &&\n createPortal(\n <DocSearchModal\n {...props}\n initialScrollY={window.scrollY}\n initialQuery={initialQuery}\n onClose={onClose}\n />,\n document.body\n )}\n </>\n );\n}\n"],"names":["ControlKeyIcon","React","width","height","className","d","strokeWidth","stroke","fill","strokeLinecap","SearchIcon","viewBox","fillRule","strokeLinejoin","DocSearchButton","forwardRef","ref","translations","props","buttonText","buttonAriaLabel","useState","key","setKey","useEffect","navigator","test","platform","type","getItemsCount","state","collections","length","reduce","sum","collection","items","invariant","condition","message","process","env","NODE_ENV","Error","concat","warnCache","current","checkOptions","options","sanitizedMessage","trim","console","warn","debug","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_defineProperty","obj","value","defineProperty","configurable","writable","createStore","reducer","onStoreStateChange","initialState","getState","dispatch","action","payload","prevState","target","i","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties","_objectSpread","flatten","values","a","b","autocompleteId","getNextActiveItemId","moveAmount","baseIndex","itemCount","defaultActiveItemId","numericIndex","noop","_typeof","Symbol","iterator","constructor","prototype","getNormalizedSources","getSources","params","Promise","resolve","then","sources","Array","isArray","JSON","stringify","all","maybeSource","Boolean","map","sourceId","normalizedSource","getItemInputValue","_ref","query","getItemUrl","onSelect","_ref2","setIsOpen","onActive","getActiveItem","collectionIndex","acc","collectionsCount","index","nextValue","activeItemId","getCollectionFromActiveItemId","item","isOffsetFound","counter","previousItemsOffset","currentCollection","getRelativeActiveItemId","itemInputValue","itemUrl","isOrContainsNode","parent","child","contains","_toConsumableArray","arr","_arrayLikeToArray","_arrayWithoutHoles","iter","from","_iterableToArray","o","minLen","n","toString","call","slice","name","_unsupportedIterableToArray","TypeError","_nonIterableSpread","len","arr2","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","lastStalledId","onInput","event","_ref$nextState","nextState","refresh","store","setters","environment","clearTimeout","_nextState$isOpen","setCollections","setQuery","setActiveItemId","setStatus","openOnFocus","setTimeout","stallThreshold","getItems","_nextState$isOpen2","isPanelOpen","shouldPanelOpen","isOpen","highlightedItem","finally","getPropGetters","getEnvironmentProps","providedProps","inputElement","formElement","panelElement","onTouchStart","some","contextNode","document","activeElement","onTouchMove","blur","getRootProps","rest","role","id","undefined","getFormProps","noValidate","onSubmit","_providedProps$inputE","preventDefault","onReset","_providedProps$inputE2","focus","getLabelProps","htmlFor","getInputProps","onFocus","completion","isTouchDevice","_ref2$maxLength","maxLength","activeItem","autoComplete","autoCorrect","autoCapitalize","enterKeyHint","spellCheck","autoFocus","placeholder","onChange","currentTarget","onKeyDown","nodeItem","getElementById","scrollIntoViewIfNeeded","scrollIntoView","every","_item","_itemInputValue","_itemUrl","_source","metaKey","ctrlKey","navigateNewTab","shiftKey","navigateNewWindow","altKey","navigate","_onKeyDown","onBlur","onClick","getPanelProps","onMouseDown","onMouseLeave","getListProps","getItemProps","__autocomplete_id","onMouseMove","getCompletion","stateReducer","status","context","_nextState","createAutocomplete","subscribers","pluginSubscribers","_props$id","window","plugins","onStateChange","_props$onStateChange","x","_x$onStateChange","_props$onSubmit","_x$onSubmit","_props$onReset","_x$onReset","plugin","nested","_x$onSelect","_x$onActive","location","assign","_ref3","windowReference","open","_ref4","getDefaultProps","rawValue","baseItemId","setContext","getAutocompleteSetters","propGetters","Event","_plugin$subscribe","subscribe","fn","version","getAlgoliaResults","searchClient","queries","_ref$userAgents","userAgents","addAlgoliaAgent","segment","search","searchParameters","indexName","hitsPerPage","highlightPreTag","highlightPostTag","response","results","AlgoliaLogo","href","rel","Footer","CommandIcon","children","Hit","hit","url","LoadingIcon","strokeOpacity","transform","cx","cy","r","attributeName","to","dur","repeatCount","RecentIcon","ResetIcon","SelectIcon","SourceIcon","LvlIcon","ContentIcon","AnchorIcon","StarIcon","ErrorIcon","NoResultsIcon","ErrorScreen","NoResultsScreen","searchSuggestions","toLowerCase","inputRef","getPropertyByPath","path","split","Snippet","attribute","tagName","createElement","dangerouslySetInnerHTML","__html","Results","title","Result","objectID","join","renderIcon","renderAction","onItemClick","hitComponent","isDeleting","setIsDeleting","isFavoriting","setIsFavoriting","useRef","__docsearch_parent","onTransitionEnd","hierarchy","content","runDeleteTransition","cb","runFavoriteTransition","groupBy","predicate","hasOwnProperty","identity","regexHighlightTags","regexHasHighlightTags","RegExp","removeHighlightTags","_highlightResult","lvl0","replace","ResultsScreen","_collection$items","resultsFooterComponent","StartScreen","hasCollections","disableUserPersonalization","stopPropagation","favoriteSearches","add","recentSearches","remove","ScreenState","memo","_prevProps","nextProps","SearchBox","isFromSelection","select","hidden","onClose","createStorage","localStorage","setItem","removeItem","error","isLocalStorageSupported","getItem","parse","createStoredSearches","limit","storage","_snippetResult","isQueryAlreadySaved","findIndex","splice","unshift","getAll","createBrowserLocalStorageCache","namespaceKey","getStorage","getNamespace","get","defaultValue","events","miss","keyAsString","exists","set","namespace","delete","clear","createFallbackableCache","caches","shift","_key","result","catch","createInMemoryCache","serializable","cache","[object Object]","promise","shuffle","array","c","Math","floor","random","addMethods","base","methods","encode","format","args","encodeURIComponent","AuthMode","WithinQueryParameters","WithinHeaders","createMappedRequestOptions","requestOptions","timeout","data","entries","headers","queryParameters","cacheable","CallEnum","Read","Write","Any","HostStatusEnum","createStatefulHost","host","lastUpdate","Date","now","createStatelessHost","protocol","accept","MethodEnum","createRetryableOptions","hostsCache","statelessHosts","statelessHost","statefulHosts","hostsUp","isStatefulHostUp","hostsTimeouted","isStatefulHostTimeouted","hostsAvailable","getTimeout","timeoutsCount","baseTimeout","retryableRequest","transporter","request","stackTrace","method","serializeData","serializedHeaders","header","serializeHeaders","dataQueryParameters","x-algolia-agent","userAgent","retry","hosts","pop","transporterStackTrace","stackTraceWithoutCredentials","serializeUrl","connectTimeout","timeouts","connect","responseTimeout","pushToStackTrace","stackFrame","triesLeft","decisions","onSucess","e","createDeserializationError","deserializeSuccess","isTimedOut","logger","info","stackFrameWithoutCredentials","createApiError","deserializeFailure","requester","send","outcomes","isNetworkError","isRetryable","onRetry","isSuccess","onFail","retryDecision","reverse","createUserAgent","addedUserAgent","queryParametersAsString","serializeQueryParameters","charAt","substr","parameters","modifiedHeaders","x-algolia-api-key","createSearchClient","appId","auth","authMode","apiKey","credentials","x-algolia-application-id","createAuth","requestsCache","responsesCache","mappedRequestOptions","read","createRetryableRequest","err","reject","_","write","createTransporter","content-type","clearCache","initIndex","multipleQueries","requests","multipleSearchForFacetValues","facetName","facetQuery","searchForFacetValues","findAnswers","queryLanguages","LogLevelEnum","algoliasearch","commonOptions","baseRequester","XMLHttpRequest","setRequestHeader","createTimeout","abort","onreadystatechange","readyState","OPENED","onerror","responseText","onload","logLevel","DocSearchModal","transformItems","initialScrollY","transformSearchClient","initialQuery","initialQueryFromProp","setState","containerRef","modalRef","formElementRef","dropdownRef","snippetLength","initialQueryFromSelection","getSelection","useMemo","client","useSearchClient","saveRecentSearch","useCallback","autocomplete","attributesToRetrieve","attributesToSnippet","snippetEllipsisText","hits","nbHits","lvl1","find","siblingItem","flat","addEventListener","removeEventListener","useTouchEvents","container","focusableElements","querySelectorAll","firstElement","lastElement","trapFocus","useTrapFocus","body","classList","scrollTo","matchMedia","matches","scrollTop","setFullViewportHeight","vh","innerHeight","style","setProperty","useDocSearchKeyboardEvents","onOpen","searchButtonRef","keyCode","element","isContentEditable","isEditingContent","String","fromCharCode","setInitialQuery","createPortal","scrollY"],"mappings":"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"}
|