diff --git a/assets/algoliasearch/README.md b/assets/algoliasearch/README.md new file mode 100644 index 00000000..9e227e85 --- /dev/null +++ b/assets/algoliasearch/README.md @@ -0,0 +1,82 @@ +

+ + Algolia for JavaScript + + +

The perfect starting point to integrate Algolia within your JavaScript project

+ +

+ NPM version + NPM downloads + jsDelivr Downloads + License +

+

+ +

+ Documentation • + InstantSearch • + Community Forum • + Stack Overflow • + Report a bug • + Support +

+ +## ✨ Features + +- Thin & **minimal low-level HTTP client** to interact with Algolia's API +- Works both on the **browser** and **node.js** +- **UMD compatible**, you can use it with any module loader +- Built with TypeScript + +## 💡 Getting Started + +First, install Algolia JavaScript API Client via the [npm](https://www.npmjs.com/get-npm) package manager: + +```bash +npm install algoliasearch +``` + +Then, create objects on your index: + +```js +const algoliasearch = require("algoliasearch"); + +const client = algoliasearch("YourApplicationID", "YourAdminAPIKey"); +const index = client.initIndex("your_index_name"); + +const objects = [ + { + objectID: 1, + name: "Foo" + } +]; + +index + .saveObjects(objects) + .then(({ objectIDs }) => { + console.log(objectIDs); + }) + .catch(err => { + console.log(err); + }); +``` + +Finally, let's actually search using the `search` method: + +```js +index + .search("Fo") + .then(({ hits }) => { + console.log(hits); + }) + .catch(err => { + console.log(err); + }); +``` + +For full documentation, visit the **[online documentation](https://www.algolia.com/doc/api-client/getting-started/install/javascript/)**. + +## 📄 License + +Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE.md). diff --git a/assets/algoliasearch/dist/algoliasearch-lite.d.ts b/assets/algoliasearch/dist/algoliasearch-lite.d.ts new file mode 100644 index 00000000..b408c244 --- /dev/null +++ b/assets/algoliasearch/dist/algoliasearch-lite.d.ts @@ -0,0 +1,49 @@ +import { ClientTransporterOptions } from '@algolia/client-common'; +import { FindAnswersOptions } from '@algolia/client-search'; +import { FindAnswersResponse } from '@algolia/client-search'; +import { MultipleQueriesOptions } from '@algolia/client-search'; +import { MultipleQueriesQuery } from '@algolia/client-search'; +import { MultipleQueriesResponse } from '@algolia/client-search'; +import { Request } from '@algolia/transporter'; +import { RequestOptions } from '@algolia/transporter'; +import { SearchClient as SearchClient_2 } from '@algolia/client-search'; +import { SearchClientOptions } from '@algolia/client-search'; +import { SearchForFacetValuesQueryParams } from '@algolia/client-search'; +import { SearchForFacetValuesResponse } from '@algolia/client-search'; +import { SearchIndex as SearchIndex_2 } from '@algolia/client-search'; +import { SearchOptions } from '@algolia/client-search'; +import { SearchResponse } from '@algolia/client-search'; + +declare function algoliasearch(appId: string, apiKey: string, options?: AlgoliaSearchOptions): SearchClient; + +declare namespace algoliasearch { + var version: string; +} +export default algoliasearch; + +export declare type AlgoliaSearchOptions = Partial & WithoutCredentials; + +declare type Credentials = { + readonly appId: string; + readonly apiKey: string; +}; + +export declare type SearchClient = SearchClient_2 & { + readonly initIndex: (indexName: string) => SearchIndex; + readonly search: (queries: readonly MultipleQueriesQuery[], requestOptions?: RequestOptions & MultipleQueriesOptions) => Readonly>>; + readonly searchForFacetValues: (queries: ReadonlyArray<{ + readonly indexName: string; + readonly params: SearchForFacetValuesQueryParams & SearchOptions; + }>, requestOptions?: RequestOptions) => Readonly>; + readonly customRequest: (request: Request, requestOptions?: RequestOptions) => Readonly>; +}; + +export declare type SearchIndex = SearchIndex_2 & { + readonly search: (query: string, requestOptions?: RequestOptions & SearchOptions) => Readonly>>; + readonly searchForFacetValues: (facetName: string, facetQuery: string, requestOptions?: RequestOptions & SearchOptions) => Readonly>; + readonly findAnswers: (query: string, queryLanguages: readonly string[], requestOptions?: RequestOptions & FindAnswersOptions) => Readonly>>; +}; + +export declare type WithoutCredentials = Omit; + +export { } diff --git a/assets/algoliasearch/dist/algoliasearch-lite.esm.browser.js b/assets/algoliasearch/dist/algoliasearch-lite.esm.browser.js new file mode 100644 index 00000000..aae2774f --- /dev/null +++ b/assets/algoliasearch/dist/algoliasearch-lite.esm.browser.js @@ -0,0 +1,915 @@ +function createBrowserLocalStorageCache(options) { + const namespaceKey = `algoliasearch-client-js-${options.key}`; + // eslint-disable-next-line functional/no-let + let storage; + const getStorage = () => { + if (storage === undefined) { + storage = options.localStorage || window.localStorage; + } + return storage; + }; + const getNamespace = () => { + return JSON.parse(getStorage().getItem(namespaceKey) || '{}'); + }; + return { + get(key, defaultValue, events = { + miss: () => Promise.resolve(), + }) { + return Promise.resolve() + .then(() => { + const keyAsString = JSON.stringify(key); + const value = getNamespace()[keyAsString]; + return Promise.all([value || defaultValue(), value !== undefined]); + }) + .then(([value, exists]) => { + return Promise.all([value, exists || events.miss(value)]); + }) + .then(([value]) => value); + }, + set(key, value) { + return Promise.resolve().then(() => { + const namespace = getNamespace(); + // eslint-disable-next-line functional/immutable-data + namespace[JSON.stringify(key)] = value; + getStorage().setItem(namespaceKey, JSON.stringify(namespace)); + return value; + }); + }, + delete(key) { + return Promise.resolve().then(() => { + const namespace = getNamespace(); + // eslint-disable-next-line functional/immutable-data + delete namespace[JSON.stringify(key)]; + getStorage().setItem(namespaceKey, JSON.stringify(namespace)); + }); + }, + clear() { + return Promise.resolve().then(() => { + getStorage().removeItem(namespaceKey); + }); + }, + }; +} + +// @todo Add logger on options to debug when caches go wrong. +function createFallbackableCache(options) { + const caches = [...options.caches]; + const current = caches.shift(); // eslint-disable-line functional/immutable-data + if (current === undefined) { + return createNullCache(); + } + return { + get(key, defaultValue, events = { + miss: () => Promise.resolve(), + }) { + return current.get(key, defaultValue, events).catch(() => { + return createFallbackableCache({ caches }).get(key, defaultValue, events); + }); + }, + set(key, value) { + return current.set(key, value).catch(() => { + return createFallbackableCache({ caches }).set(key, value); + }); + }, + delete(key) { + return current.delete(key).catch(() => { + return createFallbackableCache({ caches }).delete(key); + }); + }, + clear() { + return current.clear().catch(() => { + return createFallbackableCache({ caches }).clear(); + }); + }, + }; +} + +function createNullCache() { + return { + get(_key, defaultValue, events = { + miss: () => Promise.resolve(), + }) { + const value = defaultValue(); + return value + .then(result => Promise.all([result, events.miss(result)])) + .then(([result]) => result); + }, + set(_key, value) { + return Promise.resolve(value); + }, + delete(_key) { + return Promise.resolve(); + }, + clear() { + return Promise.resolve(); + }, + }; +} + +function createInMemoryCache(options = { serializable: true }) { + // eslint-disable-next-line functional/no-let + let cache = {}; + return { + get(key, defaultValue, events = { + miss: () => Promise.resolve(), + }) { + const keyAsString = JSON.stringify(key); + if (keyAsString in cache) { + return Promise.resolve(options.serializable ? JSON.parse(cache[keyAsString]) : cache[keyAsString]); + } + const promise = defaultValue(); + const miss = (events && events.miss) || (() => Promise.resolve()); + return promise.then((value) => miss(value)).then(() => promise); + }, + set(key, value) { + // eslint-disable-next-line functional/immutable-data + cache[JSON.stringify(key)] = options.serializable ? JSON.stringify(value) : value; + return Promise.resolve(value); + }, + delete(key) { + // eslint-disable-next-line functional/immutable-data + delete cache[JSON.stringify(key)]; + return Promise.resolve(); + }, + clear() { + cache = {}; + return Promise.resolve(); + }, + }; +} + +function createAuth(authMode, appId, apiKey) { + const credentials = { + 'x-algolia-api-key': apiKey, + 'x-algolia-application-id': appId, + }; + return { + headers() { + return authMode === AuthMode.WithinHeaders ? credentials : {}; + }, + queryParameters() { + return authMode === AuthMode.WithinQueryParameters ? credentials : {}; + }, + }; +} + +// eslint-disable-next-line functional/prefer-readonly-type +function shuffle(array) { + let c = array.length - 1; // eslint-disable-line functional/no-let + // eslint-disable-next-line functional/no-loop-statement + for (c; c > 0; c--) { + const b = Math.floor(Math.random() * (c + 1)); + const a = array[c]; + array[c] = array[b]; // eslint-disable-line functional/immutable-data, no-param-reassign + array[b] = a; // eslint-disable-line functional/immutable-data, no-param-reassign + } + return array; +} +function addMethods(base, methods) { + if (!methods) { + return base; + } + Object.keys(methods).forEach(key => { + // eslint-disable-next-line functional/immutable-data, no-param-reassign + base[key] = methods[key](base); + }); + return base; +} +function encode(format, ...args) { + // eslint-disable-next-line functional/no-let + let i = 0; + return format.replace(/%s/g, () => encodeURIComponent(args[i++])); +} + +const version = '4.14.2'; + +const AuthMode = { + /** + * If auth credentials should be in query parameters. + */ + WithinQueryParameters: 0, + /** + * If auth credentials should be in headers. + */ + WithinHeaders: 1, +}; + +function createMappedRequestOptions(requestOptions, timeout) { + const options = requestOptions || {}; + const data = options.data || {}; + Object.keys(options).forEach(key => { + if (['timeout', 'headers', 'queryParameters', 'data', 'cacheable'].indexOf(key) === -1) { + data[key] = options[key]; // eslint-disable-line functional/immutable-data + } + }); + return { + data: Object.entries(data).length > 0 ? data : undefined, + timeout: options.timeout || timeout, + headers: options.headers || {}, + queryParameters: options.queryParameters || {}, + cacheable: options.cacheable, + }; +} + +const CallEnum = { + /** + * If the host is read only. + */ + Read: 1, + /** + * If the host is write only. + */ + Write: 2, + /** + * If the host is both read and write. + */ + Any: 3, +}; + +const HostStatusEnum = { + Up: 1, + Down: 2, + Timeouted: 3, +}; + +// By default, API Clients at Algolia have expiration delay +// of 5 mins. In the JavaScript client, we have 2 mins. +const EXPIRATION_DELAY = 2 * 60 * 1000; +function createStatefulHost(host, status = HostStatusEnum.Up) { + return { + ...host, + status, + lastUpdate: Date.now(), + }; +} +function isStatefulHostUp(host) { + return host.status === HostStatusEnum.Up || Date.now() - host.lastUpdate > EXPIRATION_DELAY; +} +function isStatefulHostTimeouted(host) { + return (host.status === HostStatusEnum.Timeouted && Date.now() - host.lastUpdate <= EXPIRATION_DELAY); +} + +function createStatelessHost(options) { + if (typeof options === 'string') { + return { + protocol: 'https', + url: options, + accept: CallEnum.Any, + }; + } + return { + protocol: options.protocol || 'https', + url: options.url, + accept: options.accept || CallEnum.Any, + }; +} + +const MethodEnum = { + Delete: 'DELETE', + Get: 'GET', + Post: 'POST', + Put: 'PUT', +}; + +function createRetryableOptions(hostsCache, statelessHosts) { + return Promise.all(statelessHosts.map(statelessHost => { + return hostsCache.get(statelessHost, () => { + return Promise.resolve(createStatefulHost(statelessHost)); + }); + })).then(statefulHosts => { + const hostsUp = statefulHosts.filter(host => isStatefulHostUp(host)); + const hostsTimeouted = statefulHosts.filter(host => isStatefulHostTimeouted(host)); + /** + * Note, we put the hosts that previously timeouted on the end of the list. + */ + const hostsAvailable = [...hostsUp, ...hostsTimeouted]; + const statelessHostsAvailable = hostsAvailable.length > 0 + ? hostsAvailable.map(host => createStatelessHost(host)) + : statelessHosts; + return { + getTimeout(timeoutsCount, baseTimeout) { + /** + * Imagine that you have 4 hosts, if timeouts will increase + * on the following way: 1 (timeouted) > 4 (timeouted) > 5 (200) + * + * Note that, the very next request, we start from the previous timeout + * + * 5 (timeouted) > 6 (timeouted) > 7 ... + * + * This strategy may need to be reviewed, but is the strategy on the our + * current v3 version. + */ + const timeoutMultiplier = hostsTimeouted.length === 0 && timeoutsCount === 0 + ? 1 + : hostsTimeouted.length + 3 + timeoutsCount; + return timeoutMultiplier * baseTimeout; + }, + statelessHosts: statelessHostsAvailable, + }; + }); +} + +const isNetworkError = ({ isTimedOut, status }) => { + return !isTimedOut && ~~status === 0; +}; +const isRetryable = (response) => { + const status = response.status; + const isTimedOut = response.isTimedOut; + return (isTimedOut || isNetworkError(response) || (~~(status / 100) !== 2 && ~~(status / 100) !== 4)); +}; +const isSuccess = ({ status }) => { + return ~~(status / 100) === 2; +}; +const retryDecision = (response, outcomes) => { + if (isRetryable(response)) { + return outcomes.onRetry(response); + } + if (isSuccess(response)) { + return outcomes.onSuccess(response); + } + return outcomes.onFail(response); +}; + +function retryableRequest(transporter, statelessHosts, request, requestOptions) { + const stackTrace = []; // eslint-disable-line functional/prefer-readonly-type + /** + * First we prepare the payload that do not depend from hosts. + */ + const data = serializeData(request, requestOptions); + const headers = serializeHeaders(transporter, requestOptions); + const method = request.method; + // On `GET`, the data is proxied to query parameters. + const dataQueryParameters = request.method !== MethodEnum.Get + ? {} + : { + ...request.data, + ...requestOptions.data, + }; + const queryParameters = { + 'x-algolia-agent': transporter.userAgent.value, + ...transporter.queryParameters, + ...dataQueryParameters, + ...requestOptions.queryParameters, + }; + let timeoutsCount = 0; // eslint-disable-line functional/no-let + const retry = (hosts, // eslint-disable-line functional/prefer-readonly-type + getTimeout) => { + /** + * We iterate on each host, until there is no host left. + */ + const host = hosts.pop(); // eslint-disable-line functional/immutable-data + if (host === undefined) { + throw createRetryError(stackTraceWithoutCredentials(stackTrace)); + } + const payload = { + data, + headers, + method, + url: serializeUrl(host, request.path, queryParameters), + connectTimeout: getTimeout(timeoutsCount, transporter.timeouts.connect), + responseTimeout: getTimeout(timeoutsCount, requestOptions.timeout), + }; + /** + * The stackFrame is pushed to the stackTrace so we + * can have information about onRetry and onFailure + * decisions. + */ + const pushToStackTrace = (response) => { + const stackFrame = { + request: payload, + response, + host, + triesLeft: hosts.length, + }; + // eslint-disable-next-line functional/immutable-data + stackTrace.push(stackFrame); + return stackFrame; + }; + const decisions = { + onSuccess: response => deserializeSuccess(response), + onRetry(response) { + const stackFrame = pushToStackTrace(response); + /** + * If response is a timeout, we increaset the number of + * timeouts so we can increase the timeout later. + */ + if (response.isTimedOut) { + timeoutsCount++; + } + return Promise.all([ + /** + * Failures are individually send the logger, allowing + * the end user to debug / store stack frames even + * when a retry error does not happen. + */ + transporter.logger.info('Retryable failure', stackFrameWithoutCredentials(stackFrame)), + /** + * We also store the state of the host in failure cases. If the host, is + * down it will remain down for the next 2 minutes. In a timeout situation, + * this host will be added end of the list of hosts on the next request. + */ + transporter.hostsCache.set(host, createStatefulHost(host, response.isTimedOut ? HostStatusEnum.Timeouted : HostStatusEnum.Down)), + ]).then(() => retry(hosts, getTimeout)); + }, + onFail(response) { + pushToStackTrace(response); + throw deserializeFailure(response, stackTraceWithoutCredentials(stackTrace)); + }, + }; + return transporter.requester.send(payload).then(response => { + return retryDecision(response, decisions); + }); + }; + /** + * Finally, for each retryable host perform request until we got a non + * retryable response. Some notes here: + * + * 1. The reverse here is applied so we can apply a `pop` later on => more performant. + * 2. We also get from the retryable options a timeout multiplier that is tailored + * for the current context. + */ + return createRetryableOptions(transporter.hostsCache, statelessHosts).then(options => { + return retry([...options.statelessHosts].reverse(), options.getTimeout); + }); +} + +function createTransporter(options) { + const { hostsCache, logger, requester, requestsCache, responsesCache, timeouts, userAgent, hosts, queryParameters, headers, } = options; + const transporter = { + hostsCache, + logger, + requester, + requestsCache, + responsesCache, + timeouts, + userAgent, + headers, + queryParameters, + hosts: hosts.map(host => createStatelessHost(host)), + read(request, requestOptions) { + /** + * First, we compute the user request options. Now, keep in mind, + * that using request options the user is able to modified the intire + * payload of the request. Such as headers, query parameters, and others. + */ + const mappedRequestOptions = createMappedRequestOptions(requestOptions, transporter.timeouts.read); + const createRetryableRequest = () => { + /** + * Then, we prepare a function factory that contains the construction of + * the retryable request. At this point, we may *not* perform the actual + * request. But we want to have the function factory ready. + */ + return retryableRequest(transporter, transporter.hosts.filter(host => (host.accept & CallEnum.Read) !== 0), request, mappedRequestOptions); + }; + /** + * Once we have the function factory ready, we need to determine of the + * request is "cacheable" - should be cached. Note that, once again, + * the user can force this option. + */ + const cacheable = mappedRequestOptions.cacheable !== undefined + ? mappedRequestOptions.cacheable + : request.cacheable; + /** + * If is not "cacheable", we immediatly trigger the retryable request, no + * need to check cache implementations. + */ + if (cacheable !== true) { + return createRetryableRequest(); + } + /** + * If the request is "cacheable", we need to first compute the key to ask + * the cache implementations if this request is on progress or if the + * response already exists on the cache. + */ + const key = { + request, + mappedRequestOptions, + transporter: { + queryParameters: transporter.queryParameters, + headers: transporter.headers, + }, + }; + /** + * With the computed key, we first ask the responses cache + * implemention if this request was been resolved before. + */ + return transporter.responsesCache.get(key, () => { + /** + * If the request has never resolved before, we actually ask if there + * is a current request with the same key on progress. + */ + return transporter.requestsCache.get(key, () => { + return (transporter.requestsCache + /** + * Finally, if there is no request in progress with the same key, + * this `createRetryableRequest()` will actually trigger the + * retryable request. + */ + .set(key, createRetryableRequest()) + .then(response => Promise.all([transporter.requestsCache.delete(key), response]), err => Promise.all([transporter.requestsCache.delete(key), Promise.reject(err)])) + .then(([_, response]) => response)); + }); + }, { + /** + * Of course, once we get this response back from the server, we + * tell response cache to actually store the received response + * to be used later. + */ + miss: response => transporter.responsesCache.set(key, response), + }); + }, + write(request, requestOptions) { + /** + * On write requests, no cache mechanisms are applied, and we + * proxy the request immediately to the requester. + */ + return retryableRequest(transporter, transporter.hosts.filter(host => (host.accept & CallEnum.Write) !== 0), request, createMappedRequestOptions(requestOptions, transporter.timeouts.write)); + }, + }; + return transporter; +} + +function createUserAgent(version) { + const userAgent = { + value: `Algolia for JavaScript (${version})`, + add(options) { + const addedUserAgent = `; ${options.segment}${options.version !== undefined ? ` (${options.version})` : ''}`; + if (userAgent.value.indexOf(addedUserAgent) === -1) { + // eslint-disable-next-line functional/immutable-data + userAgent.value = `${userAgent.value}${addedUserAgent}`; + } + return userAgent; + }, + }; + return userAgent; +} + +function deserializeSuccess(response) { + // eslint-disable-next-line functional/no-try-statement + try { + return JSON.parse(response.content); + } + catch (e) { + throw createDeserializationError(e.message, response); + } +} +function deserializeFailure({ content, status }, stackFrame) { + // eslint-disable-next-line functional/no-let + let message = content; + // eslint-disable-next-line functional/no-try-statement + try { + message = JSON.parse(content).message; + } + catch (e) { + // .. + } + return createApiError(message, status, stackFrame); +} + +function serializeUrl(host, path, queryParameters) { + const queryParametersAsString = serializeQueryParameters(queryParameters); + // eslint-disable-next-line functional/no-let + let url = `${host.protocol}://${host.url}/${path.charAt(0) === '/' ? path.substr(1) : path}`; + if (queryParametersAsString.length) { + url += `?${queryParametersAsString}`; + } + return url; +} +function serializeQueryParameters(parameters) { + const isObjectOrArray = (value) => Object.prototype.toString.call(value) === '[object Object]' || + Object.prototype.toString.call(value) === '[object Array]'; + return Object.keys(parameters) + .map(key => encode('%s=%s', key, isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key])) + .join('&'); +} +function serializeData(request, requestOptions) { + if (request.method === MethodEnum.Get || + (request.data === undefined && requestOptions.data === undefined)) { + return undefined; + } + const data = Array.isArray(request.data) + ? request.data + : { ...request.data, ...requestOptions.data }; + return JSON.stringify(data); +} +function serializeHeaders(transporter, requestOptions) { + const headers = { + ...transporter.headers, + ...requestOptions.headers, + }; + const serializedHeaders = {}; + Object.keys(headers).forEach(header => { + const value = headers[header]; + // @ts-ignore + // eslint-disable-next-line functional/immutable-data + serializedHeaders[header.toLowerCase()] = value; + }); + return serializedHeaders; +} + +function stackTraceWithoutCredentials(stackTrace) { + return stackTrace.map(stackFrame => stackFrameWithoutCredentials(stackFrame)); +} +function stackFrameWithoutCredentials(stackFrame) { + const modifiedHeaders = stackFrame.request.headers['x-algolia-api-key'] + ? { 'x-algolia-api-key': '*****' } + : {}; + return { + ...stackFrame, + request: { + ...stackFrame.request, + headers: { + ...stackFrame.request.headers, + ...modifiedHeaders, + }, + }, + }; +} + +function createApiError(message, status, transporterStackTrace) { + return { + name: 'ApiError', + message, + status, + transporterStackTrace, + }; +} + +function createDeserializationError(message, response) { + return { + name: 'DeserializationError', + message, + response, + }; +} + +function createRetryError(transporterStackTrace) { + return { + name: 'RetryError', + message: 'Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.', + transporterStackTrace, + }; +} + +const createSearchClient = options => { + const appId = options.appId; + const auth = createAuth(options.authMode !== undefined ? options.authMode : AuthMode.WithinHeaders, appId, options.apiKey); + const transporter = createTransporter({ + hosts: [ + { url: `${appId}-dsn.algolia.net`, accept: CallEnum.Read }, + { url: `${appId}.algolia.net`, accept: CallEnum.Write }, + ].concat(shuffle([ + { url: `${appId}-1.algolianet.com` }, + { url: `${appId}-2.algolianet.com` }, + { url: `${appId}-3.algolianet.com` }, + ])), + ...options, + headers: { + ...auth.headers(), + ...{ 'content-type': 'application/x-www-form-urlencoded' }, + ...options.headers, + }, + queryParameters: { + ...auth.queryParameters(), + ...options.queryParameters, + }, + }); + const base = { + transporter, + appId, + addAlgoliaAgent(segment, version) { + transporter.userAgent.add({ segment, version }); + }, + clearCache() { + return Promise.all([ + transporter.requestsCache.clear(), + transporter.responsesCache.clear(), + ]).then(() => undefined); + }, + }; + return addMethods(base, options.methods); +}; + +const customRequest = (base) => { + return (request, requestOptions) => { + if (request.method === MethodEnum.Get) { + return base.transporter.read(request, requestOptions); + } + return base.transporter.write(request, requestOptions); + }; +}; + +const initIndex = (base) => { + return (indexName, options = {}) => { + const searchIndex = { + transporter: base.transporter, + appId: base.appId, + indexName, + }; + return addMethods(searchIndex, options.methods); + }; +}; + +const multipleQueries = (base) => { + return (queries, requestOptions) => { + const requests = queries.map(query => { + return { + ...query, + params: serializeQueryParameters(query.params || {}), + }; + }); + return base.transporter.read({ + method: MethodEnum.Post, + path: '1/indexes/*/queries', + data: { + requests, + }, + cacheable: true, + }, requestOptions); + }; +}; + +const multipleSearchForFacetValues = (base) => { + return (queries, requestOptions) => { + return Promise.all(queries.map(query => { + const { facetName, facetQuery, ...params } = query.params; + return initIndex(base)(query.indexName, { + methods: { searchForFacetValues }, + }).searchForFacetValues(facetName, facetQuery, { + ...requestOptions, + ...params, + }); + })); + }; +}; + +const findAnswers = (base) => { + return (query, queryLanguages, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Post, + path: encode('1/answers/%s/prediction', base.indexName), + data: { + query, + queryLanguages, + }, + cacheable: true, + }, requestOptions); + }; +}; + +const search = (base) => { + return (query, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/query', base.indexName), + data: { + query, + }, + cacheable: true, + }, requestOptions); + }; +}; + +const searchForFacetValues = (base) => { + return (facetName, facetQuery, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/facets/%s/query', base.indexName, facetName), + data: { + facetQuery, + }, + cacheable: true, + }, requestOptions); + }; +}; + +const LogLevelEnum = { + Debug: 1, + Info: 2, + Error: 3, +}; + +/* eslint no-console: 0 */ +function createConsoleLogger(logLevel) { + return { + debug(message, args) { + if (LogLevelEnum.Debug >= logLevel) { + console.debug(message, args); + } + return Promise.resolve(); + }, + info(message, args) { + if (LogLevelEnum.Info >= logLevel) { + console.info(message, args); + } + return Promise.resolve(); + }, + error(message, args) { + console.error(message, args); + return Promise.resolve(); + }, + }; +} + +function createBrowserXhrRequester() { + return { + send(request) { + return new Promise((resolve) => { + const baseRequester = new XMLHttpRequest(); + baseRequester.open(request.method, request.url, true); + Object.keys(request.headers).forEach(key => baseRequester.setRequestHeader(key, request.headers[key])); + const createTimeout = (timeout, content) => { + return setTimeout(() => { + baseRequester.abort(); + resolve({ + status: 0, + content, + isTimedOut: true, + }); + }, timeout * 1000); + }; + const connectTimeout = createTimeout(request.connectTimeout, 'Connection timeout'); + // eslint-disable-next-line functional/no-let + let responseTimeout; + // eslint-disable-next-line functional/immutable-data + baseRequester.onreadystatechange = () => { + if (baseRequester.readyState > baseRequester.OPENED && responseTimeout === undefined) { + clearTimeout(connectTimeout); + responseTimeout = createTimeout(request.responseTimeout, 'Socket timeout'); + } + }; + // eslint-disable-next-line functional/immutable-data + baseRequester.onerror = () => { + // istanbul ignore next + if (baseRequester.status === 0) { + clearTimeout(connectTimeout); + clearTimeout(responseTimeout); + resolve({ + content: baseRequester.responseText || 'Network request failed', + status: baseRequester.status, + isTimedOut: false, + }); + } + }; + // eslint-disable-next-line functional/immutable-data + baseRequester.onload = () => { + clearTimeout(connectTimeout); + clearTimeout(responseTimeout); + resolve({ + content: baseRequester.responseText, + status: baseRequester.status, + isTimedOut: false, + }); + }; + baseRequester.send(request.data); + }); + }, + }; +} + +function algoliasearch(appId, apiKey, options) { + const commonOptions = { + appId, + apiKey, + timeouts: { + connect: 1, + read: 2, + write: 30, + }, + requester: createBrowserXhrRequester(), + logger: createConsoleLogger(LogLevelEnum.Error), + responsesCache: createInMemoryCache(), + requestsCache: createInMemoryCache({ serializable: false }), + hostsCache: createFallbackableCache({ + caches: [ + createBrowserLocalStorageCache({ key: `${version}-${appId}` }), + createInMemoryCache(), + ], + }), + userAgent: createUserAgent(version).add({ + segment: 'Browser', + version: 'lite', + }), + authMode: AuthMode.WithinQueryParameters, + }; + return createSearchClient({ + ...commonOptions, + ...options, + methods: { + search: multipleQueries, + searchForFacetValues: multipleSearchForFacetValues, + multipleQueries, + multipleSearchForFacetValues, + customRequest, + initIndex: base => (indexName) => { + return initIndex(base)(indexName, { + methods: { search, searchForFacetValues, findAnswers }, + }); + }, + }, + }); +} +// eslint-disable-next-line functional/immutable-data +algoliasearch.version = version; + +export default algoliasearch; diff --git a/assets/algoliasearch/dist/algoliasearch-lite.umd.js b/assets/algoliasearch/dist/algoliasearch-lite.umd.js new file mode 100644 index 00000000..0dad1433 --- /dev/null +++ b/assets/algoliasearch/dist/algoliasearch-lite.umd.js @@ -0,0 +1,2 @@ +/*! algoliasearch-lite.umd.js | 4.14.2 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).algoliasearch=t()}(this,(function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var r=[],n=!0,o=!1,a=void 0;try{for(var u,i=e[Symbol.iterator]();!(n=(u=i.next()).done)&&(r.push(u.value),!t||r.length!==t);n=!0);}catch(e){o=!0,a=e}finally{try{n||null==i.return||i.return()}finally{if(o)throw a}}return r}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function a(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){var r=JSON.stringify(e),n=a()[r];return Promise.all([n||t(),void 0!==n])})).then((function(e){var t=o(e,2),n=t[0],a=t[1];return Promise.all([n,a||r.miss(n)])})).then((function(e){return o(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var o=a();return o[JSON.stringify(e)]=t,n().setItem(r,JSON.stringify(o)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=a();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function i(e){var t=a(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},n=t();return n.then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return o(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,o).catch((function(){return i({caches:t}).get(e,n,o)}))},set:function(e,n){return r.set(e,n).catch((function(){return i({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return i({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return i({caches:t}).clear()}))}}}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);var u=n(),i=o&&o.miss||function(){return Promise.resolve()};return u.then((function(e){return i(e)})).then((function(){return u}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function c(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function l(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function f(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var m={Read:1,Write:2,Any:3},p=1,v=2,y=3;function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function b(e){return"string"==typeof e?{protocol:"https",url:e,accept:m.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||m.Any}}var O="GET",P="POST";function q(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(g(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===p||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===y&&Date.now()-e.lastUpdate<=12e4}(e)})),o=[].concat(a(r),a(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:o.length>0?o.map((function(e){return b(e)})):t}}))}function w(e,t,n,o){var u=[],i=function(e,t){if(e.method===O||void 0===e.data&&void 0===t.data)return;var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}(n,o),s=function(e,t){var n=r(r({},e.headers),t.headers),o={};return Object.keys(n).forEach((function(e){var t=n[e];o[e.toLowerCase()]=t})),o}(e,o),c=n.method,l=n.method!==O?{}:r(r({},n.data),o.data),f=r(r(r({"x-algolia-agent":e.userAgent.value},e.queryParameters),l),o.queryParameters),h=0,d=function t(r,a){var l=r.pop();if(void 0===l)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:A(u)};var d={data:i,headers:s,method:c,url:S(l,n.path,f),connectTimeout:a(h,e.timeouts.connect),responseTimeout:a(h,o.timeout)},m=function(e){var t={request:d,response:e,host:l,triesLeft:r.length};return u.push(t),t},p={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var o=m(n);return n.isTimedOut&&h++,Promise.all([e.logger.info("Retryable failure",x(o)),e.hostsCache.set(l,g(l,n.isTimedOut?y:v))]).then((function(){return t(r,a)}))},onFail:function(e){throw m(e),function(e,t){var r=e.content,n=e.status,o=r;try{o=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(o,n,t)}(e,A(u))}};return e.requester.send(d).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&0==~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,p)}))};return q(e.hostsCache,t).then((function(e){return d(a(e.statelessHosts).reverse(),e.getTimeout)}))}function j(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(e){var r="; ".concat(e.segment).concat(void 0!==e.version?" (".concat(e.version,")"):"");return-1===t.value.indexOf(r)&&(t.value="".concat(t.value).concat(r)),t}};return t}function S(e,t,r){var n=T(r),o="".concat(e.protocol,"://").concat(e.url,"/").concat("/"===t.charAt(0)?t.substr(1):t);return n.length&&(o+="?".concat(n)),o}function T(e){return Object.keys(e).map((function(t){return f("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function A(e){return e.map((function(e){return x(e)}))}function x(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var N=function(e){var t=e.appId,n=function(e,t,r){var n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:function(){return e===h.WithinHeaders?n:{}},queryParameters:function(){return e===h.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:h.WithinHeaders,t,e.apiKey),a=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,a=e.requestsCache,u=e.responsesCache,i=e.timeouts,s=e.userAgent,c=e.hosts,l=e.queryParameters,f={hostsCache:t,logger:r,requester:n,requestsCache:a,responsesCache:u,timeouts:i,userAgent:s,headers:e.headers,queryParameters:l,hosts:c.map((function(e){return b(e)})),read:function(e,t){var r=d(t,f.timeouts.read),n=function(){return w(f,f.hosts.filter((function(e){return 0!=(e.accept&m.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var a={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(a,(function(){return f.requestsCache.get(a,(function(){return f.requestsCache.set(a,n()).then((function(e){return Promise.all([f.requestsCache.delete(a),e])}),(function(e){return Promise.all([f.requestsCache.delete(a),Promise.reject(e)])})).then((function(e){var t=o(e,2);t[0];return t[1]}))}))}),{miss:function(e){return f.responsesCache.set(a,e)}})},write:function(e,t){return w(f,f.hosts.filter((function(e){return 0!=(e.accept&m.Write)})),e,d(t,f.timeouts.write))}};return f}(r(r({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:m.Read},{url:"".concat(t,".algolia.net"),accept:m.Write}].concat(c([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:r(r(r({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return l({transporter:a,appId:t,addAlgoliaAgent:function(e,t){a.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},e.methods)},C=function(e){return function(t,r){return t.method===O?e.transporter.read(t,r):e.transporter.write(t,r)}},k=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={transporter:e.transporter,appId:e.appId,indexName:t};return l(n,r.methods)}},J=function(e){return function(t,n){var o=t.map((function(e){return r(r({},e),{},{params:T(e.params||{})})}));return e.transporter.read({method:P,path:"1/indexes/*/queries",data:{requests:o},cacheable:!0},n)}},E=function(e){return function(t,o){return Promise.all(t.map((function(t){var a=t.params,u=a.facetName,i=a.facetQuery,s=n(a,["facetName","facetQuery"]);return k(e)(t.indexName,{methods:{searchForFacetValues:R}}).searchForFacetValues(u,i,r(r({},o),s))})))}},I=function(e){return function(t,r,n){return e.transporter.read({method:P,path:f("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},F=function(e){return function(t,r){return e.transporter.read({method:P,path:f("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r)}},R=function(e){return function(t,r,n){return e.transporter.read({method:P,path:f("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},D=1,W=2,H=3;function Q(e,t,n){var o,a={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,o=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},a=o(e.connectTimeout,"Connection timeout");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(a),n=o(e.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(a),clearTimeout(n),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(a),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(o=H,{debug:function(e,t){return D>=o&&console.debug(e,t),Promise.resolve()},info:function(e,t){return W>=o&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:s(),requestsCache:s({serializable:!1}),hostsCache:i({caches:[u({key:"".concat("4.14.2","-").concat(e)}),s()]}),userAgent:j("4.14.2").add({segment:"Browser",version:"lite"}),authMode:h.WithinQueryParameters};return N(r(r(r({},a),n),{},{methods:{search:J,searchForFacetValues:E,multipleQueries:J,multipleSearchForFacetValues:E,customRequest:C,initIndex:function(e){return function(t){return k(e)(t,{methods:{search:F,searchForFacetValues:R,findAnswers:I}})}}}}))}return Q.version="4.14.2",Q})); diff --git a/assets/algoliasearch/dist/algoliasearch.cjs.js b/assets/algoliasearch/dist/algoliasearch.cjs.js new file mode 100644 index 00000000..aa74431a --- /dev/null +++ b/assets/algoliasearch/dist/algoliasearch.cjs.js @@ -0,0 +1,156 @@ +'use strict'; + +var cacheCommon = require('@algolia/cache-common'); +var cacheInMemory = require('@algolia/cache-in-memory'); +var clientAnalytics = require('@algolia/client-analytics'); +var clientCommon = require('@algolia/client-common'); +var clientPersonalization = require('@algolia/client-personalization'); +var clientSearch = require('@algolia/client-search'); +var loggerCommon = require('@algolia/logger-common'); +var requesterNodeHttp = require('@algolia/requester-node-http'); +var transporter = require('@algolia/transporter'); + +function algoliasearch(appId, apiKey, options) { + const commonOptions = { + appId, + apiKey, + timeouts: { + connect: 2, + read: 5, + write: 30, + }, + requester: requesterNodeHttp.createNodeHttpRequester(), + logger: loggerCommon.createNullLogger(), + responsesCache: cacheCommon.createNullCache(), + requestsCache: cacheCommon.createNullCache(), + hostsCache: cacheInMemory.createInMemoryCache(), + userAgent: transporter.createUserAgent(clientCommon.version).add({ + segment: 'Node.js', + version: process.versions.node, + }), + }; + const searchClientOptions = { ...commonOptions, ...options }; + const initPersonalization = () => (clientOptions) => { + return clientPersonalization.createPersonalizationClient({ + ...commonOptions, + ...clientOptions, + methods: { + getPersonalizationStrategy: clientPersonalization.getPersonalizationStrategy, + setPersonalizationStrategy: clientPersonalization.setPersonalizationStrategy, + }, + }); + }; + return clientSearch.createSearchClient({ + ...searchClientOptions, + methods: { + search: clientSearch.multipleQueries, + searchForFacetValues: clientSearch.multipleSearchForFacetValues, + multipleBatch: clientSearch.multipleBatch, + multipleGetObjects: clientSearch.multipleGetObjects, + multipleQueries: clientSearch.multipleQueries, + copyIndex: clientSearch.copyIndex, + copySettings: clientSearch.copySettings, + copyRules: clientSearch.copyRules, + copySynonyms: clientSearch.copySynonyms, + moveIndex: clientSearch.moveIndex, + listIndices: clientSearch.listIndices, + getLogs: clientSearch.getLogs, + listClusters: clientSearch.listClusters, + multipleSearchForFacetValues: clientSearch.multipleSearchForFacetValues, + getApiKey: clientSearch.getApiKey, + addApiKey: clientSearch.addApiKey, + listApiKeys: clientSearch.listApiKeys, + updateApiKey: clientSearch.updateApiKey, + deleteApiKey: clientSearch.deleteApiKey, + restoreApiKey: clientSearch.restoreApiKey, + assignUserID: clientSearch.assignUserID, + assignUserIDs: clientSearch.assignUserIDs, + getUserID: clientSearch.getUserID, + searchUserIDs: clientSearch.searchUserIDs, + listUserIDs: clientSearch.listUserIDs, + getTopUserIDs: clientSearch.getTopUserIDs, + removeUserID: clientSearch.removeUserID, + hasPendingMappings: clientSearch.hasPendingMappings, + generateSecuredApiKey: clientSearch.generateSecuredApiKey, + getSecuredApiKeyRemainingValidity: clientSearch.getSecuredApiKeyRemainingValidity, + destroy: clientCommon.destroy, + clearDictionaryEntries: clientSearch.clearDictionaryEntries, + deleteDictionaryEntries: clientSearch.deleteDictionaryEntries, + getDictionarySettings: clientSearch.getDictionarySettings, + getAppTask: clientSearch.getAppTask, + replaceDictionaryEntries: clientSearch.replaceDictionaryEntries, + saveDictionaryEntries: clientSearch.saveDictionaryEntries, + searchDictionaryEntries: clientSearch.searchDictionaryEntries, + setDictionarySettings: clientSearch.setDictionarySettings, + waitAppTask: clientSearch.waitAppTask, + customRequest: clientSearch.customRequest, + initIndex: base => (indexName) => { + return clientSearch.initIndex(base)(indexName, { + methods: { + batch: clientSearch.batch, + delete: clientSearch.deleteIndex, + findAnswers: clientSearch.findAnswers, + getObject: clientSearch.getObject, + getObjects: clientSearch.getObjects, + saveObject: clientSearch.saveObject, + saveObjects: clientSearch.saveObjects, + search: clientSearch.search, + searchForFacetValues: clientSearch.searchForFacetValues, + waitTask: clientSearch.waitTask, + setSettings: clientSearch.setSettings, + getSettings: clientSearch.getSettings, + partialUpdateObject: clientSearch.partialUpdateObject, + partialUpdateObjects: clientSearch.partialUpdateObjects, + deleteObject: clientSearch.deleteObject, + deleteObjects: clientSearch.deleteObjects, + deleteBy: clientSearch.deleteBy, + clearObjects: clientSearch.clearObjects, + browseObjects: clientSearch.browseObjects, + getObjectPosition: clientSearch.getObjectPosition, + findObject: clientSearch.findObject, + exists: clientSearch.exists, + saveSynonym: clientSearch.saveSynonym, + saveSynonyms: clientSearch.saveSynonyms, + getSynonym: clientSearch.getSynonym, + searchSynonyms: clientSearch.searchSynonyms, + browseSynonyms: clientSearch.browseSynonyms, + deleteSynonym: clientSearch.deleteSynonym, + clearSynonyms: clientSearch.clearSynonyms, + replaceAllObjects: clientSearch.replaceAllObjects, + replaceAllSynonyms: clientSearch.replaceAllSynonyms, + searchRules: clientSearch.searchRules, + getRule: clientSearch.getRule, + deleteRule: clientSearch.deleteRule, + saveRule: clientSearch.saveRule, + saveRules: clientSearch.saveRules, + replaceAllRules: clientSearch.replaceAllRules, + browseRules: clientSearch.browseRules, + clearRules: clientSearch.clearRules, + }, + }); + }, + initAnalytics: () => (clientOptions) => { + return clientAnalytics.createAnalyticsClient({ + ...commonOptions, + ...clientOptions, + methods: { + addABTest: clientAnalytics.addABTest, + getABTest: clientAnalytics.getABTest, + getABTests: clientAnalytics.getABTests, + stopABTest: clientAnalytics.stopABTest, + deleteABTest: clientAnalytics.deleteABTest, + }, + }); + }, + initPersonalization, + initRecommendation: () => (clientOptions) => { + searchClientOptions.logger.info('The `initRecommendation` method is deprecated. Use `initPersonalization` instead.'); + return initPersonalization()(clientOptions); + }, + }, + }); +} +// eslint-disable-next-line functional/immutable-data +algoliasearch.version = clientCommon.version; + +module.exports = algoliasearch; diff --git a/assets/algoliasearch/dist/algoliasearch.d.ts b/assets/algoliasearch/dist/algoliasearch.d.ts new file mode 100644 index 00000000..554c1eed --- /dev/null +++ b/assets/algoliasearch/dist/algoliasearch.d.ts @@ -0,0 +1,247 @@ +import { ABTest } from '@algolia/client-analytics'; +import { AddABTestResponse } from '@algolia/client-analytics'; +import { AddApiKeyOptions } from '@algolia/client-search'; +import { AddApiKeyResponse } from '@algolia/client-search'; +import { AnalyticsClient as AnalyticsClient_2 } from '@algolia/client-analytics'; +import { AnalyticsClientOptions } from '@algolia/client-analytics'; +import { ApiKeyACLType } from '@algolia/client-search'; +import { AssignUserIDResponse } from '@algolia/client-search'; +import { AssignUserIDsResponse } from '@algolia/client-search'; +import { BatchRequest } from '@algolia/client-search'; +import { BatchResponse } from '@algolia/client-search'; +import { BrowseOptions } from '@algolia/client-search'; +import { ChunkedBatchResponse } from '@algolia/client-search'; +import { ChunkOptions } from '@algolia/client-search'; +import { ClearRulesOptions } from '@algolia/client-search'; +import { ClearSynonymsOptions } from '@algolia/client-search'; +import { ClientTransporterOptions } from '@algolia/client-common'; +import { CopyIndexOptions } from '@algolia/client-search'; +import { DeleteABTestResponse } from '@algolia/client-analytics'; +import { DeleteApiKeyResponse } from '@algolia/client-search'; +import { DeleteByFiltersOptions } from '@algolia/client-search'; +import { DeleteResponse } from '@algolia/client-search'; +import { DeleteSynonymOptions } from '@algolia/client-search'; +import { Destroyable } from '@algolia/requester-common'; +import { DictionaryEntriesOptions } from '@algolia/client-search'; +import { DictionaryEntriesResponse } from '@algolia/client-search'; +import { DictionaryEntry } from '@algolia/client-search'; +import { DictionaryName } from '@algolia/client-search'; +import { DictionarySettings } from '@algolia/client-search'; +import { FindAnswersOptions } from '@algolia/client-search'; +import { FindAnswersResponse } from '@algolia/client-search'; +import { FindObjectOptions } from '@algolia/client-search'; +import { FindObjectResponse } from '@algolia/client-search'; +import { GetABTestResponse } from '@algolia/client-analytics'; +import { GetABTestsOptions } from '@algolia/client-analytics'; +import { GetABTestsResponse } from '@algolia/client-analytics'; +import { GetApiKeyResponse } from '@algolia/client-search'; +import { GetDictionarySettingsResponse } from '@algolia/client-search'; +import { GetLogsResponse } from '@algolia/client-search'; +import { GetObjectOptions } from '@algolia/client-search'; +import { GetObjectsOptions } from '@algolia/client-search'; +import { GetObjectsResponse } from '@algolia/client-search'; +import { GetPersonalizationStrategyResponse } from '@algolia/client-personalization'; +import { GetTopUserIDsResponse } from '@algolia/client-search'; +import { HasPendingMappingsOptions } from '@algolia/client-search'; +import { HasPendingMappingsResponse } from '@algolia/client-search'; +import { IndexOperationResponse } from '@algolia/client-search'; +import { ListApiKeysResponse } from '@algolia/client-search'; +import { ListClustersResponse } from '@algolia/client-search'; +import { ListIndicesResponse } from '@algolia/client-search'; +import { ListUserIDsOptions } from '@algolia/client-search'; +import { ListUserIDsResponse } from '@algolia/client-search'; +import { MultipleBatchRequest } from '@algolia/client-search'; +import { MultipleBatchResponse } from '@algolia/client-search'; +import { MultipleGetObject } from '@algolia/client-search'; +import { MultipleGetObjectsResponse } from '@algolia/client-search'; +import { MultipleQueriesOptions } from '@algolia/client-search'; +import { MultipleQueriesQuery } from '@algolia/client-search'; +import { MultipleQueriesResponse } from '@algolia/client-search'; +import { ObjectWithObjectID } from '@algolia/client-search'; +import { PartialUpdateObjectResponse } from '@algolia/client-search'; +import { PartialUpdateObjectsOptions } from '@algolia/client-search'; +import { PersonalizationClient as PersonalizationClient_2 } from '@algolia/client-personalization'; +import { PersonalizationClientOptions } from '@algolia/client-personalization'; +import { PersonalizationStrategy } from '@algolia/client-personalization'; +import { RemoveUserIDResponse } from '@algolia/client-search'; +import { ReplaceAllObjectsOptions } from '@algolia/client-search'; +import { Request } from '@algolia/transporter'; +import { RequestOptions } from '@algolia/transporter'; +import { RestoreApiKeyResponse } from '@algolia/client-search'; +import { Rule } from '@algolia/client-search'; +import { SaveObjectResponse } from '@algolia/client-search'; +import { SaveObjectsOptions } from '@algolia/client-search'; +import { SaveRuleResponse } from '@algolia/client-search'; +import { SaveRulesOptions } from '@algolia/client-search'; +import { SaveRulesResponse } from '@algolia/client-search'; +import { SaveSynonymResponse } from '@algolia/client-search'; +import { SaveSynonymsOptions } from '@algolia/client-search'; +import { SaveSynonymsResponse } from '@algolia/client-search'; +import { SearchClient as SearchClient_2 } from '@algolia/client-search'; +import { SearchClientOptions } from '@algolia/client-search'; +import { SearchDictionaryEntriesResponse } from '@algolia/client-search'; +import { SearchForFacetValuesQueryParams } from '@algolia/client-search'; +import { SearchForFacetValuesResponse } from '@algolia/client-search'; +import { SearchIndex as SearchIndex_2 } from '@algolia/client-search'; +import { SearchOptions } from '@algolia/client-search'; +import { SearchResponse } from '@algolia/client-search'; +import { SearchRulesOptions } from '@algolia/client-search'; +import { SearchSynonymsOptions } from '@algolia/client-search'; +import { SearchSynonymsResponse } from '@algolia/client-search'; +import { SearchUserIDsOptions } from '@algolia/client-search'; +import { SearchUserIDsResponse } from '@algolia/client-search'; +import { SecuredApiKeyRestrictions } from '@algolia/client-search'; +import { SetPersonalizationStrategyResponse } from '@algolia/client-personalization'; +import { SetSettingsResponse } from '@algolia/client-search'; +import { Settings } from '@algolia/client-search'; +import { StopABTestResponse } from '@algolia/client-analytics'; +import { Synonym } from '@algolia/client-search'; +import { TaskStatusResponse } from '@algolia/client-search'; +import { UpdateApiKeyOptions } from '@algolia/client-search'; +import { UpdateApiKeyResponse } from '@algolia/client-search'; +import { UserIDResponse } from '@algolia/client-search'; +import { WaitablePromise } from '@algolia/client-common'; + +declare function algoliasearch(appId: string, apiKey: string, options?: AlgoliaSearchOptions): SearchClient; + +declare namespace algoliasearch { + var version: string; +} +export default algoliasearch; + +export declare type AlgoliaSearchOptions = Partial & WithoutCredentials; + +export declare type AnalyticsClient = AnalyticsClient_2 & { + readonly addABTest: (abTest: ABTest, requestOptions?: RequestOptions) => Readonly>; + readonly getABTest: (abTestID: number, requestOptions?: RequestOptions) => Readonly>; + readonly getABTests: (requestOptions?: RequestOptions & GetABTestsOptions) => Readonly>; + readonly stopABTest: (abTestID: number, requestOptions?: RequestOptions) => Readonly>; + readonly deleteABTest: (abTestID: number, requestOptions?: RequestOptions) => Readonly>; +}; + +declare type Credentials = { + readonly appId: string; + readonly apiKey: string; +}; + +export declare type InitAnalyticsOptions = Partial & OptionalCredentials; + +export declare type InitPersonalizationOptions = Partial & OptionalCredentials; + +/** + * @deprecated Use `InitPersonalizationOptions` instead. + */ +export declare type InitRecommendationOptions = InitPersonalizationOptions; + +export declare type OptionalCredentials = Omit & Pick, keyof Credentials>; + +export declare type PersonalizationClient = PersonalizationClient_2 & { + readonly getPersonalizationStrategy: (requestOptions?: RequestOptions) => Readonly>; + readonly setPersonalizationStrategy: (personalizationStrategy: PersonalizationStrategy, requestOptions?: RequestOptions) => Readonly>; +}; + +/** + * @deprecated Use `PersonalizationClient` instead. + */ +export declare type RecommendationClient = PersonalizationClient; + +export declare type SearchClient = SearchClient_2 & { + readonly initIndex: (indexName: string) => SearchIndex; + readonly search: (queries: readonly MultipleQueriesQuery[], requestOptions?: RequestOptions & MultipleQueriesOptions) => Readonly>>; + readonly searchForFacetValues: (queries: ReadonlyArray<{ + readonly indexName: string; + readonly params: SearchForFacetValuesQueryParams & SearchOptions; + }>, requestOptions?: RequestOptions) => Readonly>; + readonly multipleBatch: (requests: readonly MultipleBatchRequest[], requestOptions?: RequestOptions) => Readonly>; + readonly multipleGetObjects: (requests: readonly MultipleGetObject[], requestOptions?: RequestOptions) => Readonly>>; + readonly multipleQueries: (queries: readonly MultipleQueriesQuery[], requestOptions?: RequestOptions & MultipleQueriesOptions) => Readonly>>; + readonly copyIndex: (from: string, to: string, requestOptions?: CopyIndexOptions & RequestOptions) => Readonly>; + readonly copySettings: (from: string, to: string, requestOptions?: RequestOptions) => Readonly>; + readonly copyRules: (from: string, to: string, requestOptions?: RequestOptions) => Readonly>; + readonly copySynonyms: (from: string, to: string, requestOptions?: RequestOptions) => Readonly>; + readonly moveIndex: (from: string, to: string, requestOptions?: RequestOptions) => Readonly>; + readonly listIndices: (requestOptions?: RequestOptions) => Readonly>; + readonly getLogs: (requestOptions?: RequestOptions) => Readonly>; + readonly listClusters: (requestOptions?: RequestOptions) => Readonly>; + readonly multipleSearchForFacetValues: (queries: ReadonlyArray<{ + readonly indexName: string; + readonly params: SearchForFacetValuesQueryParams & SearchOptions; + }>, requestOptions?: RequestOptions) => Readonly>; + readonly getApiKey: (apiKey: string, requestOptions?: RequestOptions) => Readonly>; + readonly addApiKey: (acl: readonly ApiKeyACLType[], requestOptions?: AddApiKeyOptions & Pick>) => Readonly>; + readonly listApiKeys: (requestOptions?: RequestOptions) => Readonly>; + readonly updateApiKey: (apiKey: string, requestOptions?: UpdateApiKeyOptions & Pick>) => Readonly>; + readonly deleteApiKey: (apiKey: string, requestOptions?: RequestOptions) => Readonly>; + readonly restoreApiKey: (apiKey: string, requestOptions?: RequestOptions) => Readonly>; + readonly assignUserID: (userID: string, clusterName: string, requestOptions?: RequestOptions) => Readonly>; + readonly assignUserIDs: (userIDs: readonly string[], clusterName: string, requestOptions?: RequestOptions) => Readonly>; + readonly getUserID: (userID: string, requestOptions?: RequestOptions) => Readonly>; + readonly searchUserIDs: (query: string, requestOptions?: SearchUserIDsOptions & RequestOptions) => Readonly>; + readonly listUserIDs: (requestOptions?: ListUserIDsOptions & RequestOptions) => Readonly>; + readonly getTopUserIDs: (requestOptions?: RequestOptions) => Readonly>; + readonly removeUserID: (userID: string, requestOptions?: RequestOptions) => Readonly>; + readonly hasPendingMappings: (requestOptions?: HasPendingMappingsOptions & RequestOptions) => Readonly>; + readonly generateSecuredApiKey: (parentApiKey: string, restrictions: SecuredApiKeyRestrictions) => string; + readonly getSecuredApiKeyRemainingValidity: (securedApiKey: string) => number; + readonly clearDictionaryEntries: (dictionary: DictionaryName, requestOptions?: RequestOptions & DictionaryEntriesOptions) => Readonly>; + readonly deleteDictionaryEntries: (dictionary: DictionaryName, objectIDs: readonly string[], requestOptions?: RequestOptions & DictionaryEntriesOptions) => Readonly>; + readonly replaceDictionaryEntries: (dictionary: DictionaryName, entries: readonly DictionaryEntry[], requestOptions?: RequestOptions & DictionaryEntriesOptions) => Readonly>; + readonly saveDictionaryEntries: (dictionary: DictionaryName, entries: readonly DictionaryEntry[], requestOptions?: RequestOptions & DictionaryEntriesOptions) => Readonly>; + readonly searchDictionaryEntries: (dictionary: DictionaryName, query: string, requestOptions?: RequestOptions) => Readonly>; + readonly getDictionarySettings: (requestOptions?: RequestOptions) => Readonly>; + readonly setDictionarySettings: (settings: DictionarySettings, requestOptions?: RequestOptions) => Readonly>; + readonly getAppTask: (taskID: number, requestOptions?: RequestOptions) => Readonly>; + readonly customRequest: (request: Request, requestOptions?: RequestOptions) => Readonly>; + readonly initAnalytics: (options?: InitAnalyticsOptions) => AnalyticsClient; + readonly initPersonalization: (options?: InitPersonalizationOptions) => PersonalizationClient; + /** + * @deprecated Use `initPersonalization` instead. + */ + readonly initRecommendation: (options?: InitPersonalizationOptions) => PersonalizationClient; +} & Destroyable; + +export declare type SearchIndex = SearchIndex_2 & { + readonly search: (query: string, requestOptions?: RequestOptions & SearchOptions) => Readonly>>; + readonly searchForFacetValues: (facetName: string, facetQuery: string, requestOptions?: RequestOptions & SearchOptions) => Readonly>; + readonly findAnswers: (query: string, queryLanguages: readonly string[], requestOptions?: RequestOptions & FindAnswersOptions) => Readonly>>; + readonly batch: (requests: readonly BatchRequest[], requestOptions?: RequestOptions) => Readonly>; + readonly delete: (requestOptions?: RequestOptions) => Readonly>; + readonly getObject: (objectID: string, requestOptions?: RequestOptions & GetObjectOptions) => Readonly>; + readonly getObjects: (objectIDs: readonly string[], requestOptions?: RequestOptions & GetObjectsOptions) => Readonly>>; + readonly saveObject: (object: Readonly>, requestOptions?: RequestOptions & ChunkOptions & SaveObjectsOptions) => Readonly>; + readonly saveObjects: (objects: ReadonlyArray>>, requestOptions?: RequestOptions & ChunkOptions & SaveObjectsOptions) => Readonly>; + readonly waitTask: (taskID: number, requestOptions?: RequestOptions) => Readonly>; + readonly setSettings: (settings: Settings, requestOptions?: RequestOptions) => Readonly>; + readonly getSettings: (requestOptions?: RequestOptions) => Readonly>; + readonly partialUpdateObject: (object: Record, requestOptions?: RequestOptions & ChunkOptions & PartialUpdateObjectsOptions) => Readonly>; + readonly partialUpdateObjects: (objects: ReadonlyArray>, requestOptions?: RequestOptions & ChunkOptions & PartialUpdateObjectsOptions) => Readonly>; + readonly deleteObject: (objectID: string, requestOptions?: RequestOptions) => Readonly>; + readonly deleteObjects: (objectIDs: readonly string[], requestOptions?: RequestOptions & ChunkOptions) => Readonly>; + readonly deleteBy: (filters: DeleteByFiltersOptions, requestOptions?: RequestOptions) => Readonly>; + readonly clearObjects: (requestOptions?: RequestOptions) => Readonly>; + readonly browseObjects: (requestOptions?: SearchOptions & BrowseOptions & RequestOptions) => Readonly>; + readonly getObjectPosition: (searchResponse: SearchResponse<{}>, objectID: string) => number; + readonly findObject: (callback: (object: TObject & ObjectWithObjectID) => boolean, requestOptions?: FindObjectOptions & RequestOptions) => Readonly>>; + readonly exists: (requestOptions?: RequestOptions) => Readonly>; + readonly saveSynonym: (synonym: Synonym, requestOptions?: RequestOptions & SaveSynonymsOptions) => Readonly>; + readonly saveSynonyms: (synonyms: readonly Synonym[], requestOptions?: SaveSynonymsOptions & RequestOptions) => Readonly>; + readonly getSynonym: (objectID: string, requestOptions?: RequestOptions) => Readonly>; + readonly searchSynonyms: (query: string, requestOptions?: SearchSynonymsOptions & RequestOptions) => Readonly>; + readonly browseSynonyms: (requestOptions?: SearchSynonymsOptions & BrowseOptions & RequestOptions) => Readonly>; + readonly deleteSynonym: (objectID: string, requestOptions?: DeleteSynonymOptions & RequestOptions) => Readonly>; + readonly clearSynonyms: (requestOptions?: ClearSynonymsOptions & RequestOptions) => Readonly>; + readonly replaceAllObjects: (objects: ReadonlyArray>>, requestOptions?: ReplaceAllObjectsOptions & ChunkOptions & SaveObjectsOptions & RequestOptions) => Readonly>; + readonly replaceAllSynonyms: (synonyms: readonly Synonym[], requestOptions?: RequestOptions & Pick>) => Readonly>; + readonly searchRules: (query: string, requestOptions?: RequestOptions & SearchRulesOptions) => Readonly>>; + readonly getRule: (objectID: string, requestOptions?: RequestOptions) => Readonly>; + readonly deleteRule: (objectID: string, requestOptions?: RequestOptions) => Readonly>; + readonly saveRule: (rule: Rule, requestOptions?: RequestOptions & SaveRulesOptions) => Readonly>; + readonly saveRules: (rules: readonly Rule[], requestOptions?: RequestOptions & SaveRulesOptions) => Readonly>; + readonly replaceAllRules: (rules: readonly Rule[], requestOptions?: RequestOptions & SaveRulesOptions) => Readonly>; + readonly browseRules: (requestOptions?: SearchRulesOptions & BrowseOptions & RequestOptions) => Readonly>; + readonly clearRules: (requestOptions?: RequestOptions & ClearRulesOptions) => Readonly>; +}; + +export declare type WithoutCredentials = Omit; + +export { } diff --git a/assets/algoliasearch/dist/algoliasearch.esm.browser.js b/assets/algoliasearch/dist/algoliasearch.esm.browser.js new file mode 100644 index 00000000..3168b2a4 --- /dev/null +++ b/assets/algoliasearch/dist/algoliasearch.esm.browser.js @@ -0,0 +1,2221 @@ +function createBrowserLocalStorageCache(options) { + const namespaceKey = `algoliasearch-client-js-${options.key}`; + // eslint-disable-next-line functional/no-let + let storage; + const getStorage = () => { + if (storage === undefined) { + storage = options.localStorage || window.localStorage; + } + return storage; + }; + const getNamespace = () => { + return JSON.parse(getStorage().getItem(namespaceKey) || '{}'); + }; + return { + get(key, defaultValue, events = { + miss: () => Promise.resolve(), + }) { + return Promise.resolve() + .then(() => { + const keyAsString = JSON.stringify(key); + const value = getNamespace()[keyAsString]; + return Promise.all([value || defaultValue(), value !== undefined]); + }) + .then(([value, exists]) => { + return Promise.all([value, exists || events.miss(value)]); + }) + .then(([value]) => value); + }, + set(key, value) { + return Promise.resolve().then(() => { + const namespace = getNamespace(); + // eslint-disable-next-line functional/immutable-data + namespace[JSON.stringify(key)] = value; + getStorage().setItem(namespaceKey, JSON.stringify(namespace)); + return value; + }); + }, + delete(key) { + return Promise.resolve().then(() => { + const namespace = getNamespace(); + // eslint-disable-next-line functional/immutable-data + delete namespace[JSON.stringify(key)]; + getStorage().setItem(namespaceKey, JSON.stringify(namespace)); + }); + }, + clear() { + return Promise.resolve().then(() => { + getStorage().removeItem(namespaceKey); + }); + }, + }; +} + +// @todo Add logger on options to debug when caches go wrong. +function createFallbackableCache(options) { + const caches = [...options.caches]; + const current = caches.shift(); // eslint-disable-line functional/immutable-data + if (current === undefined) { + return createNullCache(); + } + return { + get(key, defaultValue, events = { + miss: () => Promise.resolve(), + }) { + return current.get(key, defaultValue, events).catch(() => { + return createFallbackableCache({ caches }).get(key, defaultValue, events); + }); + }, + set(key, value) { + return current.set(key, value).catch(() => { + return createFallbackableCache({ caches }).set(key, value); + }); + }, + delete(key) { + return current.delete(key).catch(() => { + return createFallbackableCache({ caches }).delete(key); + }); + }, + clear() { + return current.clear().catch(() => { + return createFallbackableCache({ caches }).clear(); + }); + }, + }; +} + +function createNullCache() { + return { + get(_key, defaultValue, events = { + miss: () => Promise.resolve(), + }) { + const value = defaultValue(); + return value + .then(result => Promise.all([result, events.miss(result)])) + .then(([result]) => result); + }, + set(_key, value) { + return Promise.resolve(value); + }, + delete(_key) { + return Promise.resolve(); + }, + clear() { + return Promise.resolve(); + }, + }; +} + +function createInMemoryCache(options = { serializable: true }) { + // eslint-disable-next-line functional/no-let + let cache = {}; + return { + get(key, defaultValue, events = { + miss: () => Promise.resolve(), + }) { + const keyAsString = JSON.stringify(key); + if (keyAsString in cache) { + return Promise.resolve(options.serializable ? JSON.parse(cache[keyAsString]) : cache[keyAsString]); + } + const promise = defaultValue(); + const miss = (events && events.miss) || (() => Promise.resolve()); + return promise.then((value) => miss(value)).then(() => promise); + }, + set(key, value) { + // eslint-disable-next-line functional/immutable-data + cache[JSON.stringify(key)] = options.serializable ? JSON.stringify(value) : value; + return Promise.resolve(value); + }, + delete(key) { + // eslint-disable-next-line functional/immutable-data + delete cache[JSON.stringify(key)]; + return Promise.resolve(); + }, + clear() { + cache = {}; + return Promise.resolve(); + }, + }; +} + +function createAuth(authMode, appId, apiKey) { + const credentials = { + 'x-algolia-api-key': apiKey, + 'x-algolia-application-id': appId, + }; + return { + headers() { + return authMode === AuthMode.WithinHeaders ? credentials : {}; + }, + queryParameters() { + return authMode === AuthMode.WithinQueryParameters ? credentials : {}; + }, + }; +} + +function createRetryablePromise(callback) { + let retriesCount = 0; // eslint-disable-line functional/no-let + const retry = () => { + retriesCount++; + return new Promise((resolve) => { + setTimeout(() => { + resolve(callback(retry)); + }, Math.min(100 * retriesCount, 1000)); + }); + }; + return callback(retry); +} + +function createWaitablePromise(promise, wait = (_response, _requestOptions) => { + return Promise.resolve(); +}) { + // eslint-disable-next-line functional/immutable-data + return Object.assign(promise, { + wait(requestOptions) { + return createWaitablePromise(promise + .then(response => Promise.all([wait(response, requestOptions), response])) + .then(promiseResults => promiseResults[1])); + }, + }); +} + +// eslint-disable-next-line functional/prefer-readonly-type +function shuffle(array) { + let c = array.length - 1; // eslint-disable-line functional/no-let + // eslint-disable-next-line functional/no-loop-statement + for (c; c > 0; c--) { + const b = Math.floor(Math.random() * (c + 1)); + const a = array[c]; + array[c] = array[b]; // eslint-disable-line functional/immutable-data, no-param-reassign + array[b] = a; // eslint-disable-line functional/immutable-data, no-param-reassign + } + return array; +} +function addMethods(base, methods) { + if (!methods) { + return base; + } + Object.keys(methods).forEach(key => { + // eslint-disable-next-line functional/immutable-data, no-param-reassign + base[key] = methods[key](base); + }); + return base; +} +function encode(format, ...args) { + // eslint-disable-next-line functional/no-let + let i = 0; + return format.replace(/%s/g, () => encodeURIComponent(args[i++])); +} + +const version = '4.14.2'; + +const AuthMode = { + /** + * If auth credentials should be in query parameters. + */ + WithinQueryParameters: 0, + /** + * If auth credentials should be in headers. + */ + WithinHeaders: 1, +}; + +function createMappedRequestOptions(requestOptions, timeout) { + const options = requestOptions || {}; + const data = options.data || {}; + Object.keys(options).forEach(key => { + if (['timeout', 'headers', 'queryParameters', 'data', 'cacheable'].indexOf(key) === -1) { + data[key] = options[key]; // eslint-disable-line functional/immutable-data + } + }); + return { + data: Object.entries(data).length > 0 ? data : undefined, + timeout: options.timeout || timeout, + headers: options.headers || {}, + queryParameters: options.queryParameters || {}, + cacheable: options.cacheable, + }; +} + +const CallEnum = { + /** + * If the host is read only. + */ + Read: 1, + /** + * If the host is write only. + */ + Write: 2, + /** + * If the host is both read and write. + */ + Any: 3, +}; + +const HostStatusEnum = { + Up: 1, + Down: 2, + Timeouted: 3, +}; + +// By default, API Clients at Algolia have expiration delay +// of 5 mins. In the JavaScript client, we have 2 mins. +const EXPIRATION_DELAY = 2 * 60 * 1000; +function createStatefulHost(host, status = HostStatusEnum.Up) { + return { + ...host, + status, + lastUpdate: Date.now(), + }; +} +function isStatefulHostUp(host) { + return host.status === HostStatusEnum.Up || Date.now() - host.lastUpdate > EXPIRATION_DELAY; +} +function isStatefulHostTimeouted(host) { + return (host.status === HostStatusEnum.Timeouted && Date.now() - host.lastUpdate <= EXPIRATION_DELAY); +} + +function createStatelessHost(options) { + if (typeof options === 'string') { + return { + protocol: 'https', + url: options, + accept: CallEnum.Any, + }; + } + return { + protocol: options.protocol || 'https', + url: options.url, + accept: options.accept || CallEnum.Any, + }; +} + +const MethodEnum = { + Delete: 'DELETE', + Get: 'GET', + Post: 'POST', + Put: 'PUT', +}; + +function createRetryableOptions(hostsCache, statelessHosts) { + return Promise.all(statelessHosts.map(statelessHost => { + return hostsCache.get(statelessHost, () => { + return Promise.resolve(createStatefulHost(statelessHost)); + }); + })).then(statefulHosts => { + const hostsUp = statefulHosts.filter(host => isStatefulHostUp(host)); + const hostsTimeouted = statefulHosts.filter(host => isStatefulHostTimeouted(host)); + /** + * Note, we put the hosts that previously timeouted on the end of the list. + */ + const hostsAvailable = [...hostsUp, ...hostsTimeouted]; + const statelessHostsAvailable = hostsAvailable.length > 0 + ? hostsAvailable.map(host => createStatelessHost(host)) + : statelessHosts; + return { + getTimeout(timeoutsCount, baseTimeout) { + /** + * Imagine that you have 4 hosts, if timeouts will increase + * on the following way: 1 (timeouted) > 4 (timeouted) > 5 (200) + * + * Note that, the very next request, we start from the previous timeout + * + * 5 (timeouted) > 6 (timeouted) > 7 ... + * + * This strategy may need to be reviewed, but is the strategy on the our + * current v3 version. + */ + const timeoutMultiplier = hostsTimeouted.length === 0 && timeoutsCount === 0 + ? 1 + : hostsTimeouted.length + 3 + timeoutsCount; + return timeoutMultiplier * baseTimeout; + }, + statelessHosts: statelessHostsAvailable, + }; + }); +} + +const isNetworkError = ({ isTimedOut, status }) => { + return !isTimedOut && ~~status === 0; +}; +const isRetryable = (response) => { + const status = response.status; + const isTimedOut = response.isTimedOut; + return (isTimedOut || isNetworkError(response) || (~~(status / 100) !== 2 && ~~(status / 100) !== 4)); +}; +const isSuccess = ({ status }) => { + return ~~(status / 100) === 2; +}; +const retryDecision = (response, outcomes) => { + if (isRetryable(response)) { + return outcomes.onRetry(response); + } + if (isSuccess(response)) { + return outcomes.onSuccess(response); + } + return outcomes.onFail(response); +}; + +function retryableRequest(transporter, statelessHosts, request, requestOptions) { + const stackTrace = []; // eslint-disable-line functional/prefer-readonly-type + /** + * First we prepare the payload that do not depend from hosts. + */ + const data = serializeData(request, requestOptions); + const headers = serializeHeaders(transporter, requestOptions); + const method = request.method; + // On `GET`, the data is proxied to query parameters. + const dataQueryParameters = request.method !== MethodEnum.Get + ? {} + : { + ...request.data, + ...requestOptions.data, + }; + const queryParameters = { + 'x-algolia-agent': transporter.userAgent.value, + ...transporter.queryParameters, + ...dataQueryParameters, + ...requestOptions.queryParameters, + }; + let timeoutsCount = 0; // eslint-disable-line functional/no-let + const retry = (hosts, // eslint-disable-line functional/prefer-readonly-type + getTimeout) => { + /** + * We iterate on each host, until there is no host left. + */ + const host = hosts.pop(); // eslint-disable-line functional/immutable-data + if (host === undefined) { + throw createRetryError(stackTraceWithoutCredentials(stackTrace)); + } + const payload = { + data, + headers, + method, + url: serializeUrl(host, request.path, queryParameters), + connectTimeout: getTimeout(timeoutsCount, transporter.timeouts.connect), + responseTimeout: getTimeout(timeoutsCount, requestOptions.timeout), + }; + /** + * The stackFrame is pushed to the stackTrace so we + * can have information about onRetry and onFailure + * decisions. + */ + const pushToStackTrace = (response) => { + const stackFrame = { + request: payload, + response, + host, + triesLeft: hosts.length, + }; + // eslint-disable-next-line functional/immutable-data + stackTrace.push(stackFrame); + return stackFrame; + }; + const decisions = { + onSuccess: response => deserializeSuccess(response), + onRetry(response) { + const stackFrame = pushToStackTrace(response); + /** + * If response is a timeout, we increaset the number of + * timeouts so we can increase the timeout later. + */ + if (response.isTimedOut) { + timeoutsCount++; + } + return Promise.all([ + /** + * Failures are individually send the logger, allowing + * the end user to debug / store stack frames even + * when a retry error does not happen. + */ + transporter.logger.info('Retryable failure', stackFrameWithoutCredentials(stackFrame)), + /** + * We also store the state of the host in failure cases. If the host, is + * down it will remain down for the next 2 minutes. In a timeout situation, + * this host will be added end of the list of hosts on the next request. + */ + transporter.hostsCache.set(host, createStatefulHost(host, response.isTimedOut ? HostStatusEnum.Timeouted : HostStatusEnum.Down)), + ]).then(() => retry(hosts, getTimeout)); + }, + onFail(response) { + pushToStackTrace(response); + throw deserializeFailure(response, stackTraceWithoutCredentials(stackTrace)); + }, + }; + return transporter.requester.send(payload).then(response => { + return retryDecision(response, decisions); + }); + }; + /** + * Finally, for each retryable host perform request until we got a non + * retryable response. Some notes here: + * + * 1. The reverse here is applied so we can apply a `pop` later on => more performant. + * 2. We also get from the retryable options a timeout multiplier that is tailored + * for the current context. + */ + return createRetryableOptions(transporter.hostsCache, statelessHosts).then(options => { + return retry([...options.statelessHosts].reverse(), options.getTimeout); + }); +} + +function createTransporter(options) { + const { hostsCache, logger, requester, requestsCache, responsesCache, timeouts, userAgent, hosts, queryParameters, headers, } = options; + const transporter = { + hostsCache, + logger, + requester, + requestsCache, + responsesCache, + timeouts, + userAgent, + headers, + queryParameters, + hosts: hosts.map(host => createStatelessHost(host)), + read(request, requestOptions) { + /** + * First, we compute the user request options. Now, keep in mind, + * that using request options the user is able to modified the intire + * payload of the request. Such as headers, query parameters, and others. + */ + const mappedRequestOptions = createMappedRequestOptions(requestOptions, transporter.timeouts.read); + const createRetryableRequest = () => { + /** + * Then, we prepare a function factory that contains the construction of + * the retryable request. At this point, we may *not* perform the actual + * request. But we want to have the function factory ready. + */ + return retryableRequest(transporter, transporter.hosts.filter(host => (host.accept & CallEnum.Read) !== 0), request, mappedRequestOptions); + }; + /** + * Once we have the function factory ready, we need to determine of the + * request is "cacheable" - should be cached. Note that, once again, + * the user can force this option. + */ + const cacheable = mappedRequestOptions.cacheable !== undefined + ? mappedRequestOptions.cacheable + : request.cacheable; + /** + * If is not "cacheable", we immediatly trigger the retryable request, no + * need to check cache implementations. + */ + if (cacheable !== true) { + return createRetryableRequest(); + } + /** + * If the request is "cacheable", we need to first compute the key to ask + * the cache implementations if this request is on progress or if the + * response already exists on the cache. + */ + const key = { + request, + mappedRequestOptions, + transporter: { + queryParameters: transporter.queryParameters, + headers: transporter.headers, + }, + }; + /** + * With the computed key, we first ask the responses cache + * implemention if this request was been resolved before. + */ + return transporter.responsesCache.get(key, () => { + /** + * If the request has never resolved before, we actually ask if there + * is a current request with the same key on progress. + */ + return transporter.requestsCache.get(key, () => { + return (transporter.requestsCache + /** + * Finally, if there is no request in progress with the same key, + * this `createRetryableRequest()` will actually trigger the + * retryable request. + */ + .set(key, createRetryableRequest()) + .then(response => Promise.all([transporter.requestsCache.delete(key), response]), err => Promise.all([transporter.requestsCache.delete(key), Promise.reject(err)])) + .then(([_, response]) => response)); + }); + }, { + /** + * Of course, once we get this response back from the server, we + * tell response cache to actually store the received response + * to be used later. + */ + miss: response => transporter.responsesCache.set(key, response), + }); + }, + write(request, requestOptions) { + /** + * On write requests, no cache mechanisms are applied, and we + * proxy the request immediately to the requester. + */ + return retryableRequest(transporter, transporter.hosts.filter(host => (host.accept & CallEnum.Write) !== 0), request, createMappedRequestOptions(requestOptions, transporter.timeouts.write)); + }, + }; + return transporter; +} + +function createUserAgent(version) { + const userAgent = { + value: `Algolia for JavaScript (${version})`, + add(options) { + const addedUserAgent = `; ${options.segment}${options.version !== undefined ? ` (${options.version})` : ''}`; + if (userAgent.value.indexOf(addedUserAgent) === -1) { + // eslint-disable-next-line functional/immutable-data + userAgent.value = `${userAgent.value}${addedUserAgent}`; + } + return userAgent; + }, + }; + return userAgent; +} + +function deserializeSuccess(response) { + // eslint-disable-next-line functional/no-try-statement + try { + return JSON.parse(response.content); + } + catch (e) { + throw createDeserializationError(e.message, response); + } +} +function deserializeFailure({ content, status }, stackFrame) { + // eslint-disable-next-line functional/no-let + let message = content; + // eslint-disable-next-line functional/no-try-statement + try { + message = JSON.parse(content).message; + } + catch (e) { + // .. + } + return createApiError(message, status, stackFrame); +} + +function serializeUrl(host, path, queryParameters) { + const queryParametersAsString = serializeQueryParameters(queryParameters); + // eslint-disable-next-line functional/no-let + let url = `${host.protocol}://${host.url}/${path.charAt(0) === '/' ? path.substr(1) : path}`; + if (queryParametersAsString.length) { + url += `?${queryParametersAsString}`; + } + return url; +} +function serializeQueryParameters(parameters) { + const isObjectOrArray = (value) => Object.prototype.toString.call(value) === '[object Object]' || + Object.prototype.toString.call(value) === '[object Array]'; + return Object.keys(parameters) + .map(key => encode('%s=%s', key, isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key])) + .join('&'); +} +function serializeData(request, requestOptions) { + if (request.method === MethodEnum.Get || + (request.data === undefined && requestOptions.data === undefined)) { + return undefined; + } + const data = Array.isArray(request.data) + ? request.data + : { ...request.data, ...requestOptions.data }; + return JSON.stringify(data); +} +function serializeHeaders(transporter, requestOptions) { + const headers = { + ...transporter.headers, + ...requestOptions.headers, + }; + const serializedHeaders = {}; + Object.keys(headers).forEach(header => { + const value = headers[header]; + // @ts-ignore + // eslint-disable-next-line functional/immutable-data + serializedHeaders[header.toLowerCase()] = value; + }); + return serializedHeaders; +} + +function stackTraceWithoutCredentials(stackTrace) { + return stackTrace.map(stackFrame => stackFrameWithoutCredentials(stackFrame)); +} +function stackFrameWithoutCredentials(stackFrame) { + const modifiedHeaders = stackFrame.request.headers['x-algolia-api-key'] + ? { 'x-algolia-api-key': '*****' } + : {}; + return { + ...stackFrame, + request: { + ...stackFrame.request, + headers: { + ...stackFrame.request.headers, + ...modifiedHeaders, + }, + }, + }; +} + +function createApiError(message, status, transporterStackTrace) { + return { + name: 'ApiError', + message, + status, + transporterStackTrace, + }; +} + +function createDeserializationError(message, response) { + return { + name: 'DeserializationError', + message, + response, + }; +} + +function createRetryError(transporterStackTrace) { + return { + name: 'RetryError', + message: 'Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.', + transporterStackTrace, + }; +} + +const createAnalyticsClient = options => { + const region = options.region || 'us'; + const auth = createAuth(AuthMode.WithinHeaders, options.appId, options.apiKey); + const transporter = createTransporter({ + hosts: [{ url: `analytics.${region}.algolia.com` }], + ...options, + headers: { + ...auth.headers(), + ...{ 'content-type': 'application/json' }, + ...options.headers, + }, + queryParameters: { + ...auth.queryParameters(), + ...options.queryParameters, + }, + }); + const appId = options.appId; + return addMethods({ appId, transporter }, options.methods); +}; + +const addABTest = (base) => { + return (abTest, requestOptions) => { + return base.transporter.write({ + method: MethodEnum.Post, + path: '2/abtests', + data: abTest, + }, requestOptions); + }; +}; + +const deleteABTest = (base) => { + return (abTestID, requestOptions) => { + return base.transporter.write({ + method: MethodEnum.Delete, + path: encode('2/abtests/%s', abTestID), + }, requestOptions); + }; +}; + +const getABTest = (base) => { + return (abTestID, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: encode('2/abtests/%s', abTestID), + }, requestOptions); + }; +}; + +const getABTests = (base) => { + return (requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: '2/abtests', + }, requestOptions); + }; +}; + +const stopABTest = (base) => { + return (abTestID, requestOptions) => { + return base.transporter.write({ + method: MethodEnum.Post, + path: encode('2/abtests/%s/stop', abTestID), + }, requestOptions); + }; +}; + +const createPersonalizationClient = options => { + const region = options.region || 'us'; + const auth = createAuth(AuthMode.WithinHeaders, options.appId, options.apiKey); + const transporter = createTransporter({ + hosts: [{ url: `personalization.${region}.algolia.com` }], + ...options, + headers: { + ...auth.headers(), + ...{ 'content-type': 'application/json' }, + ...options.headers, + }, + queryParameters: { + ...auth.queryParameters(), + ...options.queryParameters, + }, + }); + return addMethods({ appId: options.appId, transporter }, options.methods); +}; + +const getPersonalizationStrategy = (base) => { + return (requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: '1/strategies/personalization', + }, requestOptions); + }; +}; + +const setPersonalizationStrategy = (base) => { + return (personalizationStrategy, requestOptions) => { + return base.transporter.write({ + method: MethodEnum.Post, + path: '1/strategies/personalization', + data: personalizationStrategy, + }, requestOptions); + }; +}; + +function createBrowsablePromise(options) { + const browse = (data) => { + return options.request(data).then(response => { + /** + * First we send to the developer the + * batch retrieved from the API. + */ + if (options.batch !== undefined) { + options.batch(response.hits); + } + /** + * Then, we ask to the browse concrete implementation + * if we should stop browsing. As example, the `browseObjects` + * method will stop if the cursor is not present on the response. + */ + if (options.shouldStop(response)) { + return undefined; + } + /** + * Finally, if the response contains a cursor, we browse to the next + * batch using that same cursor. Otherwise, we just use the traditional + * browsing using the page element. + */ + if (response.cursor) { + return browse({ + cursor: response.cursor, + }); + } + return browse({ + page: (data.page || 0) + 1, + }); + }); + }; + return browse({}); +} + +const createSearchClient = options => { + const appId = options.appId; + const auth = createAuth(options.authMode !== undefined ? options.authMode : AuthMode.WithinHeaders, appId, options.apiKey); + const transporter = createTransporter({ + hosts: [ + { url: `${appId}-dsn.algolia.net`, accept: CallEnum.Read }, + { url: `${appId}.algolia.net`, accept: CallEnum.Write }, + ].concat(shuffle([ + { url: `${appId}-1.algolianet.com` }, + { url: `${appId}-2.algolianet.com` }, + { url: `${appId}-3.algolianet.com` }, + ])), + ...options, + headers: { + ...auth.headers(), + ...{ 'content-type': 'application/x-www-form-urlencoded' }, + ...options.headers, + }, + queryParameters: { + ...auth.queryParameters(), + ...options.queryParameters, + }, + }); + const base = { + transporter, + appId, + addAlgoliaAgent(segment, version) { + transporter.userAgent.add({ segment, version }); + }, + clearCache() { + return Promise.all([ + transporter.requestsCache.clear(), + transporter.responsesCache.clear(), + ]).then(() => undefined); + }, + }; + return addMethods(base, options.methods); +}; + +function createMissingObjectIDError() { + return { + name: 'MissingObjectIDError', + message: 'All objects must have an unique objectID ' + + '(like a primary key) to be valid. ' + + 'Algolia is also able to generate objectIDs ' + + "automatically but *it's not recommended*. " + + "To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option.", + }; +} + +function createObjectNotFoundError() { + return { + name: 'ObjectNotFoundError', + message: 'Object not found.', + }; +} + +const addApiKey = (base) => { + return (acl, requestOptions) => { + const { queryParameters, ...options } = requestOptions || {}; + const data = { + acl, + ...(queryParameters !== undefined ? { queryParameters } : {}), + }; + const wait = (response, waitRequestOptions) => { + return createRetryablePromise(retry => { + return getApiKey(base)(response.key, waitRequestOptions).catch((apiError) => { + if (apiError.status !== 404) { + throw apiError; + } + return retry(); + }); + }); + }; + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: '1/keys', + data, + }, options), wait); + }; +}; + +const assignUserID = (base) => { + return (userID, clusterName, requestOptions) => { + const mappedRequestOptions = createMappedRequestOptions(requestOptions); + // eslint-disable-next-line functional/immutable-data + mappedRequestOptions.queryParameters['X-Algolia-User-ID'] = userID; + return base.transporter.write({ + method: MethodEnum.Post, + path: '1/clusters/mapping', + data: { cluster: clusterName }, + }, mappedRequestOptions); + }; +}; + +const assignUserIDs = (base) => { + return (userIDs, clusterName, requestOptions) => { + return base.transporter.write({ + method: MethodEnum.Post, + path: '1/clusters/mapping/batch', + data: { + users: userIDs, + cluster: clusterName, + }, + }, requestOptions); + }; +}; + +const clearDictionaryEntries = (base) => { + return (dictionary, requestOptions) => { + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: encode('/1/dictionaries/%s/batch', dictionary), + data: { + clearExistingDictionaryEntries: true, + requests: { action: 'addEntry', body: [] }, + }, + }, requestOptions), (response, waitRequestOptions) => waitAppTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const copyIndex = (base) => { + return (from, to, requestOptions) => { + const wait = (response, waitRequestOptions) => { + return initIndex(base)(from, { + methods: { waitTask }, + }).waitTask(response.taskID, waitRequestOptions); + }; + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/operation', from), + data: { + operation: 'copy', + destination: to, + }, + }, requestOptions), wait); + }; +}; + +const copyRules = (base) => { + return (from, to, requestOptions) => { + return copyIndex(base)(from, to, { + ...requestOptions, + scope: [ScopeEnum.Rules], + }); + }; +}; + +const copySettings = (base) => { + return (from, to, requestOptions) => { + return copyIndex(base)(from, to, { + ...requestOptions, + scope: [ScopeEnum.Settings], + }); + }; +}; + +const copySynonyms = (base) => { + return (from, to, requestOptions) => { + return copyIndex(base)(from, to, { + ...requestOptions, + scope: [ScopeEnum.Synonyms], + }); + }; +}; + +const customRequest = (base) => { + return (request, requestOptions) => { + if (request.method === MethodEnum.Get) { + return base.transporter.read(request, requestOptions); + } + return base.transporter.write(request, requestOptions); + }; +}; + +const deleteApiKey = (base) => { + return (apiKey, requestOptions) => { + const wait = (_, waitRequestOptions) => { + return createRetryablePromise(retry => { + return getApiKey(base)(apiKey, waitRequestOptions) + .then(retry) + .catch((apiError) => { + if (apiError.status !== 404) { + throw apiError; + } + }); + }); + }; + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Delete, + path: encode('1/keys/%s', apiKey), + }, requestOptions), wait); + }; +}; + +const deleteDictionaryEntries = (base) => { + return (dictionary, objectIDs, requestOptions) => { + const requests = objectIDs.map(objectID => ({ + action: 'deleteEntry', + body: { objectID }, + })); + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: encode('/1/dictionaries/%s/batch', dictionary), + data: { clearExistingDictionaryEntries: false, requests }, + }, requestOptions), (response, waitRequestOptions) => waitAppTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const getApiKey = (base) => { + return (apiKey, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: encode('1/keys/%s', apiKey), + }, requestOptions); + }; +}; + +const getAppTask = (base) => { + return (taskID, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: encode('1/task/%s', taskID.toString()), + }, requestOptions); + }; +}; + +const getDictionarySettings = (base) => { + return (requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: '/1/dictionaries/*/settings', + }, requestOptions); + }; +}; + +const getLogs = (base) => { + return (requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: '1/logs', + }, requestOptions); + }; +}; + +const getTopUserIDs = (base) => { + return (requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: '1/clusters/mapping/top', + }, requestOptions); + }; +}; + +const getUserID = (base) => { + return (userID, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: encode('1/clusters/mapping/%s', userID), + }, requestOptions); + }; +}; + +const hasPendingMappings = (base) => { + return (requestOptions) => { + const { retrieveMappings, ...options } = requestOptions || {}; + if (retrieveMappings === true) { + // eslint-disable-next-line functional/immutable-data + options.getClusters = true; + } + return base.transporter.read({ + method: MethodEnum.Get, + path: '1/clusters/mapping/pending', + }, options); + }; +}; + +const initIndex = (base) => { + return (indexName, options = {}) => { + const searchIndex = { + transporter: base.transporter, + appId: base.appId, + indexName, + }; + return addMethods(searchIndex, options.methods); + }; +}; + +const listApiKeys = (base) => { + return (requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: '1/keys', + }, requestOptions); + }; +}; + +const listClusters = (base) => { + return (requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: '1/clusters', + }, requestOptions); + }; +}; + +const listIndices = (base) => { + return (requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: '1/indexes', + }, requestOptions); + }; +}; + +const listUserIDs = (base) => { + return (requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: '1/clusters/mapping', + }, requestOptions); + }; +}; + +const moveIndex = (base) => { + return (from, to, requestOptions) => { + const wait = (response, waitRequestOptions) => { + return initIndex(base)(from, { + methods: { waitTask }, + }).waitTask(response.taskID, waitRequestOptions); + }; + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/operation', from), + data: { + operation: 'move', + destination: to, + }, + }, requestOptions), wait); + }; +}; + +const multipleBatch = (base) => { + return (requests, requestOptions) => { + const wait = (response, waitRequestOptions) => { + return Promise.all(Object.keys(response.taskID).map(indexName => { + return initIndex(base)(indexName, { + methods: { waitTask }, + }).waitTask(response.taskID[indexName], waitRequestOptions); + })); + }; + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: '1/indexes/*/batch', + data: { + requests, + }, + }, requestOptions), wait); + }; +}; + +const multipleGetObjects = (base) => { + return (requests, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Post, + path: '1/indexes/*/objects', + data: { + requests, + }, + }, requestOptions); + }; +}; + +const multipleQueries = (base) => { + return (queries, requestOptions) => { + const requests = queries.map(query => { + return { + ...query, + params: serializeQueryParameters(query.params || {}), + }; + }); + return base.transporter.read({ + method: MethodEnum.Post, + path: '1/indexes/*/queries', + data: { + requests, + }, + cacheable: true, + }, requestOptions); + }; +}; + +const multipleSearchForFacetValues = (base) => { + return (queries, requestOptions) => { + return Promise.all(queries.map(query => { + const { facetName, facetQuery, ...params } = query.params; + return initIndex(base)(query.indexName, { + methods: { searchForFacetValues }, + }).searchForFacetValues(facetName, facetQuery, { + ...requestOptions, + ...params, + }); + })); + }; +}; + +const removeUserID = (base) => { + return (userID, requestOptions) => { + const mappedRequestOptions = createMappedRequestOptions(requestOptions); + // eslint-disable-next-line functional/immutable-data + mappedRequestOptions.queryParameters['X-Algolia-User-ID'] = userID; + return base.transporter.write({ + method: MethodEnum.Delete, + path: '1/clusters/mapping', + }, mappedRequestOptions); + }; +}; + +const replaceDictionaryEntries = (base) => { + return (dictionary, entries, requestOptions) => { + const requests = entries.map(entry => ({ + action: 'addEntry', + body: entry, + })); + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: encode('/1/dictionaries/%s/batch', dictionary), + data: { clearExistingDictionaryEntries: true, requests }, + }, requestOptions), (response, waitRequestOptions) => waitAppTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const restoreApiKey = (base) => { + return (apiKey, requestOptions) => { + const wait = (_, waitRequestOptions) => { + return createRetryablePromise(retry => { + return getApiKey(base)(apiKey, waitRequestOptions).catch((apiError) => { + if (apiError.status !== 404) { + throw apiError; + } + return retry(); + }); + }); + }; + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: encode('1/keys/%s/restore', apiKey), + }, requestOptions), wait); + }; +}; + +const saveDictionaryEntries = (base) => { + return (dictionary, entries, requestOptions) => { + const requests = entries.map(entry => ({ + action: 'addEntry', + body: entry, + })); + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: encode('/1/dictionaries/%s/batch', dictionary), + data: { clearExistingDictionaryEntries: false, requests }, + }, requestOptions), (response, waitRequestOptions) => waitAppTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const searchDictionaryEntries = (base) => { + return (dictionary, query, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Post, + path: encode('/1/dictionaries/%s/search', dictionary), + data: { + query, + }, + cacheable: true, + }, requestOptions); + }; +}; + +const searchUserIDs = (base) => { + return (query, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Post, + path: '1/clusters/mapping/search', + data: { + query, + }, + }, requestOptions); + }; +}; + +const setDictionarySettings = (base) => { + return (settings, requestOptions) => { + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Put, + path: '/1/dictionaries/*/settings', + data: settings, + }, requestOptions), (response, waitRequestOptions) => waitAppTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const updateApiKey = (base) => { + return (apiKey, requestOptions) => { + const updatedFields = Object.assign({}, requestOptions); + const { queryParameters, ...options } = requestOptions || {}; + const data = queryParameters ? { queryParameters } : {}; + const apiKeyFields = [ + 'acl', + 'indexes', + 'referers', + 'restrictSources', + 'queryParameters', + 'description', + 'maxQueriesPerIPPerHour', + 'maxHitsPerQuery', + ]; + const hasChanged = (getApiKeyResponse) => { + return Object.keys(updatedFields) + .filter((updatedField) => apiKeyFields.indexOf(updatedField) !== -1) + .every(updatedField => { + return getApiKeyResponse[updatedField] === updatedFields[updatedField]; + }); + }; + const wait = (_, waitRequestOptions) => createRetryablePromise(retry => { + return getApiKey(base)(apiKey, waitRequestOptions).then(getApiKeyResponse => { + return hasChanged(getApiKeyResponse) ? Promise.resolve() : retry(); + }); + }); + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Put, + path: encode('1/keys/%s', apiKey), + data, + }, options), wait); + }; +}; + +const waitAppTask = (base) => { + return (taskID, requestOptions) => { + return createRetryablePromise(retry => { + return getAppTask(base)(taskID, requestOptions).then(response => { + return response.status !== 'published' ? retry() : undefined; + }); + }); + }; +}; + +const batch = (base) => { + return (requests, requestOptions) => { + const wait = (response, waitRequestOptions) => { + return waitTask(base)(response.taskID, waitRequestOptions); + }; + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/batch', base.indexName), + data: { + requests, + }, + }, requestOptions), wait); + }; +}; + +const browseObjects = (base) => { + return (requestOptions) => { + return createBrowsablePromise({ + shouldStop: response => response.cursor === undefined, + ...requestOptions, + request: (data) => base.transporter.read({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/browse', base.indexName), + data, + }, requestOptions), + }); + }; +}; + +const browseRules = (base) => { + return (requestOptions) => { + const options = { + hitsPerPage: 1000, + ...requestOptions, + }; + return createBrowsablePromise({ + shouldStop: response => response.hits.length < options.hitsPerPage, + ...options, + request(data) { + return searchRules(base)('', { ...options, ...data }).then((response) => { + return { + ...response, + hits: response.hits.map(rule => { + // eslint-disable-next-line functional/immutable-data,no-param-reassign + delete rule._highlightResult; + return rule; + }), + }; + }); + }, + }); + }; +}; + +const browseSynonyms = (base) => { + return (requestOptions) => { + const options = { + hitsPerPage: 1000, + ...requestOptions, + }; + return createBrowsablePromise({ + shouldStop: response => response.hits.length < options.hitsPerPage, + ...options, + request(data) { + return searchSynonyms(base)('', { ...options, ...data }).then((response) => { + return { + ...response, + hits: response.hits.map(synonym => { + // eslint-disable-next-line functional/immutable-data,no-param-reassign + delete synonym._highlightResult; + return synonym; + }), + }; + }); + }, + }); + }; +}; + +const chunkedBatch = (base) => { + return (bodies, action, requestOptions) => { + const { batchSize, ...options } = requestOptions || {}; + const response = { + taskIDs: [], + objectIDs: [], + }; + const forEachBatch = (lastIndex = 0) => { + // eslint-disable-next-line functional/prefer-readonly-type + const bodiesChunk = []; + // eslint-disable-next-line functional/no-let + let index; + /* eslint-disable-next-line functional/no-loop-statement */ + for (index = lastIndex; index < bodies.length; index++) { + // eslint-disable-next-line functional/immutable-data + bodiesChunk.push(bodies[index]); + if (bodiesChunk.length === (batchSize || 1000)) { + break; + } + } + if (bodiesChunk.length === 0) { + return Promise.resolve(response); + } + return batch(base)(bodiesChunk.map(body => { + return { + action, + body, + }; + }), options).then(res => { + response.objectIDs = response.objectIDs.concat(res.objectIDs); // eslint-disable-line functional/immutable-data + response.taskIDs.push(res.taskID); // eslint-disable-line functional/immutable-data + index++; + return forEachBatch(index); + }); + }; + return createWaitablePromise(forEachBatch(), (chunkedBatchResponse, waitRequestOptions) => { + return Promise.all(chunkedBatchResponse.taskIDs.map(taskID => { + return waitTask(base)(taskID, waitRequestOptions); + })); + }); + }; +}; + +const clearObjects = (base) => { + return (requestOptions) => { + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/clear', base.indexName), + }, requestOptions), (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const clearRules = (base) => { + return (requestOptions) => { + const { forwardToReplicas, ...options } = requestOptions || {}; + const mappedRequestOptions = createMappedRequestOptions(options); + if (forwardToReplicas) { + mappedRequestOptions.queryParameters.forwardToReplicas = 1; // eslint-disable-line functional/immutable-data + } + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/rules/clear', base.indexName), + }, mappedRequestOptions), (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const clearSynonyms = (base) => { + return (requestOptions) => { + const { forwardToReplicas, ...options } = requestOptions || {}; + const mappedRequestOptions = createMappedRequestOptions(options); + if (forwardToReplicas) { + mappedRequestOptions.queryParameters.forwardToReplicas = 1; // eslint-disable-line functional/immutable-data + } + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/synonyms/clear', base.indexName), + }, mappedRequestOptions), (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const deleteBy = (base) => { + return (filters, requestOptions) => { + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/deleteByQuery', base.indexName), + data: filters, + }, requestOptions), (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const deleteIndex = (base) => { + return (requestOptions) => { + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Delete, + path: encode('1/indexes/%s', base.indexName), + }, requestOptions), (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const deleteObject = (base) => { + return (objectID, requestOptions) => { + return createWaitablePromise(deleteObjects(base)([objectID], requestOptions).then(response => { + return { taskID: response.taskIDs[0] }; + }), (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const deleteObjects = (base) => { + return (objectIDs, requestOptions) => { + const objects = objectIDs.map(objectID => { + return { objectID }; + }); + return chunkedBatch(base)(objects, BatchActionEnum.DeleteObject, requestOptions); + }; +}; + +const deleteRule = (base) => { + return (objectID, requestOptions) => { + const { forwardToReplicas, ...options } = requestOptions || {}; + const mappedRequestOptions = createMappedRequestOptions(options); + if (forwardToReplicas) { + mappedRequestOptions.queryParameters.forwardToReplicas = 1; // eslint-disable-line functional/immutable-data + } + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Delete, + path: encode('1/indexes/%s/rules/%s', base.indexName, objectID), + }, mappedRequestOptions), (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const deleteSynonym = (base) => { + return (objectID, requestOptions) => { + const { forwardToReplicas, ...options } = requestOptions || {}; + const mappedRequestOptions = createMappedRequestOptions(options); + if (forwardToReplicas) { + mappedRequestOptions.queryParameters.forwardToReplicas = 1; // eslint-disable-line functional/immutable-data + } + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Delete, + path: encode('1/indexes/%s/synonyms/%s', base.indexName, objectID), + }, mappedRequestOptions), (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const exists = (base) => { + return (requestOptions) => { + return getSettings(base)(requestOptions) + .then(() => true) + .catch(error => { + if (error.status !== 404) { + throw error; + } + return false; + }); + }; +}; + +const findAnswers = (base) => { + return (query, queryLanguages, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Post, + path: encode('1/answers/%s/prediction', base.indexName), + data: { + query, + queryLanguages, + }, + cacheable: true, + }, requestOptions); + }; +}; + +const findObject = (base) => { + return (callback, requestOptions) => { + const { query, paginate, ...options } = requestOptions || {}; + // eslint-disable-next-line functional/no-let + let page = 0; + const forEachPage = () => { + return search(base)(query || '', { ...options, page }).then(result => { + // eslint-disable-next-line functional/no-loop-statement + for (const [position, hit] of Object.entries(result.hits)) { + // eslint-disable-next-line promise/no-callback-in-promise + if (callback(hit)) { + return { + object: hit, + position: parseInt(position, 10), + page, + }; + } + } + page++; + // paginate if option was set and has next page + if (paginate === false || page >= result.nbPages) { + throw createObjectNotFoundError(); + } + return forEachPage(); + }); + }; + return forEachPage(); + }; +}; + +const getObject = (base) => { + return (objectID, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: encode('1/indexes/%s/%s', base.indexName, objectID), + }, requestOptions); + }; +}; + +const getObjectPosition = () => { + return (searchResponse, objectID) => { + // eslint-disable-next-line functional/no-loop-statement + for (const [position, hit] of Object.entries(searchResponse.hits)) { + if (hit.objectID === objectID) { + return parseInt(position, 10); + } + } + return -1; + }; +}; + +const getObjects = (base) => { + return (objectIDs, requestOptions) => { + const { attributesToRetrieve, ...options } = requestOptions || {}; + const requests = objectIDs.map(objectID => { + return { + indexName: base.indexName, + objectID, + ...(attributesToRetrieve ? { attributesToRetrieve } : {}), + }; + }); + return base.transporter.read({ + method: MethodEnum.Post, + path: '1/indexes/*/objects', + data: { + requests, + }, + }, options); + }; +}; + +const getRule = (base) => { + return (objectID, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: encode('1/indexes/%s/rules/%s', base.indexName, objectID), + }, requestOptions); + }; +}; + +const getSettings = (base) => { + return (requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: encode('1/indexes/%s/settings', base.indexName), + data: { + getVersion: 2, + }, + }, requestOptions); + }; +}; + +const getSynonym = (base) => { + return (objectID, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: encode(`1/indexes/%s/synonyms/%s`, base.indexName, objectID), + }, requestOptions); + }; +}; + +const getTask = (base) => { + return (taskID, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Get, + path: encode('1/indexes/%s/task/%s', base.indexName, taskID.toString()), + }, requestOptions); + }; +}; + +const partialUpdateObject = (base) => { + return (object, requestOptions) => { + return createWaitablePromise(partialUpdateObjects(base)([object], requestOptions).then(response => { + return { + objectID: response.objectIDs[0], + taskID: response.taskIDs[0], + }; + }), (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const partialUpdateObjects = (base) => { + return (objects, requestOptions) => { + const { createIfNotExists, ...options } = requestOptions || {}; + const action = createIfNotExists + ? BatchActionEnum.PartialUpdateObject + : BatchActionEnum.PartialUpdateObjectNoCreate; + return chunkedBatch(base)(objects, action, options); + }; +}; + +const replaceAllObjects = (base) => { + return (objects, requestOptions) => { + const { safe, autoGenerateObjectIDIfNotExist, batchSize, ...options } = requestOptions || {}; + const operation = (from, to, type, operationRequestOptions) => { + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/operation', from), + data: { + operation: type, + destination: to, + }, + }, operationRequestOptions), (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions)); + }; + const randomSuffix = Math.random() + .toString(36) + .substring(7); + const temporaryIndexName = `${base.indexName}_tmp_${randomSuffix}`; + const saveObjectsInTemporary = saveObjects({ + appId: base.appId, + transporter: base.transporter, + indexName: temporaryIndexName, + }); + // @ts-ignore + // eslint-disable-next-line prefer-const, functional/no-let, functional/prefer-readonly-type + let responses = []; + const copyWaitablePromise = operation(base.indexName, temporaryIndexName, 'copy', { + ...options, + scope: ['settings', 'synonyms', 'rules'], + }); + // eslint-disable-next-line functional/immutable-data + responses.push(copyWaitablePromise); + const result = (safe + ? copyWaitablePromise.wait(options) + : copyWaitablePromise) + .then(() => { + const saveObjectsWaitablePromise = saveObjectsInTemporary(objects, { + ...options, + autoGenerateObjectIDIfNotExist, + batchSize, + }); + // eslint-disable-next-line functional/immutable-data + responses.push(saveObjectsWaitablePromise); + return safe ? saveObjectsWaitablePromise.wait(options) : saveObjectsWaitablePromise; + }) + .then(() => { + const moveWaitablePromise = operation(temporaryIndexName, base.indexName, 'move', options); + // eslint-disable-next-line functional/immutable-data + responses.push(moveWaitablePromise); + return safe ? moveWaitablePromise.wait(options) : moveWaitablePromise; + }) + .then(() => Promise.all(responses)) + .then(([copyResponse, saveObjectsResponse, moveResponse]) => { + return { + objectIDs: saveObjectsResponse.objectIDs, + taskIDs: [copyResponse.taskID, ...saveObjectsResponse.taskIDs, moveResponse.taskID], + }; + }); + return createWaitablePromise(result, (_, waitRequestOptions) => { + return Promise.all(responses.map(response => response.wait(waitRequestOptions))); + }); + }; +}; + +const replaceAllRules = (base) => { + return (rules, requestOptions) => { + return saveRules(base)(rules, { + ...requestOptions, + clearExistingRules: true, + }); + }; +}; + +const replaceAllSynonyms = (base) => { + return (synonyms, requestOptions) => { + return saveSynonyms(base)(synonyms, { + ...requestOptions, + clearExistingSynonyms: true, + }); + }; +}; + +const saveObject = (base) => { + return (object, requestOptions) => { + return createWaitablePromise(saveObjects(base)([object], requestOptions).then(response => { + return { + objectID: response.objectIDs[0], + taskID: response.taskIDs[0], + }; + }), (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const saveObjects = (base) => { + return (objects, requestOptions) => { + const { autoGenerateObjectIDIfNotExist, ...options } = requestOptions || {}; + const action = autoGenerateObjectIDIfNotExist + ? BatchActionEnum.AddObject + : BatchActionEnum.UpdateObject; + if (action === BatchActionEnum.UpdateObject) { + // eslint-disable-next-line functional/no-loop-statement + for (const object of objects) { + if (object.objectID === undefined) { + return createWaitablePromise(Promise.reject(createMissingObjectIDError())); + } + } + } + return chunkedBatch(base)(objects, action, options); + }; +}; + +const saveRule = (base) => { + return (rule, requestOptions) => { + return saveRules(base)([rule], requestOptions); + }; +}; + +const saveRules = (base) => { + return (rules, requestOptions) => { + const { forwardToReplicas, clearExistingRules, ...options } = requestOptions || {}; + const mappedRequestOptions = createMappedRequestOptions(options); + if (forwardToReplicas) { + mappedRequestOptions.queryParameters.forwardToReplicas = 1; // eslint-disable-line functional/immutable-data + } + if (clearExistingRules) { + mappedRequestOptions.queryParameters.clearExistingRules = 1; // eslint-disable-line functional/immutable-data + } + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/rules/batch', base.indexName), + data: rules, + }, mappedRequestOptions), (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const saveSynonym = (base) => { + return (synonym, requestOptions) => { + return saveSynonyms(base)([synonym], requestOptions); + }; +}; + +const saveSynonyms = (base) => { + return (synonyms, requestOptions) => { + const { forwardToReplicas, clearExistingSynonyms, replaceExistingSynonyms, ...options } = requestOptions || {}; + const mappedRequestOptions = createMappedRequestOptions(options); + if (forwardToReplicas) { + mappedRequestOptions.queryParameters.forwardToReplicas = 1; // eslint-disable-line functional/immutable-data + } + if (replaceExistingSynonyms || clearExistingSynonyms) { + mappedRequestOptions.queryParameters.replaceExistingSynonyms = 1; // eslint-disable-line functional/immutable-data + } + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/synonyms/batch', base.indexName), + data: synonyms, + }, mappedRequestOptions), (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const search = (base) => { + return (query, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/query', base.indexName), + data: { + query, + }, + cacheable: true, + }, requestOptions); + }; +}; + +const searchForFacetValues = (base) => { + return (facetName, facetQuery, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/facets/%s/query', base.indexName, facetName), + data: { + facetQuery, + }, + cacheable: true, + }, requestOptions); + }; +}; + +const searchRules = (base) => { + return (query, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/rules/search', base.indexName), + data: { + query, + }, + }, requestOptions); + }; +}; + +const searchSynonyms = (base) => { + return (query, requestOptions) => { + return base.transporter.read({ + method: MethodEnum.Post, + path: encode('1/indexes/%s/synonyms/search', base.indexName), + data: { + query, + }, + }, requestOptions); + }; +}; + +const setSettings = (base) => { + return (settings, requestOptions) => { + const { forwardToReplicas, ...options } = requestOptions || {}; + const mappedRequestOptions = createMappedRequestOptions(options); + if (forwardToReplicas) { + mappedRequestOptions.queryParameters.forwardToReplicas = 1; // eslint-disable-line functional/immutable-data + } + return createWaitablePromise(base.transporter.write({ + method: MethodEnum.Put, + path: encode('1/indexes/%s/settings', base.indexName), + data: settings, + }, mappedRequestOptions), (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions)); + }; +}; + +const waitTask = (base) => { + return (taskID, requestOptions) => { + return createRetryablePromise(retry => { + return getTask(base)(taskID, requestOptions).then(response => { + return response.status !== 'published' ? retry() : undefined; + }); + }); + }; +}; + +const BatchActionEnum = { + AddObject: 'addObject', + UpdateObject: 'updateObject', + PartialUpdateObject: 'partialUpdateObject', + PartialUpdateObjectNoCreate: 'partialUpdateObjectNoCreate', + DeleteObject: 'deleteObject', + DeleteIndex: 'delete', + ClearIndex: 'clear', +}; + +const ScopeEnum = { + Settings: 'settings', + Synonyms: 'synonyms', + Rules: 'rules', +}; + +const LogLevelEnum = { + Debug: 1, + Info: 2, + Error: 3, +}; + +/* eslint no-console: 0 */ +function createConsoleLogger(logLevel) { + return { + debug(message, args) { + if (LogLevelEnum.Debug >= logLevel) { + console.debug(message, args); + } + return Promise.resolve(); + }, + info(message, args) { + if (LogLevelEnum.Info >= logLevel) { + console.info(message, args); + } + return Promise.resolve(); + }, + error(message, args) { + console.error(message, args); + return Promise.resolve(); + }, + }; +} + +function createBrowserXhrRequester() { + return { + send(request) { + return new Promise((resolve) => { + const baseRequester = new XMLHttpRequest(); + baseRequester.open(request.method, request.url, true); + Object.keys(request.headers).forEach(key => baseRequester.setRequestHeader(key, request.headers[key])); + const createTimeout = (timeout, content) => { + return setTimeout(() => { + baseRequester.abort(); + resolve({ + status: 0, + content, + isTimedOut: true, + }); + }, timeout * 1000); + }; + const connectTimeout = createTimeout(request.connectTimeout, 'Connection timeout'); + // eslint-disable-next-line functional/no-let + let responseTimeout; + // eslint-disable-next-line functional/immutable-data + baseRequester.onreadystatechange = () => { + if (baseRequester.readyState > baseRequester.OPENED && responseTimeout === undefined) { + clearTimeout(connectTimeout); + responseTimeout = createTimeout(request.responseTimeout, 'Socket timeout'); + } + }; + // eslint-disable-next-line functional/immutable-data + baseRequester.onerror = () => { + // istanbul ignore next + if (baseRequester.status === 0) { + clearTimeout(connectTimeout); + clearTimeout(responseTimeout); + resolve({ + content: baseRequester.responseText || 'Network request failed', + status: baseRequester.status, + isTimedOut: false, + }); + } + }; + // eslint-disable-next-line functional/immutable-data + baseRequester.onload = () => { + clearTimeout(connectTimeout); + clearTimeout(responseTimeout); + resolve({ + content: baseRequester.responseText, + status: baseRequester.status, + isTimedOut: false, + }); + }; + baseRequester.send(request.data); + }); + }, + }; +} + +function algoliasearch(appId, apiKey, options) { + const commonOptions = { + appId, + apiKey, + timeouts: { + connect: 1, + read: 2, + write: 30, + }, + requester: createBrowserXhrRequester(), + logger: createConsoleLogger(LogLevelEnum.Error), + responsesCache: createInMemoryCache(), + requestsCache: createInMemoryCache({ serializable: false }), + hostsCache: createFallbackableCache({ + caches: [ + createBrowserLocalStorageCache({ key: `${version}-${appId}` }), + createInMemoryCache(), + ], + }), + userAgent: createUserAgent(version).add({ segment: 'Browser' }), + }; + const searchClientOptions = { ...commonOptions, ...options }; + const initPersonalization = () => (clientOptions) => { + return createPersonalizationClient({ + ...commonOptions, + ...clientOptions, + methods: { + getPersonalizationStrategy, + setPersonalizationStrategy, + }, + }); + }; + return createSearchClient({ + ...searchClientOptions, + methods: { + search: multipleQueries, + searchForFacetValues: multipleSearchForFacetValues, + multipleBatch, + multipleGetObjects, + multipleQueries, + copyIndex, + copySettings, + copySynonyms, + copyRules, + moveIndex, + listIndices, + getLogs, + listClusters, + multipleSearchForFacetValues, + getApiKey, + addApiKey, + listApiKeys, + updateApiKey, + deleteApiKey, + restoreApiKey, + assignUserID, + assignUserIDs, + getUserID, + searchUserIDs, + listUserIDs, + getTopUserIDs, + removeUserID, + hasPendingMappings, + clearDictionaryEntries, + deleteDictionaryEntries, + getDictionarySettings, + getAppTask, + replaceDictionaryEntries, + saveDictionaryEntries, + searchDictionaryEntries, + setDictionarySettings, + waitAppTask, + customRequest, + initIndex: base => (indexName) => { + return initIndex(base)(indexName, { + methods: { + batch, + delete: deleteIndex, + findAnswers, + getObject, + getObjects, + saveObject, + saveObjects, + search, + searchForFacetValues, + waitTask, + setSettings, + getSettings, + partialUpdateObject, + partialUpdateObjects, + deleteObject, + deleteObjects, + deleteBy, + clearObjects, + browseObjects, + getObjectPosition, + findObject, + exists, + saveSynonym, + saveSynonyms, + getSynonym, + searchSynonyms, + browseSynonyms, + deleteSynonym, + clearSynonyms, + replaceAllObjects, + replaceAllSynonyms, + searchRules, + getRule, + deleteRule, + saveRule, + saveRules, + replaceAllRules, + browseRules, + clearRules, + }, + }); + }, + initAnalytics: () => (clientOptions) => { + return createAnalyticsClient({ + ...commonOptions, + ...clientOptions, + methods: { + addABTest, + getABTest, + getABTests, + stopABTest, + deleteABTest, + }, + }); + }, + initPersonalization, + initRecommendation: () => (clientOptions) => { + searchClientOptions.logger.info('The `initRecommendation` method is deprecated. Use `initPersonalization` instead.'); + return initPersonalization()(clientOptions); + }, + }, + }); +} +// eslint-disable-next-line functional/immutable-data +algoliasearch.version = version; + +export default algoliasearch; diff --git a/assets/algoliasearch/dist/algoliasearch.umd.js b/assets/algoliasearch/dist/algoliasearch.umd.js new file mode 100644 index 00000000..3c4bc57a --- /dev/null +++ b/assets/algoliasearch/dist/algoliasearch.umd.js @@ -0,0 +1,2 @@ +/*! algoliasearch.umd.js | 4.14.2 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).algoliasearch=e()}(this,(function(){"use strict";function t(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n=0||(a[r]=t[r]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}function a(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(!(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t)))return;var r=[],n=!0,a=!1,o=void 0;try{for(var i,u=t[Symbol.iterator]();!(n=(i=u.next()).done)&&(r.push(i.value),!e||r.length!==e);n=!0);}catch(t){a=!0,o=t}finally{try{n||null==u.return||u.return()}finally{if(a)throw o}}return r}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function o(t){return function(t){if(Array.isArray(t)){for(var e=0,r=new Array(t.length);e2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){var r=JSON.stringify(t),n=o()[r];return Promise.all([n||e(),void 0!==n])})).then((function(t){var e=a(t,2),n=e[0],o=e[1];return Promise.all([n,o||r.miss(n)])})).then((function(t){return a(t,1)[0]}))},set:function(t,e){return Promise.resolve().then((function(){var a=o();return a[JSON.stringify(t)]=e,n().setItem(r,JSON.stringify(a)),e}))},delete:function(t){return Promise.resolve().then((function(){var e=o();delete e[JSON.stringify(t)],n().setItem(r,JSON.stringify(e))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function u(t){var e=o(t.caches),r=e.shift();return void 0===r?{get:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},n=e();return n.then((function(t){return Promise.all([t,r.miss(t)])})).then((function(t){return a(t,1)[0]}))},set:function(t,e){return Promise.resolve(e)},delete:function(t){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(t,n){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(t,n,a).catch((function(){return u({caches:e}).get(t,n,a)}))},set:function(t,n){return r.set(t,n).catch((function(){return u({caches:e}).set(t,n)}))},delete:function(t){return r.delete(t).catch((function(){return u({caches:e}).delete(t)}))},clear:function(){return r.clear().catch((function(){return u({caches:e}).clear()}))}}}function s(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},e={};return{get:function(r,n){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},o=JSON.stringify(r);if(o in e)return Promise.resolve(t.serializable?JSON.parse(e[o]):e[o]);var i=n(),u=a&&a.miss||function(){return Promise.resolve()};return i.then((function(t){return u(t)})).then((function(){return i}))},set:function(r,n){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(t){return delete e[JSON.stringify(t)],Promise.resolve()},clear:function(){return e={},Promise.resolve()}}}function c(t,e,r){var n={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers:function(){return t===m.WithinHeaders?n:{}},queryParameters:function(){return t===m.WithinQueryParameters?n:{}}}}function f(t){var e=0;return t((function r(){return e++,new Promise((function(n){setTimeout((function(){n(t(r))}),Math.min(100*e,1e3))}))}))}function d(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(t,e){return Promise.resolve()};return Object.assign(t,{wait:function(r){return d(t.then((function(t){return Promise.all([e(t,r),t])})).then((function(t){return t[1]})))}})}function l(t){for(var e=t.length-1;e>0;e--){var r=Math.floor(Math.random()*(e+1)),n=t[e];t[e]=t[r],t[r]=n}return t}function p(t,e){return e?(Object.keys(e).forEach((function(r){t[r]=e[r](t)})),t):t}function h(t){for(var e=arguments.length,r=new Array(e>1?e-1:0),n=1;n0?n:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var g={Read:1,Write:2,Any:3},v=1,b=2,P=3;function w(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:v;return r(r({},t),{},{status:e,lastUpdate:Date.now()})}function O(t){return"string"==typeof t?{protocol:"https",url:t,accept:g.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||g.Any}}var I="DELETE",x="GET",j="POST",D="PUT";function q(t,e){return Promise.all(e.map((function(e){return t.get(e,(function(){return Promise.resolve(w(e))}))}))).then((function(t){var r=t.filter((function(t){return function(t){return t.status===v||Date.now()-t.lastUpdate>12e4}(t)})),n=t.filter((function(t){return function(t){return t.status===P&&Date.now()-t.lastUpdate<=12e4}(t)})),a=[].concat(o(r),o(n));return{getTimeout:function(t,e){return(0===n.length&&0===t?1:n.length+3+t)*e},statelessHosts:a.length>0?a.map((function(t){return O(t)})):e}}))}function S(t,e,n,a){var i=[],u=function(t,e){if(t.method===x||void 0===t.data&&void 0===e.data)return;var n=Array.isArray(t.data)?t.data:r(r({},t.data),e.data);return JSON.stringify(n)}(n,a),s=function(t,e){var n=r(r({},t.headers),e.headers),a={};return Object.keys(n).forEach((function(t){var e=n[t];a[t.toLowerCase()]=e})),a}(t,a),c=n.method,f=n.method!==x?{}:r(r({},n.data),a.data),d=r(r(r({"x-algolia-agent":t.userAgent.value},t.queryParameters),f),a.queryParameters),l=0,p=function e(r,o){var f=r.pop();if(void 0===f)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:R(i)};var p={data:u,headers:s,method:c,url:N(f,n.path,d),connectTimeout:o(l,t.timeouts.connect),responseTimeout:o(l,a.timeout)},h=function(t){var e={request:p,response:t,host:f,triesLeft:r.length};return i.push(e),e},m={onSuccess:function(t){return function(t){try{return JSON.parse(t.content)}catch(e){throw function(t,e){return{name:"DeserializationError",message:t,response:e}}(e.message,t)}}(t)},onRetry:function(n){var a=h(n);return n.isTimedOut&&l++,Promise.all([t.logger.info("Retryable failure",A(a)),t.hostsCache.set(f,w(f,n.isTimedOut?P:b))]).then((function(){return e(r,o)}))},onFail:function(t){throw h(t),function(t,e){var r=t.content,n=t.status,a=r;try{a=JSON.parse(r).message}catch(t){}return function(t,e,r){return{name:"ApiError",message:t,status:e,transporterStackTrace:r}}(a,n,e)}(t,R(i))}};return t.requester.send(p).then((function(t){return function(t,e){return function(t){var e=t.status;return t.isTimedOut||function(t){var e=t.isTimedOut,r=t.status;return!e&&0==~~r}(t)||2!=~~(e/100)&&4!=~~(e/100)}(t)?e.onRetry(t):2==~~(t.status/100)?e.onSuccess(t):e.onFail(t)}(t,m)}))};return q(t.hostsCache,e).then((function(t){return p(o(t.statelessHosts).reverse(),t.getTimeout)}))}function k(t){var e=t.hostsCache,r=t.logger,n=t.requester,o=t.requestsCache,i=t.responsesCache,u=t.timeouts,s=t.userAgent,c=t.hosts,f=t.queryParameters,d={hostsCache:e,logger:r,requester:n,requestsCache:o,responsesCache:i,timeouts:u,userAgent:s,headers:t.headers,queryParameters:f,hosts:c.map((function(t){return O(t)})),read:function(t,e){var r=y(e,d.timeouts.read),n=function(){return S(d,d.hosts.filter((function(t){return 0!=(t.accept&g.Read)})),t,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:t.cacheable))return n();var o={request:t,mappedRequestOptions:r,transporter:{queryParameters:d.queryParameters,headers:d.headers}};return d.responsesCache.get(o,(function(){return d.requestsCache.get(o,(function(){return d.requestsCache.set(o,n()).then((function(t){return Promise.all([d.requestsCache.delete(o),t])}),(function(t){return Promise.all([d.requestsCache.delete(o),Promise.reject(t)])})).then((function(t){var e=a(t,2);e[0];return e[1]}))}))}),{miss:function(t){return d.responsesCache.set(o,t)}})},write:function(t,e){return S(d,d.hosts.filter((function(t){return 0!=(t.accept&g.Write)})),t,y(e,d.timeouts.write))}};return d}function T(t){var e={value:"Algolia for JavaScript (".concat(t,")"),add:function(t){var r="; ".concat(t.segment).concat(void 0!==t.version?" (".concat(t.version,")"):"");return-1===e.value.indexOf(r)&&(e.value="".concat(e.value).concat(r)),e}};return e}function N(t,e,r){var n=E(r),a="".concat(t.protocol,"://").concat(t.url,"/").concat("/"===e.charAt(0)?e.substr(1):e);return n.length&&(a+="?".concat(n)),a}function E(t){return Object.keys(t).map((function(e){return h("%s=%s",e,(r=t[e],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(t[e]):t[e]));var r})).join("&")}function R(t){return t.map((function(t){return A(t)}))}function A(t){var e=t.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return r(r({},t),{},{request:r(r({},t.request),{},{headers:r(r({},t.request.headers),e)})})}var C=function(t){return function(e,r){return t.transporter.write({method:j,path:"2/abtests",data:e},r)}},U=function(t){return function(e,r){return t.transporter.write({method:I,path:h("2/abtests/%s",e)},r)}},z=function(t){return function(e,r){return t.transporter.read({method:x,path:h("2/abtests/%s",e)},r)}},J=function(t){return function(e){return t.transporter.read({method:x,path:"2/abtests"},e)}},F=function(t){return function(e,r){return t.transporter.write({method:j,path:h("2/abtests/%s/stop",e)},r)}},H=function(t){return function(e){return t.transporter.read({method:x,path:"1/strategies/personalization"},e)}},M=function(t){return function(e,r){return t.transporter.write({method:j,path:"1/strategies/personalization",data:e},r)}};function K(t){return function e(r){return t.request(r).then((function(n){if(void 0!==t.batch&&t.batch(n.hits),!t.shouldStop(n))return n.cursor?e({cursor:n.cursor}):e({page:(r.page||0)+1})}))}({})}var W=function(t){return function(e,a){var o=a||{},i=o.queryParameters,u=n(o,["queryParameters"]),s=r({acl:e},void 0!==i?{queryParameters:i}:{});return d(t.transporter.write({method:j,path:"1/keys",data:s},u),(function(e,r){return f((function(n){return tt(t)(e.key,r).catch((function(t){if(404!==t.status)throw t;return n()}))}))}))}},B=function(t){return function(e,r,n){var a=y(n);return a.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:j,path:"1/clusters/mapping",data:{cluster:r}},a)}},Q=function(t){return function(e,r,n){return t.transporter.write({method:j,path:"1/clusters/mapping/batch",data:{users:e,cluster:r}},n)}},G=function(t){return function(e,r){return d(t.transporter.write({method:j,path:h("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:{action:"addEntry",body:[]}}},r),(function(e,r){return jt(t)(e.taskID,r)}))}},L=function(t){return function(e,r,n){return d(t.transporter.write({method:j,path:h("1/indexes/%s/operation",e),data:{operation:"copy",destination:r}},n),(function(r,n){return ut(t)(e,{methods:{waitTask:de}}).waitTask(r.taskID,n)}))}},V=function(t){return function(e,n,a){return L(t)(e,n,r(r({},a),{},{scope:[pe.Rules]}))}},_=function(t){return function(e,n,a){return L(t)(e,n,r(r({},a),{},{scope:[pe.Settings]}))}},X=function(t){return function(e,n,a){return L(t)(e,n,r(r({},a),{},{scope:[pe.Synonyms]}))}},Y=function(t){return function(e,r){return e.method===x?t.transporter.read(e,r):t.transporter.write(e,r)}},Z=function(t){return function(e,r){return d(t.transporter.write({method:I,path:h("1/keys/%s",e)},r),(function(r,n){return f((function(r){return tt(t)(e,n).then(r).catch((function(t){if(404!==t.status)throw t}))}))}))}},$=function(t){return function(e,r,n){var a=r.map((function(t){return{action:"deleteEntry",body:{objectID:t}}}));return d(t.transporter.write({method:j,path:h("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},n),(function(e,r){return jt(t)(e.taskID,r)}))}},tt=function(t){return function(e,r){return t.transporter.read({method:x,path:h("1/keys/%s",e)},r)}},et=function(t){return function(e,r){return t.transporter.read({method:x,path:h("1/task/%s",e.toString())},r)}},rt=function(t){return function(e){return t.transporter.read({method:x,path:"/1/dictionaries/*/settings"},e)}},nt=function(t){return function(e){return t.transporter.read({method:x,path:"1/logs"},e)}},at=function(t){return function(e){return t.transporter.read({method:x,path:"1/clusters/mapping/top"},e)}},ot=function(t){return function(e,r){return t.transporter.read({method:x,path:h("1/clusters/mapping/%s",e)},r)}},it=function(t){return function(e){var r=e||{},a=r.retrieveMappings,o=n(r,["retrieveMappings"]);return!0===a&&(o.getClusters=!0),t.transporter.read({method:x,path:"1/clusters/mapping/pending"},o)}},ut=function(t){return function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={transporter:t.transporter,appId:t.appId,indexName:e};return p(n,r.methods)}},st=function(t){return function(e){return t.transporter.read({method:x,path:"1/keys"},e)}},ct=function(t){return function(e){return t.transporter.read({method:x,path:"1/clusters"},e)}},ft=function(t){return function(e){return t.transporter.read({method:x,path:"1/indexes"},e)}},dt=function(t){return function(e){return t.transporter.read({method:x,path:"1/clusters/mapping"},e)}},lt=function(t){return function(e,r,n){return d(t.transporter.write({method:j,path:h("1/indexes/%s/operation",e),data:{operation:"move",destination:r}},n),(function(r,n){return ut(t)(e,{methods:{waitTask:de}}).waitTask(r.taskID,n)}))}},pt=function(t){return function(e,r){return d(t.transporter.write({method:j,path:"1/indexes/*/batch",data:{requests:e}},r),(function(e,r){return Promise.all(Object.keys(e.taskID).map((function(n){return ut(t)(n,{methods:{waitTask:de}}).waitTask(e.taskID[n],r)})))}))}},ht=function(t){return function(e,r){return t.transporter.read({method:j,path:"1/indexes/*/objects",data:{requests:e}},r)}},mt=function(t){return function(e,n){var a=e.map((function(t){return r(r({},t),{},{params:E(t.params||{})})}));return t.transporter.read({method:j,path:"1/indexes/*/queries",data:{requests:a},cacheable:!0},n)}},yt=function(t){return function(e,a){return Promise.all(e.map((function(e){var o=e.params,i=o.facetName,u=o.facetQuery,s=n(o,["facetName","facetQuery"]);return ut(t)(e.indexName,{methods:{searchForFacetValues:ue}}).searchForFacetValues(i,u,r(r({},a),s))})))}},gt=function(t){return function(e,r){var n=y(r);return n.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:I,path:"1/clusters/mapping"},n)}},vt=function(t){return function(e,r,n){var a=r.map((function(t){return{action:"addEntry",body:t}}));return d(t.transporter.write({method:j,path:h("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:a}},n),(function(e,r){return jt(t)(e.taskID,r)}))}},bt=function(t){return function(e,r){return d(t.transporter.write({method:j,path:h("1/keys/%s/restore",e)},r),(function(r,n){return f((function(r){return tt(t)(e,n).catch((function(t){if(404!==t.status)throw t;return r()}))}))}))}},Pt=function(t){return function(e,r,n){var a=r.map((function(t){return{action:"addEntry",body:t}}));return d(t.transporter.write({method:j,path:h("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},n),(function(e,r){return jt(t)(e.taskID,r)}))}},wt=function(t){return function(e,r,n){return t.transporter.read({method:j,path:h("/1/dictionaries/%s/search",e),data:{query:r},cacheable:!0},n)}},Ot=function(t){return function(e,r){return t.transporter.read({method:j,path:"1/clusters/mapping/search",data:{query:e}},r)}},It=function(t){return function(e,r){return d(t.transporter.write({method:D,path:"/1/dictionaries/*/settings",data:e},r),(function(e,r){return jt(t)(e.taskID,r)}))}},xt=function(t){return function(e,r){var a=Object.assign({},r),o=r||{},i=o.queryParameters,u=n(o,["queryParameters"]),s=i?{queryParameters:i}:{},c=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"];return d(t.transporter.write({method:D,path:h("1/keys/%s",e),data:s},u),(function(r,n){return f((function(r){return tt(t)(e,n).then((function(t){return function(t){return Object.keys(a).filter((function(t){return-1!==c.indexOf(t)})).every((function(e){return t[e]===a[e]}))}(t)?Promise.resolve():r()}))}))}))}},jt=function(t){return function(e,r){return f((function(n){return et(t)(e,r).then((function(t){return"published"!==t.status?n():void 0}))}))}},Dt=function(t){return function(e,r){return d(t.transporter.write({method:j,path:h("1/indexes/%s/batch",t.indexName),data:{requests:e}},r),(function(e,r){return de(t)(e.taskID,r)}))}},qt=function(t){return function(e){return K(r(r({shouldStop:function(t){return void 0===t.cursor}},e),{},{request:function(r){return t.transporter.read({method:j,path:h("1/indexes/%s/browse",t.indexName),data:r},e)}}))}},St=function(t){return function(e){var n=r({hitsPerPage:1e3},e);return K(r(r({shouldStop:function(t){return t.hits.length0&&void 0!==arguments[0]?arguments[0]:0,c=[];for(a=o;a=t.nbPages)throw{name:"ObjectNotFoundError",message:"Object not found."};return n()}))}()}},Wt=function(t){return function(e,r){return t.transporter.read({method:x,path:h("1/indexes/%s/%s",t.indexName,e)},r)}},Bt=function(){return function(t,e){for(var r=0,n=Object.entries(t.hits);rr.OPENED&&void 0===n&&(clearTimeout(o),n=a(t.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(o),clearTimeout(n),e({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(o),clearTimeout(n),e({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(t.data)}))}},logger:(a=ye,{debug:function(t,e){return he>=a&&console.debug(t,e),Promise.resolve()},info:function(t,e){return me>=a&&console.info(t,e),Promise.resolve()},error:function(t,e){return console.error(t,e),Promise.resolve()}}),responsesCache:s(),requestsCache:s({serializable:!1}),hostsCache:u({caches:[i({key:"".concat("4.14.2","-").concat(t)}),s()]}),userAgent:T("4.14.2").add({segment:"Browser"})},f=r(r({},o),n),d=function(){return function(t){return function(t){var e=t.region||"us",n=c(m.WithinHeaders,t.appId,t.apiKey),a=k(r(r({hosts:[{url:"personalization.".concat(e,".algolia.com")}]},t),{},{headers:r(r(r({},n.headers()),{"content-type":"application/json"}),t.headers),queryParameters:r(r({},n.queryParameters()),t.queryParameters)}));return p({appId:t.appId,transporter:a},t.methods)}(r(r(r({},o),t),{},{methods:{getPersonalizationStrategy:H,setPersonalizationStrategy:M}}))}};return function(t){var e=t.appId,n=c(void 0!==t.authMode?t.authMode:m.WithinHeaders,e,t.apiKey),a=k(r(r({hosts:[{url:"".concat(e,"-dsn.algolia.net"),accept:g.Read},{url:"".concat(e,".algolia.net"),accept:g.Write}].concat(l([{url:"".concat(e,"-1.algolianet.com")},{url:"".concat(e,"-2.algolianet.com")},{url:"".concat(e,"-3.algolianet.com")}]))},t),{},{headers:r(r(r({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),t.headers),queryParameters:r(r({},n.queryParameters()),t.queryParameters)}));return p({transporter:a,appId:e,addAlgoliaAgent:function(t,e){a.userAgent.add({segment:t,version:e})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},t.methods)}(r(r({},f),{},{methods:{search:mt,searchForFacetValues:yt,multipleBatch:pt,multipleGetObjects:ht,multipleQueries:mt,copyIndex:L,copySettings:_,copySynonyms:X,copyRules:V,moveIndex:lt,listIndices:ft,getLogs:nt,listClusters:ct,multipleSearchForFacetValues:yt,getApiKey:tt,addApiKey:W,listApiKeys:st,updateApiKey:xt,deleteApiKey:Z,restoreApiKey:bt,assignUserID:B,assignUserIDs:Q,getUserID:ot,searchUserIDs:Ot,listUserIDs:dt,getTopUserIDs:at,removeUserID:gt,hasPendingMappings:it,clearDictionaryEntries:G,deleteDictionaryEntries:$,getDictionarySettings:rt,getAppTask:et,replaceDictionaryEntries:vt,saveDictionaryEntries:Pt,searchDictionaryEntries:wt,setDictionarySettings:It,waitAppTask:jt,customRequest:Y,initIndex:function(t){return function(e){return ut(t)(e,{methods:{batch:Dt,delete:Ct,findAnswers:Mt,getObject:Wt,getObjects:Qt,saveObject:te,saveObjects:ee,search:ie,searchForFacetValues:ue,waitTask:de,setSettings:fe,getSettings:Lt,partialUpdateObject:_t,partialUpdateObjects:Xt,deleteObject:Ut,deleteObjects:zt,deleteBy:At,clearObjects:Nt,browseObjects:qt,getObjectPosition:Bt,findObject:Kt,exists:Ht,saveSynonym:ae,saveSynonyms:oe,getSynonym:Vt,searchSynonyms:ce,browseSynonyms:kt,deleteSynonym:Ft,clearSynonyms:Rt,replaceAllObjects:Yt,replaceAllSynonyms:$t,searchRules:se,getRule:Gt,deleteRule:Jt,saveRule:re,saveRules:ne,replaceAllRules:Zt,browseRules:St,clearRules:Et}})}},initAnalytics:function(){return function(t){return function(t){var e=t.region||"us",n=c(m.WithinHeaders,t.appId,t.apiKey),a=k(r(r({hosts:[{url:"analytics.".concat(e,".algolia.com")}]},t),{},{headers:r(r(r({},n.headers()),{"content-type":"application/json"}),t.headers),queryParameters:r(r({},n.queryParameters()),t.queryParameters)}));return p({appId:t.appId,transporter:a},t.methods)}(r(r(r({},o),t),{},{methods:{addABTest:C,getABTest:z,getABTests:J,stopABTest:F,deleteABTest:U}}))}},initPersonalization:d,initRecommendation:function(){return function(t){return f.logger.info("The `initRecommendation` method is deprecated. Use `initPersonalization` instead."),d()(t)}}}}))}return ge.version="4.14.2",ge})); diff --git a/assets/algoliasearch/index.d.ts b/assets/algoliasearch/index.d.ts new file mode 100644 index 00000000..f3e17624 --- /dev/null +++ b/assets/algoliasearch/index.d.ts @@ -0,0 +1,3 @@ +/* eslint-disable import/no-unresolved*/ +export * from './dist/algoliasearch'; +export { default } from './dist/algoliasearch'; diff --git a/assets/algoliasearch/index.js b/assets/algoliasearch/index.js new file mode 100644 index 00000000..14ca1ec1 --- /dev/null +++ b/assets/algoliasearch/index.js @@ -0,0 +1,15 @@ +/* eslint-disable functional/immutable-data, import/no-commonjs */ +const algoliasearch = require('./dist/algoliasearch.cjs.js'); + +/** + * The Common JS build is the default entry point for the Node environment. Keep in + * in mind, that for the browser environment, we hint the bundler to use the UMD + * build instead as specified on the key `browser` of our `package.json` file. + */ +module.exports = algoliasearch; + +/** + * In addition, we also set explicitly the default export below making + * this Common JS module in compliance with es6 modules specification. + */ +module.exports.default = algoliasearch; diff --git a/assets/algoliasearch/lite.d.ts b/assets/algoliasearch/lite.d.ts new file mode 100644 index 00000000..41a19612 --- /dev/null +++ b/assets/algoliasearch/lite.d.ts @@ -0,0 +1,3 @@ +/* eslint-disable import/no-unresolved*/ +export * from './dist/algoliasearch-lite'; +export { default } from './dist/algoliasearch-lite'; diff --git a/assets/algoliasearch/lite.js b/assets/algoliasearch/lite.js new file mode 100644 index 00000000..cdbfa358 --- /dev/null +++ b/assets/algoliasearch/lite.js @@ -0,0 +1,2 @@ +// eslint-disable-next-line functional/immutable-data, import/no-commonjs +module.exports = require('./index'); diff --git a/assets/algoliasearch/package.json b/assets/algoliasearch/package.json new file mode 100644 index 00000000..2fdaa467 --- /dev/null +++ b/assets/algoliasearch/package.json @@ -0,0 +1,43 @@ +{ + "name": "algoliasearch", + "version": "4.14.2", + "private": false, + "description": "A fully-featured and blazing-fast JavaScript API client to interact with Algolia API.", + "repository": { + "type": "git", + "url": "git://github.com/algolia/algoliasearch-client-javascript.git" + }, + "license": "MIT", + "sideEffects": false, + "main": "index.js", + "jsdelivr": "./dist/algoliasearch.umd.js", + "unpkg": "./dist/algoliasearch.umd.js", + "browser": { + "./index.js": "./dist/algoliasearch.umd.js", + "./lite.js": "./dist/algoliasearch-lite.umd.js" + }, + "types": "index.d.ts", + "files": [ + "dist", + "index.js", + "index.d.ts", + "lite.js", + "lite.d.ts" + ], + "dependencies": { + "@algolia/cache-browser-local-storage": "4.14.2", + "@algolia/cache-common": "4.14.2", + "@algolia/cache-in-memory": "4.14.2", + "@algolia/client-account": "4.14.2", + "@algolia/client-analytics": "4.14.2", + "@algolia/client-common": "4.14.2", + "@algolia/client-personalization": "4.14.2", + "@algolia/client-search": "4.14.2", + "@algolia/logger-common": "4.14.2", + "@algolia/logger-console": "4.14.2", + "@algolia/requester-browser-xhr": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/requester-node-http": "4.14.2", + "@algolia/transporter": "4.14.2" + } +} diff --git a/assets/autocomplete-theme-classic/dist/theme.css b/assets/autocomplete-theme-classic/dist/theme.css new file mode 100644 index 00000000..14666550 --- /dev/null +++ b/assets/autocomplete-theme-classic/dist/theme.css @@ -0,0 +1,1089 @@ +/*! @algolia/autocomplete-theme-classic 1.7.3 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */ +/* ---------------- */ +/* 1. CSS Variables */ +/* 2. Dark Mode */ +/* 3. Autocomplete */ +/* 4. Panel */ +/* 5. Sources */ +/* 6. Hit Layout */ +/* 7. Panel Header */ +/* 8. Panel Footer */ +/* 9. Detached Mode */ +/* 10. Gradients */ +/* 11. Utilities */ +/* ---------------- */ +/* Note: */ +/* This theme reflects the markup structure of autocomplete with SCSS indentation. */ +/* We use the SASS `@at-root` function to keep specificity low. */ +/* ---------------- */ +/* 1. CSS Variables */ +/* ---------------- */ +:root { + /* Input */ + --aa-search-input-height: 44px; + --aa-input-icon-size: 20px; + /* Size and spacing */ + --aa-base-unit: 16; + --aa-spacing-factor: 1; + --aa-spacing: calc(var(--aa-base-unit) * var(--aa-spacing-factor) * 1px); + --aa-spacing-half: calc(var(--aa-spacing) / 2); + --aa-panel-max-height: 650px; + /* Z-index */ + --aa-base-z-index: 9999; + /* Font */ + --aa-font-size: calc(var(--aa-base-unit) * 1px); + --aa-font-family: inherit; + --aa-font-weight-medium: 500; + --aa-font-weight-semibold: 600; + --aa-font-weight-bold: 700; + /* Icons */ + --aa-icon-size: 20px; + --aa-icon-stroke-width: 1.6; + --aa-icon-color-rgb: 119, 119, 163; + --aa-icon-color-alpha: 1; + --aa-action-icon-size: 20px; + /* Text colors */ + --aa-text-color-rgb: 38, 38, 39; + --aa-text-color-alpha: 1; + --aa-primary-color-rgb: 62, 52, 211; + --aa-primary-color-alpha: 0.2; + --aa-muted-color-rgb: 128, 126, 163; + --aa-muted-color-alpha: 0.6; + /* Border colors */ + --aa-panel-border-color-rgb: 128, 126, 163; + --aa-panel-border-color-alpha: 0.3; + --aa-input-border-color-rgb: 128, 126, 163; + --aa-input-border-color-alpha: 0.8; + /* Background colors */ + --aa-background-color-rgb: 255, 255, 255; + --aa-background-color-alpha: 1; + --aa-input-background-color-rgb: 255, 255, 255; + --aa-input-background-color-alpha: 1; + --aa-selected-color-rgb: 179, 173, 214; + --aa-selected-color-alpha: 0.205; + --aa-description-highlight-background-color-rgb: 245, 223, 77; + --aa-description-highlight-background-color-alpha: 0.5; + /* Detached mode */ + --aa-detached-media-query: (max-width: 680px); + --aa-detached-modal-media-query: (min-width: 680px); + --aa-detached-modal-max-width: 680px; + --aa-detached-modal-max-height: 500px; + --aa-overlay-color-rgb: 115, 114, 129; + --aa-overlay-color-alpha: 0.4; + /* Shadows */ + --aa-panel-shadow: 0 0 0 1px rgba(35, 38, 59, .1), + 0 6px 16px -4px rgba(35, 38, 59, .15); + /* Scrollbar */ + --aa-scrollbar-width: 13px; + --aa-scrollbar-track-background-color-rgb: 234, 234, 234; + --aa-scrollbar-track-background-color-alpha: 1; + --aa-scrollbar-thumb-background-color-rgb: var(--aa-background-color-rgb); + --aa-scrollbar-thumb-background-color-alpha: 1; + /* Touch screens */ +} +@media (hover: none) and (pointer: coarse) { + :root { + --aa-spacing-factor: 1.2; + --aa-action-icon-size: 22px; + } +} + +/* ---------------- */ +/* 2. Dark Mode */ +/* ---------------- */ +body { + /* stylelint-disable selector-no-qualifying-type, selector-class-pattern */ + /* stylelint-enable selector-no-qualifying-type, selector-class-pattern */ +} +body[data-theme=dark], body.dark { + /* Text colors */ + --aa-text-color-rgb: 183, 192, 199; + --aa-primary-color-rgb: 146, 138, 255; + --aa-muted-color-rgb: 146, 138, 255; + /* Background colors */ + --aa-input-background-color-rgb: 0, 3, 9; + --aa-background-color-rgb: 21, 24, 42; + --aa-selected-color-rgb: 146, 138, 255; + --aa-selected-color-alpha: 0.25; + --aa-description-highlight-background-color-rgb: 0 255 255; + --aa-description-highlight-background-color-alpha: 0.25; + /* Icons */ + --aa-icon-color-rgb: 119, 119, 163; + /* Shadows */ + --aa-panel-shadow: inset 1px 1px 0 0 rgb(44, 46, 64), + 0 3px 8px 0 rgb(0, 3, 9); + /* Scrollbar */ + --aa-scrollbar-track-background-color-rgb: 44, 46, 64; + --aa-scrollbar-thumb-background-color-rgb: var(--aa-background-color-rgb); +} + +/* Reset for `@extend` */ +.aa-Panel *, .aa-Autocomplete *, +.aa-DetachedFormContainer * { + box-sizing: border-box; +} + +/* Init for `@extend` */ +.aa-Panel, .aa-Autocomplete, +.aa-DetachedFormContainer { + color: #262627; + color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); + font-family: inherit; + font-family: var(--aa-font-family); + font-size: 16px; + font-size: var(--aa-font-size); + font-weight: normal; + line-height: 1em; + margin: 0; + padding: 0; + text-align: left; +} + +/* ---------------- */ +/* 3. Autocomplete */ +/* ---------------- */ +.aa-Autocomplete, +.aa-DetachedFormContainer { + /* Search box */ +} +.aa-Form { + align-items: center; + background-color: white; + background-color: rgba(var(--aa-input-background-color-rgb), var(--aa-input-background-color-alpha)); + border: 1px solid rgba(128, 126, 163, 0.8); + border: 1px solid rgba(var(--aa-input-border-color-rgb), var(--aa-input-border-color-alpha)); + border-radius: 3px; + display: flex; + line-height: 1em; + margin: 0; + position: relative; + width: 100%; +} +.aa-Form[focus-within] { + border-color: #3e34d3; + border-color: rgba(var(--aa-primary-color-rgb), 1); + box-shadow: rgba(62, 52, 211, 0.2) 0 0 0 2px, inset rgba(62, 52, 211, 0.2) 0 0 0 2px; + box-shadow: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px, inset rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px; + outline: currentColor none medium; +} +.aa-Form:focus-within { + border-color: #3e34d3; + border-color: rgba(var(--aa-primary-color-rgb), 1); + box-shadow: rgba(62, 52, 211, 0.2) 0 0 0 2px, inset rgba(62, 52, 211, 0.2) 0 0 0 2px; + box-shadow: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px, inset rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px; + outline: currentColor none medium; +} +.aa-InputWrapperPrefix { + align-items: center; + display: flex; + flex-shrink: 0; + height: 44px; + height: var(--aa-search-input-height); + order: 1; + /* Container for search and loading icons */ +} +.aa-Label, +.aa-LoadingIndicator { + cursor: auto; + cursor: initial; + flex-shrink: 0; + height: 100%; + padding: 0; + text-align: left; +} +.aa-Label svg, +.aa-LoadingIndicator svg { + color: #3e34d3; + color: rgba(var(--aa-primary-color-rgb), 1); + height: auto; + max-height: 20px; + max-height: var(--aa-input-icon-size); + stroke-width: 1.6; + stroke-width: var(--aa-icon-stroke-width); + width: 20px; + width: var(--aa-input-icon-size); +} + +.aa-SubmitButton, +.aa-LoadingIndicator { + height: 100%; + padding-left: 11px; + padding-left: calc(var(--aa-spacing) * 0.75 - 1px); + padding-right: 8px; + padding-right: var(--aa-spacing-half); + width: 47px; + width: calc(var(--aa-spacing) * 1.75 + var(--aa-icon-size) - 1px); +} +@media (hover: none) and (pointer: coarse) { + .aa-SubmitButton, +.aa-LoadingIndicator { + padding-left: 3px; + padding-left: calc(var(--aa-spacing-half) / 2 - 1px); + width: 39px; + width: calc(var(--aa-icon-size) + var(--aa-spacing) * 1.25 - 1px); + } +} + +.aa-SubmitButton { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: none; + border: 0; + margin: 0; +} + +.aa-LoadingIndicator { + align-items: center; + display: flex; + justify-content: center; +} +.aa-LoadingIndicator[hidden] { + display: none; +} + +.aa-InputWrapper { + order: 3; + position: relative; + width: 100%; + /* Search box input (with placeholder and query) */ +} +.aa-Input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: none; + border: 0; + color: #262627; + color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); + font: inherit; + height: 44px; + height: var(--aa-search-input-height); + padding: 0; + width: 100%; + /* Focus is set and styled on the parent, it isn't necessary here */ + /* Remove native appearence */ +} +.aa-Input::-moz-placeholder { + color: rgba(128, 126, 163, 0.6); + color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); + opacity: 1; +} +.aa-Input:-ms-input-placeholder { + color: rgba(128, 126, 163, 0.6); + color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); + opacity: 1; +} +.aa-Input::placeholder { + color: rgba(128, 126, 163, 0.6); + color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); + opacity: 1; +} +.aa-Input:focus { + border-color: none; + box-shadow: none; + outline: none; +} +.aa-Input::-webkit-search-decoration, .aa-Input::-webkit-search-cancel-button, .aa-Input::-webkit-search-results-button, .aa-Input::-webkit-search-results-decoration { + -webkit-appearance: none; + appearance: none; +} + +.aa-InputWrapperSuffix { + align-items: center; + display: flex; + height: 44px; + height: var(--aa-search-input-height); + order: 4; + /* Accelerator to clear the query */ +} +.aa-ClearButton { + align-items: center; + background: none; + border: 0; + color: rgba(128, 126, 163, 0.6); + color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); + cursor: pointer; + display: flex; + height: 100%; + margin: 0; + padding: 0 12.8333333333px; + padding: 0 calc(var(--aa-spacing) * 0.8333333333 - 0.5px); +} +@media (hover: none) and (pointer: coarse) { + .aa-ClearButton { + padding: 0 10.1666666667px; + padding: 0 calc(var(--aa-spacing) * 0.6666666667 - 0.5px); + } +} +.aa-ClearButton:hover, .aa-ClearButton:focus { + color: #262627; + color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); +} +.aa-ClearButton[hidden] { + display: none; +} +.aa-ClearButton svg { + stroke-width: 1.6; + stroke-width: var(--aa-icon-stroke-width); + width: 20px; + width: var(--aa-icon-size); +} + +/* ---------------- */ +/* 4. Panel */ +/* ---------------- */ +.aa-Panel { + background-color: white; + background-color: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); + border-radius: 4px; + border-radius: calc(var(--aa-spacing) / 4); + box-shadow: 0 0 0 1px rgba(35, 38, 59, 0.1), 0 6px 16px -4px rgba(35, 38, 59, 0.15); + box-shadow: var(--aa-panel-shadow); + margin: 8px 0 0; + overflow: hidden; + position: absolute; + transition: opacity 200ms ease-in, filter 200ms ease-in; + /* When a request isn't resolved yet */ +} +@media screen and (prefers-reduced-motion) { + .aa-Panel { + transition: none; + } +} +.aa-Panel button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: none; + border: 0; + margin: 0; + padding: 0; +} +.aa-PanelLayout { + height: 100%; + margin: 0; + max-height: 650px; + max-height: var(--aa-panel-max-height); + overflow-y: auto; + padding: 0; + position: relative; + text-align: left; +} +.aa-PanelLayoutColumns--twoGolden { + display: grid; + grid-template-columns: 39.2% auto; + overflow: hidden; + padding: 0; +} + +.aa-PanelLayoutColumns--two { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + overflow: hidden; + padding: 0; +} + +.aa-PanelLayoutColumns--three { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + overflow: hidden; + padding: 0; +} + +.aa-Panel--stalled .aa-Source { + filter: grayscale(1); + opacity: 0.8; +} + +.aa-Panel--scrollable { + margin: 0; + max-height: 650px; + max-height: var(--aa-panel-max-height); + overflow-x: hidden; + overflow-y: auto; + padding: 8px; + padding: var(--aa-spacing-half); + scrollbar-color: white #eaeaea; + scrollbar-color: rgba(var(--aa-scrollbar-thumb-background-color-rgb), var(--aa-scrollbar-thumb-background-color-alpha)) rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)); + scrollbar-width: thin; +} +.aa-Panel--scrollable::-webkit-scrollbar { + width: 13px; + width: var(--aa-scrollbar-width); +} +.aa-Panel--scrollable::-webkit-scrollbar-track { + background-color: #eaeaea; + background-color: rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)); +} +.aa-Panel--scrollable::-webkit-scrollbar-thumb { + background-color: white; + background-color: rgba(var(--aa-scrollbar-thumb-background-color-rgb), var(--aa-scrollbar-thumb-background-color-alpha)); + border-color: #eaeaea; + border-color: rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)); + border-radius: 9999px; + border-style: solid; + border-width: 3px 2px 3px 3px; +} + +/* ---------------- */ +/* 5. Sources */ +/* Each source can be styled independently */ +/* ---------------- */ +.aa-Source { + margin: 0; + padding: 0; + position: relative; + width: 100%; + /* List of results inside the source */ + /* Source title */ + /* See all button */ +} +.aa-Source:empty { + /* Hide empty section */ + display: none; +} +.aa-SourceNoResults { + font-size: 1em; + margin: 0; + padding: 16px; + padding: var(--aa-spacing); +} + +.aa-List { + list-style: none; + margin: 0; + padding: 0; + position: relative; +} + +.aa-SourceHeader { + margin: 8px 0.5em 8px 0; + margin: var(--aa-spacing-half) 0.5em var(--aa-spacing-half) 0; + padding: 0; + position: relative; + /* Hide empty header */ + /* Title typography */ + /* Line separator */ +} +.aa-SourceHeader:empty { + display: none; +} +.aa-SourceHeaderTitle { + background: white; + background: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); + color: #3e34d3; + color: rgba(var(--aa-primary-color-rgb), 1); + display: inline-block; + font-size: 0.8em; + font-weight: 600; + font-weight: var(--aa-font-weight-semibold); + margin: 0; + padding: 0 8px 0 0; + padding: 0 var(--aa-spacing-half) 0 0; + position: relative; + z-index: 9999; + z-index: var(--aa-base-z-index); +} + +.aa-SourceHeaderLine { + border-bottom: solid 1px #3e34d3; + border-bottom: solid 1px rgba(var(--aa-primary-color-rgb), 1); + display: block; + height: 2px; + left: 0; + margin: 0; + opacity: 0.3; + padding: 0; + position: absolute; + right: 0; + top: 8px; + top: var(--aa-spacing-half); + z-index: 9998; + z-index: calc(var(--aa-base-z-index) - 1); +} + +.aa-SourceFooterSeeAll { + background: linear-gradient(180deg, white, rgba(128, 126, 163, 0.14)); + background: linear-gradient(180deg, rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)), rgba(128, 126, 163, 0.14)); + border: 1px solid rgba(128, 126, 163, 0.6); + border: 1px solid rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); + border-radius: 5px; + box-shadow: inset 0 0 2px #fff, 0 2px 2px -1px rgba(76, 69, 88, 0.15); + color: inherit; + font-size: 0.95em; + font-weight: 500; + font-weight: var(--aa-font-weight-medium); + padding: 0.475em 1em 0.6em; + text-decoration: none; +} +.aa-SourceFooterSeeAll:focus, .aa-SourceFooterSeeAll:hover { + border: 1px solid #3e34d3; + border: 1px solid rgba(var(--aa-primary-color-rgb), 1); + color: #3e34d3; + color: rgba(var(--aa-primary-color-rgb), 1); +} + +/* ---------------- */ +/* 6. Hit Layout */ +/* ---------------- */ +.aa-Item { + align-items: center; + border-radius: 3px; + cursor: pointer; + display: grid; + min-height: 40px; + min-height: calc(var(--aa-spacing) * 2.5); + padding: 4px; + padding: calc(var(--aa-spacing-half) / 2); + /* When the result is active */ + /* The result type icon inlined SVG or image */ + /* wrap hit with url but we don't need to see it */ + /* Secondary click actions */ +} +.aa-Item[aria-selected=true] { + background-color: rgba(179, 173, 214, 0.205); + background-color: rgba(var(--aa-selected-color-rgb), var(--aa-selected-color-alpha)); +} +.aa-Item[aria-selected=true] .aa-ItemActionButton, +.aa-Item[aria-selected=true] .aa-ActiveOnly { + visibility: visible; +} +.aa-ItemIcon { + align-items: center; + background: white; + background: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); + border-radius: 3px; + box-shadow: inset 0 0 0 1px rgba(128, 126, 163, 0.3); + box-shadow: inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb), var(--aa-panel-border-color-alpha)); + color: #7777a3; + color: rgba(var(--aa-icon-color-rgb), var(--aa-icon-color-alpha)); + display: flex; + flex-shrink: 0; + font-size: 0.7em; + height: 28px; + height: calc(var(--aa-icon-size) + var(--aa-spacing-half)); + justify-content: center; + overflow: hidden; + stroke-width: 1.6; + stroke-width: var(--aa-icon-stroke-width); + text-align: center; + width: 28px; + width: calc(var(--aa-icon-size) + var(--aa-spacing-half)); +} +.aa-ItemIcon img { + height: auto; + max-height: 20px; + max-height: calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px); + max-width: 20px; + max-width: calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px); + width: auto; +} +.aa-ItemIcon svg { + height: 20px; + height: var(--aa-icon-size); + width: 20px; + width: var(--aa-icon-size); +} +.aa-ItemIcon--alignTop { + align-self: flex-start; +} + +.aa-ItemIcon--noBorder { + background: none; + box-shadow: none; +} + +.aa-ItemIcon--picture { + height: 96px; + width: 96px; +} +.aa-ItemIcon--picture img { + max-height: 100%; + max-width: 100%; + padding: 8px; + padding: var(--aa-spacing-half); +} + +.aa-ItemContent { + align-items: center; + cursor: pointer; + display: grid; + grid-gap: 8px; + gap: 8px; + grid-gap: var(--aa-spacing-half); + gap: var(--aa-spacing-half); + grid-auto-flow: column; + line-height: 1.25em; + overflow: hidden; +} +.aa-ItemContent:empty { + display: none; +} +.aa-ItemContent mark { + background: none; + color: #262627; + color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); + font-style: normal; + font-weight: 700; + font-weight: var(--aa-font-weight-bold); +} +.aa-ItemContent--dual { + display: flex; + flex-direction: column; + justify-content: space-between; + text-align: left; +} +.aa-ItemContent--dual .aa-ItemContentTitle, +.aa-ItemContent--dual .aa-ItemContentSubtitle { + display: block; +} + +.aa-ItemContent--indented { + padding-left: 36px; + padding-left: calc(var(--aa-icon-size) + var(--aa-spacing)); +} + +.aa-ItemContentBody { + display: grid; + grid-gap: 4px; + gap: 4px; + grid-gap: calc(var(--aa-spacing-half) / 2); + gap: calc(var(--aa-spacing-half) / 2); +} + +.aa-ItemContentTitle { + display: inline-block; + margin: 0 0.5em 0 0; + max-width: 100%; + overflow: hidden; + padding: 0; + text-overflow: ellipsis; + white-space: nowrap; +} + +.aa-ItemContentSubtitle { + font-size: 0.92em; +} +.aa-ItemContentSubtitleIcon::before { + border-color: rgba(128, 126, 163, 0.64); + border-color: rgba(var(--aa-muted-color-rgb), 0.64); + border-style: solid; + content: ""; + display: inline-block; + left: 1px; + position: relative; + top: -3px; +} + +.aa-ItemContentSubtitle--inline .aa-ItemContentSubtitleIcon::before { + border-width: 0 0 1.5px; + margin-left: 8px; + margin-left: var(--aa-spacing-half); + margin-right: 4px; + margin-right: calc(var(--aa-spacing-half) / 2); + width: 10px; + width: calc(var(--aa-spacing-half) + 2px); +} + +.aa-ItemContentSubtitle--standalone { + align-items: center; + color: #262627; + color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); + display: grid; + grid-gap: 8px; + gap: 8px; + grid-gap: var(--aa-spacing-half); + gap: var(--aa-spacing-half); + grid-auto-flow: column; + justify-content: start; +} +.aa-ItemContentSubtitle--standalone .aa-ItemContentSubtitleIcon::before { + border-radius: 0 0 0 3px; + border-width: 0 0 1.5px 1.5px; + height: 8px; + height: var(--aa-spacing-half); + width: 8px; + width: var(--aa-spacing-half); +} + +.aa-ItemContentSubtitleCategory { + color: #807ea3; + color: rgba(var(--aa-muted-color-rgb), 1); + font-weight: 500; +} + +.aa-ItemContentDescription { + color: #262627; + color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); + font-size: 0.85em; + max-width: 100%; + overflow-x: hidden; + text-overflow: ellipsis; +} +.aa-ItemContentDescription:empty { + display: none; +} +.aa-ItemContentDescription mark { + background: rgba(245, 223, 77, 0.5); + background: rgba(var(--aa-description-highlight-background-color-rgb), var(--aa-description-highlight-background-color-alpha)); + color: #262627; + color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); + font-style: normal; + font-weight: 500; + font-weight: var(--aa-font-weight-medium); +} + +.aa-ItemContentDash { + color: rgba(128, 126, 163, 0.6); + color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); + display: none; + opacity: 0.4; +} + +.aa-ItemContentTag { + background-color: rgba(62, 52, 211, 0.2); + background-color: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)); + border-radius: 3px; + margin: 0 0.4em 0 0; + padding: 0.08em 0.3em; +} + +.aa-ItemWrapper, +.aa-ItemLink { + align-items: center; + color: inherit; + display: grid; + grid-gap: 4px; + gap: 4px; + grid-gap: calc(var(--aa-spacing-half) / 2); + gap: calc(var(--aa-spacing-half) / 2); + grid-auto-flow: column; + justify-content: space-between; + width: 100%; +} + +.aa-ItemLink { + color: inherit; + text-decoration: none; +} + +.aa-ItemActions { + display: grid; + grid-auto-flow: column; + height: 100%; + justify-self: end; + margin: 0 -5.3333333333px; + margin: 0 calc(var(--aa-spacing) / -3); + padding: 0 2px 0 0; +} + +.aa-ItemActionButton { + align-items: center; + background: none; + border: 0; + color: rgba(128, 126, 163, 0.6); + color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); + cursor: pointer; + display: flex; + flex-shrink: 0; + padding: 0; +} +.aa-ItemActionButton:hover svg, .aa-ItemActionButton:focus svg { + color: #262627; + color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); +} +@media (hover: none) and (pointer: coarse) { + .aa-ItemActionButton:hover svg, .aa-ItemActionButton:focus svg { + color: inherit; + } +} +.aa-ItemActionButton svg { + color: rgba(128, 126, 163, 0.6); + color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); + margin: 0; + margin: 5.3333333333px; + margin: calc(var(--aa-spacing) / 3); + stroke-width: 1.6; + stroke-width: var(--aa-icon-stroke-width); + width: 20px; + width: var(--aa-action-icon-size); +} + +.aa-ActiveOnly { + visibility: hidden; +} + +/*---------------- */ +/* 7. Panel Header */ +/*---------------- */ +.aa-PanelHeader { + align-items: center; + background: #3e34d3; + background: rgba(var(--aa-primary-color-rgb), 1); + color: #fff; + display: grid; + height: var(--aa-modal-header-height); + margin: 0; + padding: 8px 16px; + padding: var(--aa-spacing-half) var(--aa-spacing); + position: relative; +} +.aa-PanelHeader::after { + background-image: linear-gradient(white, rgba(255, 255, 255, 0)); + background-image: linear-gradient(rgba(var(--aa-background-color-rgb), 1), rgba(var(--aa-background-color-rgb), 0)); + bottom: -8px; + bottom: calc(var(--aa-spacing-half) * -1); + content: ""; + height: 8px; + height: var(--aa-spacing-half); + left: 0; + pointer-events: none; + position: absolute; + right: 0; + z-index: 9999; + z-index: var(--aa-base-z-index); +} + +/*---------------- */ +/* 8. Panel Footer */ +/*---------------- */ +.aa-PanelFooter { + background-color: white; + background-color: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); + box-shadow: inset 0 1px 0 rgba(128, 126, 163, 0.3); + box-shadow: inset 0 1px 0 rgba(var(--aa-panel-border-color-rgb), var(--aa-panel-border-color-alpha)); + display: flex; + justify-content: space-between; + margin: 0; + padding: 16px; + padding: var(--aa-spacing); + position: relative; + z-index: 9999; + z-index: var(--aa-base-z-index); +} +.aa-PanelFooter::after { + background-image: linear-gradient(rgba(255, 255, 255, 0), rgba(128, 126, 163, 0.6)); + background-image: linear-gradient(rgba(var(--aa-background-color-rgb), 0), rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha))); + content: ""; + height: 16px; + height: var(--aa-spacing); + left: 0; + opacity: 0.12; + pointer-events: none; + position: absolute; + right: 0; + top: -16px; + top: calc(var(--aa-spacing) * -1); + z-index: 9998; + z-index: calc(var(--aa-base-z-index) - 1); +} + +/*---------------- */ +/* 9. Detached Mode */ +/*---------------- */ +.aa-DetachedContainer { + background: white; + background: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); + bottom: 0; + box-shadow: 0 0 0 1px rgba(35, 38, 59, 0.1), 0 6px 16px -4px rgba(35, 38, 59, 0.15); + box-shadow: var(--aa-panel-shadow); + display: flex; + flex-direction: column; + left: 0; + margin: 0; + overflow: hidden; + padding: 0; + position: fixed; + right: 0; + top: 0; + z-index: 9999; + z-index: var(--aa-base-z-index); +} +.aa-DetachedContainer::after { + height: 32px; +} +.aa-DetachedContainer .aa-SourceHeader { + margin: 8px 0 8px 2px; + margin: var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px; +} +.aa-DetachedContainer .aa-Panel { + background-color: white; + background-color: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); + border-radius: 0; + box-shadow: none; + flex-grow: 1; + margin: 0; + padding: 0; + position: relative; +} +.aa-DetachedContainer .aa-PanelLayout { + bottom: 0; + box-shadow: none; + left: 0; + margin: 0; + max-height: none; + overflow-y: auto; + position: absolute; + right: 0; + top: 0; + width: 100%; +} +.aa-DetachedFormContainer { + border-bottom: solid 1px rgba(128, 126, 163, 0.3); + border-bottom: solid 1px rgba(var(--aa-panel-border-color-rgb), var(--aa-panel-border-color-alpha)); + display: flex; + flex-direction: row; + justify-content: space-between; + margin: 0; + padding: 8px; + padding: var(--aa-spacing-half); +} +.aa-DetachedCancelButton { + background: none; + border: 0; + border-radius: 3px; + color: inherit; + color: #262627; + color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); + cursor: pointer; + font: inherit; + margin: 0 0 0 8px; + margin: 0 0 0 var(--aa-spacing-half); + padding: 0 8px; + padding: 0 var(--aa-spacing-half); +} +.aa-DetachedCancelButton:hover, .aa-DetachedCancelButton:focus { + box-shadow: inset 0 0 0 1px rgba(128, 126, 163, 0.3); + box-shadow: inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb), var(--aa-panel-border-color-alpha)); +} + +.aa-DetachedContainer--modal { + border-radius: 6px; + bottom: inherit; + height: auto; + margin: 0 auto; + max-width: 680px; + max-width: var(--aa-detached-modal-max-width); + position: absolute; + top: 3%; +} +.aa-DetachedContainer--modal .aa-PanelLayout { + max-height: 500px; + max-height: var(--aa-detached-modal-max-height); + padding-bottom: 8px; + padding-bottom: var(--aa-spacing-half); + position: static; +} + +/* Search Button */ +.aa-DetachedSearchButton { + align-items: center; + background-color: white; + background-color: rgba(var(--aa-input-background-color-rgb), var(--aa-input-background-color-alpha)); + border: 1px solid rgba(128, 126, 163, 0.8); + border: 1px solid rgba(var(--aa-input-border-color-rgb), var(--aa-input-border-color-alpha)); + border-radius: 3px; + color: rgba(128, 126, 163, 0.6); + color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); + cursor: pointer; + display: flex; + font: inherit; + font-family: inherit; + font-family: var(--aa-font-family); + font-size: 16px; + font-size: var(--aa-font-size); + height: 44px; + height: var(--aa-search-input-height); + margin: 0; + padding: 0 5.5px; + padding: 0 calc(var(--aa-search-input-height) / 8); + position: relative; + text-align: left; + width: 100%; +} +.aa-DetachedSearchButton:focus { + border-color: #3e34d3; + border-color: rgba(var(--aa-primary-color-rgb), 1); + box-shadow: rgba(62, 52, 211, 0.2) 0 0 0 3px, inset rgba(62, 52, 211, 0.2) 0 0 0 2px; + box-shadow: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 3px, inset rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px; + outline: currentColor none medium; +} +.aa-DetachedSearchButtonIcon { + align-items: center; + color: #3e34d3; + color: rgba(var(--aa-primary-color-rgb), 1); + cursor: auto; + cursor: initial; + display: flex; + height: 100%; + justify-content: center; + width: 36px; + width: calc(var(--aa-icon-size) + var(--aa-spacing)); +} + +/* Remove scroll on `body` */ +.aa-Detached { + height: 100vh; + overflow: hidden; +} + +.aa-DetachedOverlay { + background-color: rgba(115, 114, 129, 0.4); + background-color: rgba(var(--aa-overlay-color-rgb), var(--aa-overlay-color-alpha)); + height: 100vh; + left: 0; + margin: 0; + padding: 0; + position: fixed; + right: 0; + top: 0; + z-index: 9998; + z-index: calc(var(--aa-base-z-index) - 1); +} + +/*---------------- */ +/* 10. Gradients */ +/*---------------- */ +.aa-GradientTop, +.aa-GradientBottom { + height: 8px; + height: var(--aa-spacing-half); + left: 0; + pointer-events: none; + position: absolute; + right: 0; + z-index: 9999; + z-index: var(--aa-base-z-index); +} + +.aa-GradientTop { + background-image: linear-gradient(white, rgba(255, 255, 255, 0)); + background-image: linear-gradient(rgba(var(--aa-background-color-rgb), 1), rgba(var(--aa-background-color-rgb), 0)); + top: 0; +} + +.aa-GradientBottom { + background-image: linear-gradient(rgba(255, 255, 255, 0), white); + background-image: linear-gradient(rgba(var(--aa-background-color-rgb), 0), rgba(var(--aa-background-color-rgb), 1)); + border-bottom-left-radius: 4px; + border-bottom-left-radius: calc(var(--aa-spacing) / 4); + border-bottom-right-radius: 4px; + border-bottom-right-radius: calc(var(--aa-spacing) / 4); + bottom: 0; +} + +/*---------------- */ +/* 11. Utilities */ +/*---------------- */ +@media (hover: none) and (pointer: coarse) { + .aa-DesktopOnly { + display: none; + } +} + +@media (hover: hover) { + .aa-TouchOnly { + display: none; + } +} \ No newline at end of file diff --git a/assets/autocomplete-theme-classic/dist/theme.min.css b/assets/autocomplete-theme-classic/dist/theme.min.css new file mode 100644 index 00000000..a8cf2dbc --- /dev/null +++ b/assets/autocomplete-theme-classic/dist/theme.min.css @@ -0,0 +1,2 @@ +/*! @algolia/autocomplete-theme-classic 1.7.3 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */ +:root{--aa-search-input-height:44px;--aa-input-icon-size:20px;--aa-base-unit:16;--aa-spacing-factor:1;--aa-spacing:calc(var(--aa-base-unit)*var(--aa-spacing-factor)*1px);--aa-spacing-half:calc(var(--aa-spacing)/2);--aa-panel-max-height:650px;--aa-base-z-index:9999;--aa-font-size:calc(var(--aa-base-unit)*1px);--aa-font-family:inherit;--aa-font-weight-medium:500;--aa-font-weight-semibold:600;--aa-font-weight-bold:700;--aa-icon-size:20px;--aa-icon-stroke-width:1.6;--aa-icon-color-rgb:119,119,163;--aa-icon-color-alpha:1;--aa-action-icon-size:20px;--aa-text-color-rgb:38,38,39;--aa-text-color-alpha:1;--aa-primary-color-rgb:62,52,211;--aa-primary-color-alpha:0.2;--aa-muted-color-rgb:128,126,163;--aa-muted-color-alpha:0.6;--aa-panel-border-color-rgb:128,126,163;--aa-panel-border-color-alpha:0.3;--aa-input-border-color-rgb:128,126,163;--aa-input-border-color-alpha:0.8;--aa-background-color-rgb:255,255,255;--aa-background-color-alpha:1;--aa-input-background-color-rgb:255,255,255;--aa-input-background-color-alpha:1;--aa-selected-color-rgb:179,173,214;--aa-selected-color-alpha:0.205;--aa-description-highlight-background-color-rgb:245,223,77;--aa-description-highlight-background-color-alpha:0.5;--aa-detached-media-query:(max-width:680px);--aa-detached-modal-media-query:(min-width:680px);--aa-detached-modal-max-width:680px;--aa-detached-modal-max-height:500px;--aa-overlay-color-rgb:115,114,129;--aa-overlay-color-alpha:0.4;--aa-panel-shadow:0 0 0 1px rgba(35,38,59,0.1),0 6px 16px -4px rgba(35,38,59,0.15);--aa-scrollbar-width:13px;--aa-scrollbar-track-background-color-rgb:234,234,234;--aa-scrollbar-track-background-color-alpha:1;--aa-scrollbar-thumb-background-color-rgb:var(--aa-background-color-rgb);--aa-scrollbar-thumb-background-color-alpha:1}@media (hover:none) and (pointer:coarse){:root{--aa-spacing-factor:1.2;--aa-action-icon-size:22px}}body.dark,body[data-theme=dark]{--aa-text-color-rgb:183,192,199;--aa-primary-color-rgb:146,138,255;--aa-muted-color-rgb:146,138,255;--aa-input-background-color-rgb:0,3,9;--aa-background-color-rgb:21,24,42;--aa-selected-color-rgb:146,138,255;--aa-selected-color-alpha:0.25;--aa-description-highlight-background-color-rgb:0 255 255;--aa-description-highlight-background-color-alpha:0.25;--aa-icon-color-rgb:119,119,163;--aa-panel-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--aa-scrollbar-track-background-color-rgb:44,46,64;--aa-scrollbar-thumb-background-color-rgb:var(--aa-background-color-rgb)}.aa-Autocomplete *,.aa-DetachedFormContainer *,.aa-Panel *{box-sizing:border-box}.aa-Autocomplete,.aa-DetachedFormContainer,.aa-Panel{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-family:inherit;font-family:var(--aa-font-family);font-size:16px;font-size:var(--aa-font-size);font-weight:400;line-height:1em;margin:0;padding:0;text-align:left}.aa-Form{align-items:center;background-color:#fff;background-color:rgba(var(--aa-input-background-color-rgb),var(--aa-input-background-color-alpha));border:1px solid rgba(128,126,163,.8);border:1px solid rgba(var(--aa-input-border-color-rgb),var(--aa-input-border-color-alpha));border-radius:3px;display:flex;line-height:1em;margin:0;position:relative;width:100%}.aa-Form[focus-within]{border-color:#3e34d3;border-color:rgba(var(--aa-primary-color-rgb),1);box-shadow:0 0 0 2px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);box-shadow:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px,inset rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px;outline:medium none currentColor}.aa-Form:focus-within{border-color:#3e34d3;border-color:rgba(var(--aa-primary-color-rgb),1);box-shadow:0 0 0 2px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);box-shadow:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px,inset rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px;outline:medium none currentColor}.aa-InputWrapperPrefix{align-items:center;display:flex;flex-shrink:0;height:44px;height:var(--aa-search-input-height);order:1}.aa-Label,.aa-LoadingIndicator{cursor:auto;flex-shrink:0;height:100%;padding:0;text-align:left}.aa-Label svg,.aa-LoadingIndicator svg{color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1);height:auto;max-height:20px;max-height:var(--aa-input-icon-size);stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);width:20px;width:var(--aa-input-icon-size)}.aa-LoadingIndicator,.aa-SubmitButton{height:100%;padding-left:11px;padding-left:calc(var(--aa-spacing)*0.75 - 1px);padding-right:8px;padding-right:var(--aa-spacing-half);width:47px;width:calc(var(--aa-spacing)*1.75 + var(--aa-icon-size) - 1px)}@media (hover:none) and (pointer:coarse){.aa-LoadingIndicator,.aa-SubmitButton{padding-left:3px;padding-left:calc(var(--aa-spacing-half)/2 - 1px);width:39px;width:calc(var(--aa-icon-size) + var(--aa-spacing)*1.25 - 1px)}}.aa-SubmitButton{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;margin:0}.aa-LoadingIndicator{align-items:center;display:flex;justify-content:center}.aa-LoadingIndicator[hidden]{display:none}.aa-InputWrapper{order:3;position:relative;width:100%}.aa-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font:inherit;height:44px;height:var(--aa-search-input-height);padding:0;width:100%}.aa-Input::-moz-placeholder{color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));opacity:1}.aa-Input:-ms-input-placeholder{color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));opacity:1}.aa-Input::placeholder{color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));opacity:1}.aa-Input:focus{border-color:none;box-shadow:none;outline:none}.aa-Input::-webkit-search-cancel-button,.aa-Input::-webkit-search-decoration,.aa-Input::-webkit-search-results-button,.aa-Input::-webkit-search-results-decoration{-webkit-appearance:none;appearance:none}.aa-InputWrapperSuffix{align-items:center;display:flex;height:44px;height:var(--aa-search-input-height);order:4}.aa-ClearButton{align-items:center;background:none;border:0;color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;display:flex;height:100%;margin:0;padding:0 12.8333333333px;padding:0 calc(var(--aa-spacing)*0.83333 - .5px)}@media (hover:none) and (pointer:coarse){.aa-ClearButton{padding:0 10.1666666667px;padding:0 calc(var(--aa-spacing)*0.66667 - .5px)}}.aa-ClearButton:focus,.aa-ClearButton:hover{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha))}.aa-ClearButton[hidden]{display:none}.aa-ClearButton svg{stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);width:20px;width:var(--aa-icon-size)}.aa-Panel{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));border-radius:4px;border-radius:calc(var(--aa-spacing)/4);box-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);box-shadow:var(--aa-panel-shadow);margin:8px 0 0;overflow:hidden;position:absolute;transition:opacity .2s ease-in,filter .2s ease-in}@media screen and (prefers-reduced-motion){.aa-Panel{transition:none}}.aa-Panel button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;margin:0;padding:0}.aa-PanelLayout{height:100%;margin:0;max-height:650px;max-height:var(--aa-panel-max-height);overflow-y:auto;padding:0;position:relative;text-align:left}.aa-PanelLayoutColumns--twoGolden{display:grid;grid-template-columns:39.2% auto;overflow:hidden;padding:0}.aa-PanelLayoutColumns--two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));overflow:hidden;padding:0}.aa-PanelLayoutColumns--three{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));overflow:hidden;padding:0}.aa-Panel--stalled .aa-Source{filter:grayscale(1);opacity:.8}.aa-Panel--scrollable{margin:0;max-height:650px;max-height:var(--aa-panel-max-height);overflow-x:hidden;overflow-y:auto;padding:8px;padding:var(--aa-spacing-half);scrollbar-color:#fff #eaeaea;scrollbar-color:rgba(var(--aa-scrollbar-thumb-background-color-rgb),var(--aa-scrollbar-thumb-background-color-alpha)) rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha));scrollbar-width:thin}.aa-Panel--scrollable::-webkit-scrollbar{width:13px;width:var(--aa-scrollbar-width)}.aa-Panel--scrollable::-webkit-scrollbar-track{background-color:#eaeaea;background-color:rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha))}.aa-Panel--scrollable::-webkit-scrollbar-thumb{background-color:#fff;background-color:rgba(var(--aa-scrollbar-thumb-background-color-rgb),var(--aa-scrollbar-thumb-background-color-alpha));border-radius:9999px;border:3px solid #eaeaea;border-color:rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha));border-right:2px solid rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha))}.aa-Source{margin:0;padding:0;position:relative;width:100%}.aa-Source:empty{display:none}.aa-SourceNoResults{font-size:1em;margin:0;padding:16px;padding:var(--aa-spacing)}.aa-List{list-style:none;margin:0}.aa-List,.aa-SourceHeader{padding:0;position:relative}.aa-SourceHeader{margin:8px .5em 8px 0;margin:var(--aa-spacing-half) .5em var(--aa-spacing-half) 0}.aa-SourceHeader:empty{display:none}.aa-SourceHeaderTitle{background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1);display:inline-block;font-size:.8em;font-weight:600;font-weight:var(--aa-font-weight-semibold);margin:0;padding:0 8px 0 0;padding:0 var(--aa-spacing-half) 0 0;position:relative;z-index:9999;z-index:var(--aa-base-z-index)}.aa-SourceHeaderLine{border-bottom:1px solid #3e34d3;border-bottom:1px solid rgba(var(--aa-primary-color-rgb),1);display:block;height:2px;left:0;margin:0;opacity:.3;padding:0;position:absolute;right:0;top:8px;top:var(--aa-spacing-half);z-index:9998;z-index:calc(var(--aa-base-z-index) - 1)}.aa-SourceFooterSeeAll{background:linear-gradient(180deg,#fff,rgba(128,126,163,.14));background:linear-gradient(180deg,rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha)),rgba(128,126,163,.14));border:1px solid rgba(128,126,163,.6);border:1px solid rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));border-radius:5px;box-shadow:inset 0 0 2px #fff,0 2px 2px -1px rgba(76,69,88,.15);color:inherit;font-size:.95em;font-weight:500;font-weight:var(--aa-font-weight-medium);padding:.475em 1em .6em;text-decoration:none}.aa-SourceFooterSeeAll:focus,.aa-SourceFooterSeeAll:hover{border:1px solid #3e34d3;border:1px solid rgba(var(--aa-primary-color-rgb),1);color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1)}.aa-Item{align-items:center;border-radius:3px;cursor:pointer;display:grid;min-height:40px;min-height:calc(var(--aa-spacing)*2.5);padding:4px;padding:calc(var(--aa-spacing-half)/2)}.aa-Item[aria-selected=true]{background-color:rgba(179,173,214,.205);background-color:rgba(var(--aa-selected-color-rgb),var(--aa-selected-color-alpha))}.aa-Item[aria-selected=true] .aa-ActiveOnly,.aa-Item[aria-selected=true] .aa-ItemActionButton{visibility:visible}.aa-ItemIcon{align-items:center;background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));border-radius:3px;box-shadow:inset 0 0 0 1px rgba(128,126,163,.3);box-shadow:inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));color:#7777a3;color:rgba(var(--aa-icon-color-rgb),var(--aa-icon-color-alpha));display:flex;flex-shrink:0;font-size:.7em;height:28px;height:calc(var(--aa-icon-size) + var(--aa-spacing-half));justify-content:center;overflow:hidden;stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);text-align:center;width:28px;width:calc(var(--aa-icon-size) + var(--aa-spacing-half))}.aa-ItemIcon img{height:auto;max-height:20px;max-height:calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px);max-width:20px;max-width:calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px);width:auto}.aa-ItemIcon svg{height:20px;height:var(--aa-icon-size);width:20px;width:var(--aa-icon-size)}.aa-ItemIcon--alignTop{align-self:flex-start}.aa-ItemIcon--noBorder{background:none;box-shadow:none}.aa-ItemIcon--picture{height:96px;width:96px}.aa-ItemIcon--picture img{max-height:100%;max-width:100%;padding:8px;padding:var(--aa-spacing-half)}.aa-ItemContent{align-items:center;cursor:pointer;display:grid;grid-gap:8px;gap:8px;grid-gap:var(--aa-spacing-half);gap:var(--aa-spacing-half);grid-auto-flow:column;line-height:1.25em;overflow:hidden}.aa-ItemContent:empty{display:none}.aa-ItemContent mark{background:none;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-style:normal;font-weight:700;font-weight:var(--aa-font-weight-bold)}.aa-ItemContent--dual{display:flex;flex-direction:column;justify-content:space-between;text-align:left}.aa-ItemContent--dual .aa-ItemContentSubtitle,.aa-ItemContent--dual .aa-ItemContentTitle{display:block}.aa-ItemContent--indented{padding-left:36px;padding-left:calc(var(--aa-icon-size) + var(--aa-spacing))}.aa-ItemContentBody{display:grid;grid-gap:4px;gap:4px;grid-gap:calc(var(--aa-spacing-half)/2);gap:calc(var(--aa-spacing-half)/2)}.aa-ItemContentTitle{display:inline-block;margin:0 .5em 0 0;max-width:100%;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.aa-ItemContentSubtitle{font-size:.92em}.aa-ItemContentSubtitleIcon:before{border-color:rgba(128,126,163,.64);border-color:rgba(var(--aa-muted-color-rgb),.64);border-style:solid;content:"";display:inline-block;left:1px;position:relative;top:-3px}.aa-ItemContentSubtitle--inline .aa-ItemContentSubtitleIcon:before{border-width:0 0 1.5px;margin-left:8px;margin-left:var(--aa-spacing-half);margin-right:4px;margin-right:calc(var(--aa-spacing-half)/2);width:10px;width:calc(var(--aa-spacing-half) + 2px)}.aa-ItemContentSubtitle--standalone{align-items:center;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));display:grid;grid-gap:8px;gap:8px;grid-gap:var(--aa-spacing-half);gap:var(--aa-spacing-half);grid-auto-flow:column;justify-content:start}.aa-ItemContentSubtitle--standalone .aa-ItemContentSubtitleIcon:before{border-radius:0 0 0 3px;border-width:0 0 1.5px 1.5px;height:8px;height:var(--aa-spacing-half);width:8px;width:var(--aa-spacing-half)}.aa-ItemContentSubtitleCategory{color:#807ea3;color:rgba(var(--aa-muted-color-rgb),1);font-weight:500}.aa-ItemContentDescription{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-size:.85em;max-width:100%;overflow-x:hidden;text-overflow:ellipsis}.aa-ItemContentDescription:empty{display:none}.aa-ItemContentDescription mark{background:rgba(245,223,77,.5);background:rgba(var(--aa-description-highlight-background-color-rgb),var(--aa-description-highlight-background-color-alpha));color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-style:normal;font-weight:500;font-weight:var(--aa-font-weight-medium)}.aa-ItemContentDash{color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));display:none;opacity:.4}.aa-ItemContentTag{background-color:rgba(62,52,211,.2);background-color:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha));border-radius:3px;margin:0 .4em 0 0;padding:.08em .3em}.aa-ItemLink,.aa-ItemWrapper{align-items:center;color:inherit;display:grid;grid-gap:4px;gap:4px;grid-gap:calc(var(--aa-spacing-half)/2);gap:calc(var(--aa-spacing-half)/2);grid-auto-flow:column;justify-content:space-between;width:100%}.aa-ItemLink{color:inherit;text-decoration:none}.aa-ItemActions{display:grid;grid-auto-flow:column;height:100%;justify-self:end;margin:0 -5.3333333333px;margin:0 calc(var(--aa-spacing)/-3);padding:0 2px 0 0}.aa-ItemActionButton{align-items:center;background:none;border:0;color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;display:flex;flex-shrink:0;padding:0}.aa-ItemActionButton:focus svg,.aa-ItemActionButton:hover svg{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha))}@media (hover:none) and (pointer:coarse){.aa-ItemActionButton:focus svg,.aa-ItemActionButton:hover svg{color:inherit}}.aa-ItemActionButton svg{color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));margin:5.3333333333px;margin:calc(var(--aa-spacing)/3);stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);width:20px;width:var(--aa-action-icon-size)}.aa-ActiveOnly{visibility:hidden}.aa-PanelHeader{align-items:center;background:#3e34d3;background:rgba(var(--aa-primary-color-rgb),1);color:#fff;display:grid;height:var(--aa-modal-header-height);margin:0;padding:8px 16px;padding:var(--aa-spacing-half) var(--aa-spacing);position:relative}.aa-PanelHeader:after{background-image:linear-gradient(#fff,hsla(0,0%,100%,0));background-image:linear-gradient(rgba(var(--aa-background-color-rgb),1),rgba(var(--aa-background-color-rgb),0));bottom:-8px;bottom:calc(var(--aa-spacing-half)*-1);content:"";height:8px;height:var(--aa-spacing-half);left:0;pointer-events:none;position:absolute;right:0}.aa-PanelFooter,.aa-PanelHeader:after{z-index:9999;z-index:var(--aa-base-z-index)}.aa-PanelFooter{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));box-shadow:inset 0 1px 0 rgba(128,126,163,.3);box-shadow:inset 0 1px 0 rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));display:flex;justify-content:space-between;margin:0;padding:16px;padding:var(--aa-spacing);position:relative}.aa-PanelFooter:after{background-image:linear-gradient(hsla(0,0%,100%,0),rgba(128,126,163,.6));background-image:linear-gradient(rgba(var(--aa-background-color-rgb),0),rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha)));content:"";height:16px;height:var(--aa-spacing);left:0;opacity:.12;pointer-events:none;position:absolute;right:0;top:-16px;top:calc(var(--aa-spacing)*-1);z-index:9998;z-index:calc(var(--aa-base-z-index) - 1)}.aa-DetachedContainer{background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));bottom:0;box-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);box-shadow:var(--aa-panel-shadow);display:flex;flex-direction:column;left:0;margin:0;overflow:hidden;padding:0;position:fixed;right:0;top:0;z-index:9999;z-index:var(--aa-base-z-index)}.aa-DetachedContainer:after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:8px 0 8px 2px;margin:var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px}.aa-DetachedContainer .aa-Panel{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));border-radius:0;box-shadow:none;flex-grow:1;margin:0;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{bottom:0;box-shadow:none;left:0;margin:0;max-height:none;overflow-y:auto;position:absolute;right:0;top:0;width:100%}.aa-DetachedFormContainer{border-bottom:1px solid rgba(128,126,163,.3);border-bottom:1px solid rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:8px;padding:var(--aa-spacing-half)}.aa-DetachedCancelButton{background:none;border:0;border-radius:3px;color:inherit;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));cursor:pointer;font:inherit;margin:0 0 0 8px;margin:0 0 0 var(--aa-spacing-half);padding:0 8px;padding:0 var(--aa-spacing-half)}.aa-DetachedCancelButton:focus,.aa-DetachedCancelButton:hover{box-shadow:inset 0 0 0 1px rgba(128,126,163,.3);box-shadow:inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha))}.aa-DetachedContainer--modal{border-radius:6px;bottom:inherit;height:auto;margin:0 auto;max-width:680px;max-width:var(--aa-detached-modal-max-width);position:absolute;top:3%}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:500px;max-height:var(--aa-detached-modal-max-height);padding-bottom:8px;padding-bottom:var(--aa-spacing-half);position:static}.aa-DetachedSearchButton{align-items:center;background-color:#fff;background-color:rgba(var(--aa-input-background-color-rgb),var(--aa-input-background-color-alpha));border:1px solid rgba(128,126,163,.8);border:1px solid rgba(var(--aa-input-border-color-rgb),var(--aa-input-border-color-alpha));border-radius:3px;color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;display:flex;font:inherit;font-family:inherit;font-family:var(--aa-font-family);font-size:16px;font-size:var(--aa-font-size);height:44px;height:var(--aa-search-input-height);margin:0;padding:0 5.5px;padding:0 calc(var(--aa-search-input-height)/8);position:relative;text-align:left;width:100%}.aa-DetachedSearchButton:focus{border-color:#3e34d3;border-color:rgba(var(--aa-primary-color-rgb),1);box-shadow:0 0 0 3px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);box-shadow:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 3px,inset rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px;outline:medium none currentColor}.aa-DetachedSearchButtonIcon{align-items:center;color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1);cursor:auto;display:flex;height:100%;justify-content:center;width:36px;width:calc(var(--aa-icon-size) + var(--aa-spacing))}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:rgba(115,114,129,.4);background-color:rgba(var(--aa-overlay-color-rgb),var(--aa-overlay-color-alpha));height:100vh;left:0;margin:0;padding:0;position:fixed;right:0;top:0;z-index:9998;z-index:calc(var(--aa-base-z-index) - 1)}.aa-GradientBottom,.aa-GradientTop{height:8px;height:var(--aa-spacing-half);left:0;pointer-events:none;position:absolute;right:0;z-index:9999;z-index:var(--aa-base-z-index)}.aa-GradientTop{background-image:linear-gradient(#fff,hsla(0,0%,100%,0));background-image:linear-gradient(rgba(var(--aa-background-color-rgb),1),rgba(var(--aa-background-color-rgb),0));top:0}.aa-GradientBottom{background-image:linear-gradient(hsla(0,0%,100%,0),#fff);background-image:linear-gradient(rgba(var(--aa-background-color-rgb),0),rgba(var(--aa-background-color-rgb),1));border-bottom-left-radius:4px;border-bottom-left-radius:calc(var(--aa-spacing)/4);border-bottom-right-radius:4px;border-bottom-right-radius:calc(var(--aa-spacing)/4);bottom:0}@media (hover:none) and (pointer:coarse){.aa-DesktopOnly{display:none}}@media (hover:hover){.aa-TouchOnly{display:none}} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/autocomplete.d.ts b/assets/autocomplete.js/dist/esm/autocomplete.d.ts new file mode 100644 index 00000000..fabd6c3b --- /dev/null +++ b/assets/autocomplete.js/dist/esm/autocomplete.d.ts @@ -0,0 +1,3 @@ +import { BaseItem } from '@algolia/autocomplete-core'; +import { AutocompleteApi, AutocompleteOptions } from './types'; +export declare function autocomplete(options: AutocompleteOptions): AutocompleteApi; diff --git a/assets/autocomplete.js/dist/esm/autocomplete.js b/assets/autocomplete.js/dist/esm/autocomplete.js new file mode 100644 index 00000000..a76f2f22 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/autocomplete.js @@ -0,0 +1,331 @@ +var _excluded = ["components"]; + +function _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; } + +function _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; } + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _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; } + +import { createAutocomplete } from '@algolia/autocomplete-core'; +import { createRef, debounce, getItemsCount } from '@algolia/autocomplete-shared'; +import htm from 'htm'; +import { createAutocompleteDom } from './createAutocompleteDom'; +import { createEffectWrapper } from './createEffectWrapper'; +import { createReactiveWrapper } from './createReactiveWrapper'; +import { getDefaultOptions } from './getDefaultOptions'; +import { getPanelPlacementStyle } from './getPanelPlacementStyle'; +import { renderPanel, renderSearchBox } from './render'; +import { userAgents } from './userAgents'; +import { mergeDeep, pickBy, setProperties } from './utils'; +export function autocomplete(options) { + var _createEffectWrapper = createEffectWrapper(), + runEffect = _createEffectWrapper.runEffect, + cleanupEffects = _createEffectWrapper.cleanupEffects, + runEffects = _createEffectWrapper.runEffects; + + var _createReactiveWrappe = createReactiveWrapper(), + reactive = _createReactiveWrappe.reactive, + runReactives = _createReactiveWrappe.runReactives; + + var hasNoResultsSourceTemplateRef = createRef(false); + var optionsRef = createRef(options); + var onStateChangeRef = createRef(undefined); + var props = reactive(function () { + return getDefaultOptions(optionsRef.current); + }); + var isDetached = reactive(function () { + return props.value.core.environment.matchMedia(props.value.renderer.detachedMediaQuery).matches; + }); + var autocomplete = reactive(function () { + return createAutocomplete(_objectSpread(_objectSpread({}, props.value.core), {}, { + onStateChange: function onStateChange(params) { + var _onStateChangeRef$cur, _props$value$core$onS, _props$value$core; + + hasNoResultsSourceTemplateRef.current = params.state.collections.some(function (collection) { + return collection.source.templates.noResults; + }); + (_onStateChangeRef$cur = onStateChangeRef.current) === null || _onStateChangeRef$cur === void 0 ? void 0 : _onStateChangeRef$cur.call(onStateChangeRef, params); + (_props$value$core$onS = (_props$value$core = props.value.core).onStateChange) === null || _props$value$core$onS === void 0 ? void 0 : _props$value$core$onS.call(_props$value$core, params); + }, + shouldPanelOpen: optionsRef.current.shouldPanelOpen || function (_ref) { + var state = _ref.state; + + if (isDetached.value) { + return true; + } + + var hasItems = getItemsCount(state) > 0; + + if (!props.value.core.openOnFocus && !state.query) { + return hasItems; + } + + var hasNoResultsTemplate = Boolean(hasNoResultsSourceTemplateRef.current || props.value.renderer.renderNoResults); + return !hasItems && hasNoResultsTemplate || hasItems; + }, + __autocomplete_metadata: { + userAgents: userAgents, + options: options + } + })); + }); + var lastStateRef = createRef(_objectSpread({ + collections: [], + completion: null, + context: {}, + isOpen: false, + query: '', + activeItemId: null, + status: 'idle' + }, props.value.core.initialState)); + var propGetters = { + getEnvironmentProps: props.value.renderer.getEnvironmentProps, + getFormProps: props.value.renderer.getFormProps, + getInputProps: props.value.renderer.getInputProps, + getItemProps: props.value.renderer.getItemProps, + getLabelProps: props.value.renderer.getLabelProps, + getListProps: props.value.renderer.getListProps, + getPanelProps: props.value.renderer.getPanelProps, + getRootProps: props.value.renderer.getRootProps + }; + var autocompleteScopeApi = { + setActiveItemId: autocomplete.value.setActiveItemId, + setQuery: autocomplete.value.setQuery, + setCollections: autocomplete.value.setCollections, + setIsOpen: autocomplete.value.setIsOpen, + setStatus: autocomplete.value.setStatus, + setContext: autocomplete.value.setContext, + refresh: autocomplete.value.refresh + }; + var html = reactive(function () { + return htm.bind(props.value.renderer.renderer.createElement); + }); + var dom = reactive(function () { + return createAutocompleteDom({ + autocomplete: autocomplete.value, + autocompleteScopeApi: autocompleteScopeApi, + classNames: props.value.renderer.classNames, + environment: props.value.core.environment, + isDetached: isDetached.value, + placeholder: props.value.core.placeholder, + propGetters: propGetters, + setIsModalOpen: setIsModalOpen, + state: lastStateRef.current, + translations: props.value.renderer.translations + }); + }); + + function setPanelPosition() { + setProperties(dom.value.panel, { + style: isDetached.value ? {} : getPanelPlacementStyle({ + panelPlacement: props.value.renderer.panelPlacement, + container: dom.value.root, + form: dom.value.form, + environment: props.value.core.environment + }) + }); + } + + function scheduleRender(state) { + lastStateRef.current = state; + var renderProps = { + autocomplete: autocomplete.value, + autocompleteScopeApi: autocompleteScopeApi, + classNames: props.value.renderer.classNames, + components: props.value.renderer.components, + container: props.value.renderer.container, + html: html.value, + dom: dom.value, + panelContainer: isDetached.value ? dom.value.detachedContainer : props.value.renderer.panelContainer, + propGetters: propGetters, + state: lastStateRef.current, + renderer: props.value.renderer.renderer + }; + var render = !getItemsCount(state) && !hasNoResultsSourceTemplateRef.current && props.value.renderer.renderNoResults || props.value.renderer.render; + renderSearchBox(renderProps); + renderPanel(render, renderProps); + } + + runEffect(function () { + var environmentProps = autocomplete.value.getEnvironmentProps({ + formElement: dom.value.form, + panelElement: dom.value.panel, + inputElement: dom.value.input + }); + setProperties(props.value.core.environment, environmentProps); + return function () { + setProperties(props.value.core.environment, Object.keys(environmentProps).reduce(function (acc, key) { + return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, key, undefined)); + }, {})); + }; + }); + runEffect(function () { + var panelContainerElement = isDetached.value ? props.value.core.environment.document.body : props.value.renderer.panelContainer; + var panelElement = isDetached.value ? dom.value.detachedOverlay : dom.value.panel; + + if (isDetached.value && lastStateRef.current.isOpen) { + setIsModalOpen(true); + } + + scheduleRender(lastStateRef.current); + return function () { + if (panelContainerElement.contains(panelElement)) { + panelContainerElement.removeChild(panelElement); + } + }; + }); + runEffect(function () { + var containerElement = props.value.renderer.container; + containerElement.appendChild(dom.value.root); + return function () { + containerElement.removeChild(dom.value.root); + }; + }); + runEffect(function () { + var debouncedRender = debounce(function (_ref2) { + var state = _ref2.state; + scheduleRender(state); + }, 0); + + onStateChangeRef.current = function (_ref3) { + var state = _ref3.state, + prevState = _ref3.prevState; + + if (isDetached.value && prevState.isOpen !== state.isOpen) { + setIsModalOpen(state.isOpen); + } // The outer DOM might have changed since the last time the panel was + // positioned. The layout might have shifted vertically for instance. + // It's therefore safer to re-calculate the panel position before opening + // it again. + + + if (!isDetached.value && state.isOpen && !prevState.isOpen) { + setPanelPosition(); + } // We scroll to the top of the panel whenever the query changes (i.e. new + // results come in) so that users don't have to. + + + if (state.query !== prevState.query) { + var scrollablePanels = props.value.core.environment.document.querySelectorAll('.aa-Panel--scrollable'); + scrollablePanels.forEach(function (scrollablePanel) { + if (scrollablePanel.scrollTop !== 0) { + scrollablePanel.scrollTop = 0; + } + }); + } + + debouncedRender({ + state: state + }); + }; + + return function () { + onStateChangeRef.current = undefined; + }; + }); + runEffect(function () { + var onResize = debounce(function () { + var previousIsDetached = isDetached.value; + isDetached.value = props.value.core.environment.matchMedia(props.value.renderer.detachedMediaQuery).matches; + + if (previousIsDetached !== isDetached.value) { + update({}); + } else { + requestAnimationFrame(setPanelPosition); + } + }, 20); + props.value.core.environment.addEventListener('resize', onResize); + return function () { + props.value.core.environment.removeEventListener('resize', onResize); + }; + }); + runEffect(function () { + if (!isDetached.value) { + return function () {}; + } + + function toggleModalClassname(isActive) { + dom.value.detachedContainer.classList.toggle('aa-DetachedContainer--modal', isActive); + } + + function onChange(event) { + toggleModalClassname(event.matches); + } + + var isModalDetachedMql = props.value.core.environment.matchMedia(getComputedStyle(props.value.core.environment.document.documentElement).getPropertyValue('--aa-detached-modal-media-query')); + toggleModalClassname(isModalDetachedMql.matches); // Prior to Safari 14, `MediaQueryList` isn't based on `EventTarget`, + // so we must use `addListener` and `removeListener` to observe media query lists. + // See https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList/addListener + + var hasModernEventListener = Boolean(isModalDetachedMql.addEventListener); + hasModernEventListener ? isModalDetachedMql.addEventListener('change', onChange) : isModalDetachedMql.addListener(onChange); + return function () { + hasModernEventListener ? isModalDetachedMql.removeEventListener('change', onChange) : isModalDetachedMql.removeListener(onChange); + }; + }); + runEffect(function () { + requestAnimationFrame(setPanelPosition); + return function () {}; + }); + + function destroy() { + cleanupEffects(); + } + + function update() { + var updatedOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + cleanupEffects(); + + var _props$value$renderer = props.value.renderer, + components = _props$value$renderer.components, + rendererProps = _objectWithoutProperties(_props$value$renderer, _excluded); + + optionsRef.current = mergeDeep(rendererProps, props.value.core, { + // We need to filter out default components so they can be replaced with + // a new `renderer`, without getting rid of user components. + // @MAJOR Deal with registering components with the same name as the + // default ones. If we disallow overriding default components, we'd just + // need to pass all `components` here. + components: pickBy(components, function (_ref4) { + var value = _ref4.value; + return !value.hasOwnProperty('__autocomplete_componentName'); + }), + initialState: lastStateRef.current + }, updatedOptions); + runReactives(); + runEffects(); + autocomplete.value.refresh().then(function () { + scheduleRender(lastStateRef.current); + }); + } + + function setIsModalOpen(value) { + requestAnimationFrame(function () { + var prevValue = props.value.core.environment.document.body.contains(dom.value.detachedOverlay); + + if (value === prevValue) { + return; + } + + if (value) { + props.value.core.environment.document.body.appendChild(dom.value.detachedOverlay); + props.value.core.environment.document.body.classList.add('aa-Detached'); + dom.value.input.focus(); + } else { + props.value.core.environment.document.body.removeChild(dom.value.detachedOverlay); + props.value.core.environment.document.body.classList.remove('aa-Detached'); + autocomplete.value.setQuery(''); + autocomplete.value.refresh(); + } + }); + } + + return _objectSpread(_objectSpread({}, autocompleteScopeApi), {}, { + update: update, + destroy: destroy + }); +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/components/Highlight.d.ts b/assets/autocomplete.js/dist/esm/components/Highlight.d.ts new file mode 100644 index 00000000..214dbdda --- /dev/null +++ b/assets/autocomplete.js/dist/esm/components/Highlight.d.ts @@ -0,0 +1,6 @@ +/// +import { AutocompleteRenderer, HighlightHitParams } from '../types'; +export declare function createHighlightComponent({ createElement, Fragment, }: AutocompleteRenderer): { + ({ hit, attribute, tagName, }: HighlightHitParams): JSX.Element; + __autocomplete_componentName: string; +}; diff --git a/assets/autocomplete.js/dist/esm/components/Highlight.js b/assets/autocomplete.js/dist/esm/components/Highlight.js new file mode 100644 index 00000000..f3a17d4c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/components/Highlight.js @@ -0,0 +1,23 @@ +import { parseAlgoliaHitHighlight } from '@algolia/autocomplete-preset-algolia'; +export function createHighlightComponent(_ref) { + var createElement = _ref.createElement, + Fragment = _ref.Fragment; + + function Highlight(_ref2) { + var hit = _ref2.hit, + attribute = _ref2.attribute, + _ref2$tagName = _ref2.tagName, + tagName = _ref2$tagName === void 0 ? 'mark' : _ref2$tagName; + return createElement(Fragment, {}, parseAlgoliaHitHighlight({ + hit: hit, + attribute: attribute + }).map(function (x, index) { + return x.isHighlighted ? createElement(tagName, { + key: index + }, x.value) : x.value; + })); + } + + Highlight.__autocomplete_componentName = 'Highlight'; + return Highlight; +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/components/ReverseHighlight.d.ts b/assets/autocomplete.js/dist/esm/components/ReverseHighlight.d.ts new file mode 100644 index 00000000..bb5937f5 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/components/ReverseHighlight.d.ts @@ -0,0 +1,6 @@ +/// +import { AutocompleteRenderer, HighlightHitParams } from '../types'; +export declare function createReverseHighlightComponent({ createElement, Fragment, }: AutocompleteRenderer): { + ({ hit, attribute, tagName, }: HighlightHitParams): JSX.Element; + __autocomplete_componentName: string; +}; diff --git a/assets/autocomplete.js/dist/esm/components/ReverseHighlight.js b/assets/autocomplete.js/dist/esm/components/ReverseHighlight.js new file mode 100644 index 00000000..bca45bb6 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/components/ReverseHighlight.js @@ -0,0 +1,23 @@ +import { parseAlgoliaHitReverseHighlight } from '@algolia/autocomplete-preset-algolia'; +export function createReverseHighlightComponent(_ref) { + var createElement = _ref.createElement, + Fragment = _ref.Fragment; + + function ReverseHighlight(_ref2) { + var hit = _ref2.hit, + attribute = _ref2.attribute, + _ref2$tagName = _ref2.tagName, + tagName = _ref2$tagName === void 0 ? 'mark' : _ref2$tagName; + return createElement(Fragment, {}, parseAlgoliaHitReverseHighlight({ + hit: hit, + attribute: attribute + }).map(function (x, index) { + return x.isHighlighted ? createElement(tagName, { + key: index + }, x.value) : x.value; + })); + } + + ReverseHighlight.__autocomplete_componentName = 'ReverseHighlight'; + return ReverseHighlight; +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/components/ReverseSnippet.d.ts b/assets/autocomplete.js/dist/esm/components/ReverseSnippet.d.ts new file mode 100644 index 00000000..c4bbd509 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/components/ReverseSnippet.d.ts @@ -0,0 +1,6 @@ +/// +import { AutocompleteRenderer, HighlightHitParams } from '../types'; +export declare function createReverseSnippetComponent({ createElement, Fragment, }: AutocompleteRenderer): { + ({ hit, attribute, tagName, }: HighlightHitParams): JSX.Element; + __autocomplete_componentName: string; +}; diff --git a/assets/autocomplete.js/dist/esm/components/ReverseSnippet.js b/assets/autocomplete.js/dist/esm/components/ReverseSnippet.js new file mode 100644 index 00000000..7d22aad0 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/components/ReverseSnippet.js @@ -0,0 +1,23 @@ +import { parseAlgoliaHitReverseSnippet } from '@algolia/autocomplete-preset-algolia'; +export function createReverseSnippetComponent(_ref) { + var createElement = _ref.createElement, + Fragment = _ref.Fragment; + + function ReverseSnippet(_ref2) { + var hit = _ref2.hit, + attribute = _ref2.attribute, + _ref2$tagName = _ref2.tagName, + tagName = _ref2$tagName === void 0 ? 'mark' : _ref2$tagName; + return createElement(Fragment, {}, parseAlgoliaHitReverseSnippet({ + hit: hit, + attribute: attribute + }).map(function (x, index) { + return x.isHighlighted ? createElement(tagName, { + key: index + }, x.value) : x.value; + })); + } + + ReverseSnippet.__autocomplete_componentName = 'ReverseSnippet'; + return ReverseSnippet; +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/components/Snippet.d.ts b/assets/autocomplete.js/dist/esm/components/Snippet.d.ts new file mode 100644 index 00000000..7b478583 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/components/Snippet.d.ts @@ -0,0 +1,6 @@ +/// +import { AutocompleteRenderer, HighlightHitParams } from '../types'; +export declare function createSnippetComponent({ createElement, Fragment, }: AutocompleteRenderer): { + ({ hit, attribute, tagName, }: HighlightHitParams): JSX.Element; + __autocomplete_componentName: string; +}; diff --git a/assets/autocomplete.js/dist/esm/components/Snippet.js b/assets/autocomplete.js/dist/esm/components/Snippet.js new file mode 100644 index 00000000..9065a0dc --- /dev/null +++ b/assets/autocomplete.js/dist/esm/components/Snippet.js @@ -0,0 +1,23 @@ +import { parseAlgoliaHitSnippet } from '@algolia/autocomplete-preset-algolia'; +export function createSnippetComponent(_ref) { + var createElement = _ref.createElement, + Fragment = _ref.Fragment; + + function Snippet(_ref2) { + var hit = _ref2.hit, + attribute = _ref2.attribute, + _ref2$tagName = _ref2.tagName, + tagName = _ref2$tagName === void 0 ? 'mark' : _ref2$tagName; + return createElement(Fragment, {}, parseAlgoliaHitSnippet({ + hit: hit, + attribute: attribute + }).map(function (x, index) { + return x.isHighlighted ? createElement(tagName, { + key: index + }, x.value) : x.value; + })); + } + + Snippet.__autocomplete_componentName = 'Snippet'; + return Snippet; +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/components/index.d.ts b/assets/autocomplete.js/dist/esm/components/index.d.ts new file mode 100644 index 00000000..2f1cf316 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/components/index.d.ts @@ -0,0 +1,4 @@ +export * from './Highlight'; +export * from './ReverseHighlight'; +export * from './ReverseSnippet'; +export * from './Snippet'; diff --git a/assets/autocomplete.js/dist/esm/components/index.js b/assets/autocomplete.js/dist/esm/components/index.js new file mode 100644 index 00000000..4222ba60 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/components/index.js @@ -0,0 +1,4 @@ +export * from './Highlight'; +export * from './ReverseHighlight'; +export * from './ReverseSnippet'; +export * from './Snippet'; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/createAutocompleteDom.d.ts b/assets/autocomplete.js/dist/esm/createAutocompleteDom.d.ts new file mode 100644 index 00000000..c263bddf --- /dev/null +++ b/assets/autocomplete.js/dist/esm/createAutocompleteDom.d.ts @@ -0,0 +1,16 @@ +import { AutocompleteApi as AutocompleteCoreApi, AutocompleteEnvironment, AutocompleteScopeApi, BaseItem } from '@algolia/autocomplete-core'; +import { AutocompleteClassNames, AutocompleteDom, AutocompletePropGetters, AutocompleteState, AutocompleteTranslations } from './types'; +declare type CreateDomProps = { + autocomplete: AutocompleteCoreApi; + autocompleteScopeApi: AutocompleteScopeApi; + classNames: AutocompleteClassNames; + environment: AutocompleteEnvironment; + isDetached: boolean; + placeholder?: string; + propGetters: AutocompletePropGetters; + setIsModalOpen(value: boolean): void; + state: AutocompleteState; + translations: AutocompleteTranslations; +}; +export declare function createAutocompleteDom({ autocomplete, autocompleteScopeApi, classNames, environment, isDetached, placeholder, propGetters, setIsModalOpen, state, translations, }: CreateDomProps): AutocompleteDom; +export {}; diff --git a/assets/autocomplete.js/dist/esm/createAutocompleteDom.js b/assets/autocomplete.js/dist/esm/createAutocompleteDom.js new file mode 100644 index 00000000..77b5040d --- /dev/null +++ b/assets/autocomplete.js/dist/esm/createAutocompleteDom.js @@ -0,0 +1,175 @@ +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _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; } + +import { ClearIcon, Input, LoadingIcon, SearchIcon } from './elements'; +import { getCreateDomElement } from './getCreateDomElement'; +import { setProperties } from './utils'; +export function createAutocompleteDom(_ref) { + var autocomplete = _ref.autocomplete, + autocompleteScopeApi = _ref.autocompleteScopeApi, + classNames = _ref.classNames, + environment = _ref.environment, + isDetached = _ref.isDetached, + _ref$placeholder = _ref.placeholder, + placeholder = _ref$placeholder === void 0 ? 'Search' : _ref$placeholder, + propGetters = _ref.propGetters, + setIsModalOpen = _ref.setIsModalOpen, + state = _ref.state, + translations = _ref.translations; + var createDomElement = getCreateDomElement(environment); + var rootProps = propGetters.getRootProps(_objectSpread({ + state: state, + props: autocomplete.getRootProps({}) + }, autocompleteScopeApi)); + var root = createDomElement('div', _objectSpread({ + class: classNames.root + }, rootProps)); + var detachedContainer = createDomElement('div', { + class: classNames.detachedContainer, + onMouseDown: function onMouseDown(event) { + event.stopPropagation(); + } + }); + var detachedOverlay = createDomElement('div', { + class: classNames.detachedOverlay, + children: [detachedContainer], + onMouseDown: function onMouseDown() { + setIsModalOpen(false); + autocomplete.setIsOpen(false); + } + }); + var labelProps = propGetters.getLabelProps(_objectSpread({ + state: state, + props: autocomplete.getLabelProps({}) + }, autocompleteScopeApi)); + var submitButton = createDomElement('button', { + class: classNames.submitButton, + type: 'submit', + title: translations.submitButtonTitle, + children: [SearchIcon({ + environment: environment + })] + }); + var label = createDomElement('label', _objectSpread({ + class: classNames.label, + children: [submitButton] + }, labelProps)); + var clearButton = createDomElement('button', { + class: classNames.clearButton, + type: 'reset', + title: translations.clearButtonTitle, + children: [ClearIcon({ + environment: environment + })] + }); + var loadingIndicator = createDomElement('div', { + class: classNames.loadingIndicator, + children: [LoadingIcon({ + environment: environment + })] + }); + var input = Input({ + class: classNames.input, + environment: environment, + state: state, + getInputProps: propGetters.getInputProps, + getInputPropsCore: autocomplete.getInputProps, + autocompleteScopeApi: autocompleteScopeApi, + isDetached: isDetached + }); + var inputWrapperPrefix = createDomElement('div', { + class: classNames.inputWrapperPrefix, + children: [label, loadingIndicator] + }); + var inputWrapperSuffix = createDomElement('div', { + class: classNames.inputWrapperSuffix, + children: [clearButton] + }); + var inputWrapper = createDomElement('div', { + class: classNames.inputWrapper, + children: [input] + }); + var formProps = propGetters.getFormProps(_objectSpread({ + state: state, + props: autocomplete.getFormProps({ + inputElement: input + }) + }, autocompleteScopeApi)); + var form = createDomElement('form', _objectSpread({ + class: classNames.form, + children: [inputWrapperPrefix, inputWrapper, inputWrapperSuffix] + }, formProps)); + var panelProps = propGetters.getPanelProps(_objectSpread({ + state: state, + props: autocomplete.getPanelProps({}) + }, autocompleteScopeApi)); + var panel = createDomElement('div', _objectSpread({ + class: classNames.panel + }, panelProps)); + + if (process.env.NODE_ENV === 'test') { + setProperties(panel, { + 'data-testid': 'panel' + }); + } + + if (isDetached) { + var detachedSearchButtonIcon = createDomElement('div', { + class: classNames.detachedSearchButtonIcon, + children: [SearchIcon({ + environment: environment + })] + }); + var detachedSearchButtonPlaceholder = createDomElement('div', { + class: classNames.detachedSearchButtonPlaceholder, + textContent: placeholder + }); + var detachedSearchButton = createDomElement('button', { + type: 'button', + class: classNames.detachedSearchButton, + onClick: function onClick() { + setIsModalOpen(true); + }, + children: [detachedSearchButtonIcon, detachedSearchButtonPlaceholder] + }); + var detachedCancelButton = createDomElement('button', { + type: 'button', + class: classNames.detachedCancelButton, + textContent: translations.detachedCancelButtonText, + // Prevent `onTouchStart` from closing the panel + // since it should be initiated by `onClick` only + onTouchStart: function onTouchStart(event) { + event.stopPropagation(); + }, + onClick: function onClick() { + autocomplete.setIsOpen(false); + setIsModalOpen(false); + } + }); + var detachedFormContainer = createDomElement('div', { + class: classNames.detachedFormContainer, + children: [form, detachedCancelButton] + }); + detachedContainer.appendChild(detachedFormContainer); + root.appendChild(detachedSearchButton); + } else { + root.appendChild(form); + } + + return { + detachedContainer: detachedContainer, + detachedOverlay: detachedOverlay, + inputWrapper: inputWrapper, + input: input, + root: root, + form: form, + label: label, + submitButton: submitButton, + clearButton: clearButton, + loadingIndicator: loadingIndicator, + panel: panel + }; +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/createEffectWrapper.d.ts b/assets/autocomplete.js/dist/esm/createEffectWrapper.d.ts new file mode 100644 index 00000000..e3335834 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/createEffectWrapper.d.ts @@ -0,0 +1,9 @@ +declare type Effect = () => void; +declare type EffectFn = () => Effect; +declare type EffectWrapper = { + runEffect(fn: EffectFn): void; + cleanupEffects(): void; + runEffects(): void; +}; +export declare function createEffectWrapper(): EffectWrapper; +export {}; diff --git a/assets/autocomplete.js/dist/esm/createEffectWrapper.js b/assets/autocomplete.js/dist/esm/createEffectWrapper.js new file mode 100644 index 00000000..14032c10 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/createEffectWrapper.js @@ -0,0 +1,28 @@ +export function createEffectWrapper() { + var effects = []; + var cleanups = []; + + function runEffect(fn) { + effects.push(fn); + var effectCleanup = fn(); + cleanups.push(effectCleanup); + } + + return { + runEffect: runEffect, + cleanupEffects: function cleanupEffects() { + var currentCleanups = cleanups; + cleanups = []; + currentCleanups.forEach(function (cleanup) { + cleanup(); + }); + }, + runEffects: function runEffects() { + var currentEffects = effects; + effects = []; + currentEffects.forEach(function (effect) { + runEffect(effect); + }); + } + }; +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/createReactiveWrapper.d.ts b/assets/autocomplete.js/dist/esm/createReactiveWrapper.d.ts new file mode 100644 index 00000000..b87d293a --- /dev/null +++ b/assets/autocomplete.js/dist/esm/createReactiveWrapper.d.ts @@ -0,0 +1,19 @@ +declare type ReactiveValue = () => TValue; +export declare type Reactive = { + value: TValue; + /** + * @private + */ + _fn: ReactiveValue; + /** + * @private + */ + _ref: { + current: TValue; + }; +}; +export declare function createReactiveWrapper(): { + reactive(value: ReactiveValue): Reactive; + runReactives(): void; +}; +export {}; diff --git a/assets/autocomplete.js/dist/esm/createReactiveWrapper.js b/assets/autocomplete.js/dist/esm/createReactiveWrapper.js new file mode 100644 index 00000000..e695ea77 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/createReactiveWrapper.js @@ -0,0 +1,30 @@ +export function createReactiveWrapper() { + var reactives = []; + return { + reactive: function reactive(value) { + var current = value(); + var reactive = { + _fn: value, + _ref: { + current: current + }, + + get value() { + return this._ref.current; + }, + + set value(value) { + this._ref.current = value; + } + + }; + reactives.push(reactive); + return reactive; + }, + runReactives: function runReactives() { + reactives.forEach(function (value) { + value._ref.current = value._fn(); + }); + } + }; +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/elements/ClearIcon.d.ts b/assets/autocomplete.js/dist/esm/elements/ClearIcon.d.ts new file mode 100644 index 00000000..d57c6110 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/elements/ClearIcon.d.ts @@ -0,0 +1,5 @@ +import { AutocompleteEnvironment } from '@algolia/autocomplete-core'; +import { AutocompleteElement } from '../types/AutocompleteElement'; +export declare const ClearIcon: AutocompleteElement<{ + environment: AutocompleteEnvironment; +}, SVGSVGElement>; diff --git a/assets/autocomplete.js/dist/esm/elements/ClearIcon.js b/assets/autocomplete.js/dist/esm/elements/ClearIcon.js new file mode 100644 index 00000000..a46aff9b --- /dev/null +++ b/assets/autocomplete.js/dist/esm/elements/ClearIcon.js @@ -0,0 +1,13 @@ +export var ClearIcon = function ClearIcon(_ref) { + var environment = _ref.environment; + var element = environment.document.createElementNS('http://www.w3.org/2000/svg', 'svg'); + element.setAttribute('class', 'aa-ClearIcon'); + element.setAttribute('viewBox', '0 0 24 24'); + element.setAttribute('width', '18'); + element.setAttribute('height', '18'); + element.setAttribute('fill', 'currentColor'); + var path = environment.document.createElementNS('http://www.w3.org/2000/svg', 'path'); + path.setAttribute('d', 'M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z'); + element.appendChild(path); + return element; +}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/elements/Input.d.ts b/assets/autocomplete.js/dist/esm/elements/Input.d.ts new file mode 100644 index 00000000..b9731e98 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/elements/Input.d.ts @@ -0,0 +1,13 @@ +import { AutocompleteApi as AutocompleteCoreApi, AutocompleteEnvironment, AutocompleteScopeApi } from '@algolia/autocomplete-core'; +import { AutocompletePropGetters, AutocompleteState } from '../types'; +import { AutocompleteElement } from '../types/AutocompleteElement'; +declare type InputProps = { + autocompleteScopeApi: AutocompleteScopeApi; + environment: AutocompleteEnvironment; + getInputProps: AutocompletePropGetters['getInputProps']; + getInputPropsCore: AutocompleteCoreApi['getInputProps']; + isDetached: boolean; + state: AutocompleteState; +}; +export declare const Input: AutocompleteElement; +export {}; diff --git a/assets/autocomplete.js/dist/esm/elements/Input.js b/assets/autocomplete.js/dist/esm/elements/Input.js new file mode 100644 index 00000000..4e3641f7 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/elements/Input.js @@ -0,0 +1,45 @@ +var _excluded = ["autocompleteScopeApi", "environment", "classNames", "getInputProps", "getInputPropsCore", "isDetached", "state"]; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _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; } + +function _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; } + +function _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; } + +import { getCreateDomElement } from '../getCreateDomElement'; +import { setProperties } from '../utils'; +export var Input = function Input(_ref) { + var autocompleteScopeApi = _ref.autocompleteScopeApi, + environment = _ref.environment, + classNames = _ref.classNames, + getInputProps = _ref.getInputProps, + getInputPropsCore = _ref.getInputPropsCore, + isDetached = _ref.isDetached, + state = _ref.state, + props = _objectWithoutProperties(_ref, _excluded); + + var createDomElement = getCreateDomElement(environment); + var element = createDomElement('input', props); + var inputProps = getInputProps(_objectSpread({ + state: state, + props: getInputPropsCore({ + inputElement: element + }), + inputElement: element + }, autocompleteScopeApi)); + setProperties(element, _objectSpread(_objectSpread({}, inputProps), {}, { + onKeyDown: function onKeyDown(event) { + // In detached mode we don't want to close the panel when hittin `Tab`. + if (isDetached && event.key === 'Tab') { + return; + } + + inputProps.onKeyDown(event); + } + })); + return element; +}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/elements/LoadingIcon.d.ts b/assets/autocomplete.js/dist/esm/elements/LoadingIcon.d.ts new file mode 100644 index 00000000..c3b094ac --- /dev/null +++ b/assets/autocomplete.js/dist/esm/elements/LoadingIcon.d.ts @@ -0,0 +1,5 @@ +import { AutocompleteEnvironment } from '@algolia/autocomplete-core'; +import { AutocompleteElement } from '../types/AutocompleteElement'; +export declare const LoadingIcon: AutocompleteElement<{ + environment: AutocompleteEnvironment; +}, SVGSVGElement>; diff --git a/assets/autocomplete.js/dist/esm/elements/LoadingIcon.js b/assets/autocomplete.js/dist/esm/elements/LoadingIcon.js new file mode 100644 index 00000000..c56dff7f --- /dev/null +++ b/assets/autocomplete.js/dist/esm/elements/LoadingIcon.js @@ -0,0 +1,10 @@ +export var LoadingIcon = function LoadingIcon(_ref) { + var environment = _ref.environment; + var element = environment.document.createElementNS('http://www.w3.org/2000/svg', 'svg'); + element.setAttribute('class', 'aa-LoadingIcon'); + element.setAttribute('viewBox', '0 0 100 100'); + element.setAttribute('width', '20'); + element.setAttribute('height', '20'); + element.innerHTML = "\n \n"; + return element; +}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/elements/SearchIcon.d.ts b/assets/autocomplete.js/dist/esm/elements/SearchIcon.d.ts new file mode 100644 index 00000000..a3f269a3 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/elements/SearchIcon.d.ts @@ -0,0 +1,5 @@ +import { AutocompleteEnvironment } from '@algolia/autocomplete-core'; +import { AutocompleteElement } from '../types/AutocompleteElement'; +export declare const SearchIcon: AutocompleteElement<{ + environment: AutocompleteEnvironment; +}, SVGSVGElement>; diff --git a/assets/autocomplete.js/dist/esm/elements/SearchIcon.js b/assets/autocomplete.js/dist/esm/elements/SearchIcon.js new file mode 100644 index 00000000..fe13f4db --- /dev/null +++ b/assets/autocomplete.js/dist/esm/elements/SearchIcon.js @@ -0,0 +1,13 @@ +export var SearchIcon = function SearchIcon(_ref) { + var environment = _ref.environment; + var element = environment.document.createElementNS('http://www.w3.org/2000/svg', 'svg'); + element.setAttribute('class', 'aa-SubmitIcon'); + element.setAttribute('viewBox', '0 0 24 24'); + element.setAttribute('width', '20'); + element.setAttribute('height', '20'); + element.setAttribute('fill', 'currentColor'); + var path = environment.document.createElementNS('http://www.w3.org/2000/svg', 'path'); + path.setAttribute('d', 'M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z'); + element.appendChild(path); + return element; +}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/elements/index.d.ts b/assets/autocomplete.js/dist/esm/elements/index.d.ts new file mode 100644 index 00000000..7bc3d23a --- /dev/null +++ b/assets/autocomplete.js/dist/esm/elements/index.d.ts @@ -0,0 +1,4 @@ +export * from './ClearIcon'; +export * from './Input'; +export * from './LoadingIcon'; +export * from './SearchIcon'; diff --git a/assets/autocomplete.js/dist/esm/elements/index.js b/assets/autocomplete.js/dist/esm/elements/index.js new file mode 100644 index 00000000..9a6b6a2c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/elements/index.js @@ -0,0 +1,4 @@ +export * from './ClearIcon'; +export * from './Input'; +export * from './LoadingIcon'; +export * from './SearchIcon'; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/getCreateDomElement.d.ts b/assets/autocomplete.js/dist/esm/getCreateDomElement.d.ts new file mode 100644 index 00000000..6ee88876 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/getCreateDomElement.d.ts @@ -0,0 +1,6 @@ +import { AutocompleteEnvironment } from '@algolia/autocomplete-core'; +declare type CreateDomElementProps = Record & { + children?: Node[]; +}; +export declare function getCreateDomElement(environment: AutocompleteEnvironment): (tagName: KParam, { children, ...props }: CreateDomElementProps) => HTMLElementTagNameMap[KParam]; +export {}; diff --git a/assets/autocomplete.js/dist/esm/getCreateDomElement.js b/assets/autocomplete.js/dist/esm/getCreateDomElement.js new file mode 100644 index 00000000..e48ba815 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/getCreateDomElement.js @@ -0,0 +1,31 @@ +var _excluded = ["children"]; + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _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."); } + +function _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); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _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; } + +function _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; } + +function _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; } + +import { setProperties } from './utils'; +export function getCreateDomElement(environment) { + return function createDomElement(tagName, _ref) { + var _ref$children = _ref.children, + children = _ref$children === void 0 ? [] : _ref$children, + props = _objectWithoutProperties(_ref, _excluded); + + var element = environment.document.createElement(tagName); + setProperties(element, props); + element.append.apply(element, _toConsumableArray(children)); + return element; + }; +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/getDefaultOptions.d.ts b/assets/autocomplete.js/dist/esm/getDefaultOptions.d.ts new file mode 100644 index 00000000..6691997c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/getDefaultOptions.d.ts @@ -0,0 +1,201 @@ +/// +import { BaseItem } from '@algolia/autocomplete-core'; +import { AutocompleteClassNames, AutocompleteOptions, AutocompleteRender } from './types'; +export declare function getDefaultOptions(options: AutocompleteOptions): { + renderer: { + classNames: AutocompleteClassNames; + container: HTMLElement; + getEnvironmentProps: (params: { + props: { + onTouchStart(event: TouchEvent): void; + onTouchMove(event: TouchEvent): void; + onMouseDown(event: MouseEvent): void; + }; + } & { + state: import("./types").AutocompleteState; + } & import("@algolia/autocomplete-core").AutocompleteScopeApi) => { + onTouchStart(event: TouchEvent): void; + onTouchMove(event: TouchEvent): void; + onMouseDown(event: MouseEvent): void; + }; + getFormProps: (params: { + props: { + action: ""; + noValidate: true; + role: "search"; + onSubmit(event: Event): void; + onReset(event: Event): void; + }; + } & { + state: import("./types").AutocompleteState; + } & import("@algolia/autocomplete-core").AutocompleteScopeApi) => { + action: ""; + noValidate: true; + role: "search"; + onSubmit(event: Event): void; + onReset(event: Event): void; + }; + getInputProps: (params: { + props: { + id: string; + value: string; + autoFocus: boolean; + placeholder: string; + autoComplete: "off" | "on"; + autoCorrect: "off" | "on"; + autoCapitalize: "off" | "on"; + enterKeyHint: "search" | "go"; + spellCheck: "false"; + maxLength: number; + type: "search"; + 'aria-autocomplete': "list" | "none" | "inline" | "both"; + 'aria-activedescendant': string | undefined; + 'aria-controls': string | undefined; + 'aria-labelledby': string; + onChange(event: Event): void; + onKeyDown(event: KeyboardEvent): void; + onFocus(event: Event): void; + onBlur(): void; + onClick(event: MouseEvent): void; + }; + inputElement: HTMLInputElement; + } & { + state: import("./types").AutocompleteState; + } & import("@algolia/autocomplete-core").AutocompleteScopeApi) => { + id: string; + value: string; + autoFocus: boolean; + placeholder: string; + autoComplete: "off" | "on"; + autoCorrect: "off" | "on"; + autoCapitalize: "off" | "on"; + enterKeyHint: "search" | "go"; + spellCheck: "false"; + maxLength: number; + type: "search"; + 'aria-autocomplete': "list" | "none" | "inline" | "both"; + 'aria-activedescendant': string | undefined; + 'aria-controls': string | undefined; + 'aria-labelledby': string; + onChange(event: Event): void; + onKeyDown(event: KeyboardEvent): void; + onFocus(event: Event): void; + onBlur(): void; + onClick(event: MouseEvent): void; + }; + getItemProps: (params: { + props: { + id: string; + role: string; + 'aria-selected': boolean; + onMouseMove(event: MouseEvent): void; + onMouseDown(event: MouseEvent): void; + onClick(event: MouseEvent): void; + }; + } & { + state: import("./types").AutocompleteState; + } & import("@algolia/autocomplete-core").AutocompleteScopeApi) => { + id: string; + role: string; + 'aria-selected': boolean; + onMouseMove(event: MouseEvent): void; + onMouseDown(event: MouseEvent): void; + onClick(event: MouseEvent): void; + }; + getLabelProps: (params: { + props: { + htmlFor: string; + id: string; + }; + } & { + state: import("./types").AutocompleteState; + } & import("@algolia/autocomplete-core").AutocompleteScopeApi) => { + htmlFor: string; + id: string; + }; + getListProps: (params: { + props: { + role: string; + 'aria-labelledby': string; + id: string; + }; + } & { + state: import("./types").AutocompleteState; + } & import("@algolia/autocomplete-core").AutocompleteScopeApi) => { + role: string; + 'aria-labelledby': string; + id: string; + }; + getPanelProps: (params: { + props: { + onMouseDown(event: MouseEvent): void; + onMouseLeave(): void; + }; + } & { + state: import("./types").AutocompleteState; + } & import("@algolia/autocomplete-core").AutocompleteScopeApi) => { + onMouseDown(event: MouseEvent): void; + onMouseLeave(): void; + }; + getRootProps: (params: { + props: { + role: string; + 'aria-expanded': boolean; + 'aria-haspopup': boolean | "dialog" | "menu" | "true" | "false" | "grid" | "listbox" | "tree" | undefined; + 'aria-owns': string | undefined; + 'aria-labelledby': string; + }; + } & { + state: import("./types").AutocompleteState; + } & import("@algolia/autocomplete-core").AutocompleteScopeApi) => { + role: string; + 'aria-expanded': boolean; + 'aria-haspopup': boolean | "dialog" | "menu" | "true" | "false" | "grid" | "listbox" | "tree" | undefined; + 'aria-owns': string | undefined; + 'aria-labelledby': string; + }; + panelContainer: HTMLElement; + panelPlacement: "start" | "end" | "full-width" | "input-wrapper-width"; + render: AutocompleteRender | AutocompleteRender; + renderNoResults: AutocompleteRender | undefined; + renderer: { + createElement: import("./types").Pragma; + Fragment: any; + render: import("./types").Render; + }; + detachedMediaQuery: string; + components: { + [x: string]: (props: any) => JSX.Element; + Highlight: ({ hit, attribute, tagName, }: import("./types").HighlightHitParams) => JSX.Element; + ReverseHighlight: ({ hit, attribute, tagName, }: import("./types").HighlightHitParams) => JSX.Element; + ReverseSnippet: ({ hit, attribute, tagName, }: import("./types").HighlightHitParams) => JSX.Element; + Snippet: ({ hit, attribute, tagName, }: import("./types").HighlightHitParams) => JSX.Element; + }; + translations: { + detachedCancelButtonText: string; + clearButtonTitle: string; + submitButtonTitle: string; + }; + }; + core: { + id: string; + environment: Window; + getSources?: import("./types").GetSources | undefined; + initialState?: Partial> | undefined; + onStateChange?(props: import("./types").OnStateChangeProps): void; + plugins?: import("./types").AutocompletePlugin[] | undefined; + debug?: boolean | undefined; + placeholder?: string | undefined; + autoFocus?: boolean | undefined; + defaultActiveItemId?: number | null | undefined; + openOnFocus?: boolean | undefined; + stallThreshold?: number | undefined; + navigator?: Partial> | undefined; + shouldPanelOpen?(params: { + state: import("@algolia/autocomplete-core").AutocompleteState; + }): boolean; + onSubmit?(params: import("@algolia/autocomplete-core").OnSubmitParams): void; + onReset?(params: import("@algolia/autocomplete-core").OnResetParams): void; + reshape?: import("@algolia/autocomplete-core").Reshape> | undefined; + }; +}; diff --git a/assets/autocomplete.js/dist/esm/getDefaultOptions.js b/assets/autocomplete.js/dist/esm/getDefaultOptions.js new file mode 100644 index 00000000..25c9e5d5 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/getDefaultOptions.js @@ -0,0 +1,152 @@ +var _excluded = ["classNames", "container", "getEnvironmentProps", "getFormProps", "getInputProps", "getItemProps", "getLabelProps", "getListProps", "getPanelProps", "getRootProps", "panelContainer", "panelPlacement", "render", "renderNoResults", "renderer", "detachedMediaQuery", "components", "translations"]; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _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; } + +function _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; } + +function _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; } + +import { generateAutocompleteId, invariant, warn } from '@algolia/autocomplete-shared'; +import { createElement as preactCreateElement, Fragment as PreactFragment, render } from 'preact'; +import { createHighlightComponent, createReverseHighlightComponent, createReverseSnippetComponent, createSnippetComponent } from './components'; +import { getHTMLElement, mergeClassNames } from './utils'; +var defaultClassNames = { + clearButton: 'aa-ClearButton', + detachedCancelButton: 'aa-DetachedCancelButton', + detachedContainer: 'aa-DetachedContainer', + detachedFormContainer: 'aa-DetachedFormContainer', + detachedOverlay: 'aa-DetachedOverlay', + detachedSearchButton: 'aa-DetachedSearchButton', + detachedSearchButtonIcon: 'aa-DetachedSearchButtonIcon', + detachedSearchButtonPlaceholder: 'aa-DetachedSearchButtonPlaceholder', + form: 'aa-Form', + input: 'aa-Input', + inputWrapper: 'aa-InputWrapper', + inputWrapperPrefix: 'aa-InputWrapperPrefix', + inputWrapperSuffix: 'aa-InputWrapperSuffix', + item: 'aa-Item', + label: 'aa-Label', + list: 'aa-List', + loadingIndicator: 'aa-LoadingIndicator', + panel: 'aa-Panel', + panelLayout: 'aa-PanelLayout aa-Panel--scrollable', + root: 'aa-Autocomplete', + source: 'aa-Source', + sourceFooter: 'aa-SourceFooter', + sourceHeader: 'aa-SourceHeader', + sourceNoResults: 'aa-SourceNoResults', + submitButton: 'aa-SubmitButton' +}; + +var defaultRender = function defaultRender(_ref, root) { + var children = _ref.children, + render = _ref.render; + render(children, root); +}; + +var defaultRenderer = { + createElement: preactCreateElement, + Fragment: PreactFragment, + render: render +}; +export function getDefaultOptions(options) { + var _core$id; + + var classNames = options.classNames, + container = options.container, + getEnvironmentProps = options.getEnvironmentProps, + getFormProps = options.getFormProps, + getInputProps = options.getInputProps, + getItemProps = options.getItemProps, + getLabelProps = options.getLabelProps, + getListProps = options.getListProps, + getPanelProps = options.getPanelProps, + getRootProps = options.getRootProps, + panelContainer = options.panelContainer, + panelPlacement = options.panelPlacement, + render = options.render, + renderNoResults = options.renderNoResults, + renderer = options.renderer, + detachedMediaQuery = options.detachedMediaQuery, + components = options.components, + translations = options.translations, + core = _objectWithoutProperties(options, _excluded); + /* eslint-disable no-restricted-globals */ + + + var environment = typeof window !== 'undefined' ? window : {}; + /* eslint-enable no-restricted-globals */ + + var containerElement = getHTMLElement(environment, container); + invariant(containerElement.tagName !== 'INPUT', 'The `container` option does not support `input` elements. You need to change the container to a `div`.'); + process.env.NODE_ENV !== 'production' ? warn(!(render && renderer && !(renderer !== null && renderer !== void 0 && renderer.render)), "You provided the `render` option but did not provide a `renderer.render`. Since v1.6.0, you can provide a `render` function directly in `renderer`." + "\nTo get rid of this warning, do any of the following depending on your use case." + "\n- If you are using the `render` option only to override Autocomplete's default `render` function, pass the `render` function into `renderer` and remove the `render` option." + '\n- If you are using the `render` option to customize the layout, pass your `render` function into `renderer` and use it from the provided parameters of the `render` option.' + '\n- If you are using the `render` option to work with React 18, pass an empty `render` function into `renderer`.' + '\nSee https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-render') : void 0; + process.env.NODE_ENV !== 'production' ? warn(!renderer || render || renderer.Fragment && renderer.createElement && renderer.render, "You provided an incomplete `renderer` (missing: ".concat([!(renderer !== null && renderer !== void 0 && renderer.createElement) && '`renderer.createElement`', !(renderer !== null && renderer !== void 0 && renderer.Fragment) && '`renderer.Fragment`', !(renderer !== null && renderer !== void 0 && renderer.render) && '`renderer.render`'].filter(Boolean).join(', '), "). This can cause rendering issues.") + '\nSee https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-renderer') : void 0; + + var defaultedRenderer = _objectSpread(_objectSpread({}, defaultRenderer), renderer); + + var defaultComponents = { + Highlight: createHighlightComponent(defaultedRenderer), + ReverseHighlight: createReverseHighlightComponent(defaultedRenderer), + ReverseSnippet: createReverseSnippetComponent(defaultedRenderer), + Snippet: createSnippetComponent(defaultedRenderer) + }; + var defaultTranslations = { + clearButtonTitle: 'Clear', + detachedCancelButtonText: 'Cancel', + submitButtonTitle: 'Submit' + }; + return { + renderer: { + classNames: mergeClassNames(defaultClassNames, classNames !== null && classNames !== void 0 ? classNames : {}), + container: containerElement, + getEnvironmentProps: getEnvironmentProps !== null && getEnvironmentProps !== void 0 ? getEnvironmentProps : function (_ref2) { + var props = _ref2.props; + return props; + }, + getFormProps: getFormProps !== null && getFormProps !== void 0 ? getFormProps : function (_ref3) { + var props = _ref3.props; + return props; + }, + getInputProps: getInputProps !== null && getInputProps !== void 0 ? getInputProps : function (_ref4) { + var props = _ref4.props; + return props; + }, + getItemProps: getItemProps !== null && getItemProps !== void 0 ? getItemProps : function (_ref5) { + var props = _ref5.props; + return props; + }, + getLabelProps: getLabelProps !== null && getLabelProps !== void 0 ? getLabelProps : function (_ref6) { + var props = _ref6.props; + return props; + }, + getListProps: getListProps !== null && getListProps !== void 0 ? getListProps : function (_ref7) { + var props = _ref7.props; + return props; + }, + getPanelProps: getPanelProps !== null && getPanelProps !== void 0 ? getPanelProps : function (_ref8) { + var props = _ref8.props; + return props; + }, + getRootProps: getRootProps !== null && getRootProps !== void 0 ? getRootProps : function (_ref9) { + var props = _ref9.props; + return props; + }, + panelContainer: panelContainer ? getHTMLElement(environment, panelContainer) : environment.document.body, + panelPlacement: panelPlacement !== null && panelPlacement !== void 0 ? panelPlacement : 'input-wrapper-width', + render: render !== null && render !== void 0 ? render : defaultRender, + renderNoResults: renderNoResults, + renderer: defaultedRenderer, + detachedMediaQuery: detachedMediaQuery !== null && detachedMediaQuery !== void 0 ? detachedMediaQuery : getComputedStyle(environment.document.documentElement).getPropertyValue('--aa-detached-media-query'), + components: _objectSpread(_objectSpread({}, defaultComponents), components), + translations: _objectSpread(_objectSpread({}, defaultTranslations), translations) + }, + core: _objectSpread(_objectSpread({}, core), {}, { + id: (_core$id = core.id) !== null && _core$id !== void 0 ? _core$id : generateAutocompleteId(), + environment: environment + }) + }; +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/getPanelPlacementStyle.d.ts b/assets/autocomplete.js/dist/esm/getPanelPlacementStyle.d.ts new file mode 100644 index 00000000..94d1d2cf --- /dev/null +++ b/assets/autocomplete.js/dist/esm/getPanelPlacementStyle.d.ts @@ -0,0 +1,25 @@ +import { AutocompleteOptions } from './types'; +declare type GetPanelPlacementStyleParams = Pick>, 'panelPlacement' | 'environment'> & { + container: HTMLElement; + form: HTMLElement; +}; +export declare function getPanelPlacementStyle({ panelPlacement, container, form, environment, }: GetPanelPlacementStyleParams): { + top: number; + left: number; + right?: undefined; + width?: undefined; + maxWidth?: undefined; +} | { + top: number; + right: number; + left?: undefined; + width?: undefined; + maxWidth?: undefined; +} | { + top: number; + left: number; + right: number; + width: string; + maxWidth: string; +}; +export {}; diff --git a/assets/autocomplete.js/dist/esm/getPanelPlacementStyle.js b/assets/autocomplete.js/dist/esm/getPanelPlacementStyle.js new file mode 100644 index 00000000..a015a6d5 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/getPanelPlacementStyle.js @@ -0,0 +1,57 @@ +export function getPanelPlacementStyle(_ref) { + var panelPlacement = _ref.panelPlacement, + container = _ref.container, + form = _ref.form, + environment = _ref.environment; + var containerRect = container.getBoundingClientRect(); // Some browsers have specificities to retrieve the document scroll position. + // See https://stackoverflow.com/a/28633515/9940315 + + var scrollTop = environment.pageYOffset || environment.document.documentElement.scrollTop || environment.document.body.scrollTop || 0; + var top = scrollTop + containerRect.top + containerRect.height; + + switch (panelPlacement) { + case 'start': + { + return { + top: top, + left: containerRect.left + }; + } + + case 'end': + { + return { + top: top, + right: environment.document.documentElement.clientWidth - (containerRect.left + containerRect.width) + }; + } + + case 'full-width': + { + return { + top: top, + left: 0, + right: 0, + width: 'unset', + maxWidth: 'unset' + }; + } + + case 'input-wrapper-width': + { + var formRect = form.getBoundingClientRect(); + return { + top: top, + left: formRect.left, + right: environment.document.documentElement.clientWidth - (formRect.left + formRect.width), + width: 'unset', + maxWidth: 'unset' + }; + } + + default: + { + throw new Error("[Autocomplete] The `panelPlacement` value ".concat(JSON.stringify(panelPlacement), " is not valid.")); + } + } +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/index.d.ts b/assets/autocomplete.js/dist/esm/index.d.ts new file mode 100644 index 00000000..05dd16bb --- /dev/null +++ b/assets/autocomplete.js/dist/esm/index.d.ts @@ -0,0 +1,3 @@ +export * from './autocomplete'; +export * from './requesters'; +export * from './types'; diff --git a/assets/autocomplete.js/dist/esm/index.js b/assets/autocomplete.js/dist/esm/index.js new file mode 100644 index 00000000..02979738 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/index.js @@ -0,0 +1,3 @@ +export * from './autocomplete'; +export * from './requesters'; +export * from './types'; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/render.d.ts b/assets/autocomplete.js/dist/esm/render.d.ts new file mode 100644 index 00000000..1c0865fc --- /dev/null +++ b/assets/autocomplete.js/dist/esm/render.d.ts @@ -0,0 +1,18 @@ +/** @jsx renderer.createElement */ +import { AutocompleteApi as AutocompleteCoreApi, AutocompleteScopeApi, BaseItem } from '@algolia/autocomplete-core'; +import { AutocompleteClassNames, AutocompleteComponents, AutocompleteDom, AutocompletePropGetters, AutocompleteRender, AutocompleteRenderer, AutocompleteState, HTMLTemplate } from './types'; +declare type RenderProps = { + autocomplete: AutocompleteCoreApi; + autocompleteScopeApi: AutocompleteScopeApi; + classNames: AutocompleteClassNames; + components: AutocompleteComponents; + html: HTMLTemplate; + dom: AutocompleteDom; + panelContainer: HTMLElement; + propGetters: AutocompletePropGetters; + state: AutocompleteState; + renderer: Required; +}; +export declare function renderSearchBox({ autocomplete, autocompleteScopeApi, dom, propGetters, state, }: RenderProps): void; +export declare function renderPanel(render: AutocompleteRender, { autocomplete, autocompleteScopeApi, classNames, html, dom, panelContainer, propGetters, state, components, renderer, }: RenderProps): void; +export {}; diff --git a/assets/autocomplete.js/dist/esm/render.js b/assets/autocomplete.js/dist/esm/render.js new file mode 100644 index 00000000..e9594082 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/render.js @@ -0,0 +1,149 @@ +function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _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; } + +/** @jsx renderer.createElement */ +import { setProperties, setPropertiesWithoutEvents } from './utils'; +export function renderSearchBox(_ref) { + var autocomplete = _ref.autocomplete, + autocompleteScopeApi = _ref.autocompleteScopeApi, + dom = _ref.dom, + propGetters = _ref.propGetters, + state = _ref.state; + setPropertiesWithoutEvents(dom.root, propGetters.getRootProps(_objectSpread({ + state: state, + props: autocomplete.getRootProps({}) + }, autocompleteScopeApi))); + setPropertiesWithoutEvents(dom.input, propGetters.getInputProps(_objectSpread({ + state: state, + props: autocomplete.getInputProps({ + inputElement: dom.input + }), + inputElement: dom.input + }, autocompleteScopeApi))); + setProperties(dom.label, { + hidden: state.status === 'stalled' + }); + setProperties(dom.loadingIndicator, { + hidden: state.status !== 'stalled' + }); + setProperties(dom.clearButton, { + hidden: !state.query + }); +} +export function renderPanel(render, _ref2) { + var autocomplete = _ref2.autocomplete, + autocompleteScopeApi = _ref2.autocompleteScopeApi, + classNames = _ref2.classNames, + html = _ref2.html, + dom = _ref2.dom, + panelContainer = _ref2.panelContainer, + propGetters = _ref2.propGetters, + state = _ref2.state, + components = _ref2.components, + renderer = _ref2.renderer; + + if (!state.isOpen) { + if (panelContainer.contains(dom.panel)) { + panelContainer.removeChild(dom.panel); + } + + return; + } // We add the panel element to the DOM when it's not yet appended and that the + // items are fetched. + + + if (!panelContainer.contains(dom.panel) && state.status !== 'loading') { + panelContainer.appendChild(dom.panel); + } + + dom.panel.classList.toggle('aa-Panel--stalled', state.status === 'stalled'); + var sections = state.collections.filter(function (_ref3) { + var source = _ref3.source, + items = _ref3.items; + return source.templates.noResults || items.length > 0; + }).map(function (_ref4, sourceIndex) { + var source = _ref4.source, + items = _ref4.items; + return renderer.createElement("section", { + key: sourceIndex, + className: classNames.source, + "data-autocomplete-source-id": source.sourceId + }, source.templates.header && renderer.createElement("div", { + className: classNames.sourceHeader + }, source.templates.header({ + components: components, + createElement: renderer.createElement, + Fragment: renderer.Fragment, + items: items, + source: source, + state: state, + html: html + })), source.templates.noResults && items.length === 0 ? renderer.createElement("div", { + className: classNames.sourceNoResults + }, source.templates.noResults({ + components: components, + createElement: renderer.createElement, + Fragment: renderer.Fragment, + source: source, + state: state, + html: html + })) : renderer.createElement("ul", _extends({ + className: classNames.list + }, propGetters.getListProps(_objectSpread({ + state: state, + props: autocomplete.getListProps({}) + }, autocompleteScopeApi))), items.map(function (item) { + var itemProps = autocomplete.getItemProps({ + item: item, + source: source + }); + return renderer.createElement("li", _extends({ + key: itemProps.id, + className: classNames.item + }, propGetters.getItemProps(_objectSpread({ + state: state, + props: itemProps + }, autocompleteScopeApi))), source.templates.item({ + components: components, + createElement: renderer.createElement, + Fragment: renderer.Fragment, + item: item, + state: state, + html: html + })); + })), source.templates.footer && renderer.createElement("div", { + className: classNames.sourceFooter + }, source.templates.footer({ + components: components, + createElement: renderer.createElement, + Fragment: renderer.Fragment, + items: items, + source: source, + state: state, + html: html + }))); + }); + var children = renderer.createElement(renderer.Fragment, null, renderer.createElement("div", { + className: classNames.panelLayout + }, sections), renderer.createElement("div", { + className: "aa-GradientBottom" + })); + var elements = sections.reduce(function (acc, current) { + acc[current.props['data-autocomplete-source-id']] = current; + return acc; + }, {}); + render(_objectSpread(_objectSpread({ + children: children, + state: state, + sections: sections, + elements: elements + }, renderer), {}, { + components: components, + html: html + }, autocompleteScopeApi), dom.panel); +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/requesters/createAlgoliaRequester.d.ts b/assets/autocomplete.js/dist/esm/requesters/createAlgoliaRequester.d.ts new file mode 100644 index 00000000..62f9af75 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/requesters/createAlgoliaRequester.d.ts @@ -0,0 +1 @@ +export declare const createAlgoliaRequester: (requesterParams: import("@algolia/autocomplete-preset-algolia").RequesterParams) => (requestParams: import("@algolia/autocomplete-preset-algolia").RequestParams) => import("@algolia/autocomplete-preset-algolia").RequesterDescription; diff --git a/assets/autocomplete.js/dist/esm/requesters/createAlgoliaRequester.js b/assets/autocomplete.js/dist/esm/requesters/createAlgoliaRequester.js new file mode 100644 index 00000000..25788e5d --- /dev/null +++ b/assets/autocomplete.js/dist/esm/requesters/createAlgoliaRequester.js @@ -0,0 +1,13 @@ +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _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; } + +import { createRequester, fetchAlgoliaResults } from '@algolia/autocomplete-preset-algolia'; +import { userAgents } from '../userAgents'; +export var createAlgoliaRequester = createRequester(function (params) { + return fetchAlgoliaResults(_objectSpread(_objectSpread({}, params), {}, { + userAgents: userAgents + })); +}, 'algolia'); \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/requesters/getAlgoliaFacets.d.ts b/assets/autocomplete.js/dist/esm/requesters/getAlgoliaFacets.d.ts new file mode 100644 index 00000000..b6173c18 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/requesters/getAlgoliaFacets.d.ts @@ -0,0 +1,5 @@ +import { RequestParams } from '@algolia/autocomplete-preset-algolia'; +/** + * Retrieves Algolia facet hits from multiple indices. + */ +export declare function getAlgoliaFacets(requestParams: RequestParams): import("@algolia/autocomplete-preset-algolia").RequesterDescription; diff --git a/assets/autocomplete.js/dist/esm/requesters/getAlgoliaFacets.js b/assets/autocomplete.js/dist/esm/requesters/getAlgoliaFacets.js new file mode 100644 index 00000000..45bb38be --- /dev/null +++ b/assets/autocomplete.js/dist/esm/requesters/getAlgoliaFacets.js @@ -0,0 +1,26 @@ +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _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; } + +import { createAlgoliaRequester } from './createAlgoliaRequester'; +/** + * Retrieves Algolia facet hits from multiple indices. + */ + +export function getAlgoliaFacets(requestParams) { + var requester = createAlgoliaRequester({ + transformResponse: function transformResponse(response) { + return response.facetHits; + } + }); + var queries = requestParams.queries.map(function (query) { + return _objectSpread(_objectSpread({}, query), {}, { + type: 'facet' + }); + }); + return requester(_objectSpread(_objectSpread({}, requestParams), {}, { + queries: queries + })); +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/requesters/getAlgoliaResults.d.ts b/assets/autocomplete.js/dist/esm/requesters/getAlgoliaResults.d.ts new file mode 100644 index 00000000..42635065 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/requesters/getAlgoliaResults.d.ts @@ -0,0 +1,4 @@ +/** + * Retrieves Algolia results from multiple indices. + */ +export declare const getAlgoliaResults: (requestParams: import("@algolia/autocomplete-preset-algolia").RequestParams) => import("@algolia/autocomplete-preset-algolia").RequesterDescription; diff --git a/assets/autocomplete.js/dist/esm/requesters/getAlgoliaResults.js b/assets/autocomplete.js/dist/esm/requesters/getAlgoliaResults.js new file mode 100644 index 00000000..c4c12ddc --- /dev/null +++ b/assets/autocomplete.js/dist/esm/requesters/getAlgoliaResults.js @@ -0,0 +1,10 @@ +import { createAlgoliaRequester } from './createAlgoliaRequester'; +/** + * Retrieves Algolia results from multiple indices. + */ + +export var getAlgoliaResults = createAlgoliaRequester({ + transformResponse: function transformResponse(response) { + return response.hits; + } +}); \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/requesters/index.d.ts b/assets/autocomplete.js/dist/esm/requesters/index.d.ts new file mode 100644 index 00000000..347d3128 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/requesters/index.d.ts @@ -0,0 +1,2 @@ +export * from './getAlgoliaFacets'; +export * from './getAlgoliaResults'; diff --git a/assets/autocomplete.js/dist/esm/requesters/index.js b/assets/autocomplete.js/dist/esm/requesters/index.js new file mode 100644 index 00000000..62e340c2 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/requesters/index.js @@ -0,0 +1,2 @@ +export * from './getAlgoliaFacets'; +export * from './getAlgoliaResults'; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteApi.d.ts b/assets/autocomplete.js/dist/esm/types/AutocompleteApi.d.ts new file mode 100644 index 00000000..3291e3fe --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteApi.d.ts @@ -0,0 +1,12 @@ +import { AutocompleteScopeApi as AutocompleteCoreScopeApi, BaseItem } from '@algolia/autocomplete-core'; +import { AutocompleteOptions } from './AutocompleteOptions'; +export interface AutocompleteApi extends AutocompleteCoreScopeApi { + /** + * Updates the Autocomplete experience. + */ + update(updatedOptions: Partial>): void; + /** + * Cleans up the DOM mutations and event listeners. + */ + destroy(): void; +} diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteApi.js b/assets/autocomplete.js/dist/esm/types/AutocompleteApi.js new file mode 100644 index 00000000..8cec2e9c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteApi.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteClassNames.d.ts b/assets/autocomplete.js/dist/esm/types/AutocompleteClassNames.d.ts new file mode 100644 index 00000000..53fbf426 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteClassNames.d.ts @@ -0,0 +1,27 @@ +export declare type AutocompleteClassNames = { + detachedCancelButton: string; + detachedFormContainer: string; + detachedContainer: string; + detachedOverlay: string; + detachedSearchButton: string; + detachedSearchButtonIcon: string; + detachedSearchButtonPlaceholder: string; + form: string; + input: string; + inputWrapper: string; + inputWrapperPrefix: string; + inputWrapperSuffix: string; + item: string; + label: string; + list: string; + loadingIndicator: string; + panel: string; + panelLayout: string; + clearButton: string; + root: string; + source: string; + sourceFooter: string; + sourceHeader: string; + sourceNoResults: string; + submitButton: string; +}; diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteClassNames.js b/assets/autocomplete.js/dist/esm/types/AutocompleteClassNames.js new file mode 100644 index 00000000..8cec2e9c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteClassNames.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteCollection.d.ts b/assets/autocomplete.js/dist/esm/types/AutocompleteCollection.d.ts new file mode 100644 index 00000000..0459e89f --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteCollection.d.ts @@ -0,0 +1,6 @@ +import { BaseItem } from '@algolia/autocomplete-core'; +import { InternalAutocompleteSource } from './AutocompleteSource'; +export interface AutocompleteCollection { + source: InternalAutocompleteSource; + items: TItem[]; +} diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteCollection.js b/assets/autocomplete.js/dist/esm/types/AutocompleteCollection.js new file mode 100644 index 00000000..8cec2e9c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteCollection.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteComponents.d.ts b/assets/autocomplete.js/dist/esm/types/AutocompleteComponents.d.ts new file mode 100644 index 00000000..cc127283 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteComponents.d.ts @@ -0,0 +1,23 @@ +/// +import { HighlightHitParams } from '.'; +declare type AutocompleteHighlightComponent = ({ hit, attribute, tagName, }: HighlightHitParams) => JSX.Element; +export declare type PublicAutocompleteComponents = Record JSX.Element>; +export interface AutocompleteComponents extends PublicAutocompleteComponents { + /** + * Highlight matches in an Algolia hit. + */ + Highlight: AutocompleteHighlightComponent; + /** + * Reverse-highlight matches in an Algolia hit. + */ + ReverseHighlight: AutocompleteHighlightComponent; + /** + * Reverse-highlight and snippets matches in an Algolia hit. + */ + ReverseSnippet: AutocompleteHighlightComponent; + /** + * Highlight and snippet matches in an Algolia hit. + */ + Snippet: AutocompleteHighlightComponent; +} +export {}; diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteComponents.js b/assets/autocomplete.js/dist/esm/types/AutocompleteComponents.js new file mode 100644 index 00000000..8cec2e9c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteComponents.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteDom.d.ts b/assets/autocomplete.js/dist/esm/types/AutocompleteDom.d.ts new file mode 100644 index 00000000..35df059b --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteDom.d.ts @@ -0,0 +1,13 @@ +export declare type AutocompleteDom = { + inputWrapper: HTMLDivElement; + input: HTMLInputElement; + root: HTMLDivElement; + form: HTMLFormElement; + label: HTMLLabelElement; + submitButton: HTMLButtonElement; + clearButton: HTMLButtonElement; + loadingIndicator: HTMLDivElement; + panel: HTMLDivElement; + detachedContainer: HTMLDivElement; + detachedOverlay: HTMLDivElement; +}; diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteDom.js b/assets/autocomplete.js/dist/esm/types/AutocompleteDom.js new file mode 100644 index 00000000..8cec2e9c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteDom.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteElement.d.ts b/assets/autocomplete.js/dist/esm/types/AutocompleteElement.d.ts new file mode 100644 index 00000000..dbc5d1ce --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteElement.d.ts @@ -0,0 +1,5 @@ +declare type WithElementProps = TProps & Record & { + children?: Node[]; +}; +export declare type AutocompleteElement = (props: WithElementProps) => TElement; +export {}; diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteElement.js b/assets/autocomplete.js/dist/esm/types/AutocompleteElement.js new file mode 100644 index 00000000..8cec2e9c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteElement.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteOptions.d.ts b/assets/autocomplete.js/dist/esm/types/AutocompleteOptions.d.ts new file mode 100644 index 00000000..e54d3bdd --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteOptions.d.ts @@ -0,0 +1,106 @@ +import { AutocompleteScopeApi, AutocompleteOptions as AutocompleteCoreOptions, BaseItem, GetSourcesParams } from '@algolia/autocomplete-core'; +import { MaybePromise } from '@algolia/autocomplete-shared'; +import { AutocompleteClassNames } from './AutocompleteClassNames'; +import { PublicAutocompleteComponents } from './AutocompleteComponents'; +import { AutocompletePlugin } from './AutocompletePlugin'; +import { AutocompletePropGetters } from './AutocompletePropGetters'; +import { AutocompleteRender } from './AutocompleteRender'; +import { AutocompleteRenderer } from './AutocompleteRenderer'; +import { AutocompleteSource } from './AutocompleteSource'; +import { AutocompleteState } from './AutocompleteState'; +import { AutocompleteTranslations } from './AutocompleteTranslations'; +export interface OnStateChangeProps extends AutocompleteScopeApi { + /** + * The current Autocomplete state. + */ + state: AutocompleteState; + /** + * The previous Autocomplete state. + */ + prevState: AutocompleteState; +} +export declare type GetSources = (params: GetSourcesParams) => MaybePromise | boolean | undefined>>; +export interface AutocompleteOptions extends AutocompleteCoreOptions, Partial> { + /** + * The container for the Autocomplete search box. + * + * You can either pass a [CSS selector](https://developer.mozilla.org/docs/Web/CSS/CSS_Selectors) or an [Element](https://developer.mozilla.org/docs/Web/API/HTMLElement). If there are several containers matching the selector, Autocomplete picks up the first one. + * + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-container + */ + container: string | HTMLElement; + /** + * The container for the Autocomplete panel. + * + * You can either pass a [CSS selector](https://developer.mozilla.org/docs/Web/CSS/CSS_Selectors) or an [Element](https://developer.mozilla.org/docs/Web/API/HTMLElement). If there are several containers matching the selector, Autocomplete picks up the first one. + * + * @default document.body + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-panelcontainer + */ + panelContainer?: string | HTMLElement; + /** + * The Media Query to turn Autocomplete into a detached experience. + * + * @default "(max-width: 680px)" + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-detachedmediaquery + * @link https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries + */ + detachedMediaQuery?: string; + getSources?: GetSources; + /** + * The panel's horizontal position. + * + * @default "input-wrapper-width" + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-panelplacement + */ + panelPlacement?: 'start' | 'end' | 'full-width' | 'input-wrapper-width'; + /** + * Class names to inject for each created DOM element. + * + * This is useful to style your autocomplete with external CSS frameworks. + * + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-classnames + */ + classNames?: Partial; + /** + * The function that renders the autocomplete panel. + * + * This is useful to customize the rendering, for example, using multi-row or multi-column layouts. + * + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-render + */ + render?: AutocompleteRender; + /** + * The function that renders a no results section when there are no hits. + * + * This is useful to let the user know that the query returned no results. + * + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-rendernoresults + */ + renderNoResults?: AutocompleteRender; + initialState?: Partial>; + onStateChange?(props: OnStateChangeProps): void; + /** + * The virtual DOM implementation to plug to Autocomplete. It defaults to Preact. + * + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-renderer + */ + renderer?: AutocompleteRenderer; + plugins?: Array>; + /** + * Components to register in the Autocomplete rendering lifecycles. + * + * Registered components become available in [`templates`](https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/templates/), [`render`](https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-render), and in [`renderNoResults`](https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-rendernoresults). + * + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-components + */ + components?: PublicAutocompleteComponents; + /** + * A mapping of translation strings. + * + * Defaults to English values. + * + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-translations + */ + translations?: Partial; +} diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteOptions.js b/assets/autocomplete.js/dist/esm/types/AutocompleteOptions.js new file mode 100644 index 00000000..8cec2e9c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteOptions.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/types/AutocompletePlugin.d.ts b/assets/autocomplete.js/dist/esm/types/AutocompletePlugin.d.ts new file mode 100644 index 00000000..bd5bdf98 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompletePlugin.d.ts @@ -0,0 +1,12 @@ +import { AutocompletePlugin as AutocompleteCorePlugin, BaseItem } from '@algolia/autocomplete-core'; +import { AutocompleteOptions } from './AutocompleteOptions'; +export declare type AutocompletePlugin = Omit, 'getSources'> & { + /** + * The [sources](https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/) to get the suggestions from. + * + * When defined, they’re merged with the sources of your Autocomplete instance. + * + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/plugins/#param-getsources + */ + getSources?: AutocompleteOptions['getSources']; +}; diff --git a/assets/autocomplete.js/dist/esm/types/AutocompletePlugin.js b/assets/autocomplete.js/dist/esm/types/AutocompletePlugin.js new file mode 100644 index 00000000..8cec2e9c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompletePlugin.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/types/AutocompletePropGetters.d.ts b/assets/autocomplete.js/dist/esm/types/AutocompletePropGetters.d.ts new file mode 100644 index 00000000..28547655 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompletePropGetters.d.ts @@ -0,0 +1,33 @@ +import { BaseItem, AutocompleteApi as AutocompleteCoreApi, AutocompleteScopeApi } from '@algolia/autocomplete-core'; +import { AutocompleteState } from './AutocompleteState'; +declare type PropsGetterParams = TParam & { + state: AutocompleteState; +} & AutocompleteScopeApi; +export declare type AutocompletePropGetters = { + getEnvironmentProps(params: PropsGetterParams['getEnvironmentProps']>; + }>): ReturnType['getEnvironmentProps']>; + getFormProps(params: PropsGetterParams['getFormProps']>; + }>): ReturnType['getFormProps']>; + getInputProps(params: PropsGetterParams['getInputProps']>; + inputElement: HTMLInputElement; + }>): ReturnType['getInputProps']>; + getItemProps(params: PropsGetterParams['getItemProps']>; + }>): ReturnType['getItemProps']>; + getLabelProps(params: PropsGetterParams['getLabelProps']>; + }>): ReturnType['getLabelProps']>; + getListProps(params: PropsGetterParams['getListProps']>; + }>): ReturnType['getListProps']>; + getPanelProps(params: PropsGetterParams['getPanelProps']>; + }>): ReturnType['getPanelProps']>; + getRootProps(params: PropsGetterParams['getRootProps']>; + }>): ReturnType['getRootProps']>; +}; +export {}; diff --git a/assets/autocomplete.js/dist/esm/types/AutocompletePropGetters.js b/assets/autocomplete.js/dist/esm/types/AutocompletePropGetters.js new file mode 100644 index 00000000..8cec2e9c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompletePropGetters.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteRender.d.ts b/assets/autocomplete.js/dist/esm/types/AutocompleteRender.d.ts new file mode 100644 index 00000000..01f5fc8d --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteRender.d.ts @@ -0,0 +1,15 @@ +import { AutocompleteScopeApi, BaseItem } from '@algolia/autocomplete-core'; +import { AutocompleteComponents } from './AutocompleteComponents'; +import { HTMLTemplate, Pragma, PragmaFrag, Render, VNode } from './AutocompleteRenderer'; +import { AutocompleteState } from './AutocompleteState'; +export declare type AutocompleteRender = (params: AutocompleteScopeApi & { + children: VNode; + state: AutocompleteState; + sections: VNode[]; + elements: Record; + components: AutocompleteComponents; + createElement: Pragma; + Fragment: PragmaFrag; + html: HTMLTemplate; + render: Render; +}, root: HTMLElement) => void; diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteRender.js b/assets/autocomplete.js/dist/esm/types/AutocompleteRender.js new file mode 100644 index 00000000..8cec2e9c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteRender.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteRenderer.d.ts b/assets/autocomplete.js/dist/esm/types/AutocompleteRenderer.d.ts new file mode 100644 index 00000000..3ca05d5a --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteRenderer.d.ts @@ -0,0 +1,33 @@ +/// +export declare type Pragma = (type: any, props: Record | null, ...children: ComponentChildren[]) => JSX.Element; +export declare type PragmaFrag = any; +declare type ComponentChild = VNode | string | number | boolean | null | undefined; +declare type ComponentChildren = ComponentChild[] | ComponentChild; +export declare type VNode = { + type: any; + key: string | number | any; + props: TProps & { + children: ComponentChildren; + }; +}; +export declare type Render = (vnode: ComponentChild, parent: Element | Document | ShadowRoot | DocumentFragment, replaceNode?: Element | Text | undefined) => void; +export declare type AutocompleteRenderer = { + /** + * The function to create virtual nodes. + * + * @default preact.createElement + */ + createElement: Pragma; + /** + * The component to use to create fragments. + * + * @default preact.Fragment + */ + Fragment: PragmaFrag; + /** + * The function to render children to an element. + */ + render?: Render; +}; +export declare type HTMLTemplate = (strings: TemplateStringsArray, ...values: any[]) => VNode | VNode[]; +export {}; diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteRenderer.js b/assets/autocomplete.js/dist/esm/types/AutocompleteRenderer.js new file mode 100644 index 00000000..8cec2e9c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteRenderer.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteSource.d.ts b/assets/autocomplete.js/dist/esm/types/AutocompleteSource.d.ts new file mode 100644 index 00000000..e1b87b65 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteSource.d.ts @@ -0,0 +1,74 @@ +import { AutocompleteSource as AutocompleteCoreSource, InternalAutocompleteSource as InternalAutocompleteCoreSource, BaseItem } from '@algolia/autocomplete-core'; +import { AutocompleteComponents } from './AutocompleteComponents'; +import { AutocompleteRenderer, HTMLTemplate, VNode } from './AutocompleteRenderer'; +import { AutocompleteState } from './AutocompleteState'; +declare type Template = (params: TParams & AutocompleteRenderer & { + components: AutocompleteComponents; + html: HTMLTemplate; +}) => VNode | VNode[] | string; +/** + * Templates to display in the autocomplete panel. + * + * A template can either return a string, or perform DOM mutations (manipulating DOM elements with JavaScript and attaching events) without returning a string. + */ +export declare type SourceTemplates = { + /** + * A function that returns the template for each item of the source. + * + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/templates/#param-item + */ + item: Template<{ + item: TItem; + state: AutocompleteState; + }>; + /** + * A function that returns the template for the header (before the list of items). + * + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/templates/#param-header + */ + header?: Template<{ + state: AutocompleteState; + source: AutocompleteSource; + items: TItem[]; + }>; + /** + * A function that returns the template for the footer (after the list of items). + * + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/templates/#param-footer + */ + footer?: Template<{ + state: AutocompleteState; + source: AutocompleteSource; + items: TItem[]; + }>; + /** + * A function that returns the template for when there are no items. + * + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/templates/#param-noresults + */ + noResults?: Template<{ + state: AutocompleteState; + source: AutocompleteSource; + }>; +}; +declare type WithTemplates = TType & { + /** + * A set of templates to customize how sections and their items are displayed. + * + * See [**Displaying items with Templates**](templates) for more information. + * + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-templates + */ + templates: SourceTemplates; +}; +export interface AutocompleteCoreSourceWithDocs extends AutocompleteCoreSource { + /** + * Unique identifier for the source. + * + * It is used as value for the `data-autocomplete-source-id` attribute of the source `section` container. + */ + sourceId: string; +} +export declare type AutocompleteSource = WithTemplates, TItem>; +export declare type InternalAutocompleteSource = WithTemplates, TItem>; +export {}; diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteSource.js b/assets/autocomplete.js/dist/esm/types/AutocompleteSource.js new file mode 100644 index 00000000..8cec2e9c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteSource.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteState.d.ts b/assets/autocomplete.js/dist/esm/types/AutocompleteState.d.ts new file mode 100644 index 00000000..36d6ce97 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteState.d.ts @@ -0,0 +1,10 @@ +import { AutocompleteState as AutocompleteCoreState, BaseItem } from '@algolia/autocomplete-core'; +import { AutocompleteCollection } from './AutocompleteCollection'; +export declare type AutocompleteState = Omit, 'collections'> & { + /** + * The collections of items. + * + * @link https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/state/#param-collections + */ + collections: Array>; +}; diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteState.js b/assets/autocomplete.js/dist/esm/types/AutocompleteState.js new file mode 100644 index 00000000..8cec2e9c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteState.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteTranslations.d.ts b/assets/autocomplete.js/dist/esm/types/AutocompleteTranslations.d.ts new file mode 100644 index 00000000..4238a484 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteTranslations.d.ts @@ -0,0 +1,5 @@ +export declare type AutocompleteTranslations = { + detachedCancelButtonText: string; + clearButtonTitle: string; + submitButtonTitle: string; +}; diff --git a/assets/autocomplete.js/dist/esm/types/AutocompleteTranslations.js b/assets/autocomplete.js/dist/esm/types/AutocompleteTranslations.js new file mode 100644 index 00000000..8cec2e9c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/AutocompleteTranslations.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/types/HighlightHitParams.d.ts b/assets/autocomplete.js/dist/esm/types/HighlightHitParams.d.ts new file mode 100644 index 00000000..b81ec320 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/HighlightHitParams.d.ts @@ -0,0 +1,18 @@ +export declare type HighlightHitParams = { + /** + * The Algolia hit whose attribute to retrieve the highlighted parts from. + */ + hit: THit; + /** + * The attribute to retrieve the highlighted parts from. + * + * You can use the array syntax to reference nested attributes. + */ + attribute: keyof THit | string[]; + /** + * The tag name to use for highlighted parts. + * + * @default "mark" + */ + tagName?: string; +}; diff --git a/assets/autocomplete.js/dist/esm/types/HighlightHitParams.js b/assets/autocomplete.js/dist/esm/types/HighlightHitParams.js new file mode 100644 index 00000000..8cec2e9c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/HighlightHitParams.js @@ -0,0 +1 @@ +export {}; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/types/index.d.ts b/assets/autocomplete.js/dist/esm/types/index.d.ts new file mode 100644 index 00000000..0c635765 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/index.d.ts @@ -0,0 +1,14 @@ +export * from './AutocompleteApi'; +export * from './AutocompleteClassNames'; +export * from './AutocompleteCollection'; +export * from './AutocompleteComponents'; +export * from './AutocompleteDom'; +export * from './AutocompleteOptions'; +export * from './AutocompletePlugin'; +export * from './AutocompletePropGetters'; +export * from './AutocompleteRender'; +export * from './AutocompleteRenderer'; +export * from './AutocompleteSource'; +export * from './AutocompleteState'; +export * from './AutocompleteTranslations'; +export * from './HighlightHitParams'; diff --git a/assets/autocomplete.js/dist/esm/types/index.js b/assets/autocomplete.js/dist/esm/types/index.js new file mode 100644 index 00000000..788c047d --- /dev/null +++ b/assets/autocomplete.js/dist/esm/types/index.js @@ -0,0 +1,14 @@ +export * from './AutocompleteApi'; +export * from './AutocompleteClassNames'; +export * from './AutocompleteCollection'; +export * from './AutocompleteComponents'; +export * from './AutocompleteDom'; +export * from './AutocompleteOptions'; +export * from './AutocompletePlugin'; +export * from './AutocompletePropGetters'; +export * from './AutocompleteRender'; +export * from './AutocompleteRenderer'; +export * from './AutocompleteSource'; +export * from './AutocompleteState'; +export * from './AutocompleteTranslations'; +export * from './HighlightHitParams'; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/userAgents.d.ts b/assets/autocomplete.js/dist/esm/userAgents.d.ts new file mode 100644 index 00000000..7a20313e --- /dev/null +++ b/assets/autocomplete.js/dist/esm/userAgents.d.ts @@ -0,0 +1,4 @@ +export declare const userAgents: { + segment: string; + version: string; +}[]; diff --git a/assets/autocomplete.js/dist/esm/userAgents.js b/assets/autocomplete.js/dist/esm/userAgents.js new file mode 100644 index 00000000..4f1b6f08 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/userAgents.js @@ -0,0 +1,5 @@ +import { version } from '@algolia/autocomplete-shared'; +export var userAgents = [{ + segment: 'autocomplete-js', + version: version +}]; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/utils/getHTMLElement.d.ts b/assets/autocomplete.js/dist/esm/utils/getHTMLElement.d.ts new file mode 100644 index 00000000..996d8ab1 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/utils/getHTMLElement.d.ts @@ -0,0 +1,2 @@ +import { AutocompleteEnvironment } from '@algolia/autocomplete-core'; +export declare function getHTMLElement(environment: AutocompleteEnvironment, value: string | HTMLElement): HTMLElement; diff --git a/assets/autocomplete.js/dist/esm/utils/getHTMLElement.js b/assets/autocomplete.js/dist/esm/utils/getHTMLElement.js new file mode 100644 index 00000000..f288c2f1 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/utils/getHTMLElement.js @@ -0,0 +1,10 @@ +import { invariant } from '@algolia/autocomplete-shared'; +export function getHTMLElement(environment, value) { + if (typeof value === 'string') { + var element = environment.document.querySelector(value); + invariant(element !== null, "The element ".concat(JSON.stringify(value), " is not in the document.")); + return element; + } + + return value; +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/utils/index.d.ts b/assets/autocomplete.js/dist/esm/utils/index.d.ts new file mode 100644 index 00000000..50a307cc --- /dev/null +++ b/assets/autocomplete.js/dist/esm/utils/index.d.ts @@ -0,0 +1,5 @@ +export * from './getHTMLElement'; +export * from './mergeClassNames'; +export * from './mergeDeep'; +export * from './pickBy'; +export * from './setProperties'; diff --git a/assets/autocomplete.js/dist/esm/utils/index.js b/assets/autocomplete.js/dist/esm/utils/index.js new file mode 100644 index 00000000..34661b9b --- /dev/null +++ b/assets/autocomplete.js/dist/esm/utils/index.js @@ -0,0 +1,5 @@ +export * from './getHTMLElement'; +export * from './mergeClassNames'; +export * from './mergeDeep'; +export * from './pickBy'; +export * from './setProperties'; \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/utils/mergeClassNames.d.ts b/assets/autocomplete.js/dist/esm/utils/mergeClassNames.d.ts new file mode 100644 index 00000000..aef0ea3c --- /dev/null +++ b/assets/autocomplete.js/dist/esm/utils/mergeClassNames.d.ts @@ -0,0 +1,2 @@ +import { AutocompleteClassNames } from '../types'; +export declare function mergeClassNames(...values: Array>): Partial; diff --git a/assets/autocomplete.js/dist/esm/utils/mergeClassNames.js b/assets/autocomplete.js/dist/esm/utils/mergeClassNames.js new file mode 100644 index 00000000..22ba0c86 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/utils/mergeClassNames.js @@ -0,0 +1,17 @@ +export function mergeClassNames() { + for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) { + values[_key] = arguments[_key]; + } + + return values.reduce(function (acc, current) { + Object.keys(current).forEach(function (key) { + var accValue = acc[key]; + var currentValue = current[key]; + + if (accValue !== currentValue) { + acc[key] = [accValue, currentValue].filter(Boolean).join(' '); + } + }); + return acc; + }, {}); +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/utils/mergeDeep.d.ts b/assets/autocomplete.js/dist/esm/utils/mergeDeep.d.ts new file mode 100644 index 00000000..67c80b56 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/utils/mergeDeep.d.ts @@ -0,0 +1 @@ +export declare function mergeDeep(...values: any[]): any; diff --git a/assets/autocomplete.js/dist/esm/utils/mergeDeep.js b/assets/autocomplete.js/dist/esm/utils/mergeDeep.js new file mode 100644 index 00000000..718269b1 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/utils/mergeDeep.js @@ -0,0 +1,39 @@ +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _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."); } + +function _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); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _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; } + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +var isPlainObject = function isPlainObject(value) { + return value && _typeof(value) === 'object' && Object.prototype.toString.call(value) === '[object Object]'; +}; + +export function mergeDeep() { + for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) { + values[_key] = arguments[_key]; + } + + return values.reduce(function (acc, current) { + Object.keys(current).forEach(function (key) { + var accValue = acc[key]; + var currentValue = current[key]; + + if (Array.isArray(accValue) && Array.isArray(currentValue)) { + acc[key] = accValue.concat.apply(accValue, _toConsumableArray(currentValue)); + } else if (isPlainObject(accValue) && isPlainObject(currentValue)) { + acc[key] = mergeDeep(accValue, currentValue); + } else { + acc[key] = currentValue; + } + }); + return acc; + }, {}); +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/utils/pickBy.d.ts b/assets/autocomplete.js/dist/esm/utils/pickBy.d.ts new file mode 100644 index 00000000..7a729428 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/utils/pickBy.d.ts @@ -0,0 +1,4 @@ +export declare function pickBy(obj: Record, predicate: (value: { + key: string; + value: TValue; +}) => boolean): Record; diff --git a/assets/autocomplete.js/dist/esm/utils/pickBy.js b/assets/autocomplete.js/dist/esm/utils/pickBy.js new file mode 100644 index 00000000..59725793 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/utils/pickBy.js @@ -0,0 +1,34 @@ +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _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; } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _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); } + +function _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; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +export function pickBy(obj, predicate) { + return Object.entries(obj).reduce(function (acc, _ref) { + var _ref2 = _slicedToArray(_ref, 2), + key = _ref2[0], + value = _ref2[1]; + + if (predicate({ + key: key, + value: value + })) { + return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, key, value)); + } + + return acc; + }, {}); +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/esm/utils/setProperties.d.ts b/assets/autocomplete.js/dist/esm/utils/setProperties.d.ts new file mode 100644 index 00000000..2327fdd7 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/utils/setProperties.d.ts @@ -0,0 +1,6 @@ +/** + * Set a property value on a DOM node + */ +export declare function setProperty(dom: HTMLElement, name: string, value: any): void; +export declare function setProperties(dom: HTMLElement, props: object): void; +export declare function setPropertiesWithoutEvents(dom: HTMLElement, props: object): void; diff --git a/assets/autocomplete.js/dist/esm/utils/setProperties.js b/assets/autocomplete.js/dist/esm/utils/setProperties.js new file mode 100644 index 00000000..bc21acb2 --- /dev/null +++ b/assets/autocomplete.js/dist/esm/utils/setProperties.js @@ -0,0 +1,110 @@ +/* eslint-disable */ + +/** + * Touch-specific event aliases + * + * See https://w3c.github.io/touch-events/#extensions-to-the-globaleventhandlers-mixin + */ +var TOUCH_EVENTS_ALIASES = ['ontouchstart', 'ontouchend', 'ontouchmove', 'ontouchcancel']; +/* + * Taken from Preact + * + * See https://github.com/preactjs/preact/blob/6ab49d9020740127577bf4af66bf63f4af7f9fee/src/diff/props.js#L58-L151 + */ + +function setStyle(style, key, value) { + if (value === null) { + style[key] = ''; + } else if (typeof value !== 'number') { + style[key] = value; + } else { + style[key] = value + 'px'; + } +} +/** + * Proxy an event to hooked event handlers + */ + + +function eventProxy(event) { + this._listeners[event.type](event); +} +/** + * Set a property value on a DOM node + */ + + +export function setProperty(dom, name, value) { + var useCapture; + var nameLower; + var oldValue = dom[name]; + + if (name === 'style') { + if (typeof value == 'string') { + dom.style = value; + } else { + if (value === null) { + dom.style = ''; + } else { + for (name in value) { + if (!oldValue || value[name] !== oldValue[name]) { + setStyle(dom.style, name, value[name]); + } + } + } + } + } // Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6 + else if (name[0] === 'o' && name[1] === 'n') { + useCapture = name !== (name = name.replace(/Capture$/, '')); + nameLower = name.toLowerCase(); + if (nameLower in dom || TOUCH_EVENTS_ALIASES.includes(nameLower)) name = nameLower; + name = name.slice(2); + if (!dom._listeners) dom._listeners = {}; + dom._listeners[name] = value; + + if (value) { + if (!oldValue) dom.addEventListener(name, eventProxy, useCapture); + } else { + dom.removeEventListener(name, eventProxy, useCapture); + } + } else if (name !== 'list' && name !== 'tagName' && // HTMLButtonElement.form and HTMLInputElement.form are read-only but can be set using + // setAttribute + name !== 'form' && name !== 'type' && name !== 'size' && name !== 'download' && name !== 'href' && name in dom) { + dom[name] = value == null ? '' : value; + } else if (typeof value != 'function' && name !== 'dangerouslySetInnerHTML') { + if (value == null || value === false && // ARIA-attributes have a different notion of boolean values. + // The value `false` is different from the attribute not + // existing on the DOM, so we can't remove it. For non-boolean + // ARIA-attributes we could treat false as a removal, but the + // amount of exceptions would cost us too many bytes. On top of + // that other VDOM frameworks also always stringify `false`. + !/^ar/.test(name)) { + dom.removeAttribute(name); + } else { + dom.setAttribute(name, value); + } + } +} + +function getNormalizedName(name) { + switch (name) { + case 'onChange': + return 'onInput'; + + default: + return name; + } +} + +export function setProperties(dom, props) { + for (var name in props) { + setProperty(dom, getNormalizedName(name), props[name]); + } +} +export function setPropertiesWithoutEvents(dom, props) { + for (var name in props) { + if (!(name[0] === 'o' && name[1] === 'n')) { + setProperty(dom, getNormalizedName(name), props[name]); + } + } +} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/umd/index.development.js b/assets/autocomplete.js/dist/umd/index.development.js new file mode 100644 index 00000000..4c189ba3 --- /dev/null +++ b/assets/autocomplete.js/dist/umd/index.development.js @@ -0,0 +1,4406 @@ +/*! @algolia/autocomplete-js 1.7.3 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@algolia/autocomplete-js"] = {})); +})(this, (function (exports) { 'use strict'; + + function ownKeys$g(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread2(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys$g(Object(source), !0).forEach(function (key) { + _defineProperty$g(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$g(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _typeof$3(obj) { + "@babel/helpers - typeof"; + + return _typeof$3 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof$3(obj); + } + + function _defineProperty$g(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; + } + + function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); + } + + function _objectWithoutPropertiesLoose$4(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; + } + + function _objectWithoutProperties$4(source, excluded) { + if (source == null) return {}; + + var target = _objectWithoutPropertiesLoose$4(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; + } + + function _slicedToArray$1(arr, i) { + return _arrayWithHoles$1(arr) || _iterableToArrayLimit$1(arr, i) || _unsupportedIterableToArray$6(arr, i) || _nonIterableRest$1(); + } + + function _toConsumableArray$5(arr) { + return _arrayWithoutHoles$5(arr) || _iterableToArray$5(arr) || _unsupportedIterableToArray$6(arr) || _nonIterableSpread$5(); + } + + function _arrayWithoutHoles$5(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray$6(arr); + } + + function _arrayWithHoles$1(arr) { + if (Array.isArray(arr)) return arr; + } + + function _iterableToArray$5(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); + } + + function _iterableToArrayLimit$1(arr, i) { + var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; + + if (_i == null) return; + var _arr = []; + var _n = true; + var _d = false; + + var _s, _e; + + try { + for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + function _unsupportedIterableToArray$6(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray$6(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$6(o, minLen); + } + + function _arrayLikeToArray$6(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; + } + + function _nonIterableSpread$5() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + function _nonIterableRest$1() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + function createRef(initialValue) { + return { + current: initialValue + }; + } + + function debounce(fn, time) { + var timerId = undefined; + return function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + if (timerId) { + clearTimeout(timerId); + } + + timerId = setTimeout(function () { + return fn.apply(void 0, args); + }, time); + }; + } + + function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray$5(arr, i) || _nonIterableRest(); + } + + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + function _unsupportedIterableToArray$5(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray$5(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$5(o, minLen); + } + + function _arrayLikeToArray$5(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; + } + + function _iterableToArrayLimit(arr, i) { + var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; + + if (_i == null) return; + var _arr = []; + var _n = true; + var _d = false; + + var _s, _e; + + try { + for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; + } + + function _typeof$2(obj) { + "@babel/helpers - typeof"; + + return _typeof$2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof$2(obj); + } + /** + * Decycles objects with circular references. + * This is used to print cyclic structures in development environment only. + */ + + + function decycle(obj) { + var seen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Set(); + + if (!obj || _typeof$2(obj) !== 'object') { + return obj; + } + + if (seen.has(obj)) { + return '[Circular]'; + } + + var newSeen = seen.add(obj); + + if (Array.isArray(obj)) { + return obj.map(function (x) { + return decycle(x, newSeen); + }); + } + + return Object.fromEntries(Object.entries(obj).map(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + key = _ref2[0], + value = _ref2[1]; + + return [key, decycle(value, newSeen)]; + })); + } + + function flatten(values) { + return values.reduce(function (a, b) { + return a.concat(b); + }, []); + } + + var autocompleteId = 0; + function generateAutocompleteId() { + return "autocomplete-".concat(autocompleteId++); + } + + function getAttributeValueByPath(record, path) { + return path.reduce(function (current, key) { + return current && current[key]; + }, record); + } + + function getItemsCount(state) { + if (state.collections.length === 0) { + return 0; + } + + return state.collections.reduce(function (sum, collection) { + return sum + collection.items.length; + }, 0); + } + + /** + * Throws an error if the condition is not met in development mode. + * This is used to make development a better experience to provide guidance as + * to where the error comes from. + */ + function invariant(condition, message) { + + if (!condition) { + throw new Error("[Autocomplete] ".concat(typeof message === 'function' ? message() : message)); + } + } + + var noop = function noop() {}; + + var version = '1.7.3'; + + var userAgents$1 = [{ + segment: 'autocomplete-core', + version: version + }]; + + var warnCache = { + current: {} + }; + /** + * Logs a warning if the condition is not met. + * This is used to log issues in development environment only. + */ + + function warn(condition, message) { + + if (condition) { + return; + } + + var sanitizedMessage = message.trim(); + var hasAlreadyPrinted = warnCache.current[sanitizedMessage]; + + if (!hasAlreadyPrinted) { + warnCache.current[sanitizedMessage] = true; // eslint-disable-next-line no-console + + console.warn("[Autocomplete] ".concat(sanitizedMessage)); + } + } + + function checkOptions(options) { + "development" !== 'production' ? warn(!options.debug, 'The `debug` option is meant for development debugging and should not be used in production.') : void 0 ; + } + + function createInternalCancelablePromise(promise, initialState) { + var state = initialState; + return { + then: function then(onfulfilled, onrejected) { + return createInternalCancelablePromise(promise.then(createCallback(onfulfilled, state, promise), createCallback(onrejected, state, promise)), state); + }, + catch: function _catch(onrejected) { + return createInternalCancelablePromise(promise.catch(createCallback(onrejected, state, promise)), state); + }, + finally: function _finally(onfinally) { + if (onfinally) { + state.onCancelList.push(onfinally); + } + + return createInternalCancelablePromise(promise.finally(createCallback(onfinally && function () { + state.onCancelList = []; + return onfinally(); + }, state, promise)), state); + }, + cancel: function cancel() { + state.isCanceled = true; + var callbacks = state.onCancelList; + state.onCancelList = []; + callbacks.forEach(function (callback) { + callback(); + }); + }, + isCanceled: function isCanceled() { + return state.isCanceled === true; + } + }; + } + + function cancelable(promise) { + return createInternalCancelablePromise(promise, { + isCanceled: false, + onCancelList: [] + }); + } + + function createCallback(onResult, state, fallback) { + if (!onResult) { + return fallback; + } + + return function callback(arg) { + if (state.isCanceled) { + return arg; + } + + return onResult(arg); + }; + } + + function createCancelablePromiseList() { + var list = []; + return { + add: function add(cancelablePromise) { + list.push(cancelablePromise); + return cancelablePromise.finally(function () { + list = list.filter(function (item) { + return item !== cancelablePromise; + }); + }); + }, + cancelAll: function cancelAll() { + list.forEach(function (promise) { + return promise.cancel(); + }); + }, + isEmpty: function isEmpty() { + return list.length === 0; + } + }; + } + + /** + * Creates a runner that executes promises in a concurrent-safe way. + * + * This is useful to prevent older promises to resolve after a newer promise, + * otherwise resulting in stale resolved values. + */ + function createConcurrentSafePromise() { + var basePromiseId = -1; + var latestResolvedId = -1; + var latestResolvedValue = undefined; + return function runConcurrentSafePromise(promise) { + basePromiseId++; + var currentPromiseId = basePromiseId; + return Promise.resolve(promise).then(function (x) { + // The promise might take too long to resolve and get outdated. This would + // result in resolving stale values. + // When this happens, we ignore the promise value and return the one + // coming from the latest resolved value. + // + // +----------------------------------+ + // | 100ms | + // | run(1) +---> R1 | + // | 300ms | + // | run(2) +-------------> R2 (SKIP) | + // | 200ms | + // | run(3) +--------> R3 | + // +----------------------------------+ + if (latestResolvedValue && currentPromiseId < latestResolvedId) { + return latestResolvedValue; + } + + latestResolvedId = currentPromiseId; + latestResolvedValue = x; + return x; + }); + }; + } + + /** + * Returns the next active item ID from the current state. + * + * We allow circular keyboard navigation from the base index. + * The base index can either be `null` (nothing is highlighted) or `0` + * (the first item is highlighted). + * The base index is allowed to get assigned `null` only if + * `props.defaultActiveItemId` is `null`. This pattern allows to "stop" + * by the actual query before navigating to other suggestions as seen on + * Google or Amazon. + * + * @param moveAmount The offset to increment (or decrement) the last index + * @param baseIndex The current index to compute the next index from + * @param itemCount The number of items + * @param defaultActiveItemId The default active index to fallback to + */ + function getNextActiveItemId(moveAmount, baseIndex, itemCount, defaultActiveItemId) { + if (!itemCount) { + return null; + } + + if (moveAmount < 0 && (baseIndex === null || defaultActiveItemId !== null && baseIndex === 0)) { + return itemCount + moveAmount; + } + + var numericIndex = (baseIndex === null ? -1 : baseIndex) + moveAmount; + + if (numericIndex <= -1 || numericIndex >= itemCount) { + return defaultActiveItemId === null ? null : 0; + } + + return numericIndex; + } + + function ownKeys$f(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread$f(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys$f(Object(source), !0).forEach(function (key) { + _defineProperty$f(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$f(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _defineProperty$f(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; + } + + function _typeof$1(obj) { + "@babel/helpers - typeof"; + + return _typeof$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof$1(obj); + } + function getNormalizedSources(getSources, params) { + var seenSourceIds = []; + return Promise.resolve(getSources(params)).then(function (sources) { + invariant(Array.isArray(sources), function () { + return "The `getSources` function must return an array of sources but returned type ".concat(JSON.stringify(_typeof$1(sources)), ":\n\n").concat(JSON.stringify(decycle(sources), null, 2)); + }); + return Promise.all(sources // We allow `undefined` and `false` sources to allow users to use + // `Boolean(query) && source` (=> `false`). + // We need to remove these values at this point. + .filter(function (maybeSource) { + return Boolean(maybeSource); + }).map(function (source) { + invariant(typeof source.sourceId === 'string', 'A source must provide a `sourceId` string.'); + + if (seenSourceIds.includes(source.sourceId)) { + throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(source.sourceId), " is not unique.")); + } + + seenSourceIds.push(source.sourceId); + + var normalizedSource = _objectSpread$f({ + getItemInputValue: function getItemInputValue(_ref) { + var state = _ref.state; + return state.query; + }, + getItemUrl: function getItemUrl() { + return undefined; + }, + onSelect: function onSelect(_ref2) { + var setIsOpen = _ref2.setIsOpen; + setIsOpen(false); + }, + onActive: noop + }, source); + + return Promise.resolve(normalizedSource); + })); + }); + } + + // We don't have access to the autocomplete source when we call `onKeyDown` + // or `onClick` because those are native browser events. + // However, we can get the source from the suggestion index. + function getCollectionFromActiveItemId(state) { + // Given 3 sources with respectively 1, 2 and 3 suggestions: [1, 2, 3] + // We want to get the accumulated counts: + // [1, 1 + 2, 1 + 2 + 3] = [1, 3, 3 + 3] = [1, 3, 6] + var accumulatedCollectionsCount = state.collections.map(function (collections) { + return collections.items.length; + }).reduce(function (acc, collectionsCount, index) { + var previousValue = acc[index - 1] || 0; + var nextValue = previousValue + collectionsCount; + acc.push(nextValue); + return acc; + }, []); // Based on the accumulated counts, we can infer the index of the suggestion. + + var collectionIndex = accumulatedCollectionsCount.reduce(function (acc, current) { + if (current <= state.activeItemId) { + return acc + 1; + } + + return acc; + }, 0); + return state.collections[collectionIndex]; + } + /** + * Gets the highlighted index relative to a suggestion object (not the absolute + * highlighted index). + * + * Example: + * [['a', 'b'], ['c', 'd', 'e'], ['f']] + * ↑ + * (absolute: 3, relative: 1) + */ + + + function getRelativeActiveItemId(_ref) { + var state = _ref.state, + collection = _ref.collection; + var isOffsetFound = false; + var counter = 0; + var previousItemsOffset = 0; + + while (isOffsetFound === false) { + var currentCollection = state.collections[counter]; + + if (currentCollection === collection) { + isOffsetFound = true; + break; + } + + previousItemsOffset += currentCollection.items.length; + counter++; + } + + return state.activeItemId - previousItemsOffset; + } + + function getActiveItem(state) { + var collection = getCollectionFromActiveItemId(state); + + if (!collection) { + return null; + } + + var item = collection.items[getRelativeActiveItemId({ + state: state, + collection: collection + })]; + var source = collection.source; + var itemInputValue = source.getItemInputValue({ + item: item, + state: state + }); + var itemUrl = source.getItemUrl({ + item: item, + state: state + }); + return { + item: item, + itemInputValue: itemInputValue, + itemUrl: itemUrl, + source: source + }; + } + + function isOrContainsNode(parent, child) { + return parent === child || parent.contains(child); + } + + var regex = /((gt|sm)-|galaxy nexus)|samsung[- ]/i; + function isSamsung(userAgent) { + return Boolean(userAgent && userAgent.match(regex)); + } + + function ownKeys$e(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread$e(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys$e(Object(source), !0).forEach(function (key) { + _defineProperty$e(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$e(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _defineProperty$e(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; + } + + function mapToAlgoliaResponse(rawResults) { + var results = rawResults.map(function (result) { + var _hits; + + return _objectSpread$e(_objectSpread$e({}, result), {}, { + hits: (_hits = result.hits) === null || _hits === void 0 ? void 0 : _hits.map(function (hit) { + // Bring support for the Insights plugin. + return _objectSpread$e(_objectSpread$e({}, hit), {}, { + __autocomplete_indexName: result.index, + __autocomplete_queryID: result.queryID + }); + }) + }); + }); + return { + results: results, + hits: results.map(function (result) { + return result.hits; + }).filter(Boolean), + facetHits: results.map(function (result) { + var _facetHits; + + return (_facetHits = result.facetHits) === null || _facetHits === void 0 ? void 0 : _facetHits.map(function (facetHit) { + // Bring support for the highlighting components. + return { + label: facetHit.value, + count: facetHit.count, + _highlightResult: { + label: { + value: facetHit.highlighted + } + } + }; + }); + }).filter(Boolean) + }; + } + + function ownKeys$d(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread$d(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys$d(Object(source), !0).forEach(function (key) { + _defineProperty$d(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$d(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _defineProperty$d(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; + } + function createStore(reducer, props, onStoreStateChange) { + var state = props.initialState; + return { + getState: function getState() { + return state; + }, + dispatch: function dispatch(action, payload) { + var prevState = _objectSpread$d({}, state); + + state = reducer(state, { + type: action, + props: props, + payload: payload + }); + onStoreStateChange({ + state: state, + prevState: prevState + }); + }, + pendingRequests: createCancelablePromiseList() + }; + } + + function ownKeys$c(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread$c(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys$c(Object(source), !0).forEach(function (key) { + _defineProperty$c(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$c(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _defineProperty$c(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; + } + function getAutocompleteSetters(_ref) { + var store = _ref.store; + + var setActiveItemId = function setActiveItemId(value) { + store.dispatch('setActiveItemId', value); + }; + + var setQuery = function setQuery(value) { + store.dispatch('setQuery', value); + }; + + var setCollections = function setCollections(rawValue) { + var baseItemId = 0; + var value = rawValue.map(function (collection) { + return _objectSpread$c(_objectSpread$c({}, collection), {}, { + // We flatten the stored items to support calling `getAlgoliaResults` + // from the source itself. + items: flatten(collection.items).map(function (item) { + return _objectSpread$c(_objectSpread$c({}, item), {}, { + __autocomplete_id: baseItemId++ + }); + }) + }); + }); + store.dispatch('setCollections', value); + }; + + var setIsOpen = function setIsOpen(value) { + store.dispatch('setIsOpen', value); + }; + + var setStatus = function setStatus(value) { + store.dispatch('setStatus', value); + }; + + var setContext = function setContext(value) { + store.dispatch('setContext', value); + }; + + return { + setActiveItemId: setActiveItemId, + setQuery: setQuery, + setCollections: setCollections, + setIsOpen: setIsOpen, + setStatus: setStatus, + setContext: setContext + }; + } + + function _toConsumableArray$4(arr) { + return _arrayWithoutHoles$4(arr) || _iterableToArray$4(arr) || _unsupportedIterableToArray$4(arr) || _nonIterableSpread$4(); + } + + function _nonIterableSpread$4() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + function _unsupportedIterableToArray$4(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray$4(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$4(o, minLen); + } + + function _iterableToArray$4(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); + } + + function _arrayWithoutHoles$4(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray$4(arr); + } + + function _arrayLikeToArray$4(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; + } + + function ownKeys$b(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread$b(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys$b(Object(source), !0).forEach(function (key) { + _defineProperty$b(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$b(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _defineProperty$b(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; + } + function getDefaultProps(props, pluginSubscribers) { + var _props$id; + /* eslint-disable no-restricted-globals */ + + + var environment = typeof window !== 'undefined' ? window : {}; + /* eslint-enable no-restricted-globals */ + + var plugins = props.plugins || []; + return _objectSpread$b(_objectSpread$b({ + debug: false, + openOnFocus: false, + placeholder: '', + autoFocus: false, + defaultActiveItemId: null, + stallThreshold: 300, + environment: environment, + shouldPanelOpen: function shouldPanelOpen(_ref) { + var state = _ref.state; + return getItemsCount(state) > 0; + }, + reshape: function reshape(_ref2) { + var sources = _ref2.sources; + return sources; + } + }, props), {}, { + // Since `generateAutocompleteId` triggers a side effect (it increments + // an internal counter), we don't want to execute it if unnecessary. + id: (_props$id = props.id) !== null && _props$id !== void 0 ? _props$id : generateAutocompleteId(), + plugins: plugins, + // The following props need to be deeply defaulted. + initialState: _objectSpread$b({ + activeItemId: null, + query: '', + completion: null, + collections: [], + isOpen: false, + status: 'idle', + context: {} + }, props.initialState), + onStateChange: function onStateChange(params) { + var _props$onStateChange; + + (_props$onStateChange = props.onStateChange) === null || _props$onStateChange === void 0 ? void 0 : _props$onStateChange.call(props, params); + plugins.forEach(function (x) { + var _x$onStateChange; + + return (_x$onStateChange = x.onStateChange) === null || _x$onStateChange === void 0 ? void 0 : _x$onStateChange.call(x, params); + }); + }, + onSubmit: function onSubmit(params) { + var _props$onSubmit; + + (_props$onSubmit = props.onSubmit) === null || _props$onSubmit === void 0 ? void 0 : _props$onSubmit.call(props, params); + plugins.forEach(function (x) { + var _x$onSubmit; + + return (_x$onSubmit = x.onSubmit) === null || _x$onSubmit === void 0 ? void 0 : _x$onSubmit.call(x, params); + }); + }, + onReset: function onReset(params) { + var _props$onReset; + + (_props$onReset = props.onReset) === null || _props$onReset === void 0 ? void 0 : _props$onReset.call(props, params); + plugins.forEach(function (x) { + var _x$onReset; + + return (_x$onReset = x.onReset) === null || _x$onReset === void 0 ? void 0 : _x$onReset.call(x, params); + }); + }, + getSources: function getSources(params) { + return Promise.all([].concat(_toConsumableArray$4(plugins.map(function (plugin) { + return plugin.getSources; + })), [props.getSources]).filter(Boolean).map(function (getSources) { + return getNormalizedSources(getSources, params); + })).then(function (nested) { + return flatten(nested); + }).then(function (sources) { + return sources.map(function (source) { + return _objectSpread$b(_objectSpread$b({}, source), {}, { + onSelect: function onSelect(params) { + source.onSelect(params); + pluginSubscribers.forEach(function (x) { + var _x$onSelect; + + return (_x$onSelect = x.onSelect) === null || _x$onSelect === void 0 ? void 0 : _x$onSelect.call(x, params); + }); + }, + onActive: function onActive(params) { + source.onActive(params); + pluginSubscribers.forEach(function (x) { + var _x$onActive; + + return (_x$onActive = x.onActive) === null || _x$onActive === void 0 ? void 0 : _x$onActive.call(x, params); + }); + } + }); + }); + }); + }, + navigator: _objectSpread$b({ + navigate: function navigate(_ref3) { + var itemUrl = _ref3.itemUrl; + environment.location.assign(itemUrl); + }, + navigateNewTab: function navigateNewTab(_ref4) { + var itemUrl = _ref4.itemUrl; + var windowReference = environment.open(itemUrl, '_blank', 'noopener'); + windowReference === null || windowReference === void 0 ? void 0 : windowReference.focus(); + }, + navigateNewWindow: function navigateNewWindow(_ref5) { + var itemUrl = _ref5.itemUrl; + environment.open(itemUrl, '_blank', 'noopener'); + } + }, props.navigator) + }); + } + + function ownKeys$a(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread$a(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys$a(Object(source), !0).forEach(function (key) { + _defineProperty$a(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$a(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _defineProperty$a(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; + } + function reshape(_ref) { + var collections = _ref.collections, + props = _ref.props, + state = _ref.state; // Sources are grouped by `sourceId` to conveniently pick them via destructuring. + // Example: `const { recentSearchesPlugin } = sourcesBySourceId` + + var sourcesBySourceId = collections.reduce(function (acc, collection) { + return _objectSpread$a(_objectSpread$a({}, acc), {}, _defineProperty$a({}, collection.source.sourceId, _objectSpread$a(_objectSpread$a({}, collection.source), {}, { + getItems: function getItems() { + // We provide the resolved items from the collection to the `reshape` prop. + return flatten(collection.items); + } + }))); + }, {}); + var reshapeSources = props.reshape({ + sources: Object.values(sourcesBySourceId), + sourcesBySourceId: sourcesBySourceId, + state: state + }); // We reconstruct the collections with the items modified by the `reshape` prop. + + return flatten(reshapeSources).filter(Boolean).map(function (source) { + return { + source: source, + items: source.getItems() + }; + }); + } + + function _typeof(obj) { + "@babel/helpers - typeof"; + + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); + } + + function _toConsumableArray$3(arr) { + return _arrayWithoutHoles$3(arr) || _iterableToArray$3(arr) || _unsupportedIterableToArray$3(arr) || _nonIterableSpread$3(); + } + + function _nonIterableSpread$3() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + function _unsupportedIterableToArray$3(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray$3(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$3(o, minLen); + } + + function _iterableToArray$3(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); + } + + function _arrayWithoutHoles$3(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray$3(arr); + } + + function _arrayLikeToArray$3(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; + } + + function ownKeys$9(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread$9(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys$9(Object(source), !0).forEach(function (key) { + _defineProperty$9(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$9(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _defineProperty$9(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; + } + + function isDescription(item) { + return Boolean(item.execute); + } + + function isRequesterDescription(description) { + return Boolean(description === null || description === void 0 ? void 0 : description.execute); + } + + function preResolve(itemsOrDescription, sourceId) { + if (isRequesterDescription(itemsOrDescription)) { + return _objectSpread$9(_objectSpread$9({}, itemsOrDescription), {}, { + requests: itemsOrDescription.queries.map(function (query) { + return { + query: query, + sourceId: sourceId, + transformResponse: itemsOrDescription.transformResponse + }; + }) + }); + } + + return { + items: itemsOrDescription, + sourceId: sourceId + }; + } + function resolve(items) { + var packed = items.reduce(function (acc, current) { + if (!isDescription(current)) { + acc.push(current); + return acc; + } + + var searchClient = current.searchClient, + execute = current.execute, + requesterId = current.requesterId, + requests = current.requests; + var container = acc.find(function (item) { + return isDescription(current) && isDescription(item) && item.searchClient === searchClient && Boolean(requesterId) && item.requesterId === requesterId; + }); + + if (container) { + var _container$items; + + (_container$items = container.items).push.apply(_container$items, _toConsumableArray$3(requests)); + } else { + var request = { + execute: execute, + requesterId: requesterId, + items: requests, + searchClient: searchClient + }; + acc.push(request); + } + + return acc; + }, []); + var values = packed.map(function (maybeDescription) { + if (!isDescription(maybeDescription)) { + return Promise.resolve(maybeDescription); + } + + var _ref = maybeDescription, + execute = _ref.execute, + items = _ref.items, + searchClient = _ref.searchClient; + return execute({ + searchClient: searchClient, + requests: items + }); + }); + return Promise.all(values).then(function (responses) { + return flatten(responses); + }); + } + function postResolve(responses, sources) { + return sources.map(function (source) { + var matches = responses.filter(function (response) { + return response.sourceId === source.sourceId; + }); + var results = matches.map(function (_ref2) { + var items = _ref2.items; + return items; + }); + var transform = matches[0].transformResponse; + var items = transform ? transform(mapToAlgoliaResponse(results)) : results; + invariant(Array.isArray(items), function () { + return "The `getItems` function from source \"".concat(source.sourceId, "\" must return an array of items but returned type ").concat(JSON.stringify(_typeof(items)), ":\n\n").concat(JSON.stringify(decycle(items), null, 2), ".\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems"); + }); + invariant(items.every(Boolean), "The `getItems` function from source \"".concat(source.sourceId, "\" must return an array of items but returned ").concat(JSON.stringify(undefined), ".\n\nDid you forget to return items?\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems")); + return { + source: source, + items: items + }; + }); + } + + var _excluded$7 = ["event", "nextState", "props", "query", "refresh", "store"]; + + function ownKeys$8(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread$8(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys$8(Object(source), !0).forEach(function (key) { + _defineProperty$8(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$8(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _defineProperty$8(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; + } + + function _objectWithoutProperties$3(source, excluded) { + if (source == null) return {}; + + var target = _objectWithoutPropertiesLoose$3(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; + } + + function _objectWithoutPropertiesLoose$3(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; + } + var lastStalledId = null; + var runConcurrentSafePromise = createConcurrentSafePromise(); + function onInput(_ref) { + var event = _ref.event, + _ref$nextState = _ref.nextState, + nextState = _ref$nextState === void 0 ? {} : _ref$nextState, + props = _ref.props, + query = _ref.query, + refresh = _ref.refresh, + store = _ref.store, + setters = _objectWithoutProperties$3(_ref, _excluded$7); + + if (lastStalledId) { + props.environment.clearTimeout(lastStalledId); + } + + var setCollections = setters.setCollections, + setIsOpen = setters.setIsOpen, + setQuery = setters.setQuery, + setActiveItemId = setters.setActiveItemId, + setStatus = setters.setStatus; + setQuery(query); + setActiveItemId(props.defaultActiveItemId); + + if (!query && props.openOnFocus === false) { + var _nextState$isOpen; + + var collections = store.getState().collections.map(function (collection) { + return _objectSpread$8(_objectSpread$8({}, collection), {}, { + items: [] + }); + }); + setStatus('idle'); + setCollections(collections); + setIsOpen((_nextState$isOpen = nextState.isOpen) !== null && _nextState$isOpen !== void 0 ? _nextState$isOpen : props.shouldPanelOpen({ + state: store.getState() + })); // We make sure to update the latest resolved value of the tracked + // promises to keep late resolving promises from "cancelling" the state + // updates performed in this code path. + // We chain with a void promise to respect `onInput`'s expected return type. + + var _request = cancelable(runConcurrentSafePromise(collections).then(function () { + return Promise.resolve(); + })); + + return store.pendingRequests.add(_request); + } + + setStatus('loading'); + lastStalledId = props.environment.setTimeout(function () { + setStatus('stalled'); + }, props.stallThreshold); // We track the entire promise chain triggered by `onInput` before mutating + // the Autocomplete state to make sure that any state manipulation is based on + // fresh data regardless of when promises individually resolve. + // We don't track nested promises and only rely on the full chain resolution, + // meaning we should only ever manipulate the state once this concurrent-safe + // promise is resolved. + + var request = cancelable(runConcurrentSafePromise(props.getSources(_objectSpread$8({ + query: query, + refresh: refresh, + state: store.getState() + }, setters)).then(function (sources) { + return Promise.all(sources.map(function (source) { + return Promise.resolve(source.getItems(_objectSpread$8({ + query: query, + refresh: refresh, + state: store.getState() + }, setters))).then(function (itemsOrDescription) { + return preResolve(itemsOrDescription, source.sourceId); + }); + })).then(resolve).then(function (responses) { + return postResolve(responses, sources); + }).then(function (collections) { + return reshape({ + collections: collections, + props: props, + state: store.getState() + }); + }); + }))).then(function (collections) { + var _nextState$isOpen2; // Parameters passed to `onInput` could be stale when the following code + // executes, because `onInput` calls may not resolve in order. + // If it becomes a problem we'll need to save the last passed parameters. + // See: https://codesandbox.io/s/agitated-cookies-y290z + + + setStatus('idle'); + setCollections(collections); + var isPanelOpen = props.shouldPanelOpen({ + state: store.getState() + }); + setIsOpen((_nextState$isOpen2 = nextState.isOpen) !== null && _nextState$isOpen2 !== void 0 ? _nextState$isOpen2 : props.openOnFocus && !query && isPanelOpen || isPanelOpen); + var highlightedItem = getActiveItem(store.getState()); + + if (store.getState().activeItemId !== null && highlightedItem) { + var item = highlightedItem.item, + itemInputValue = highlightedItem.itemInputValue, + itemUrl = highlightedItem.itemUrl, + source = highlightedItem.source; + source.onActive(_objectSpread$8({ + event: event, + item: item, + itemInputValue: itemInputValue, + itemUrl: itemUrl, + refresh: refresh, + source: source, + state: store.getState() + }, setters)); + } + }).finally(function () { + setStatus('idle'); + + if (lastStalledId) { + props.environment.clearTimeout(lastStalledId); + } + }); + return store.pendingRequests.add(request); + } + + var _excluded$6 = ["event", "props", "refresh", "store"]; + + function ownKeys$7(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread$7(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys$7(Object(source), !0).forEach(function (key) { + _defineProperty$7(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$7(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _defineProperty$7(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; + } + + function _objectWithoutProperties$2(source, excluded) { + if (source == null) return {}; + + var target = _objectWithoutPropertiesLoose$2(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; + } + + function _objectWithoutPropertiesLoose$2(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; + } + function onKeyDown(_ref) { + var event = _ref.event, + props = _ref.props, + refresh = _ref.refresh, + store = _ref.store, + setters = _objectWithoutProperties$2(_ref, _excluded$6); + + if (event.key === 'ArrowUp' || event.key === 'ArrowDown') { + // eslint-disable-next-line no-inner-declarations + var triggerScrollIntoView = function triggerScrollIntoView() { + var nodeItem = props.environment.document.getElementById("".concat(props.id, "-item-").concat(store.getState().activeItemId)); + + if (nodeItem) { + if (nodeItem.scrollIntoViewIfNeeded) { + nodeItem.scrollIntoViewIfNeeded(false); + } else { + nodeItem.scrollIntoView(false); + } + } + }; // eslint-disable-next-line no-inner-declarations + + + var triggerOnActive = function triggerOnActive() { + var highlightedItem = getActiveItem(store.getState()); + + if (store.getState().activeItemId !== null && highlightedItem) { + var item = highlightedItem.item, + itemInputValue = highlightedItem.itemInputValue, + itemUrl = highlightedItem.itemUrl, + source = highlightedItem.source; + source.onActive(_objectSpread$7({ + event: event, + item: item, + itemInputValue: itemInputValue, + itemUrl: itemUrl, + refresh: refresh, + source: source, + state: store.getState() + }, setters)); + } + }; // Default browser behavior changes the caret placement on ArrowUp and + // ArrowDown. + + + event.preventDefault(); // When re-opening the panel, we need to split the logic to keep the actions + // synchronized as `onInput` returns a promise. + + if (store.getState().isOpen === false && (props.openOnFocus || Boolean(store.getState().query))) { + onInput(_objectSpread$7({ + event: event, + props: props, + query: store.getState().query, + refresh: refresh, + store: store + }, setters)).then(function () { + store.dispatch(event.key, { + nextActiveItemId: props.defaultActiveItemId + }); + triggerOnActive(); // Since we rely on the DOM, we need to wait for all the micro tasks to + // finish (which include re-opening the panel) to make sure all the + // elements are available. + + setTimeout(triggerScrollIntoView, 0); + }); + } else { + store.dispatch(event.key, {}); + triggerOnActive(); + triggerScrollIntoView(); + } + } else if (event.key === 'Escape') { + // This prevents the default browser behavior on `input[type="search"]` + // from removing the query right away because we first want to close the + // panel. + event.preventDefault(); + store.dispatch(event.key, null); // Hitting the `Escape` key signals the end of a user interaction with the + // autocomplete. At this point, we should ignore any requests that are still + // pending and could reopen the panel once they resolve, because that would + // result in an unsolicited UI behavior. + + store.pendingRequests.cancelAll(); + } else if (event.key === 'Tab') { + store.dispatch('blur', null); // Hitting the `Escape` key signals the end of a user interaction with the + // autocomplete. At this point, we should ignore any requests that are still + // pending and could reopen the panel once they resolve, because that would + // result in an unsolicited UI behavior. + + store.pendingRequests.cancelAll(); + } else if (event.key === 'Enter') { + // No active item, so we let the browser handle the native `onSubmit` form + // event. + if (store.getState().activeItemId === null || store.getState().collections.every(function (collection) { + return collection.items.length === 0; + })) { + // If requests are still pending when the panel closes, they could reopen + // the panel once they resolve. + // We want to prevent any subsequent query from reopening the panel + // because it would result in an unsolicited UI behavior. + if (!props.debug) { + store.pendingRequests.cancelAll(); + } + + return; + } // This prevents the `onSubmit` event to be sent because an item is + // highlighted. + + + event.preventDefault(); + + var _ref2 = getActiveItem(store.getState()), + item = _ref2.item, + itemInputValue = _ref2.itemInputValue, + itemUrl = _ref2.itemUrl, + source = _ref2.source; + + if (event.metaKey || event.ctrlKey) { + if (itemUrl !== undefined) { + source.onSelect(_objectSpread$7({ + event: event, + item: item, + itemInputValue: itemInputValue, + itemUrl: itemUrl, + refresh: refresh, + source: source, + state: store.getState() + }, setters)); + props.navigator.navigateNewTab({ + itemUrl: itemUrl, + item: item, + state: store.getState() + }); + } + } else if (event.shiftKey) { + if (itemUrl !== undefined) { + source.onSelect(_objectSpread$7({ + event: event, + item: item, + itemInputValue: itemInputValue, + itemUrl: itemUrl, + refresh: refresh, + source: source, + state: store.getState() + }, setters)); + props.navigator.navigateNewWindow({ + itemUrl: itemUrl, + item: item, + state: store.getState() + }); + } + } else if (event.altKey) ; else { + if (itemUrl !== undefined) { + source.onSelect(_objectSpread$7({ + event: event, + item: item, + itemInputValue: itemInputValue, + itemUrl: itemUrl, + refresh: refresh, + source: source, + state: store.getState() + }, setters)); + props.navigator.navigate({ + itemUrl: itemUrl, + item: item, + state: store.getState() + }); + return; + } + + onInput(_objectSpread$7({ + event: event, + nextState: { + isOpen: false + }, + props: props, + query: itemInputValue, + refresh: refresh, + store: store + }, setters)).then(function () { + source.onSelect(_objectSpread$7({ + event: event, + item: item, + itemInputValue: itemInputValue, + itemUrl: itemUrl, + refresh: refresh, + source: source, + state: store.getState() + }, setters)); + }); + } + } + } + + var _excluded$5 = ["props", "refresh", "store"], + _excluded2 = ["inputElement", "formElement", "panelElement"], + _excluded3 = ["inputElement"], + _excluded4 = ["inputElement", "maxLength"], + _excluded5 = ["item", "source"]; + + function ownKeys$6(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread$6(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys$6(Object(source), !0).forEach(function (key) { + _defineProperty$6(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$6(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _defineProperty$6(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; + } + + function _objectWithoutProperties$1(source, excluded) { + if (source == null) return {}; + + var target = _objectWithoutPropertiesLoose$1(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; + } + + function _objectWithoutPropertiesLoose$1(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; + } + function getPropGetters(_ref) { + var props = _ref.props, + refresh = _ref.refresh, + store = _ref.store, + setters = _objectWithoutProperties$1(_ref, _excluded$5); + + var getEnvironmentProps = function getEnvironmentProps(providedProps) { + var inputElement = providedProps.inputElement, + formElement = providedProps.formElement, + panelElement = providedProps.panelElement, + rest = _objectWithoutProperties$1(providedProps, _excluded2); + + function onMouseDownOrTouchStart(event) { + // The `onTouchStart`/`onMouseDown` events shouldn't trigger the `blur` + // handler when it's not an interaction with Autocomplete. + // We detect it with the following heuristics: + // - the panel is closed AND there are no pending requests + // (no interaction with the autocomplete, no future state updates) + // - OR the touched target is the input element (should open the panel) + var isAutocompleteInteraction = store.getState().isOpen || !store.pendingRequests.isEmpty(); + + if (!isAutocompleteInteraction || event.target === inputElement) { + return; + } // @TODO: support cases where there are multiple Autocomplete instances. + // Right now, a second instance makes this computation return false. + + + var isTargetWithinAutocomplete = [formElement, panelElement].some(function (contextNode) { + return isOrContainsNode(contextNode, event.target); + }); + + if (isTargetWithinAutocomplete === false) { + store.dispatch('blur', null); // If requests are still pending when the user closes the panel, they + // could reopen the panel once they resolve. + // We want to prevent any subsequent query from reopening the panel + // because it would result in an unsolicited UI behavior. + + if (!props.debug) { + store.pendingRequests.cancelAll(); + } + } + } + + return _objectSpread$6({ + // We do not rely on the native `blur` event of the input to close the + // panel, but rather on a custom `touchstart`/`mousedown` event outside + // of the autocomplete elements. + // This ensures we don't mistakenly interpret interactions within the + // autocomplete (but outside of the input) as a signal to close the panel. + // For example, clicking reset button causes an input blur, but if + // `openOnFocus=true`, it shouldn't close the panel. + // On touch devices, scrolling results (`touchmove`) causes an input blur + // but shouldn't close the panel. + onTouchStart: onMouseDownOrTouchStart, + onMouseDown: onMouseDownOrTouchStart, + // When scrolling on touch devices (mobiles, tablets, etc.), we want to + // mimic the native platform behavior where the input is blurred to + // hide the virtual keyboard. This gives more vertical space to + // discover all the suggestions showing up in the panel. + onTouchMove: function onTouchMove(event) { + if (store.getState().isOpen === false || inputElement !== props.environment.document.activeElement || event.target === inputElement) { + return; + } + + inputElement.blur(); + } + }, rest); + }; + + var getRootProps = function getRootProps(rest) { + return _objectSpread$6({ + role: 'combobox', + 'aria-expanded': store.getState().isOpen, + 'aria-haspopup': 'listbox', + 'aria-owns': store.getState().isOpen ? "".concat(props.id, "-list") : undefined, + 'aria-labelledby': "".concat(props.id, "-label") + }, rest); + }; + + var getFormProps = function getFormProps(providedProps) { + providedProps.inputElement; + var rest = _objectWithoutProperties$1(providedProps, _excluded3); + + return _objectSpread$6({ + action: '', + noValidate: true, + role: 'search', + onSubmit: function onSubmit(event) { + var _providedProps$inputE; + + event.preventDefault(); + props.onSubmit(_objectSpread$6({ + event: event, + refresh: refresh, + state: store.getState() + }, setters)); + store.dispatch('submit', null); + (_providedProps$inputE = providedProps.inputElement) === null || _providedProps$inputE === void 0 ? void 0 : _providedProps$inputE.blur(); + }, + onReset: function onReset(event) { + var _providedProps$inputE2; + + event.preventDefault(); + props.onReset(_objectSpread$6({ + event: event, + refresh: refresh, + state: store.getState() + }, setters)); + store.dispatch('reset', null); + (_providedProps$inputE2 = providedProps.inputElement) === null || _providedProps$inputE2 === void 0 ? void 0 : _providedProps$inputE2.focus(); + } + }, rest); + }; + + var getInputProps = function getInputProps(providedProps) { + var _props$environment$na; + + function onFocus(event) { + // We want to trigger a query when `openOnFocus` is true + // because the panel should open with the current query. + if (props.openOnFocus || Boolean(store.getState().query)) { + onInput(_objectSpread$6({ + event: event, + props: props, + query: store.getState().completion || store.getState().query, + refresh: refresh, + store: store + }, setters)); + } + + store.dispatch('focus', null); + } + + var _ref2 = providedProps || {}; + _ref2.inputElement; + var _ref2$maxLength = _ref2.maxLength, + maxLength = _ref2$maxLength === void 0 ? 512 : _ref2$maxLength, + rest = _objectWithoutProperties$1(_ref2, _excluded4); + + var activeItem = getActiveItem(store.getState()); + var userAgent = ((_props$environment$na = props.environment.navigator) === null || _props$environment$na === void 0 ? void 0 : _props$environment$na.userAgent) || ''; + var shouldFallbackKeyHint = isSamsung(userAgent); + var enterKeyHint = activeItem !== null && activeItem !== void 0 && activeItem.itemUrl && !shouldFallbackKeyHint ? 'go' : 'search'; + return _objectSpread$6({ + 'aria-autocomplete': 'both', + 'aria-activedescendant': store.getState().isOpen && store.getState().activeItemId !== null ? "".concat(props.id, "-item-").concat(store.getState().activeItemId) : undefined, + 'aria-controls': store.getState().isOpen ? "".concat(props.id, "-list") : undefined, + 'aria-labelledby': "".concat(props.id, "-label"), + value: store.getState().completion || store.getState().query, + id: "".concat(props.id, "-input"), + autoComplete: 'off', + autoCorrect: 'off', + autoCapitalize: 'off', + enterKeyHint: enterKeyHint, + spellCheck: 'false', + autoFocus: props.autoFocus, + placeholder: props.placeholder, + maxLength: maxLength, + type: 'search', + onChange: function onChange(event) { + onInput(_objectSpread$6({ + event: event, + props: props, + query: event.currentTarget.value.slice(0, maxLength), + refresh: refresh, + store: store + }, setters)); + }, + onKeyDown: function onKeyDown$1(event) { + onKeyDown(_objectSpread$6({ + event: event, + props: props, + refresh: refresh, + store: store + }, setters)); + }, + onFocus: onFocus, + // We don't rely on the `blur` event. + // See explanation in `onTouchStart`/`onMouseDown`. + // @MAJOR See if we need to keep this handler. + onBlur: noop, + onClick: function onClick(event) { + // When the panel is closed and you click on the input while + // the input is focused, the `onFocus` event is not triggered + // (default browser behavior). + // In an autocomplete context, it makes sense to open the panel in this + // case. + // We mimic this event by catching the `onClick` event which + // triggers the `onFocus` for the panel to open. + if (providedProps.inputElement === props.environment.document.activeElement && !store.getState().isOpen) { + onFocus(event); + } + } + }, rest); + }; + + var getLabelProps = function getLabelProps(rest) { + return _objectSpread$6({ + htmlFor: "".concat(props.id, "-input"), + id: "".concat(props.id, "-label") + }, rest); + }; + + var getListProps = function getListProps(rest) { + return _objectSpread$6({ + role: 'listbox', + 'aria-labelledby': "".concat(props.id, "-label"), + id: "".concat(props.id, "-list") + }, rest); + }; + + var getPanelProps = function getPanelProps(rest) { + return _objectSpread$6({ + onMouseDown: function onMouseDown(event) { + // Prevents the `activeElement` from being changed to the panel so + // that the blur event is not triggered, otherwise it closes the + // panel. + event.preventDefault(); + }, + onMouseLeave: function onMouseLeave() { + store.dispatch('mouseleave', null); + } + }, rest); + }; + + var getItemProps = function getItemProps(providedProps) { + var item = providedProps.item, + source = providedProps.source, + rest = _objectWithoutProperties$1(providedProps, _excluded5); + + return _objectSpread$6({ + id: "".concat(props.id, "-item-").concat(item.__autocomplete_id), + role: 'option', + 'aria-selected': store.getState().activeItemId === item.__autocomplete_id, + onMouseMove: function onMouseMove(event) { + if (item.__autocomplete_id === store.getState().activeItemId) { + return; + } + + store.dispatch('mousemove', item.__autocomplete_id); + var activeItem = getActiveItem(store.getState()); + + if (store.getState().activeItemId !== null && activeItem) { + var _item = activeItem.item, + itemInputValue = activeItem.itemInputValue, + itemUrl = activeItem.itemUrl, + _source = activeItem.source; + + _source.onActive(_objectSpread$6({ + event: event, + item: _item, + itemInputValue: itemInputValue, + itemUrl: itemUrl, + refresh: refresh, + source: _source, + state: store.getState() + }, setters)); + } + }, + onMouseDown: function onMouseDown(event) { + // Prevents the `activeElement` from being changed to the item so it + // can remain with the current `activeElement`. + event.preventDefault(); + }, + onClick: function onClick(event) { + var itemInputValue = source.getItemInputValue({ + item: item, + state: store.getState() + }); + var itemUrl = source.getItemUrl({ + item: item, + state: store.getState() + }); // If `getItemUrl` is provided, it means that the suggestion + // is a link, not plain text that aims at updating the query. + // We can therefore skip the state change because it will update + // the `activeItemId`, resulting in a UI flash, especially + // noticeable on mobile. + + var runPreCommand = itemUrl ? Promise.resolve() : onInput(_objectSpread$6({ + event: event, + nextState: { + isOpen: false + }, + props: props, + query: itemInputValue, + refresh: refresh, + store: store + }, setters)); + runPreCommand.then(function () { + source.onSelect(_objectSpread$6({ + event: event, + item: item, + itemInputValue: itemInputValue, + itemUrl: itemUrl, + refresh: refresh, + source: source, + state: store.getState() + }, setters)); + }); + } + }, rest); + }; + + return { + getEnvironmentProps: getEnvironmentProps, + getRootProps: getRootProps, + getFormProps: getFormProps, + getLabelProps: getLabelProps, + getInputProps: getInputProps, + getPanelProps: getPanelProps, + getListProps: getListProps, + getItemProps: getItemProps + }; + } + + function ownKeys$5(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread$5(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys$5(Object(source), !0).forEach(function (key) { + _defineProperty$5(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$5(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _defineProperty$5(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; + } + function getMetadata(_ref) { + var _, _options$__autocomple, _options$__autocomple2, _options$__autocomple3; + + var plugins = _ref.plugins, + options = _ref.options; + var optionsKey = (_ = (((_options$__autocomple = options.__autocomplete_metadata) === null || _options$__autocomple === void 0 ? void 0 : _options$__autocomple.userAgents) || [])[0]) === null || _ === void 0 ? void 0 : _.segment; + var extraOptions = optionsKey ? _defineProperty$5({}, optionsKey, Object.keys(((_options$__autocomple2 = options.__autocomplete_metadata) === null || _options$__autocomple2 === void 0 ? void 0 : _options$__autocomple2.options) || {})) : {}; + return { + plugins: plugins.map(function (plugin) { + return { + name: plugin.name, + options: Object.keys(plugin.__autocomplete_pluginOptions || []) + }; + }), + options: _objectSpread$5({ + 'autocomplete-core': Object.keys(options) + }, extraOptions), + ua: userAgents$1.concat(((_options$__autocomple3 = options.__autocomplete_metadata) === null || _options$__autocomple3 === void 0 ? void 0 : _options$__autocomple3.userAgents) || []) + }; + } + function injectMetadata(_ref3) { + var _environment$navigato, _environment$navigato2; + + var metadata = _ref3.metadata, + environment = _ref3.environment; + var isMetadataEnabled = (_environment$navigato = environment.navigator) === null || _environment$navigato === void 0 ? void 0 : (_environment$navigato2 = _environment$navigato.userAgent) === null || _environment$navigato2 === void 0 ? void 0 : _environment$navigato2.includes('Algolia Crawler'); + + if (isMetadataEnabled) { + var metadataContainer = environment.document.createElement('meta'); + var headRef = environment.document.querySelector('head'); + metadataContainer.name = 'algolia:metadata'; + setTimeout(function () { + metadataContainer.content = JSON.stringify(metadata); + headRef.appendChild(metadataContainer); + }, 0); + } + } + + function getCompletion(_ref) { + var _getActiveItem; + + var state = _ref.state; + + if (state.isOpen === false || state.activeItemId === null) { + return null; + } + + return ((_getActiveItem = getActiveItem(state)) === null || _getActiveItem === void 0 ? void 0 : _getActiveItem.itemInputValue) || null; + } + + function ownKeys$4(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread$4(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { + _defineProperty$4(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _defineProperty$4(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; + } + var stateReducer = function stateReducer(state, action) { + switch (action.type) { + case 'setActiveItemId': + { + return _objectSpread$4(_objectSpread$4({}, state), {}, { + activeItemId: action.payload + }); + } + + case 'setQuery': + { + return _objectSpread$4(_objectSpread$4({}, state), {}, { + query: action.payload, + completion: null + }); + } + + case 'setCollections': + { + return _objectSpread$4(_objectSpread$4({}, state), {}, { + collections: action.payload + }); + } + + case 'setIsOpen': + { + return _objectSpread$4(_objectSpread$4({}, state), {}, { + isOpen: action.payload + }); + } + + case 'setStatus': + { + return _objectSpread$4(_objectSpread$4({}, state), {}, { + status: action.payload + }); + } + + case 'setContext': + { + return _objectSpread$4(_objectSpread$4({}, state), {}, { + context: _objectSpread$4(_objectSpread$4({}, state.context), action.payload) + }); + } + + case 'ArrowDown': + { + var nextState = _objectSpread$4(_objectSpread$4({}, state), {}, { + activeItemId: action.payload.hasOwnProperty('nextActiveItemId') ? action.payload.nextActiveItemId : getNextActiveItemId(1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId) + }); + + return _objectSpread$4(_objectSpread$4({}, nextState), {}, { + completion: getCompletion({ + state: nextState + }) + }); + } + + case 'ArrowUp': + { + var _nextState = _objectSpread$4(_objectSpread$4({}, state), {}, { + activeItemId: getNextActiveItemId(-1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId) + }); + + return _objectSpread$4(_objectSpread$4({}, _nextState), {}, { + completion: getCompletion({ + state: _nextState + }) + }); + } + + case 'Escape': + { + if (state.isOpen) { + return _objectSpread$4(_objectSpread$4({}, state), {}, { + activeItemId: null, + isOpen: false, + completion: null + }); + } + + return _objectSpread$4(_objectSpread$4({}, state), {}, { + activeItemId: null, + query: '', + status: 'idle', + collections: [] + }); + } + + case 'submit': + { + return _objectSpread$4(_objectSpread$4({}, state), {}, { + activeItemId: null, + isOpen: false, + status: 'idle' + }); + } + + case 'reset': + { + return _objectSpread$4(_objectSpread$4({}, state), {}, { + activeItemId: // Since we open the panel on reset when openOnFocus=true + // we need to restore the highlighted index to the defaultActiveItemId. (DocSearch use-case) + // Since we close the panel when openOnFocus=false + // we lose track of the highlighted index. (Query-suggestions use-case) + action.props.openOnFocus === true ? action.props.defaultActiveItemId : null, + status: 'idle', + query: '' + }); + } + + case 'focus': + { + return _objectSpread$4(_objectSpread$4({}, state), {}, { + activeItemId: action.props.defaultActiveItemId, + isOpen: (action.props.openOnFocus || Boolean(state.query)) && action.props.shouldPanelOpen({ + state: state + }) + }); + } + + case 'blur': + { + if (action.props.debug) { + return state; + } + + return _objectSpread$4(_objectSpread$4({}, state), {}, { + isOpen: false, + activeItemId: null + }); + } + + case 'mousemove': + { + return _objectSpread$4(_objectSpread$4({}, state), {}, { + activeItemId: action.payload + }); + } + + case 'mouseleave': + { + return _objectSpread$4(_objectSpread$4({}, state), {}, { + activeItemId: action.props.defaultActiveItemId + }); + } + + default: + invariant(false, "The reducer action ".concat(JSON.stringify(action.type), " is not supported.")); + return state; + } + }; + + function ownKeys$3(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread$3(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { + _defineProperty$3(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _defineProperty$3(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; + } + function createAutocomplete(options) { + checkOptions(options); + var subscribers = []; + var props = getDefaultProps(options, subscribers); + var store = createStore(stateReducer, props, onStoreStateChange); + var setters = getAutocompleteSetters({ + store: store + }); + var propGetters = getPropGetters(_objectSpread$3({ + props: props, + refresh: refresh, + store: store + }, setters)); + + function onStoreStateChange(_ref) { + var prevState = _ref.prevState, + state = _ref.state; + props.onStateChange(_objectSpread$3({ + prevState: prevState, + state: state, + refresh: refresh + }, setters)); + } + + function refresh() { + return onInput(_objectSpread$3({ + event: new Event('input'), + nextState: { + isOpen: store.getState().isOpen + }, + props: props, + query: store.getState().query, + refresh: refresh, + store: store + }, setters)); + } + + props.plugins.forEach(function (plugin) { + var _plugin$subscribe; + + return (_plugin$subscribe = plugin.subscribe) === null || _plugin$subscribe === void 0 ? void 0 : _plugin$subscribe.call(plugin, _objectSpread$3(_objectSpread$3({}, setters), {}, { + refresh: refresh, + onSelect: function onSelect(fn) { + subscribers.push({ + onSelect: fn + }); + }, + onActive: function onActive(fn) { + subscribers.push({ + onActive: fn + }); + } + })); + }); + injectMetadata({ + metadata: getMetadata({ + plugins: props.plugins, + options: options + }), + environment: props.environment + }); + return _objectSpread$3(_objectSpread$3({ + refresh: refresh + }, propGetters), setters); + } + + var n$1=function(t,s,r,e){var u;s[0]=0;for(var h=1;h=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e="";},a=0;a"===t?(r=1,e=""):e=t+e[0]:u?t===u?u="":e+=t:'"'===t||"'"===t?u=t:">"===t?(p(),r=1):r&&("="===t?(r=5,s=e,e=""):"/"===t&&(r<5||">"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(p(),r=2):e+=t),3===r&&"!--"===e&&(r=4,h=h[0]);}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]} + + var ClearIcon = function ClearIcon(_ref) { + var environment = _ref.environment; + var element = environment.document.createElementNS('http://www.w3.org/2000/svg', 'svg'); + element.setAttribute('class', 'aa-ClearIcon'); + element.setAttribute('viewBox', '0 0 24 24'); + element.setAttribute('width', '18'); + element.setAttribute('height', '18'); + element.setAttribute('fill', 'currentColor'); + var path = environment.document.createElementNS('http://www.w3.org/2000/svg', 'path'); + path.setAttribute('d', 'M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z'); + element.appendChild(path); + return element; + }; + + function getHTMLElement(environment, value) { + if (typeof value === 'string') { + var element = environment.document.querySelector(value); + invariant(element !== null, "The element ".concat(JSON.stringify(value), " is not in the document.")); + return element; + } + + return value; + } + + function mergeClassNames() { + for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) { + values[_key] = arguments[_key]; + } + + return values.reduce(function (acc, current) { + Object.keys(current).forEach(function (key) { + var accValue = acc[key]; + var currentValue = current[key]; + + if (accValue !== currentValue) { + acc[key] = [accValue, currentValue].filter(Boolean).join(' '); + } + }); + return acc; + }, {}); + } + + var isPlainObject = function isPlainObject(value) { + return value && _typeof$3(value) === 'object' && Object.prototype.toString.call(value) === '[object Object]'; + }; + + function mergeDeep() { + for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) { + values[_key] = arguments[_key]; + } + + return values.reduce(function (acc, current) { + Object.keys(current).forEach(function (key) { + var accValue = acc[key]; + var currentValue = current[key]; + + if (Array.isArray(accValue) && Array.isArray(currentValue)) { + acc[key] = accValue.concat.apply(accValue, _toConsumableArray$5(currentValue)); + } else if (isPlainObject(accValue) && isPlainObject(currentValue)) { + acc[key] = mergeDeep(accValue, currentValue); + } else { + acc[key] = currentValue; + } + }); + return acc; + }, {}); + } + + function pickBy(obj, predicate) { + return Object.entries(obj).reduce(function (acc, _ref) { + var _ref2 = _slicedToArray$1(_ref, 2), + key = _ref2[0], + value = _ref2[1]; + + if (predicate({ + key: key, + value: value + })) { + return _objectSpread2(_objectSpread2({}, acc), {}, _defineProperty$g({}, key, value)); + } + + return acc; + }, {}); + } + + /* eslint-disable */ + + /** + * Touch-specific event aliases + * + * See https://w3c.github.io/touch-events/#extensions-to-the-globaleventhandlers-mixin + */ + var TOUCH_EVENTS_ALIASES = ['ontouchstart', 'ontouchend', 'ontouchmove', 'ontouchcancel']; + /* + * Taken from Preact + * + * See https://github.com/preactjs/preact/blob/6ab49d9020740127577bf4af66bf63f4af7f9fee/src/diff/props.js#L58-L151 + */ + + function setStyle(style, key, value) { + if (value === null) { + style[key] = ''; + } else if (typeof value !== 'number') { + style[key] = value; + } else { + style[key] = value + 'px'; + } + } + /** + * Proxy an event to hooked event handlers + */ + + + function eventProxy(event) { + this._listeners[event.type](event); + } + /** + * Set a property value on a DOM node + */ + + + function setProperty(dom, name, value) { + var useCapture; + var nameLower; + var oldValue = dom[name]; + + if (name === 'style') { + if (typeof value == 'string') { + dom.style = value; + } else { + if (value === null) { + dom.style = ''; + } else { + for (name in value) { + if (!oldValue || value[name] !== oldValue[name]) { + setStyle(dom.style, name, value[name]); + } + } + } + } + } // Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6 + else if (name[0] === 'o' && name[1] === 'n') { + useCapture = name !== (name = name.replace(/Capture$/, '')); + nameLower = name.toLowerCase(); + if (nameLower in dom || TOUCH_EVENTS_ALIASES.includes(nameLower)) name = nameLower; + name = name.slice(2); + if (!dom._listeners) dom._listeners = {}; + dom._listeners[name] = value; + + if (value) { + if (!oldValue) dom.addEventListener(name, eventProxy, useCapture); + } else { + dom.removeEventListener(name, eventProxy, useCapture); + } + } else if (name !== 'list' && name !== 'tagName' && // HTMLButtonElement.form and HTMLInputElement.form are read-only but can be set using + // setAttribute + name !== 'form' && name !== 'type' && name !== 'size' && name !== 'download' && name !== 'href' && name in dom) { + dom[name] = value == null ? '' : value; + } else if (typeof value != 'function' && name !== 'dangerouslySetInnerHTML') { + if (value == null || value === false && // ARIA-attributes have a different notion of boolean values. + // The value `false` is different from the attribute not + // existing on the DOM, so we can't remove it. For non-boolean + // ARIA-attributes we could treat false as a removal, but the + // amount of exceptions would cost us too many bytes. On top of + // that other VDOM frameworks also always stringify `false`. + !/^ar/.test(name)) { + dom.removeAttribute(name); + } else { + dom.setAttribute(name, value); + } + } + } + + function getNormalizedName(name) { + switch (name) { + case 'onChange': + return 'onInput'; + + default: + return name; + } + } + + function setProperties(dom, props) { + for (var name in props) { + setProperty(dom, getNormalizedName(name), props[name]); + } + } + function setPropertiesWithoutEvents(dom, props) { + for (var name in props) { + if (!(name[0] === 'o' && name[1] === 'n')) { + setProperty(dom, getNormalizedName(name), props[name]); + } + } + } + + var _excluded$4 = ["children"]; + function getCreateDomElement(environment) { + return function createDomElement(tagName, _ref) { + var _ref$children = _ref.children, + children = _ref$children === void 0 ? [] : _ref$children, + props = _objectWithoutProperties$4(_ref, _excluded$4); + + var element = environment.document.createElement(tagName); + setProperties(element, props); + element.append.apply(element, _toConsumableArray$5(children)); + return element; + }; + } + + var _excluded$3 = ["autocompleteScopeApi", "environment", "classNames", "getInputProps", "getInputPropsCore", "isDetached", "state"]; + var Input = function Input(_ref) { + var autocompleteScopeApi = _ref.autocompleteScopeApi, + environment = _ref.environment; + _ref.classNames; + var getInputProps = _ref.getInputProps, + getInputPropsCore = _ref.getInputPropsCore, + isDetached = _ref.isDetached, + state = _ref.state, + props = _objectWithoutProperties$4(_ref, _excluded$3); + + var createDomElement = getCreateDomElement(environment); + var element = createDomElement('input', props); + var inputProps = getInputProps(_objectSpread2({ + state: state, + props: getInputPropsCore({ + inputElement: element + }), + inputElement: element + }, autocompleteScopeApi)); + setProperties(element, _objectSpread2(_objectSpread2({}, inputProps), {}, { + onKeyDown: function onKeyDown(event) { + // In detached mode we don't want to close the panel when hittin `Tab`. + if (isDetached && event.key === 'Tab') { + return; + } + + inputProps.onKeyDown(event); + } + })); + return element; + }; + + var LoadingIcon = function LoadingIcon(_ref) { + var environment = _ref.environment; + var element = environment.document.createElementNS('http://www.w3.org/2000/svg', 'svg'); + element.setAttribute('class', 'aa-LoadingIcon'); + element.setAttribute('viewBox', '0 0 100 100'); + element.setAttribute('width', '20'); + element.setAttribute('height', '20'); + element.innerHTML = "\n \n"; + return element; + }; + + var SearchIcon = function SearchIcon(_ref) { + var environment = _ref.environment; + var element = environment.document.createElementNS('http://www.w3.org/2000/svg', 'svg'); + element.setAttribute('class', 'aa-SubmitIcon'); + element.setAttribute('viewBox', '0 0 24 24'); + element.setAttribute('width', '20'); + element.setAttribute('height', '20'); + element.setAttribute('fill', 'currentColor'); + var path = environment.document.createElementNS('http://www.w3.org/2000/svg', 'path'); + path.setAttribute('d', 'M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z'); + element.appendChild(path); + return element; + }; + + function createAutocompleteDom(_ref) { + var autocomplete = _ref.autocomplete, + autocompleteScopeApi = _ref.autocompleteScopeApi, + classNames = _ref.classNames, + environment = _ref.environment, + isDetached = _ref.isDetached, + _ref$placeholder = _ref.placeholder, + placeholder = _ref$placeholder === void 0 ? 'Search' : _ref$placeholder, + propGetters = _ref.propGetters, + setIsModalOpen = _ref.setIsModalOpen, + state = _ref.state, + translations = _ref.translations; + var createDomElement = getCreateDomElement(environment); + var rootProps = propGetters.getRootProps(_objectSpread2({ + state: state, + props: autocomplete.getRootProps({}) + }, autocompleteScopeApi)); + var root = createDomElement('div', _objectSpread2({ + class: classNames.root + }, rootProps)); + var detachedContainer = createDomElement('div', { + class: classNames.detachedContainer, + onMouseDown: function onMouseDown(event) { + event.stopPropagation(); + } + }); + var detachedOverlay = createDomElement('div', { + class: classNames.detachedOverlay, + children: [detachedContainer], + onMouseDown: function onMouseDown() { + setIsModalOpen(false); + autocomplete.setIsOpen(false); + } + }); + var labelProps = propGetters.getLabelProps(_objectSpread2({ + state: state, + props: autocomplete.getLabelProps({}) + }, autocompleteScopeApi)); + var submitButton = createDomElement('button', { + class: classNames.submitButton, + type: 'submit', + title: translations.submitButtonTitle, + children: [SearchIcon({ + environment: environment + })] + }); + var label = createDomElement('label', _objectSpread2({ + class: classNames.label, + children: [submitButton] + }, labelProps)); + var clearButton = createDomElement('button', { + class: classNames.clearButton, + type: 'reset', + title: translations.clearButtonTitle, + children: [ClearIcon({ + environment: environment + })] + }); + var loadingIndicator = createDomElement('div', { + class: classNames.loadingIndicator, + children: [LoadingIcon({ + environment: environment + })] + }); + var input = Input({ + class: classNames.input, + environment: environment, + state: state, + getInputProps: propGetters.getInputProps, + getInputPropsCore: autocomplete.getInputProps, + autocompleteScopeApi: autocompleteScopeApi, + isDetached: isDetached + }); + var inputWrapperPrefix = createDomElement('div', { + class: classNames.inputWrapperPrefix, + children: [label, loadingIndicator] + }); + var inputWrapperSuffix = createDomElement('div', { + class: classNames.inputWrapperSuffix, + children: [clearButton] + }); + var inputWrapper = createDomElement('div', { + class: classNames.inputWrapper, + children: [input] + }); + var formProps = propGetters.getFormProps(_objectSpread2({ + state: state, + props: autocomplete.getFormProps({ + inputElement: input + }) + }, autocompleteScopeApi)); + var form = createDomElement('form', _objectSpread2({ + class: classNames.form, + children: [inputWrapperPrefix, inputWrapper, inputWrapperSuffix] + }, formProps)); + var panelProps = propGetters.getPanelProps(_objectSpread2({ + state: state, + props: autocomplete.getPanelProps({}) + }, autocompleteScopeApi)); + var panel = createDomElement('div', _objectSpread2({ + class: classNames.panel + }, panelProps)); + + if ("development" === 'test') { + setProperties(panel, { + 'data-testid': 'panel' + }); + } + + if (isDetached) { + var detachedSearchButtonIcon = createDomElement('div', { + class: classNames.detachedSearchButtonIcon, + children: [SearchIcon({ + environment: environment + })] + }); + var detachedSearchButtonPlaceholder = createDomElement('div', { + class: classNames.detachedSearchButtonPlaceholder, + textContent: placeholder + }); + var detachedSearchButton = createDomElement('button', { + type: 'button', + class: classNames.detachedSearchButton, + onClick: function onClick() { + setIsModalOpen(true); + }, + children: [detachedSearchButtonIcon, detachedSearchButtonPlaceholder] + }); + var detachedCancelButton = createDomElement('button', { + type: 'button', + class: classNames.detachedCancelButton, + textContent: translations.detachedCancelButtonText, + // Prevent `onTouchStart` from closing the panel + // since it should be initiated by `onClick` only + onTouchStart: function onTouchStart(event) { + event.stopPropagation(); + }, + onClick: function onClick() { + autocomplete.setIsOpen(false); + setIsModalOpen(false); + } + }); + var detachedFormContainer = createDomElement('div', { + class: classNames.detachedFormContainer, + children: [form, detachedCancelButton] + }); + detachedContainer.appendChild(detachedFormContainer); + root.appendChild(detachedSearchButton); + } else { + root.appendChild(form); + } + + return { + detachedContainer: detachedContainer, + detachedOverlay: detachedOverlay, + inputWrapper: inputWrapper, + input: input, + root: root, + form: form, + label: label, + submitButton: submitButton, + clearButton: clearButton, + loadingIndicator: loadingIndicator, + panel: panel + }; + } + + function createEffectWrapper() { + var effects = []; + var cleanups = []; + + function runEffect(fn) { + effects.push(fn); + var effectCleanup = fn(); + cleanups.push(effectCleanup); + } + + return { + runEffect: runEffect, + cleanupEffects: function cleanupEffects() { + var currentCleanups = cleanups; + cleanups = []; + currentCleanups.forEach(function (cleanup) { + cleanup(); + }); + }, + runEffects: function runEffects() { + var currentEffects = effects; + effects = []; + currentEffects.forEach(function (effect) { + runEffect(effect); + }); + } + }; + } + + function createReactiveWrapper() { + var reactives = []; + return { + reactive: function reactive(value) { + var current = value(); + var reactive = { + _fn: value, + _ref: { + current: current + }, + + get value() { + return this._ref.current; + }, + + set value(value) { + this._ref.current = value; + } + + }; + reactives.push(reactive); + return reactive; + }, + runReactives: function runReactives() { + reactives.forEach(function (value) { + value._ref.current = value._fn(); + }); + } + }; + } + + var n,l,u,t,r,o,e={},c=[],s=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function a(n,l){for(var u in l)n[u]=l[u];return n}function h(n){var l=n.parentNode;l&&l.removeChild(n);}function v(l,u,i){var t,r,o,f={};for(o in u)"key"==o?t=u[o]:"ref"==o?r=u[o]:f[o]=u[o];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),"function"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===f[o]&&(f[o]=l.defaultProps[o]);return y(l,f,t,r,null)}function y(n,i,t,r,o){var f={type:n,props:i,key:t,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++u:o};return null==o&&null!=l.vnode&&l.vnode(f),f}function d(n){return n.children}function _(n,l){this.props=n,this.context=l;}function k(n,l){if(null==l)return n.__?k(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l0?y(_.type,_.props,_.key,null,_.__v):_)){if(_.__=u,_.__b=u.__b+1,null===(p=w[h])||p&&_.key==p.key&&_.type===p.type)w[h]=void 0;else for(v=0;v 0 && arguments[0] !== undefined ? arguments[0] : []; + var value = initialValue; + return { + get: function get() { + return value; + }, + add: function add(part) { + var lastPart = value[value.length - 1]; + + if ((lastPart === null || lastPart === void 0 ? void 0 : lastPart.isHighlighted) === part.isHighlighted) { + value[value.length - 1] = { + value: lastPart.value + part.value, + isHighlighted: lastPart.isHighlighted + }; + } else { + value.push(part); + } + } + }; + } + + function parseAttribute(_ref) { + var highlightedValue = _ref.highlightedValue; + var preTagParts = highlightedValue.split(HIGHLIGHT_PRE_TAG); + var firstValue = preTagParts.shift(); + var parts = createAttributeSet(firstValue ? [{ + value: firstValue, + isHighlighted: false + }] : []); + preTagParts.forEach(function (part) { + var postTagParts = part.split(HIGHLIGHT_POST_TAG); + parts.add({ + value: postTagParts[0], + isHighlighted: true + }); + + if (postTagParts[1] !== '') { + parts.add({ + value: postTagParts[1], + isHighlighted: false + }); + } + }); + return parts.get(); + } + + function _toConsumableArray$2(arr) { + return _arrayWithoutHoles$2(arr) || _iterableToArray$2(arr) || _unsupportedIterableToArray$2(arr) || _nonIterableSpread$2(); + } + + function _nonIterableSpread$2() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + function _unsupportedIterableToArray$2(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray$2(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$2(o, minLen); + } + + function _iterableToArray$2(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); + } + + function _arrayWithoutHoles$2(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray$2(arr); + } + + function _arrayLikeToArray$2(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; + } + function parseAlgoliaHitHighlight(_ref) { + var hit = _ref.hit, + attribute = _ref.attribute; + var path = Array.isArray(attribute) ? attribute : [attribute]; + var highlightedValue = getAttributeValueByPath(hit, ['_highlightResult'].concat(_toConsumableArray$2(path), ['value'])); + + if (typeof highlightedValue !== 'string') { + "development" !== 'production' ? warn(false, "The attribute \"".concat(path.join('.'), "\" described by the path ").concat(JSON.stringify(path), " does not exist on the hit. Did you set it in `attributesToHighlight`?") + '\nSee https://www.algolia.com/doc/api-reference/api-parameters/attributesToHighlight/') : void 0 ; + highlightedValue = getAttributeValueByPath(hit, path) || ''; + } + + return parseAttribute({ + highlightedValue: highlightedValue + }); + } + + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + var hasAlphanumeric = new RegExp(/\w/i); + var regexEscapedHtml = /&(amp|quot|lt|gt|#39);/g; + var regexHasEscapedHtml = RegExp(regexEscapedHtml.source); + + function unescape(value) { + return value && regexHasEscapedHtml.test(value) ? value.replace(regexEscapedHtml, function (character) { + return htmlEscapes[character]; + }) : value; + } + + function isPartHighlighted(parts, i) { + var _parts, _parts2; + + var current = parts[i]; + var isNextHighlighted = ((_parts = parts[i + 1]) === null || _parts === void 0 ? void 0 : _parts.isHighlighted) || true; + var isPreviousHighlighted = ((_parts2 = parts[i - 1]) === null || _parts2 === void 0 ? void 0 : _parts2.isHighlighted) || true; + + if (!hasAlphanumeric.test(unescape(current.value)) && isPreviousHighlighted === isNextHighlighted) { + return isPreviousHighlighted; + } + + return current.isHighlighted; + } + + function ownKeys$2(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread$2(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { + _defineProperty$2(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _defineProperty$2(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; + } + function reverseHighlightedParts(parts) { + // We don't want to highlight the whole word when no parts match. + if (!parts.some(function (part) { + return part.isHighlighted; + })) { + return parts.map(function (part) { + return _objectSpread$2(_objectSpread$2({}, part), {}, { + isHighlighted: false + }); + }); + } + + return parts.map(function (part, i) { + return _objectSpread$2(_objectSpread$2({}, part), {}, { + isHighlighted: !isPartHighlighted(parts, i) + }); + }); + } + + function parseAlgoliaHitReverseHighlight(props) { + return reverseHighlightedParts(parseAlgoliaHitHighlight(props)); + } + + function _toConsumableArray$1(arr) { + return _arrayWithoutHoles$1(arr) || _iterableToArray$1(arr) || _unsupportedIterableToArray$1(arr) || _nonIterableSpread$1(); + } + + function _nonIterableSpread$1() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + function _unsupportedIterableToArray$1(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray$1(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$1(o, minLen); + } + + function _iterableToArray$1(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); + } + + function _arrayWithoutHoles$1(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray$1(arr); + } + + function _arrayLikeToArray$1(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; + } + function parseAlgoliaHitSnippet(_ref) { + var hit = _ref.hit, + attribute = _ref.attribute; + var path = Array.isArray(attribute) ? attribute : [attribute]; + var highlightedValue = getAttributeValueByPath(hit, ['_snippetResult'].concat(_toConsumableArray$1(path), ['value'])); + + if (typeof highlightedValue !== 'string') { + "development" !== 'production' ? warn(false, "The attribute \"".concat(path.join('.'), "\" described by the path ").concat(JSON.stringify(path), " does not exist on the hit. Did you set it in `attributesToSnippet`?") + '\nSee https://www.algolia.com/doc/api-reference/api-parameters/attributesToSnippet/') : void 0 ; + highlightedValue = getAttributeValueByPath(hit, path) || ''; + } + + return parseAttribute({ + highlightedValue: highlightedValue + }); + } + + function parseAlgoliaHitReverseSnippet(props) { + return reverseHighlightedParts(parseAlgoliaHitSnippet(props)); + } + + function ownKeys$1(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread$1(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { + _defineProperty$1(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _defineProperty$1(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; + } + + function createRequester(fetcher, requesterId) { + function execute(fetcherParams) { + return fetcher({ + searchClient: fetcherParams.searchClient, + queries: fetcherParams.requests.map(function (x) { + return x.query; + }) + }).then(function (responses) { + return responses.map(function (response, index) { + var _fetcherParams$reques = fetcherParams.requests[index], + sourceId = _fetcherParams$reques.sourceId, + transformResponse = _fetcherParams$reques.transformResponse; + return { + items: response, + sourceId: sourceId, + transformResponse: transformResponse + }; + }); + }); + } + + return function createSpecifiedRequester(requesterParams) { + return function requester(requestParams) { + return _objectSpread$1(_objectSpread$1({ + requesterId: requesterId, + execute: execute + }, requesterParams), requestParams); + }; + }; + } + + var _excluded$2 = ["params"]; + + function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { + _defineProperty(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _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; + } + + function _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; + } + + function _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; + } + + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); + } + + function _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."); + } + + function _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); + } + + function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); + } + + function _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; + } + function fetchAlgoliaResults(_ref) { + var searchClient = _ref.searchClient, + queries = _ref.queries, + _ref$userAgents = _ref.userAgents, + userAgents = _ref$userAgents === void 0 ? [] : _ref$userAgents; + + if (typeof searchClient.addAlgoliaAgent === 'function') { + var algoliaAgents = [].concat(_toConsumableArray(userAgents$1), _toConsumableArray(userAgents)); + algoliaAgents.forEach(function (_ref2) { + var segment = _ref2.segment, + version = _ref2.version; + searchClient.addAlgoliaAgent(segment, version); + }); + } + + return searchClient.search(queries.map(function (searchParameters) { + var params = searchParameters.params, + headers = _objectWithoutProperties(searchParameters, _excluded$2); + + return _objectSpread(_objectSpread({}, headers), {}, { + params: _objectSpread({ + hitsPerPage: 5, + highlightPreTag: HIGHLIGHT_PRE_TAG, + highlightPostTag: HIGHLIGHT_POST_TAG + }, params) + }); + })).then(function (response) { + return response.results; + }); + } + + function createHighlightComponent(_ref) { + var createElement = _ref.createElement, + Fragment = _ref.Fragment; + + function Highlight(_ref2) { + var hit = _ref2.hit, + attribute = _ref2.attribute, + _ref2$tagName = _ref2.tagName, + tagName = _ref2$tagName === void 0 ? 'mark' : _ref2$tagName; + return createElement(Fragment, {}, parseAlgoliaHitHighlight({ + hit: hit, + attribute: attribute + }).map(function (x, index) { + return x.isHighlighted ? createElement(tagName, { + key: index + }, x.value) : x.value; + })); + } + + Highlight.__autocomplete_componentName = 'Highlight'; + return Highlight; + } + + function createReverseHighlightComponent(_ref) { + var createElement = _ref.createElement, + Fragment = _ref.Fragment; + + function ReverseHighlight(_ref2) { + var hit = _ref2.hit, + attribute = _ref2.attribute, + _ref2$tagName = _ref2.tagName, + tagName = _ref2$tagName === void 0 ? 'mark' : _ref2$tagName; + return createElement(Fragment, {}, parseAlgoliaHitReverseHighlight({ + hit: hit, + attribute: attribute + }).map(function (x, index) { + return x.isHighlighted ? createElement(tagName, { + key: index + }, x.value) : x.value; + })); + } + + ReverseHighlight.__autocomplete_componentName = 'ReverseHighlight'; + return ReverseHighlight; + } + + function createReverseSnippetComponent(_ref) { + var createElement = _ref.createElement, + Fragment = _ref.Fragment; + + function ReverseSnippet(_ref2) { + var hit = _ref2.hit, + attribute = _ref2.attribute, + _ref2$tagName = _ref2.tagName, + tagName = _ref2$tagName === void 0 ? 'mark' : _ref2$tagName; + return createElement(Fragment, {}, parseAlgoliaHitReverseSnippet({ + hit: hit, + attribute: attribute + }).map(function (x, index) { + return x.isHighlighted ? createElement(tagName, { + key: index + }, x.value) : x.value; + })); + } + + ReverseSnippet.__autocomplete_componentName = 'ReverseSnippet'; + return ReverseSnippet; + } + + function createSnippetComponent(_ref) { + var createElement = _ref.createElement, + Fragment = _ref.Fragment; + + function Snippet(_ref2) { + var hit = _ref2.hit, + attribute = _ref2.attribute, + _ref2$tagName = _ref2.tagName, + tagName = _ref2$tagName === void 0 ? 'mark' : _ref2$tagName; + return createElement(Fragment, {}, parseAlgoliaHitSnippet({ + hit: hit, + attribute: attribute + }).map(function (x, index) { + return x.isHighlighted ? createElement(tagName, { + key: index + }, x.value) : x.value; + })); + } + + Snippet.__autocomplete_componentName = 'Snippet'; + return Snippet; + } + + var _excluded$1 = ["classNames", "container", "getEnvironmentProps", "getFormProps", "getInputProps", "getItemProps", "getLabelProps", "getListProps", "getPanelProps", "getRootProps", "panelContainer", "panelPlacement", "render", "renderNoResults", "renderer", "detachedMediaQuery", "components", "translations"]; + var defaultClassNames = { + clearButton: 'aa-ClearButton', + detachedCancelButton: 'aa-DetachedCancelButton', + detachedContainer: 'aa-DetachedContainer', + detachedFormContainer: 'aa-DetachedFormContainer', + detachedOverlay: 'aa-DetachedOverlay', + detachedSearchButton: 'aa-DetachedSearchButton', + detachedSearchButtonIcon: 'aa-DetachedSearchButtonIcon', + detachedSearchButtonPlaceholder: 'aa-DetachedSearchButtonPlaceholder', + form: 'aa-Form', + input: 'aa-Input', + inputWrapper: 'aa-InputWrapper', + inputWrapperPrefix: 'aa-InputWrapperPrefix', + inputWrapperSuffix: 'aa-InputWrapperSuffix', + item: 'aa-Item', + label: 'aa-Label', + list: 'aa-List', + loadingIndicator: 'aa-LoadingIndicator', + panel: 'aa-Panel', + panelLayout: 'aa-PanelLayout aa-Panel--scrollable', + root: 'aa-Autocomplete', + source: 'aa-Source', + sourceFooter: 'aa-SourceFooter', + sourceHeader: 'aa-SourceHeader', + sourceNoResults: 'aa-SourceNoResults', + submitButton: 'aa-SubmitButton' + }; + + var defaultRender = function defaultRender(_ref, root) { + var children = _ref.children, + render = _ref.render; + render(children, root); + }; + + var defaultRenderer = { + createElement: v, + Fragment: d, + render: S + }; + function getDefaultOptions(options) { + var _core$id; + + var classNames = options.classNames, + container = options.container, + getEnvironmentProps = options.getEnvironmentProps, + getFormProps = options.getFormProps, + getInputProps = options.getInputProps, + getItemProps = options.getItemProps, + getLabelProps = options.getLabelProps, + getListProps = options.getListProps, + getPanelProps = options.getPanelProps, + getRootProps = options.getRootProps, + panelContainer = options.panelContainer, + panelPlacement = options.panelPlacement, + render = options.render, + renderNoResults = options.renderNoResults, + renderer = options.renderer, + detachedMediaQuery = options.detachedMediaQuery, + components = options.components, + translations = options.translations, + core = _objectWithoutProperties$4(options, _excluded$1); + /* eslint-disable no-restricted-globals */ + + + var environment = typeof window !== 'undefined' ? window : {}; + /* eslint-enable no-restricted-globals */ + + var containerElement = getHTMLElement(environment, container); + invariant(containerElement.tagName !== 'INPUT', 'The `container` option does not support `input` elements. You need to change the container to a `div`.'); + "development" !== 'production' ? warn(!(render && renderer && !(renderer !== null && renderer !== void 0 && renderer.render)), "You provided the `render` option but did not provide a `renderer.render`. Since v1.6.0, you can provide a `render` function directly in `renderer`." + "\nTo get rid of this warning, do any of the following depending on your use case." + "\n- If you are using the `render` option only to override Autocomplete's default `render` function, pass the `render` function into `renderer` and remove the `render` option." + '\n- If you are using the `render` option to customize the layout, pass your `render` function into `renderer` and use it from the provided parameters of the `render` option.' + '\n- If you are using the `render` option to work with React 18, pass an empty `render` function into `renderer`.' + '\nSee https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-render') : void 0; + "development" !== 'production' ? warn(!renderer || render || renderer.Fragment && renderer.createElement && renderer.render, "You provided an incomplete `renderer` (missing: ".concat([!(renderer !== null && renderer !== void 0 && renderer.createElement) && '`renderer.createElement`', !(renderer !== null && renderer !== void 0 && renderer.Fragment) && '`renderer.Fragment`', !(renderer !== null && renderer !== void 0 && renderer.render) && '`renderer.render`'].filter(Boolean).join(', '), "). This can cause rendering issues.") + '\nSee https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-renderer') : void 0; + + var defaultedRenderer = _objectSpread2(_objectSpread2({}, defaultRenderer), renderer); + + var defaultComponents = { + Highlight: createHighlightComponent(defaultedRenderer), + ReverseHighlight: createReverseHighlightComponent(defaultedRenderer), + ReverseSnippet: createReverseSnippetComponent(defaultedRenderer), + Snippet: createSnippetComponent(defaultedRenderer) + }; + var defaultTranslations = { + clearButtonTitle: 'Clear', + detachedCancelButtonText: 'Cancel', + submitButtonTitle: 'Submit' + }; + return { + renderer: { + classNames: mergeClassNames(defaultClassNames, classNames !== null && classNames !== void 0 ? classNames : {}), + container: containerElement, + getEnvironmentProps: getEnvironmentProps !== null && getEnvironmentProps !== void 0 ? getEnvironmentProps : function (_ref2) { + var props = _ref2.props; + return props; + }, + getFormProps: getFormProps !== null && getFormProps !== void 0 ? getFormProps : function (_ref3) { + var props = _ref3.props; + return props; + }, + getInputProps: getInputProps !== null && getInputProps !== void 0 ? getInputProps : function (_ref4) { + var props = _ref4.props; + return props; + }, + getItemProps: getItemProps !== null && getItemProps !== void 0 ? getItemProps : function (_ref5) { + var props = _ref5.props; + return props; + }, + getLabelProps: getLabelProps !== null && getLabelProps !== void 0 ? getLabelProps : function (_ref6) { + var props = _ref6.props; + return props; + }, + getListProps: getListProps !== null && getListProps !== void 0 ? getListProps : function (_ref7) { + var props = _ref7.props; + return props; + }, + getPanelProps: getPanelProps !== null && getPanelProps !== void 0 ? getPanelProps : function (_ref8) { + var props = _ref8.props; + return props; + }, + getRootProps: getRootProps !== null && getRootProps !== void 0 ? getRootProps : function (_ref9) { + var props = _ref9.props; + return props; + }, + panelContainer: panelContainer ? getHTMLElement(environment, panelContainer) : environment.document.body, + panelPlacement: panelPlacement !== null && panelPlacement !== void 0 ? panelPlacement : 'input-wrapper-width', + render: render !== null && render !== void 0 ? render : defaultRender, + renderNoResults: renderNoResults, + renderer: defaultedRenderer, + detachedMediaQuery: detachedMediaQuery !== null && detachedMediaQuery !== void 0 ? detachedMediaQuery : getComputedStyle(environment.document.documentElement).getPropertyValue('--aa-detached-media-query'), + components: _objectSpread2(_objectSpread2({}, defaultComponents), components), + translations: _objectSpread2(_objectSpread2({}, defaultTranslations), translations) + }, + core: _objectSpread2(_objectSpread2({}, core), {}, { + id: (_core$id = core.id) !== null && _core$id !== void 0 ? _core$id : generateAutocompleteId(), + environment: environment + }) + }; + } + + function getPanelPlacementStyle(_ref) { + var panelPlacement = _ref.panelPlacement, + container = _ref.container, + form = _ref.form, + environment = _ref.environment; + var containerRect = container.getBoundingClientRect(); // Some browsers have specificities to retrieve the document scroll position. + // See https://stackoverflow.com/a/28633515/9940315 + + var scrollTop = environment.pageYOffset || environment.document.documentElement.scrollTop || environment.document.body.scrollTop || 0; + var top = scrollTop + containerRect.top + containerRect.height; + + switch (panelPlacement) { + case 'start': + { + return { + top: top, + left: containerRect.left + }; + } + + case 'end': + { + return { + top: top, + right: environment.document.documentElement.clientWidth - (containerRect.left + containerRect.width) + }; + } + + case 'full-width': + { + return { + top: top, + left: 0, + right: 0, + width: 'unset', + maxWidth: 'unset' + }; + } + + case 'input-wrapper-width': + { + var formRect = form.getBoundingClientRect(); + return { + top: top, + left: formRect.left, + right: environment.document.documentElement.clientWidth - (formRect.left + formRect.width), + width: 'unset', + maxWidth: 'unset' + }; + } + + default: + { + throw new Error("[Autocomplete] The `panelPlacement` value ".concat(JSON.stringify(panelPlacement), " is not valid.")); + } + } + } + + function renderSearchBox(_ref) { + var autocomplete = _ref.autocomplete, + autocompleteScopeApi = _ref.autocompleteScopeApi, + dom = _ref.dom, + propGetters = _ref.propGetters, + state = _ref.state; + setPropertiesWithoutEvents(dom.root, propGetters.getRootProps(_objectSpread2({ + state: state, + props: autocomplete.getRootProps({}) + }, autocompleteScopeApi))); + setPropertiesWithoutEvents(dom.input, propGetters.getInputProps(_objectSpread2({ + state: state, + props: autocomplete.getInputProps({ + inputElement: dom.input + }), + inputElement: dom.input + }, autocompleteScopeApi))); + setProperties(dom.label, { + hidden: state.status === 'stalled' + }); + setProperties(dom.loadingIndicator, { + hidden: state.status !== 'stalled' + }); + setProperties(dom.clearButton, { + hidden: !state.query + }); + } + function renderPanel(render, _ref2) { + var autocomplete = _ref2.autocomplete, + autocompleteScopeApi = _ref2.autocompleteScopeApi, + classNames = _ref2.classNames, + html = _ref2.html, + dom = _ref2.dom, + panelContainer = _ref2.panelContainer, + propGetters = _ref2.propGetters, + state = _ref2.state, + components = _ref2.components, + renderer = _ref2.renderer; + + if (!state.isOpen) { + if (panelContainer.contains(dom.panel)) { + panelContainer.removeChild(dom.panel); + } + + return; + } // We add the panel element to the DOM when it's not yet appended and that the + // items are fetched. + + + if (!panelContainer.contains(dom.panel) && state.status !== 'loading') { + panelContainer.appendChild(dom.panel); + } + + dom.panel.classList.toggle('aa-Panel--stalled', state.status === 'stalled'); + var sections = state.collections.filter(function (_ref3) { + var source = _ref3.source, + items = _ref3.items; + return source.templates.noResults || items.length > 0; + }).map(function (_ref4, sourceIndex) { + var source = _ref4.source, + items = _ref4.items; + return renderer.createElement("section", { + key: sourceIndex, + className: classNames.source, + "data-autocomplete-source-id": source.sourceId + }, source.templates.header && renderer.createElement("div", { + className: classNames.sourceHeader + }, source.templates.header({ + components: components, + createElement: renderer.createElement, + Fragment: renderer.Fragment, + items: items, + source: source, + state: state, + html: html + })), source.templates.noResults && items.length === 0 ? renderer.createElement("div", { + className: classNames.sourceNoResults + }, source.templates.noResults({ + components: components, + createElement: renderer.createElement, + Fragment: renderer.Fragment, + source: source, + state: state, + html: html + })) : renderer.createElement("ul", _extends({ + className: classNames.list + }, propGetters.getListProps(_objectSpread2({ + state: state, + props: autocomplete.getListProps({}) + }, autocompleteScopeApi))), items.map(function (item) { + var itemProps = autocomplete.getItemProps({ + item: item, + source: source + }); + return renderer.createElement("li", _extends({ + key: itemProps.id, + className: classNames.item + }, propGetters.getItemProps(_objectSpread2({ + state: state, + props: itemProps + }, autocompleteScopeApi))), source.templates.item({ + components: components, + createElement: renderer.createElement, + Fragment: renderer.Fragment, + item: item, + state: state, + html: html + })); + })), source.templates.footer && renderer.createElement("div", { + className: classNames.sourceFooter + }, source.templates.footer({ + components: components, + createElement: renderer.createElement, + Fragment: renderer.Fragment, + items: items, + source: source, + state: state, + html: html + }))); + }); + var children = renderer.createElement(renderer.Fragment, null, renderer.createElement("div", { + className: classNames.panelLayout + }, sections), renderer.createElement("div", { + className: "aa-GradientBottom" + })); + var elements = sections.reduce(function (acc, current) { + acc[current.props['data-autocomplete-source-id']] = current; + return acc; + }, {}); + render(_objectSpread2(_objectSpread2({ + children: children, + state: state, + sections: sections, + elements: elements + }, renderer), {}, { + components: components, + html: html + }, autocompleteScopeApi), dom.panel); + } + + var userAgents = [{ + segment: 'autocomplete-js', + version: version + }]; + + var _excluded = ["components"]; + function autocomplete(options) { + var _createEffectWrapper = createEffectWrapper(), + runEffect = _createEffectWrapper.runEffect, + cleanupEffects = _createEffectWrapper.cleanupEffects, + runEffects = _createEffectWrapper.runEffects; + + var _createReactiveWrappe = createReactiveWrapper(), + reactive = _createReactiveWrappe.reactive, + runReactives = _createReactiveWrappe.runReactives; + + var hasNoResultsSourceTemplateRef = createRef(false); + var optionsRef = createRef(options); + var onStateChangeRef = createRef(undefined); + var props = reactive(function () { + return getDefaultOptions(optionsRef.current); + }); + var isDetached = reactive(function () { + return props.value.core.environment.matchMedia(props.value.renderer.detachedMediaQuery).matches; + }); + var autocomplete = reactive(function () { + return createAutocomplete(_objectSpread2(_objectSpread2({}, props.value.core), {}, { + onStateChange: function onStateChange(params) { + var _onStateChangeRef$cur, _props$value$core$onS, _props$value$core; + + hasNoResultsSourceTemplateRef.current = params.state.collections.some(function (collection) { + return collection.source.templates.noResults; + }); + (_onStateChangeRef$cur = onStateChangeRef.current) === null || _onStateChangeRef$cur === void 0 ? void 0 : _onStateChangeRef$cur.call(onStateChangeRef, params); + (_props$value$core$onS = (_props$value$core = props.value.core).onStateChange) === null || _props$value$core$onS === void 0 ? void 0 : _props$value$core$onS.call(_props$value$core, params); + }, + shouldPanelOpen: optionsRef.current.shouldPanelOpen || function (_ref) { + var state = _ref.state; + + if (isDetached.value) { + return true; + } + + var hasItems = getItemsCount(state) > 0; + + if (!props.value.core.openOnFocus && !state.query) { + return hasItems; + } + + var hasNoResultsTemplate = Boolean(hasNoResultsSourceTemplateRef.current || props.value.renderer.renderNoResults); + return !hasItems && hasNoResultsTemplate || hasItems; + }, + __autocomplete_metadata: { + userAgents: userAgents, + options: options + } + })); + }); + var lastStateRef = createRef(_objectSpread2({ + collections: [], + completion: null, + context: {}, + isOpen: false, + query: '', + activeItemId: null, + status: 'idle' + }, props.value.core.initialState)); + var propGetters = { + getEnvironmentProps: props.value.renderer.getEnvironmentProps, + getFormProps: props.value.renderer.getFormProps, + getInputProps: props.value.renderer.getInputProps, + getItemProps: props.value.renderer.getItemProps, + getLabelProps: props.value.renderer.getLabelProps, + getListProps: props.value.renderer.getListProps, + getPanelProps: props.value.renderer.getPanelProps, + getRootProps: props.value.renderer.getRootProps + }; + var autocompleteScopeApi = { + setActiveItemId: autocomplete.value.setActiveItemId, + setQuery: autocomplete.value.setQuery, + setCollections: autocomplete.value.setCollections, + setIsOpen: autocomplete.value.setIsOpen, + setStatus: autocomplete.value.setStatus, + setContext: autocomplete.value.setContext, + refresh: autocomplete.value.refresh + }; + var html = reactive(function () { + return htm.bind(props.value.renderer.renderer.createElement); + }); + var dom = reactive(function () { + return createAutocompleteDom({ + autocomplete: autocomplete.value, + autocompleteScopeApi: autocompleteScopeApi, + classNames: props.value.renderer.classNames, + environment: props.value.core.environment, + isDetached: isDetached.value, + placeholder: props.value.core.placeholder, + propGetters: propGetters, + setIsModalOpen: setIsModalOpen, + state: lastStateRef.current, + translations: props.value.renderer.translations + }); + }); + + function setPanelPosition() { + setProperties(dom.value.panel, { + style: isDetached.value ? {} : getPanelPlacementStyle({ + panelPlacement: props.value.renderer.panelPlacement, + container: dom.value.root, + form: dom.value.form, + environment: props.value.core.environment + }) + }); + } + + function scheduleRender(state) { + lastStateRef.current = state; + var renderProps = { + autocomplete: autocomplete.value, + autocompleteScopeApi: autocompleteScopeApi, + classNames: props.value.renderer.classNames, + components: props.value.renderer.components, + container: props.value.renderer.container, + html: html.value, + dom: dom.value, + panelContainer: isDetached.value ? dom.value.detachedContainer : props.value.renderer.panelContainer, + propGetters: propGetters, + state: lastStateRef.current, + renderer: props.value.renderer.renderer + }; + var render = !getItemsCount(state) && !hasNoResultsSourceTemplateRef.current && props.value.renderer.renderNoResults || props.value.renderer.render; + renderSearchBox(renderProps); + renderPanel(render, renderProps); + } + + runEffect(function () { + var environmentProps = autocomplete.value.getEnvironmentProps({ + formElement: dom.value.form, + panelElement: dom.value.panel, + inputElement: dom.value.input + }); + setProperties(props.value.core.environment, environmentProps); + return function () { + setProperties(props.value.core.environment, Object.keys(environmentProps).reduce(function (acc, key) { + return _objectSpread2(_objectSpread2({}, acc), {}, _defineProperty$g({}, key, undefined)); + }, {})); + }; + }); + runEffect(function () { + var panelContainerElement = isDetached.value ? props.value.core.environment.document.body : props.value.renderer.panelContainer; + var panelElement = isDetached.value ? dom.value.detachedOverlay : dom.value.panel; + + if (isDetached.value && lastStateRef.current.isOpen) { + setIsModalOpen(true); + } + + scheduleRender(lastStateRef.current); + return function () { + if (panelContainerElement.contains(panelElement)) { + panelContainerElement.removeChild(panelElement); + } + }; + }); + runEffect(function () { + var containerElement = props.value.renderer.container; + containerElement.appendChild(dom.value.root); + return function () { + containerElement.removeChild(dom.value.root); + }; + }); + runEffect(function () { + var debouncedRender = debounce(function (_ref2) { + var state = _ref2.state; + scheduleRender(state); + }, 0); + + onStateChangeRef.current = function (_ref3) { + var state = _ref3.state, + prevState = _ref3.prevState; + + if (isDetached.value && prevState.isOpen !== state.isOpen) { + setIsModalOpen(state.isOpen); + } // The outer DOM might have changed since the last time the panel was + // positioned. The layout might have shifted vertically for instance. + // It's therefore safer to re-calculate the panel position before opening + // it again. + + + if (!isDetached.value && state.isOpen && !prevState.isOpen) { + setPanelPosition(); + } // We scroll to the top of the panel whenever the query changes (i.e. new + // results come in) so that users don't have to. + + + if (state.query !== prevState.query) { + var scrollablePanels = props.value.core.environment.document.querySelectorAll('.aa-Panel--scrollable'); + scrollablePanels.forEach(function (scrollablePanel) { + if (scrollablePanel.scrollTop !== 0) { + scrollablePanel.scrollTop = 0; + } + }); + } + + debouncedRender({ + state: state + }); + }; + + return function () { + onStateChangeRef.current = undefined; + }; + }); + runEffect(function () { + var onResize = debounce(function () { + var previousIsDetached = isDetached.value; + isDetached.value = props.value.core.environment.matchMedia(props.value.renderer.detachedMediaQuery).matches; + + if (previousIsDetached !== isDetached.value) { + update({}); + } else { + requestAnimationFrame(setPanelPosition); + } + }, 20); + props.value.core.environment.addEventListener('resize', onResize); + return function () { + props.value.core.environment.removeEventListener('resize', onResize); + }; + }); + runEffect(function () { + if (!isDetached.value) { + return function () {}; + } + + function toggleModalClassname(isActive) { + dom.value.detachedContainer.classList.toggle('aa-DetachedContainer--modal', isActive); + } + + function onChange(event) { + toggleModalClassname(event.matches); + } + + var isModalDetachedMql = props.value.core.environment.matchMedia(getComputedStyle(props.value.core.environment.document.documentElement).getPropertyValue('--aa-detached-modal-media-query')); + toggleModalClassname(isModalDetachedMql.matches); // Prior to Safari 14, `MediaQueryList` isn't based on `EventTarget`, + // so we must use `addListener` and `removeListener` to observe media query lists. + // See https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList/addListener + + var hasModernEventListener = Boolean(isModalDetachedMql.addEventListener); + hasModernEventListener ? isModalDetachedMql.addEventListener('change', onChange) : isModalDetachedMql.addListener(onChange); + return function () { + hasModernEventListener ? isModalDetachedMql.removeEventListener('change', onChange) : isModalDetachedMql.removeListener(onChange); + }; + }); + runEffect(function () { + requestAnimationFrame(setPanelPosition); + return function () {}; + }); + + function destroy() { + cleanupEffects(); + } + + function update() { + var updatedOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + cleanupEffects(); + + var _props$value$renderer = props.value.renderer, + components = _props$value$renderer.components, + rendererProps = _objectWithoutProperties$4(_props$value$renderer, _excluded); + + optionsRef.current = mergeDeep(rendererProps, props.value.core, { + // We need to filter out default components so they can be replaced with + // a new `renderer`, without getting rid of user components. + // @MAJOR Deal with registering components with the same name as the + // default ones. If we disallow overriding default components, we'd just + // need to pass all `components` here. + components: pickBy(components, function (_ref4) { + var value = _ref4.value; + return !value.hasOwnProperty('__autocomplete_componentName'); + }), + initialState: lastStateRef.current + }, updatedOptions); + runReactives(); + runEffects(); + autocomplete.value.refresh().then(function () { + scheduleRender(lastStateRef.current); + }); + } + + function setIsModalOpen(value) { + requestAnimationFrame(function () { + var prevValue = props.value.core.environment.document.body.contains(dom.value.detachedOverlay); + + if (value === prevValue) { + return; + } + + if (value) { + props.value.core.environment.document.body.appendChild(dom.value.detachedOverlay); + props.value.core.environment.document.body.classList.add('aa-Detached'); + dom.value.input.focus(); + } else { + props.value.core.environment.document.body.removeChild(dom.value.detachedOverlay); + props.value.core.environment.document.body.classList.remove('aa-Detached'); + autocomplete.value.setQuery(''); + autocomplete.value.refresh(); + } + }); + } + + return _objectSpread2(_objectSpread2({}, autocompleteScopeApi), {}, { + update: update, + destroy: destroy + }); + } + + var createAlgoliaRequester = createRequester(function (params) { + return fetchAlgoliaResults(_objectSpread2(_objectSpread2({}, params), {}, { + userAgents: userAgents + })); + }, 'algolia'); + + /** + * Retrieves Algolia facet hits from multiple indices. + */ + + function getAlgoliaFacets(requestParams) { + var requester = createAlgoliaRequester({ + transformResponse: function transformResponse(response) { + return response.facetHits; + } + }); + var queries = requestParams.queries.map(function (query) { + return _objectSpread2(_objectSpread2({}, query), {}, { + type: 'facet' + }); + }); + return requester(_objectSpread2(_objectSpread2({}, requestParams), {}, { + queries: queries + })); + } + + /** + * Retrieves Algolia results from multiple indices. + */ + + var getAlgoliaResults = createAlgoliaRequester({ + transformResponse: function transformResponse(response) { + return response.hits; + } + }); + + exports.autocomplete = autocomplete; + exports.getAlgoliaFacets = getAlgoliaFacets; + exports.getAlgoliaResults = getAlgoliaResults; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +//# sourceMappingURL=index.development.js.map diff --git a/assets/autocomplete.js/dist/umd/index.development.js.map b/assets/autocomplete.js/dist/umd/index.development.js.map new file mode 100644 index 00000000..100982a0 --- /dev/null +++ b/assets/autocomplete.js/dist/umd/index.development.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.development.js","sources":["../../../autocomplete-shared/dist/esm/createRef.js","../../../autocomplete-shared/dist/esm/debounce.js","../../../autocomplete-shared/dist/esm/decycle.js","../../../autocomplete-shared/dist/esm/flatten.js","../../../autocomplete-shared/dist/esm/generateAutocompleteId.js","../../../autocomplete-shared/dist/esm/getAttributeValueByPath.js","../../../autocomplete-shared/dist/esm/getItemsCount.js","../../../autocomplete-shared/dist/esm/invariant.js","../../../autocomplete-shared/dist/esm/noop.js","../../../autocomplete-shared/dist/esm/version.js","../../../autocomplete-shared/dist/esm/userAgents.js","../../../autocomplete-shared/dist/esm/warn.js","../../../autocomplete-core/dist/esm/checkOptions.js","../../../autocomplete-core/dist/esm/utils/createCancelablePromise.js","../../../autocomplete-core/dist/esm/utils/createCancelablePromiseList.js","../../../autocomplete-core/dist/esm/utils/createConcurrentSafePromise.js","../../../autocomplete-core/dist/esm/utils/getNextActiveItemId.js","../../../autocomplete-core/dist/esm/utils/getNormalizedSources.js","../../../autocomplete-core/dist/esm/utils/getActiveItem.js","../../../autocomplete-core/dist/esm/utils/isOrContainsNode.js","../../../autocomplete-core/dist/esm/utils/isSamsung.js","../../../autocomplete-core/dist/esm/utils/mapToAlgoliaResponse.js","../../../autocomplete-core/dist/esm/createStore.js","../../../autocomplete-core/dist/esm/getAutocompleteSetters.js","../../../autocomplete-core/dist/esm/getDefaultProps.js","../../../autocomplete-core/dist/esm/reshape.js","../../../autocomplete-core/dist/esm/resolve.js","../../../autocomplete-core/dist/esm/onInput.js","../../../autocomplete-core/dist/esm/onKeyDown.js","../../../autocomplete-core/dist/esm/getPropGetters.js","../../../autocomplete-core/dist/esm/metadata.js","../../../autocomplete-core/dist/esm/getCompletion.js","../../../autocomplete-core/dist/esm/stateReducer.js","../../../autocomplete-core/dist/esm/createAutocomplete.js","../../../../node_modules/htm/dist/htm.mjs","../../src/elements/ClearIcon.ts","../../src/utils/getHTMLElement.ts","../../src/utils/mergeClassNames.ts","../../src/utils/mergeDeep.ts","../../src/utils/pickBy.ts","../../src/utils/setProperties.ts","../../src/getCreateDomElement.ts","../../src/elements/Input.ts","../../src/elements/LoadingIcon.ts","../../src/elements/SearchIcon.ts","../../src/createAutocompleteDom.ts","../../src/createEffectWrapper.ts","../../src/createReactiveWrapper.ts","../../node_modules/preact/dist/preact.mjs","../../../autocomplete-preset-algolia/dist/esm/constants/index.js","../../../autocomplete-preset-algolia/dist/esm/highlight/parseAttribute.js","../../../autocomplete-preset-algolia/dist/esm/highlight/parseAlgoliaHitHighlight.js","../../../autocomplete-preset-algolia/dist/esm/highlight/isPartHighlighted.js","../../../autocomplete-preset-algolia/dist/esm/highlight/reverseHighlightedParts.js","../../../autocomplete-preset-algolia/dist/esm/highlight/parseAlgoliaHitReverseHighlight.js","../../../autocomplete-preset-algolia/dist/esm/highlight/parseAlgoliaHitSnippet.js","../../../autocomplete-preset-algolia/dist/esm/highlight/parseAlgoliaHitReverseSnippet.js","../../../autocomplete-preset-algolia/dist/esm/requester/createRequester.js","../../../autocomplete-preset-algolia/dist/esm/search/fetchAlgoliaResults.js","../../src/components/Highlight.ts","../../src/components/ReverseHighlight.ts","../../src/components/ReverseSnippet.ts","../../src/components/Snippet.ts","../../src/getDefaultOptions.ts","../../src/getPanelPlacementStyle.ts","../../src/render.tsx","../../src/userAgents.ts","../../src/autocomplete.ts","../../src/requesters/createAlgoliaRequester.ts","../../src/requesters/getAlgoliaFacets.ts","../../src/requesters/getAlgoliaResults.ts"],"sourcesContent":["export function createRef(initialValue) {\n return {\n current: initialValue\n };\n}","export function debounce(fn, time) {\n var timerId = undefined;\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (timerId) {\n clearTimeout(timerId);\n }\n\n timerId = setTimeout(function () {\n return fn.apply(void 0, args);\n }, time);\n };\n}","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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 _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 _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/**\n * Decycles objects with circular references.\n * This is used to print cyclic structures in development environment only.\n */\nexport function decycle(obj) {\n var seen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Set();\n\n if (!(process.env.NODE_ENV !== 'production') || !obj || _typeof(obj) !== 'object') {\n return obj;\n }\n\n if (seen.has(obj)) {\n return '[Circular]';\n }\n\n var newSeen = seen.add(obj);\n\n if (Array.isArray(obj)) {\n return obj.map(function (x) {\n return decycle(x, newSeen);\n });\n }\n\n return Object.fromEntries(Object.entries(obj).map(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n return [key, decycle(value, newSeen)];\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}","export function getAttributeValueByPath(record, path) {\n return path.reduce(function (current, key) {\n return current && current[key];\n }, record);\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(typeof message === 'function' ? message() : message));\n }\n}","export var noop = function noop() {};","export var version = '1.7.3';","import { version } from './version';\nexport var userAgents = [{\n segment: 'autocomplete-core',\n version: version\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 createInternalCancelablePromise(promise, initialState) {\n var state = initialState;\n return {\n then: function then(onfulfilled, onrejected) {\n return createInternalCancelablePromise(promise.then(createCallback(onfulfilled, state, promise), createCallback(onrejected, state, promise)), state);\n },\n catch: function _catch(onrejected) {\n return createInternalCancelablePromise(promise.catch(createCallback(onrejected, state, promise)), state);\n },\n finally: function _finally(onfinally) {\n if (onfinally) {\n state.onCancelList.push(onfinally);\n }\n\n return createInternalCancelablePromise(promise.finally(createCallback(onfinally && function () {\n state.onCancelList = [];\n return onfinally();\n }, state, promise)), state);\n },\n cancel: function cancel() {\n state.isCanceled = true;\n var callbacks = state.onCancelList;\n state.onCancelList = [];\n callbacks.forEach(function (callback) {\n callback();\n });\n },\n isCanceled: function isCanceled() {\n return state.isCanceled === true;\n }\n };\n}\n\nexport function createCancelablePromise(executor) {\n return createInternalCancelablePromise(new Promise(function (resolve, reject) {\n return executor(resolve, reject);\n }), {\n isCanceled: false,\n onCancelList: []\n });\n}\n\ncreateCancelablePromise.resolve = function (value) {\n return cancelable(Promise.resolve(value));\n};\n\ncreateCancelablePromise.reject = function (reason) {\n return cancelable(Promise.reject(reason));\n};\n\nexport function cancelable(promise) {\n return createInternalCancelablePromise(promise, {\n isCanceled: false,\n onCancelList: []\n });\n}\n\nfunction createCallback(onResult, state, fallback) {\n if (!onResult) {\n return fallback;\n }\n\n return function callback(arg) {\n if (state.isCanceled) {\n return arg;\n }\n\n return onResult(arg);\n };\n}","export function createCancelablePromiseList() {\n var list = [];\n return {\n add: function add(cancelablePromise) {\n list.push(cancelablePromise);\n return cancelablePromise.finally(function () {\n list = list.filter(function (item) {\n return item !== cancelablePromise;\n });\n });\n },\n cancelAll: function cancelAll() {\n list.forEach(function (promise) {\n return promise.cancel();\n });\n },\n isEmpty: function isEmpty() {\n return list.length === 0;\n }\n };\n}","/**\n * Creates a runner that executes promises in a concurrent-safe way.\n *\n * This is useful to prevent older promises to resolve after a newer promise,\n * otherwise resulting in stale resolved values.\n */\nexport function createConcurrentSafePromise() {\n var basePromiseId = -1;\n var latestResolvedId = -1;\n var latestResolvedValue = undefined;\n return function runConcurrentSafePromise(promise) {\n basePromiseId++;\n var currentPromiseId = basePromiseId;\n return Promise.resolve(promise).then(function (x) {\n // The promise might take too long to resolve and get outdated. This would\n // result in resolving stale values.\n // When this happens, we ignore the promise value and return the one\n // coming from the latest resolved value.\n //\n // +----------------------------------+\n // | 100ms |\n // | run(1) +---> R1 |\n // | 300ms |\n // | run(2) +-------------> R2 (SKIP) |\n // | 200ms |\n // | run(3) +--------> R3 |\n // +----------------------------------+\n if (latestResolvedValue && currentPromiseId < latestResolvedId) {\n return latestResolvedValue;\n }\n\n latestResolvedId = currentPromiseId;\n latestResolvedValue = x;\n return x;\n });\n };\n}","/**\n * Returns the next active item ID from the current state.\n *\n * We allow circular keyboard navigation from the base index.\n * The base index can either be `null` (nothing is highlighted) or `0`\n * (the first item is highlighted).\n * The base index is allowed to get assigned `null` only if\n * `props.defaultActiveItemId` is `null`. This pattern allows to \"stop\"\n * by the actual query before navigating to other suggestions as seen on\n * Google or Amazon.\n *\n * @param moveAmount The offset to increment (or decrement) the last index\n * @param baseIndex The current index to compute the next index from\n * @param itemCount The number of items\n * @param defaultActiveItemId The default active index to fallback to\n */\nexport function getNextActiveItemId(moveAmount, baseIndex, itemCount, defaultActiveItemId) {\n if (!itemCount) {\n return null;\n }\n\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}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport { invariant, decycle, noop } from '@algolia/autocomplete-shared';\nexport function getNormalizedSources(getSources, params) {\n var seenSourceIds = [];\n return Promise.resolve(getSources(params)).then(function (sources) {\n invariant(Array.isArray(sources), function () {\n return \"The `getSources` function must return an array of sources but returned type \".concat(JSON.stringify(_typeof(sources)), \":\\n\\n\").concat(JSON.stringify(decycle(sources), null, 2));\n });\n return Promise.all(sources // 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 if (seenSourceIds.includes(source.sourceId)) {\n throw new Error(\"[Autocomplete] The `sourceId` \".concat(JSON.stringify(source.sourceId), \" is not unique.\"));\n }\n\n seenSourceIds.push(source.sourceId);\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}","var regex = /((gt|sm)-|galaxy nexus)|samsung[- ]/i;\nexport function isSamsung(userAgent) {\n return Boolean(userAgent && userAgent.match(regex));\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 mapToAlgoliaResponse(rawResults) {\n var results = rawResults.map(function (result) {\n var _hits;\n\n return _objectSpread(_objectSpread({}, result), {}, {\n hits: (_hits = result.hits) === null || _hits === void 0 ? void 0 : _hits.map(function (hit) {\n // Bring support for the Insights plugin.\n return _objectSpread(_objectSpread({}, hit), {}, {\n __autocomplete_indexName: result.index,\n __autocomplete_queryID: result.queryID\n });\n })\n });\n });\n return {\n results: results,\n hits: results.map(function (result) {\n return result.hits;\n }).filter(Boolean),\n facetHits: results.map(function (result) {\n var _facetHits;\n\n return (_facetHits = result.facetHits) === null || _facetHits === void 0 ? void 0 : _facetHits.map(function (facetHit) {\n // Bring support for the highlighting components.\n return {\n label: facetHit.value,\n count: facetHit.count,\n _highlightResult: {\n label: {\n value: facetHit.highlighted\n }\n }\n };\n });\n }).filter(Boolean)\n };\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 { createCancelablePromiseList } from './utils';\nexport function createStore(reducer, props, onStoreStateChange) {\n var state = props.initialState;\n return {\n getState: function getState() {\n return state;\n },\n dispatch: function dispatch(action, payload) {\n var prevState = _objectSpread({}, state);\n\n state = reducer(state, {\n type: action,\n props: props,\n payload: payload\n });\n onStoreStateChange({\n state: state,\n prevState: prevState\n });\n },\n pendingRequests: createCancelablePromiseList()\n };\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 '@algolia/autocomplete-shared';\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 `getAlgoliaResults`\n // from the source itself.\n items: flatten(collection.items).map(function (item) {\n return _objectSpread(_objectSpread({}, item), {}, {\n __autocomplete_id: baseItemId++\n });\n })\n });\n });\n store.dispatch('setCollections', value);\n };\n\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\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) 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); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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, generateAutocompleteId, flatten } from '@algolia/autocomplete-shared';\nimport { getNormalizedSources } from './utils';\nexport function getDefaultProps(props, pluginSubscribers) {\n var _props$id;\n\n /* eslint-disable no-restricted-globals */\n var environment = typeof window !== 'undefined' ? window : {};\n /* eslint-enable no-restricted-globals */\n\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 reshape: function reshape(_ref2) {\n var sources = _ref2.sources;\n return sources;\n }\n }, props), {}, {\n // Since `generateAutocompleteId` triggers a side effect (it increments\n // an internal counter), we don't want to execute it if unnecessary.\n id: (_props$id = props.id) !== null && _props$id !== void 0 ? _props$id : generateAutocompleteId(),\n plugins: plugins,\n // The following props need to be deeply defaulted.\n initialState: _objectSpread({\n activeItemId: null,\n query: '',\n completion: null,\n collections: [],\n isOpen: false,\n status: 'idle',\n context: {}\n }, props.initialState),\n onStateChange: function onStateChange(params) {\n var _props$onStateChange;\n\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(_ref3) {\n var itemUrl = _ref3.itemUrl;\n environment.location.assign(itemUrl);\n },\n navigateNewTab: function navigateNewTab(_ref4) {\n var itemUrl = _ref4.itemUrl;\n var windowReference = environment.open(itemUrl, '_blank', 'noopener');\n windowReference === null || windowReference === void 0 ? void 0 : windowReference.focus();\n },\n navigateNewWindow: function navigateNewWindow(_ref5) {\n var itemUrl = _ref5.itemUrl;\n environment.open(itemUrl, '_blank', 'noopener');\n }\n }, props.navigator)\n });\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 '@algolia/autocomplete-shared';\nexport function reshape(_ref) {\n var collections = _ref.collections,\n props = _ref.props,\n state = _ref.state;\n // Sources are grouped by `sourceId` to conveniently pick them via destructuring.\n // Example: `const { recentSearchesPlugin } = sourcesBySourceId`\n var sourcesBySourceId = collections.reduce(function (acc, collection) {\n return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, collection.source.sourceId, _objectSpread(_objectSpread({}, collection.source), {}, {\n getItems: function getItems() {\n // We provide the resolved items from the collection to the `reshape` prop.\n return flatten(collection.items);\n }\n })));\n }, {});\n var reshapeSources = props.reshape({\n sources: Object.values(sourcesBySourceId),\n sourcesBySourceId: sourcesBySourceId,\n state: state\n }); // We reconstruct the collections with the items modified by the `reshape` prop.\n\n return flatten(reshapeSources).filter(Boolean).map(function (source) {\n return {\n source: source,\n items: source.getItems()\n };\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\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\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) 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); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 { decycle, flatten, invariant } from '@algolia/autocomplete-shared';\nimport { mapToAlgoliaResponse } from './utils';\n\nfunction isDescription(item) {\n return Boolean(item.execute);\n}\n\nfunction isRequesterDescription(description) {\n return Boolean(description === null || description === void 0 ? void 0 : description.execute);\n}\n\nexport function preResolve(itemsOrDescription, sourceId) {\n if (isRequesterDescription(itemsOrDescription)) {\n return _objectSpread(_objectSpread({}, itemsOrDescription), {}, {\n requests: itemsOrDescription.queries.map(function (query) {\n return {\n query: query,\n sourceId: sourceId,\n transformResponse: itemsOrDescription.transformResponse\n };\n })\n });\n }\n\n return {\n items: itemsOrDescription,\n sourceId: sourceId\n };\n}\nexport function resolve(items) {\n var packed = items.reduce(function (acc, current) {\n if (!isDescription(current)) {\n acc.push(current);\n return acc;\n }\n\n var searchClient = current.searchClient,\n execute = current.execute,\n requesterId = current.requesterId,\n requests = current.requests;\n var container = acc.find(function (item) {\n return isDescription(current) && isDescription(item) && item.searchClient === searchClient && Boolean(requesterId) && item.requesterId === requesterId;\n });\n\n if (container) {\n var _container$items;\n\n (_container$items = container.items).push.apply(_container$items, _toConsumableArray(requests));\n } else {\n var request = {\n execute: execute,\n requesterId: requesterId,\n items: requests,\n searchClient: searchClient\n };\n acc.push(request);\n }\n\n return acc;\n }, []);\n var values = packed.map(function (maybeDescription) {\n if (!isDescription(maybeDescription)) {\n return Promise.resolve(maybeDescription);\n }\n\n var _ref = maybeDescription,\n execute = _ref.execute,\n items = _ref.items,\n searchClient = _ref.searchClient;\n return execute({\n searchClient: searchClient,\n requests: items\n });\n });\n return Promise.all(values).then(function (responses) {\n return flatten(responses);\n });\n}\nexport function postResolve(responses, sources) {\n return sources.map(function (source) {\n var matches = responses.filter(function (response) {\n return response.sourceId === source.sourceId;\n });\n var results = matches.map(function (_ref2) {\n var items = _ref2.items;\n return items;\n });\n var transform = matches[0].transformResponse;\n var items = transform ? transform(mapToAlgoliaResponse(results)) : results;\n invariant(Array.isArray(items), function () {\n return \"The `getItems` function from source \\\"\".concat(source.sourceId, \"\\\" must return an array of items but returned type \").concat(JSON.stringify(_typeof(items)), \":\\n\\n\").concat(JSON.stringify(decycle(items), null, 2), \".\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems\");\n });\n invariant(items.every(Boolean), \"The `getItems` function from source \\\"\".concat(source.sourceId, \"\\\" must return an array of items but returned \").concat(JSON.stringify(undefined), \".\\n\\nDid you forget to return items?\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems\"));\n return {\n source: source,\n items: items\n };\n });\n}","var _excluded = [\"event\", \"nextState\", \"props\", \"query\", \"refresh\", \"store\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 { reshape } from './reshape';\nimport { preResolve, resolve, postResolve } from './resolve';\nimport { cancelable, createConcurrentSafePromise, getActiveItem } from './utils';\nvar lastStalledId = null;\nvar runConcurrentSafePromise = createConcurrentSafePromise();\nexport function onInput(_ref) {\n var event = _ref.event,\n _ref$nextState = _ref.nextState,\n nextState = _ref$nextState === void 0 ? {} : _ref$nextState,\n props = _ref.props,\n query = _ref.query,\n refresh = _ref.refresh,\n store = _ref.store,\n setters = _objectWithoutProperties(_ref, _excluded);\n\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 var collections = store.getState().collections.map(function (collection) {\n return _objectSpread(_objectSpread({}, collection), {}, {\n items: []\n });\n });\n setStatus('idle');\n setCollections(collections);\n setIsOpen((_nextState$isOpen = nextState.isOpen) !== null && _nextState$isOpen !== void 0 ? _nextState$isOpen : props.shouldPanelOpen({\n state: store.getState()\n })); // We make sure to update the latest resolved value of the tracked\n // promises to keep late resolving promises from \"cancelling\" the state\n // updates performed in this code path.\n // We chain with a void promise to respect `onInput`'s expected return type.\n\n var _request = cancelable(runConcurrentSafePromise(collections).then(function () {\n return Promise.resolve();\n }));\n\n return store.pendingRequests.add(_request);\n }\n\n setStatus('loading');\n lastStalledId = props.environment.setTimeout(function () {\n setStatus('stalled');\n }, props.stallThreshold); // We track the entire promise chain triggered by `onInput` before mutating\n // the Autocomplete state to make sure that any state manipulation is based on\n // fresh data regardless of when promises individually resolve.\n // We don't track nested promises and only rely on the full chain resolution,\n // meaning we should only ever manipulate the state once this concurrent-safe\n // promise is resolved.\n\n var request = cancelable(runConcurrentSafePromise(props.getSources(_objectSpread({\n query: query,\n refresh: refresh,\n state: store.getState()\n }, setters)).then(function (sources) {\n return Promise.all(sources.map(function (source) {\n return Promise.resolve(source.getItems(_objectSpread({\n query: query,\n refresh: refresh,\n state: store.getState()\n }, setters))).then(function (itemsOrDescription) {\n return preResolve(itemsOrDescription, source.sourceId);\n });\n })).then(resolve).then(function (responses) {\n return postResolve(responses, sources);\n }).then(function (collections) {\n return reshape({\n collections: collections,\n props: props,\n state: store.getState()\n });\n });\n }))).then(function (collections) {\n var _nextState$isOpen2;\n\n // Parameters passed to `onInput` could be stale when the following code\n // executes, because `onInput` calls may not resolve in order.\n // If it becomes a problem we'll need to save the last passed parameters.\n // See: https://codesandbox.io/s/agitated-cookies-y290z\n 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 setStatus('idle');\n\n if (lastStalledId) {\n props.environment.clearTimeout(lastStalledId);\n }\n });\n return store.pendingRequests.add(request);\n}","var _excluded = [\"event\", \"props\", \"refresh\", \"store\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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, _excluded);\n\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n // eslint-disable-next-line no-inner-declarations\n var triggerScrollIntoView = function triggerScrollIntoView() {\n var nodeItem = props.environment.document.getElementById(\"\".concat(props.id, \"-item-\").concat(store.getState().activeItemId));\n\n if (nodeItem) {\n if (nodeItem.scrollIntoViewIfNeeded) {\n nodeItem.scrollIntoViewIfNeeded(false);\n } else {\n nodeItem.scrollIntoView(false);\n }\n }\n }; // eslint-disable-next-line no-inner-declarations\n\n\n var triggerOnActive = function triggerOnActive() {\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 }; // Default browser behavior changes the caret placement on ArrowUp and\n // ArrowDown.\n\n\n event.preventDefault(); // When re-opening the panel, we need to split the logic to keep the actions\n // synchronized as `onInput` returns a promise.\n\n if (store.getState().isOpen === false && (props.openOnFocus || Boolean(store.getState().query))) {\n onInput(_objectSpread({\n event: event,\n props: props,\n query: store.getState().query,\n refresh: refresh,\n store: store\n }, setters)).then(function () {\n store.dispatch(event.key, {\n nextActiveItemId: props.defaultActiveItemId\n });\n triggerOnActive(); // Since we rely on the DOM, we need to wait for all the micro tasks to\n // finish (which include re-opening the panel) to make sure all the\n // elements are available.\n\n setTimeout(triggerScrollIntoView, 0);\n });\n } else {\n store.dispatch(event.key, {});\n triggerOnActive();\n triggerScrollIntoView();\n }\n } else if (event.key === 'Escape') {\n // This prevents the default browser behavior on `input[type=\"search\"]`\n // from removing the query right away because we first want to close the\n // panel.\n event.preventDefault();\n store.dispatch(event.key, null); // Hitting the `Escape` key signals the end of a user interaction with the\n // autocomplete. At this point, we should ignore any requests that are still\n // pending and could reopen the panel once they resolve, because that would\n // result in an unsolicited UI behavior.\n\n store.pendingRequests.cancelAll();\n } else if (event.key === 'Tab') {\n store.dispatch('blur', null); // Hitting the `Escape` key signals the end of a user interaction with the\n // autocomplete. At this point, we should ignore any requests that are still\n // pending and could reopen the panel once they resolve, because that would\n // result in an unsolicited UI behavior.\n\n store.pendingRequests.cancelAll();\n } else if (event.key === 'Enter') {\n // No active item, so we let the browser handle the native `onSubmit` form\n // event.\n if (store.getState().activeItemId === null || store.getState().collections.every(function (collection) {\n return collection.items.length === 0;\n })) {\n // If requests are still pending when the panel closes, they could reopen\n // the panel once they resolve.\n // We want to prevent any subsequent query from reopening the panel\n // because it would result in an unsolicited UI behavior.\n if (!props.debug) {\n store.pendingRequests.cancelAll();\n }\n\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 props.navigator.navigateNewTab({\n itemUrl: itemUrl,\n item: item,\n state: store.getState()\n });\n }\n } else if (event.shiftKey) {\n if (itemUrl !== undefined) {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n props.navigator.navigateNewWindow({\n itemUrl: itemUrl,\n item: item,\n state: store.getState()\n });\n }\n } else if (event.altKey) {// Keep native browser behavior\n } else {\n if (itemUrl !== undefined) {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n props.navigator.navigate({\n itemUrl: itemUrl,\n item: item,\n state: store.getState()\n });\n return;\n }\n\n onInput(_objectSpread({\n event: event,\n nextState: {\n isOpen: false\n },\n props: props,\n query: itemInputValue,\n refresh: refresh,\n store: store\n }, setters)).then(function () {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n });\n }\n }\n}","var _excluded = [\"props\", \"refresh\", \"store\"],\n _excluded2 = [\"inputElement\", \"formElement\", \"panelElement\"],\n _excluded3 = [\"inputElement\"],\n _excluded4 = [\"inputElement\", \"maxLength\"],\n _excluded5 = [\"item\", \"source\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 { noop } from '@algolia/autocomplete-shared';\nimport { onInput } from './onInput';\nimport { onKeyDown as _onKeyDown } from './onKeyDown';\nimport { getActiveItem, isOrContainsNode, isSamsung } from './utils';\nexport function getPropGetters(_ref) {\n var props = _ref.props,\n refresh = _ref.refresh,\n store = _ref.store,\n setters = _objectWithoutProperties(_ref, _excluded);\n\n var getEnvironmentProps = function getEnvironmentProps(providedProps) {\n var inputElement = providedProps.inputElement,\n formElement = providedProps.formElement,\n panelElement = providedProps.panelElement,\n rest = _objectWithoutProperties(providedProps, _excluded2);\n\n function onMouseDownOrTouchStart(event) {\n // The `onTouchStart`/`onMouseDown` events shouldn't trigger the `blur`\n // handler when it's not an interaction with Autocomplete.\n // We detect it with the following heuristics:\n // - the panel is closed AND there are no pending requests\n // (no interaction with the autocomplete, no future state updates)\n // - OR the touched target is the input element (should open the panel)\n var isAutocompleteInteraction = store.getState().isOpen || !store.pendingRequests.isEmpty();\n\n if (!isAutocompleteInteraction || 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);\n });\n\n if (isTargetWithinAutocomplete === false) {\n store.dispatch('blur', null); // If requests are still pending when the user closes the panel, they\n // could reopen the panel once they resolve.\n // We want to prevent any subsequent query from reopening the panel\n // because it would result in an unsolicited UI behavior.\n\n if (!props.debug) {\n store.pendingRequests.cancelAll();\n }\n }\n }\n\n return _objectSpread({\n // We do not rely on the native `blur` event of the input to close the\n // panel, but rather on a custom `touchstart`/`mousedown` event outside\n // of the autocomplete elements.\n // This ensures we don't mistakenly interpret interactions within the\n // autocomplete (but outside of the input) as a signal to close the panel.\n // For example, clicking reset button causes an input blur, but if\n // `openOnFocus=true`, it shouldn't close the panel.\n // On touch devices, scrolling results (`touchmove`) causes an input blur\n // but shouldn't close the panel.\n onTouchStart: onMouseDownOrTouchStart,\n onMouseDown: onMouseDownOrTouchStart,\n // When scrolling on touch devices (mobiles, tablets, etc.), we want to\n // mimic the native platform behavior where the input is blurred to\n // hide the virtual keyboard. This gives more vertical space to\n // discover all the suggestions showing up in the panel.\n onTouchMove: function onTouchMove(event) {\n if (store.getState().isOpen === false || inputElement !== props.environment.document.activeElement || event.target === inputElement) {\n return;\n }\n\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, _excluded3);\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 var _props$environment$na;\n\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 _ref2 = providedProps || {},\n inputElement = _ref2.inputElement,\n _ref2$maxLength = _ref2.maxLength,\n maxLength = _ref2$maxLength === void 0 ? 512 : _ref2$maxLength,\n rest = _objectWithoutProperties(_ref2, _excluded4);\n\n var activeItem = getActiveItem(store.getState());\n var userAgent = ((_props$environment$na = props.environment.navigator) === null || _props$environment$na === void 0 ? void 0 : _props$environment$na.userAgent) || '';\n var shouldFallbackKeyHint = isSamsung(userAgent);\n var enterKeyHint = activeItem !== null && activeItem !== void 0 && activeItem.itemUrl && !shouldFallbackKeyHint ? 'go' : 'search';\n return _objectSpread({\n 'aria-autocomplete': 'both',\n 'aria-activedescendant': store.getState().isOpen && store.getState().activeItemId !== null ? \"\".concat(props.id, \"-item-\").concat(store.getState().activeItemId) : undefined,\n 'aria-controls': store.getState().isOpen ? \"\".concat(props.id, \"-list\") : undefined,\n 'aria-labelledby': \"\".concat(props.id, \"-label\"),\n value: store.getState().completion || store.getState().query,\n id: \"\".concat(props.id, \"-input\"),\n autoComplete: 'off',\n autoCorrect: 'off',\n autoCapitalize: 'off',\n enterKeyHint: enterKeyHint,\n spellCheck: 'false',\n autoFocus: props.autoFocus,\n placeholder: props.placeholder,\n maxLength: maxLength,\n type: 'search',\n onChange: function onChange(event) {\n onInput(_objectSpread({\n event: event,\n props: props,\n query: event.currentTarget.value.slice(0, maxLength),\n refresh: refresh,\n store: store\n }, setters));\n },\n onKeyDown: function onKeyDown(event) {\n _onKeyDown(_objectSpread({\n event: event,\n props: props,\n refresh: refresh,\n store: store\n }, setters));\n },\n onFocus: onFocus,\n // We don't rely on the `blur` event.\n // See explanation in `onTouchStart`/`onMouseDown`.\n // @MAJOR See if we need to keep this handler.\n onBlur: noop,\n onClick: function onClick(event) {\n // When the panel is closed and you click on the input while\n // the input is focused, the `onFocus` event is not triggered\n // (default browser behavior).\n // In an autocomplete context, it makes sense to open the panel in this\n // case.\n // We mimic this event by catching the `onClick` event which\n // triggers the `onFocus` for the panel to open.\n if (providedProps.inputElement === props.environment.document.activeElement && !store.getState().isOpen) {\n onFocus(event);\n }\n }\n }, rest);\n };\n\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, _excluded5);\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}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 { userAgents } from '@algolia/autocomplete-shared';\nexport function getMetadata(_ref) {\n var _, _options$__autocomple, _options$__autocomple2, _options$__autocomple3;\n\n var plugins = _ref.plugins,\n options = _ref.options;\n var optionsKey = (_ = (((_options$__autocomple = options.__autocomplete_metadata) === null || _options$__autocomple === void 0 ? void 0 : _options$__autocomple.userAgents) || [])[0]) === null || _ === void 0 ? void 0 : _.segment;\n var extraOptions = optionsKey ? _defineProperty({}, optionsKey, Object.keys(((_options$__autocomple2 = options.__autocomplete_metadata) === null || _options$__autocomple2 === void 0 ? void 0 : _options$__autocomple2.options) || {})) : {};\n return {\n plugins: plugins.map(function (plugin) {\n return {\n name: plugin.name,\n options: Object.keys(plugin.__autocomplete_pluginOptions || [])\n };\n }),\n options: _objectSpread({\n 'autocomplete-core': Object.keys(options)\n }, extraOptions),\n ua: userAgents.concat(((_options$__autocomple3 = options.__autocomplete_metadata) === null || _options$__autocomple3 === void 0 ? void 0 : _options$__autocomple3.userAgents) || [])\n };\n}\nexport function injectMetadata(_ref3) {\n var _environment$navigato, _environment$navigato2;\n\n var metadata = _ref3.metadata,\n environment = _ref3.environment;\n var isMetadataEnabled = (_environment$navigato = environment.navigator) === null || _environment$navigato === void 0 ? void 0 : (_environment$navigato2 = _environment$navigato.userAgent) === null || _environment$navigato2 === void 0 ? void 0 : _environment$navigato2.includes('Algolia Crawler');\n\n if (isMetadataEnabled) {\n var metadataContainer = environment.document.createElement('meta');\n var headRef = environment.document.querySelector('head');\n metadataContainer.name = 'algolia:metadata';\n setTimeout(function () {\n metadataContainer.content = JSON.stringify(metadata);\n headRef.appendChild(metadataContainer);\n }, 0);\n }\n}","import { getActiveItem } from './utils';\nexport function getCompletion(_ref) {\n var _getActiveItem;\n\n var state = _ref.state;\n\n if (state.isOpen === false || state.activeItemId === null) {\n return null;\n }\n\n return ((_getActiveItem = getActiveItem(state)) === null || _getActiveItem === void 0 ? void 0 : _getActiveItem.itemInputValue) || null;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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: action.payload.hasOwnProperty('nextActiveItemId') ? action.payload.nextActiveItemId : 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 activeItemId: null,\n isOpen: false,\n completion: null\n });\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: null,\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); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 { getMetadata, injectMetadata } from './metadata';\nimport { onInput } from './onInput';\nimport { stateReducer } from './stateReducer';\nexport function createAutocomplete(options) {\n checkOptions(options);\n var subscribers = [];\n var props = getDefaultProps(options, subscribers);\n var store = createStore(stateReducer, props, onStoreStateChange);\n var setters = getAutocompleteSetters({\n store: store\n });\n var propGetters = getPropGetters(_objectSpread({\n props: props,\n refresh: refresh,\n store: store\n }, 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 injectMetadata({\n metadata: getMetadata({\n plugins: props.plugins,\n options: options\n }),\n environment: props.environment\n });\n return _objectSpread(_objectSpread({\n refresh: refresh\n }, propGetters), setters);\n}","var n=function(t,s,r,e){var u;s[0]=0;for(var h=1;h=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e=\"\"},a=0;a\"===t?(r=1,e=\"\"):e=t+e[0]:u?t===u?u=\"\":e+=t:'\"'===t||\"'\"===t?u=t:\">\"===t?(p(),r=1):r&&(\"=\"===t?(r=5,s=e,e=\"\"):\"/\"===t&&(r<5||\">\"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):\" \"===t||\"\\t\"===t||\"\\n\"===t||\"\\r\"===t?(p(),r=2):e+=t),3===r&&\"!--\"===e&&(r=4,h=h[0])}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]}\n","import { AutocompleteEnvironment } from '@algolia/autocomplete-core';\n\nimport { AutocompleteElement } from '../types/AutocompleteElement';\n\nexport const ClearIcon: AutocompleteElement<\n { environment: AutocompleteEnvironment },\n SVGSVGElement\n> = ({ environment }) => {\n const element = environment.document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'svg'\n );\n element.setAttribute('class', 'aa-ClearIcon');\n element.setAttribute('viewBox', '0 0 24 24');\n element.setAttribute('width', '18');\n element.setAttribute('height', '18');\n element.setAttribute('fill', 'currentColor');\n\n const path = environment.document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'path'\n );\n path.setAttribute(\n 'd',\n 'M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z'\n );\n\n element.appendChild(path);\n\n return element;\n};\n","import { AutocompleteEnvironment } from '@algolia/autocomplete-core';\nimport { invariant } from '@algolia/autocomplete-shared';\n\nexport function getHTMLElement(\n environment: AutocompleteEnvironment,\n value: string | HTMLElement\n): HTMLElement {\n if (typeof value === 'string') {\n const element = environment.document.querySelector(value);\n\n invariant(\n element !== null,\n `The element ${JSON.stringify(value)} is not in the document.`\n );\n\n return element!;\n }\n\n return value;\n}\n","import { AutocompleteClassNames } from '../types';\n\nexport function mergeClassNames(\n ...values: Array>\n) {\n return values.reduce((acc, current) => {\n Object.keys(current).forEach((key) => {\n const accValue = acc[key];\n const currentValue = current[key];\n\n if (accValue !== currentValue) {\n acc[key] = [accValue, currentValue].filter(Boolean).join(' ');\n }\n });\n\n return acc;\n }, {});\n}\n","const isPlainObject = (value: unknown) =>\n value &&\n typeof value === 'object' &&\n Object.prototype.toString.call(value) === '[object Object]';\n\nexport function mergeDeep(...values: any[]) {\n return values.reduce((acc, current) => {\n Object.keys(current).forEach((key) => {\n const accValue = acc[key];\n const currentValue = current[key];\n\n if (Array.isArray(accValue) && Array.isArray(currentValue)) {\n acc[key] = accValue.concat(...currentValue);\n } else if (isPlainObject(accValue) && isPlainObject(currentValue)) {\n acc[key] = mergeDeep(accValue, currentValue);\n } else {\n acc[key] = currentValue;\n }\n });\n\n return acc;\n }, {});\n}\n","export function pickBy(\n obj: Record,\n predicate: (value: { key: string; value: TValue }) => boolean\n) {\n return Object.entries(obj).reduce>(\n (acc, [key, value]) => {\n if (predicate({ key, value })) {\n return { ...acc, [key]: value };\n }\n\n return acc;\n },\n {}\n );\n}\n","/* eslint-disable */\n\n/**\n * Touch-specific event aliases\n *\n * See https://w3c.github.io/touch-events/#extensions-to-the-globaleventhandlers-mixin\n */\nconst TOUCH_EVENTS_ALIASES = [\n 'ontouchstart',\n 'ontouchend',\n 'ontouchmove',\n 'ontouchcancel',\n];\n\n/*\n * Taken from Preact\n *\n * See https://github.com/preactjs/preact/blob/6ab49d9020740127577bf4af66bf63f4af7f9fee/src/diff/props.js#L58-L151\n */\n\nfunction setStyle(style: object, key: string, value: any) {\n if (value === null) {\n style[key] = '';\n } else if (typeof value !== 'number') {\n style[key] = value;\n } else {\n style[key] = value + 'px';\n }\n}\n\n/**\n * Proxy an event to hooked event handlers\n */\nfunction eventProxy(this: any, event: Event) {\n this._listeners[event.type](event);\n}\n\n/**\n * Set a property value on a DOM node\n */\nexport function setProperty(dom: HTMLElement, name: string, value: any) {\n let useCapture: boolean;\n let nameLower: string;\n let oldValue = dom[name];\n\n if (name === 'style') {\n if (typeof value == 'string') {\n (dom as any).style = value;\n } else {\n if (value === null) {\n (dom as any).style = '';\n } else {\n for (name in value) {\n if (!oldValue || value[name] !== oldValue[name]) {\n setStyle(dom.style, name, value[name]);\n }\n }\n }\n }\n }\n // Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n else if (name[0] === 'o' && name[1] === 'n') {\n useCapture = name !== (name = name.replace(/Capture$/, ''));\n nameLower = name.toLowerCase();\n if (nameLower in dom || TOUCH_EVENTS_ALIASES.includes(nameLower))\n name = nameLower;\n name = name.slice(2);\n\n if (!(dom as any)._listeners) (dom as any)._listeners = {};\n (dom as any)._listeners[name] = value;\n\n if (value) {\n if (!oldValue) dom.addEventListener(name, eventProxy, useCapture);\n } else {\n dom.removeEventListener(name, eventProxy, useCapture);\n }\n } else if (\n name !== 'list' &&\n name !== 'tagName' &&\n // HTMLButtonElement.form and HTMLInputElement.form are read-only but can be set using\n // setAttribute\n name !== 'form' &&\n name !== 'type' &&\n name !== 'size' &&\n name !== 'download' &&\n name !== 'href' &&\n name in dom\n ) {\n dom[name] = value == null ? '' : value;\n } else if (typeof value != 'function' && name !== 'dangerouslySetInnerHTML') {\n if (\n value == null ||\n (value === false &&\n // ARIA-attributes have a different notion of boolean values.\n // The value `false` is different from the attribute not\n // existing on the DOM, so we can't remove it. For non-boolean\n // ARIA-attributes we could treat false as a removal, but the\n // amount of exceptions would cost us too many bytes. On top of\n // that other VDOM frameworks also always stringify `false`.\n !/^ar/.test(name))\n ) {\n dom.removeAttribute(name);\n } else {\n dom.setAttribute(name, value);\n }\n }\n}\n\nfunction getNormalizedName(name: string): string {\n switch (name) {\n case 'onChange':\n return 'onInput';\n default:\n return name;\n }\n}\n\nexport function setProperties(dom: HTMLElement, props: object): void {\n for (const name in props) {\n setProperty(dom, getNormalizedName(name), props[name]);\n }\n}\n\nexport function setPropertiesWithoutEvents(\n dom: HTMLElement,\n props: object\n): void {\n for (const name in props) {\n if (!(name[0] === 'o' && name[1] === 'n')) {\n setProperty(dom, getNormalizedName(name), props[name]);\n }\n }\n}\n","import { AutocompleteEnvironment } from '@algolia/autocomplete-core';\n\nimport { setProperties } from './utils';\n\ntype CreateDomElementProps = Record & {\n children?: Node[];\n};\n\nexport function getCreateDomElement(environment: AutocompleteEnvironment) {\n return function createDomElement(\n tagName: KParam,\n { children = [], ...props }: CreateDomElementProps\n ): HTMLElementTagNameMap[KParam] {\n const element = environment.document.createElement(tagName);\n setProperties(element, props);\n element.append(...children);\n\n return element;\n };\n}\n","import {\n AutocompleteApi as AutocompleteCoreApi,\n AutocompleteEnvironment,\n AutocompleteScopeApi,\n} from '@algolia/autocomplete-core';\n\nimport { getCreateDomElement } from '../getCreateDomElement';\nimport { AutocompletePropGetters, AutocompleteState } from '../types';\nimport { AutocompleteElement } from '../types/AutocompleteElement';\nimport { setProperties } from '../utils';\n\ntype InputProps = {\n autocompleteScopeApi: AutocompleteScopeApi;\n environment: AutocompleteEnvironment;\n getInputProps: AutocompletePropGetters['getInputProps'];\n getInputPropsCore: AutocompleteCoreApi['getInputProps'];\n isDetached: boolean;\n state: AutocompleteState;\n};\n\nexport const Input: AutocompleteElement = ({\n autocompleteScopeApi,\n environment,\n classNames,\n getInputProps,\n getInputPropsCore,\n isDetached,\n state,\n ...props\n}) => {\n const createDomElement = getCreateDomElement(environment);\n const element = createDomElement('input', props);\n const inputProps = getInputProps({\n state,\n props: getInputPropsCore({ inputElement: element }),\n inputElement: element,\n ...autocompleteScopeApi,\n });\n\n setProperties(element, {\n ...inputProps,\n onKeyDown(event: KeyboardEvent) {\n // In detached mode we don't want to close the panel when hittin `Tab`.\n if (isDetached && event.key === 'Tab') {\n return;\n }\n\n inputProps.onKeyDown(event);\n },\n });\n\n return element;\n};\n","import { AutocompleteEnvironment } from '@algolia/autocomplete-core';\n\nimport { AutocompleteElement } from '../types/AutocompleteElement';\n\nexport const LoadingIcon: AutocompleteElement<\n { environment: AutocompleteEnvironment },\n SVGSVGElement\n> = ({ environment }) => {\n const element = environment.document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'svg'\n );\n element.setAttribute('class', 'aa-LoadingIcon');\n element.setAttribute('viewBox', '0 0 100 100');\n element.setAttribute('width', '20');\n element.setAttribute('height', '20');\n\n element.innerHTML = `\n \n`;\n\n return element;\n};\n","import { AutocompleteEnvironment } from '@algolia/autocomplete-core';\n\nimport { AutocompleteElement } from '../types/AutocompleteElement';\n\nexport const SearchIcon: AutocompleteElement<\n { environment: AutocompleteEnvironment },\n SVGSVGElement\n> = ({ environment }) => {\n const element = environment.document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'svg'\n );\n element.setAttribute('class', 'aa-SubmitIcon');\n element.setAttribute('viewBox', '0 0 24 24');\n element.setAttribute('width', '20');\n element.setAttribute('height', '20');\n element.setAttribute('fill', 'currentColor');\n\n const path = environment.document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'path'\n );\n path.setAttribute(\n 'd',\n 'M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z'\n );\n\n element.appendChild(path);\n\n return element;\n};\n","import {\n AutocompleteApi as AutocompleteCoreApi,\n AutocompleteEnvironment,\n AutocompleteScopeApi,\n BaseItem,\n} from '@algolia/autocomplete-core';\n\nimport { ClearIcon, Input, LoadingIcon, SearchIcon } from './elements';\nimport { getCreateDomElement } from './getCreateDomElement';\nimport {\n AutocompleteClassNames,\n AutocompleteDom,\n AutocompletePropGetters,\n AutocompleteState,\n AutocompleteTranslations,\n} from './types';\nimport { setProperties } from './utils';\n\ntype CreateDomProps = {\n autocomplete: AutocompleteCoreApi;\n autocompleteScopeApi: AutocompleteScopeApi;\n classNames: AutocompleteClassNames;\n environment: AutocompleteEnvironment;\n isDetached: boolean;\n placeholder?: string;\n propGetters: AutocompletePropGetters;\n setIsModalOpen(value: boolean): void;\n state: AutocompleteState;\n translations: AutocompleteTranslations;\n};\n\nexport function createAutocompleteDom({\n autocomplete,\n autocompleteScopeApi,\n classNames,\n environment,\n isDetached,\n placeholder = 'Search',\n propGetters,\n setIsModalOpen,\n state,\n translations,\n}: CreateDomProps): AutocompleteDom {\n const createDomElement = getCreateDomElement(environment);\n\n const rootProps = propGetters.getRootProps({\n state,\n props: autocomplete.getRootProps({}),\n ...autocompleteScopeApi,\n });\n const root = createDomElement('div', {\n class: classNames.root,\n ...rootProps,\n });\n const detachedContainer = createDomElement('div', {\n class: classNames.detachedContainer,\n onMouseDown(event: MouseEvent) {\n event.stopPropagation();\n },\n });\n const detachedOverlay = createDomElement('div', {\n class: classNames.detachedOverlay,\n children: [detachedContainer],\n onMouseDown() {\n setIsModalOpen(false);\n autocomplete.setIsOpen(false);\n },\n });\n\n const labelProps = propGetters.getLabelProps({\n state,\n props: autocomplete.getLabelProps({}),\n ...autocompleteScopeApi,\n });\n const submitButton = createDomElement('button', {\n class: classNames.submitButton,\n type: 'submit',\n title: translations.submitButtonTitle,\n children: [SearchIcon({ environment })],\n });\n const label = createDomElement('label', {\n class: classNames.label,\n children: [submitButton],\n ...labelProps,\n });\n const clearButton = createDomElement('button', {\n class: classNames.clearButton,\n type: 'reset',\n title: translations.clearButtonTitle,\n children: [ClearIcon({ environment })],\n });\n const loadingIndicator = createDomElement('div', {\n class: classNames.loadingIndicator,\n children: [LoadingIcon({ environment })],\n });\n\n const input = Input({\n class: classNames.input,\n environment,\n state,\n getInputProps: propGetters.getInputProps,\n getInputPropsCore: autocomplete.getInputProps,\n autocompleteScopeApi,\n isDetached,\n });\n\n const inputWrapperPrefix = createDomElement('div', {\n class: classNames.inputWrapperPrefix,\n children: [label, loadingIndicator],\n });\n const inputWrapperSuffix = createDomElement('div', {\n class: classNames.inputWrapperSuffix,\n children: [clearButton],\n });\n const inputWrapper = createDomElement('div', {\n class: classNames.inputWrapper,\n children: [input],\n });\n\n const formProps = propGetters.getFormProps({\n state,\n props: autocomplete.getFormProps({ inputElement: input }),\n ...autocompleteScopeApi,\n });\n const form = createDomElement('form', {\n class: classNames.form,\n children: [inputWrapperPrefix, inputWrapper, inputWrapperSuffix],\n ...formProps,\n });\n const panelProps = propGetters.getPanelProps({\n state,\n props: autocomplete.getPanelProps({}),\n ...autocompleteScopeApi,\n });\n const panel = createDomElement('div', {\n class: classNames.panel,\n ...panelProps,\n });\n\n if (__TEST__) {\n setProperties(panel, {\n 'data-testid': 'panel',\n });\n }\n\n if (isDetached) {\n const detachedSearchButtonIcon = createDomElement('div', {\n class: classNames.detachedSearchButtonIcon,\n children: [SearchIcon({ environment })],\n });\n const detachedSearchButtonPlaceholder = createDomElement('div', {\n class: classNames.detachedSearchButtonPlaceholder,\n textContent: placeholder,\n });\n const detachedSearchButton = createDomElement('button', {\n type: 'button',\n class: classNames.detachedSearchButton,\n onClick() {\n setIsModalOpen(true);\n },\n children: [detachedSearchButtonIcon, detachedSearchButtonPlaceholder],\n });\n const detachedCancelButton = createDomElement('button', {\n type: 'button',\n class: classNames.detachedCancelButton,\n textContent: translations.detachedCancelButtonText,\n // Prevent `onTouchStart` from closing the panel\n // since it should be initiated by `onClick` only\n onTouchStart(event: TouchEvent) {\n event.stopPropagation();\n },\n onClick() {\n autocomplete.setIsOpen(false);\n setIsModalOpen(false);\n },\n });\n const detachedFormContainer = createDomElement('div', {\n class: classNames.detachedFormContainer,\n children: [form, detachedCancelButton],\n });\n\n detachedContainer.appendChild(detachedFormContainer);\n root.appendChild(detachedSearchButton);\n } else {\n root.appendChild(form);\n }\n\n return {\n detachedContainer,\n detachedOverlay,\n inputWrapper,\n input,\n root,\n form,\n label,\n submitButton,\n clearButton,\n loadingIndicator,\n panel,\n };\n}\n","type Effect = () => void;\ntype EffectFn = () => Effect;\ntype CleanupFn = () => void;\ntype EffectWrapper = {\n runEffect(fn: EffectFn): void;\n cleanupEffects(): void;\n runEffects(): void;\n};\n\nexport function createEffectWrapper(): EffectWrapper {\n let effects: EffectFn[] = [];\n let cleanups: CleanupFn[] = [];\n\n function runEffect(fn: EffectFn) {\n effects.push(fn);\n const effectCleanup = fn();\n cleanups.push(effectCleanup);\n }\n\n return {\n runEffect,\n cleanupEffects() {\n const currentCleanups = cleanups;\n cleanups = [];\n currentCleanups.forEach((cleanup) => {\n cleanup();\n });\n },\n runEffects() {\n const currentEffects = effects;\n effects = [];\n currentEffects.forEach((effect) => {\n runEffect(effect);\n });\n },\n };\n}\n","type ReactiveValue = () => TValue;\nexport type Reactive = {\n value: TValue;\n /**\n * @private\n */\n _fn: ReactiveValue;\n /**\n * @private\n */\n _ref: {\n current: TValue;\n };\n};\n\nexport function createReactiveWrapper() {\n const reactives: Array> = [];\n\n return {\n reactive(value: ReactiveValue) {\n const current = value();\n const reactive: Reactive = {\n _fn: value,\n _ref: { current },\n get value() {\n return this._ref.current;\n },\n set value(value) {\n this._ref.current = value;\n },\n };\n\n reactives.push(reactive);\n\n return reactive;\n },\n runReactives() {\n reactives.forEach((value) => {\n value._ref.current = value._fn();\n });\n },\n };\n}\n","var n,l,u,i,t,r,o,f,e={},c=[],s=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function a(n,l){for(var u in l)n[u]=l[u];return n}function h(n){var l=n.parentNode;l&&l.removeChild(n)}function v(l,u,i){var t,r,o,f={};for(o in u)\"key\"==o?t=u[o]:\"ref\"==o?r=u[o]:f[o]=u[o];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===f[o]&&(f[o]=l.defaultProps[o]);return y(l,f,t,r,null)}function y(n,i,t,r,o){var f={type:n,props:i,key:t,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++u:o};return null==o&&null!=l.vnode&&l.vnode(f),f}function p(){return{current:null}}function d(n){return n.children}function _(n,l){this.props=n,this.context=l}function k(n,l){if(null==l)return n.__?k(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l0?y(_.type,_.props,_.key,null,_.__v):_)){if(_.__=u,_.__b=u.__b+1,null===(p=w[h])||p&&_.key==p.key&&_.type===p.type)w[h]=void 0;else for(v=0;v2&&(f.children=arguments.length>3?n.call(arguments,2):i),y(l.type,f,t||l.key,r||l.ref,null)}function D(n,l){var u={__c:l=\"__cC\"+f++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,i;return this.getChildContext||(u=[],(i={})[l]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(m)},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=c.slice,l={__e:function(n,l){for(var u,i,t;l=l.__;)if((u=l.__c)&&!u.__)try{if((i=u.constructor)&&null!=i.getDerivedStateFromError&&(u.setState(i.getDerivedStateFromError(n)),t=u.__d),null!=u.componentDidCatch&&(u.componentDidCatch(n),t=u.__d),t)return u.__E=u}catch(l){n=l}throw n}},u=0,i=function(n){return null!=n&&void 0===n.constructor},_.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=a({},this.state),\"function\"==typeof n&&(n=n(a({},u),this.props)),n&&a(u,n),null!=n&&this.__v&&(l&&this.__h.push(l),m(this))},_.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),m(this))},_.prototype.render=d,t=[],r=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,g.__r=0,f=0;export{S as render,q as hydrate,v as createElement,v as h,d as Fragment,p as createRef,i as isValidElement,_ as Component,B as cloneElement,D as createContext,A as toChildArray,l as options};\n//# sourceMappingURL=preact.module.js.map\n","export var HIGHLIGHT_PRE_TAG = '__aa-highlight__';\nexport var HIGHLIGHT_POST_TAG = '__/aa-highlight__';","import { HIGHLIGHT_PRE_TAG, HIGHLIGHT_POST_TAG } from '../constants';\n\n/**\n * Creates a data structure that allows to concatenate similar highlighting\n * parts in a single value.\n */\nfunction createAttributeSet() {\n var initialValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var value = initialValue;\n return {\n get: function get() {\n return value;\n },\n add: function add(part) {\n var lastPart = value[value.length - 1];\n\n if ((lastPart === null || lastPart === void 0 ? void 0 : lastPart.isHighlighted) === part.isHighlighted) {\n value[value.length - 1] = {\n value: lastPart.value + part.value,\n isHighlighted: lastPart.isHighlighted\n };\n } else {\n value.push(part);\n }\n }\n };\n}\n\nexport function parseAttribute(_ref) {\n var highlightedValue = _ref.highlightedValue;\n var preTagParts = highlightedValue.split(HIGHLIGHT_PRE_TAG);\n var firstValue = preTagParts.shift();\n var parts = createAttributeSet(firstValue ? [{\n value: firstValue,\n isHighlighted: false\n }] : []);\n preTagParts.forEach(function (part) {\n var postTagParts = part.split(HIGHLIGHT_POST_TAG);\n parts.add({\n value: postTagParts[0],\n isHighlighted: true\n });\n\n if (postTagParts[1] !== '') {\n parts.add({\n value: postTagParts[1],\n isHighlighted: false\n });\n }\n });\n return parts.get();\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\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) 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 { getAttributeValueByPath, warn } from '@algolia/autocomplete-shared';\nimport { parseAttribute } from './parseAttribute';\nexport function parseAlgoliaHitHighlight(_ref) {\n var hit = _ref.hit,\n attribute = _ref.attribute;\n var path = Array.isArray(attribute) ? attribute : [attribute];\n var highlightedValue = getAttributeValueByPath(hit, ['_highlightResult'].concat(_toConsumableArray(path), ['value']));\n\n if (typeof highlightedValue !== 'string') {\n process.env.NODE_ENV !== 'production' ? warn(false, \"The attribute \\\"\".concat(path.join('.'), \"\\\" described by the path \").concat(JSON.stringify(path), \" does not exist on the hit. Did you set it in `attributesToHighlight`?\") + '\\nSee https://www.algolia.com/doc/api-reference/api-parameters/attributesToHighlight/') : void 0;\n highlightedValue = getAttributeValueByPath(hit, path) || '';\n }\n\n return parseAttribute({\n highlightedValue: highlightedValue\n });\n}","var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n};\nvar hasAlphanumeric = new RegExp(/\\w/i);\nvar regexEscapedHtml = /&(amp|quot|lt|gt|#39);/g;\nvar regexHasEscapedHtml = RegExp(regexEscapedHtml.source);\n\nfunction unescape(value) {\n return value && regexHasEscapedHtml.test(value) ? value.replace(regexEscapedHtml, function (character) {\n return htmlEscapes[character];\n }) : value;\n}\n\nexport function isPartHighlighted(parts, i) {\n var _parts, _parts2;\n\n var current = parts[i];\n var isNextHighlighted = ((_parts = parts[i + 1]) === null || _parts === void 0 ? void 0 : _parts.isHighlighted) || true;\n var isPreviousHighlighted = ((_parts2 = parts[i - 1]) === null || _parts2 === void 0 ? void 0 : _parts2.isHighlighted) || true;\n\n if (!hasAlphanumeric.test(unescape(current.value)) && isPreviousHighlighted === isNextHighlighted) {\n return isPreviousHighlighted;\n }\n\n return current.isHighlighted;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 { isPartHighlighted } from './isPartHighlighted';\nexport function reverseHighlightedParts(parts) {\n // We don't want to highlight the whole word when no parts match.\n if (!parts.some(function (part) {\n return part.isHighlighted;\n })) {\n return parts.map(function (part) {\n return _objectSpread(_objectSpread({}, part), {}, {\n isHighlighted: false\n });\n });\n }\n\n return parts.map(function (part, i) {\n return _objectSpread(_objectSpread({}, part), {}, {\n isHighlighted: !isPartHighlighted(parts, i)\n });\n });\n}","import { parseAlgoliaHitHighlight } from './parseAlgoliaHitHighlight';\nimport { reverseHighlightedParts } from './reverseHighlightedParts';\nexport function parseAlgoliaHitReverseHighlight(props) {\n return reverseHighlightedParts(parseAlgoliaHitHighlight(props));\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\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) 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 { getAttributeValueByPath, warn } from '@algolia/autocomplete-shared';\nimport { parseAttribute } from './parseAttribute';\nexport function parseAlgoliaHitSnippet(_ref) {\n var hit = _ref.hit,\n attribute = _ref.attribute;\n var path = Array.isArray(attribute) ? attribute : [attribute];\n var highlightedValue = getAttributeValueByPath(hit, ['_snippetResult'].concat(_toConsumableArray(path), ['value']));\n\n if (typeof highlightedValue !== 'string') {\n process.env.NODE_ENV !== 'production' ? warn(false, \"The attribute \\\"\".concat(path.join('.'), \"\\\" described by the path \").concat(JSON.stringify(path), \" does not exist on the hit. Did you set it in `attributesToSnippet`?\") + '\\nSee https://www.algolia.com/doc/api-reference/api-parameters/attributesToSnippet/') : void 0;\n highlightedValue = getAttributeValueByPath(hit, path) || '';\n }\n\n return parseAttribute({\n highlightedValue: highlightedValue\n });\n}","import { parseAlgoliaHitSnippet } from './parseAlgoliaHitSnippet';\nimport { reverseHighlightedParts } from './reverseHighlightedParts';\nexport function parseAlgoliaHitReverseSnippet(props) {\n return reverseHighlightedParts(parseAlgoliaHitSnippet(props));\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 createRequester(fetcher, requesterId) {\n function execute(fetcherParams) {\n return fetcher({\n searchClient: fetcherParams.searchClient,\n queries: fetcherParams.requests.map(function (x) {\n return x.query;\n })\n }).then(function (responses) {\n return responses.map(function (response, index) {\n var _fetcherParams$reques = fetcherParams.requests[index],\n sourceId = _fetcherParams$reques.sourceId,\n transformResponse = _fetcherParams$reques.transformResponse;\n return {\n items: response,\n sourceId: sourceId,\n transformResponse: transformResponse\n };\n });\n });\n }\n\n return function createSpecifiedRequester(requesterParams) {\n return function requester(requestParams) {\n return _objectSpread(_objectSpread({\n requesterId: requesterId,\n execute: execute\n }, requesterParams), requestParams);\n };\n };\n}","var _excluded = [\"params\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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\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\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) 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 { userAgents as coreUserAgents } from '@algolia/autocomplete-shared';\nimport { HIGHLIGHT_PRE_TAG, HIGHLIGHT_POST_TAG } from '../constants';\nexport function fetchAlgoliaResults(_ref) {\n var searchClient = _ref.searchClient,\n queries = _ref.queries,\n _ref$userAgents = _ref.userAgents,\n userAgents = _ref$userAgents === void 0 ? [] : _ref$userAgents;\n\n if (typeof searchClient.addAlgoliaAgent === 'function') {\n var algoliaAgents = [].concat(_toConsumableArray(coreUserAgents), _toConsumableArray(userAgents));\n algoliaAgents.forEach(function (_ref2) {\n var segment = _ref2.segment,\n version = _ref2.version;\n searchClient.addAlgoliaAgent(segment, version);\n });\n }\n\n return searchClient.search(queries.map(function (searchParameters) {\n var params = searchParameters.params,\n headers = _objectWithoutProperties(searchParameters, _excluded);\n\n return _objectSpread(_objectSpread({}, headers), {}, {\n params: _objectSpread({\n hitsPerPage: 5,\n highlightPreTag: HIGHLIGHT_PRE_TAG,\n highlightPostTag: HIGHLIGHT_POST_TAG\n }, params)\n });\n })).then(function (response) {\n return response.results;\n });\n}","import { parseAlgoliaHitHighlight } from '@algolia/autocomplete-preset-algolia';\n\nimport { AutocompleteRenderer, HighlightHitParams } from '../types';\n\nexport function createHighlightComponent({\n createElement,\n Fragment,\n}: AutocompleteRenderer) {\n function Highlight({\n hit,\n attribute,\n tagName = 'mark',\n }: HighlightHitParams): JSX.Element {\n return createElement(\n Fragment,\n {},\n parseAlgoliaHitHighlight({ hit, attribute }).map((x, index) =>\n x.isHighlighted\n ? createElement(tagName, { key: index }, x.value)\n : x.value\n )\n );\n }\n\n Highlight.__autocomplete_componentName = 'Highlight';\n\n return Highlight;\n}\n","import { parseAlgoliaHitReverseHighlight } from '@algolia/autocomplete-preset-algolia';\n\nimport { AutocompleteRenderer, HighlightHitParams } from '../types';\n\nexport function createReverseHighlightComponent({\n createElement,\n Fragment,\n}: AutocompleteRenderer) {\n function ReverseHighlight({\n hit,\n attribute,\n tagName = 'mark',\n }: HighlightHitParams): JSX.Element {\n return createElement(\n Fragment,\n {},\n parseAlgoliaHitReverseHighlight({\n hit,\n attribute,\n }).map((x, index) =>\n x.isHighlighted\n ? createElement(tagName, { key: index }, x.value)\n : x.value\n )\n );\n }\n\n ReverseHighlight.__autocomplete_componentName = 'ReverseHighlight';\n\n return ReverseHighlight;\n}\n","import { parseAlgoliaHitReverseSnippet } from '@algolia/autocomplete-preset-algolia';\n\nimport { AutocompleteRenderer, HighlightHitParams } from '../types';\n\nexport function createReverseSnippetComponent({\n createElement,\n Fragment,\n}: AutocompleteRenderer) {\n function ReverseSnippet({\n hit,\n attribute,\n tagName = 'mark',\n }: HighlightHitParams): JSX.Element {\n return createElement(\n Fragment,\n {},\n parseAlgoliaHitReverseSnippet({\n hit,\n attribute,\n }).map((x, index) =>\n x.isHighlighted\n ? createElement(tagName, { key: index }, x.value)\n : x.value\n )\n );\n }\n\n ReverseSnippet.__autocomplete_componentName = 'ReverseSnippet';\n\n return ReverseSnippet;\n}\n","import { parseAlgoliaHitSnippet } from '@algolia/autocomplete-preset-algolia';\n\nimport { AutocompleteRenderer, HighlightHitParams } from '../types';\n\nexport function createSnippetComponent({\n createElement,\n Fragment,\n}: AutocompleteRenderer) {\n function Snippet({\n hit,\n attribute,\n tagName = 'mark',\n }: HighlightHitParams): JSX.Element {\n return createElement(\n Fragment,\n {},\n parseAlgoliaHitSnippet({ hit, attribute }).map((x, index) =>\n x.isHighlighted\n ? createElement(tagName, { key: index }, x.value)\n : x.value\n )\n );\n }\n\n Snippet.__autocomplete_componentName = 'Snippet';\n\n return Snippet;\n}\n","import { AutocompleteEnvironment, BaseItem } from '@algolia/autocomplete-core';\nimport {\n generateAutocompleteId,\n invariant,\n warn,\n} from '@algolia/autocomplete-shared';\nimport {\n createElement as preactCreateElement,\n Fragment as PreactFragment,\n render,\n} from 'preact';\n\nimport {\n createHighlightComponent,\n createReverseHighlightComponent,\n createReverseSnippetComponent,\n createSnippetComponent,\n} from './components';\nimport {\n AutocompleteClassNames,\n AutocompleteComponents,\n AutocompleteOptions,\n AutocompleteRender,\n AutocompleteRenderer,\n AutocompleteTranslations,\n} from './types';\nimport { getHTMLElement, mergeClassNames } from './utils';\n\nconst defaultClassNames: AutocompleteClassNames = {\n clearButton: 'aa-ClearButton',\n detachedCancelButton: 'aa-DetachedCancelButton',\n detachedContainer: 'aa-DetachedContainer',\n detachedFormContainer: 'aa-DetachedFormContainer',\n detachedOverlay: 'aa-DetachedOverlay',\n detachedSearchButton: 'aa-DetachedSearchButton',\n detachedSearchButtonIcon: 'aa-DetachedSearchButtonIcon',\n detachedSearchButtonPlaceholder: 'aa-DetachedSearchButtonPlaceholder',\n form: 'aa-Form',\n input: 'aa-Input',\n inputWrapper: 'aa-InputWrapper',\n inputWrapperPrefix: 'aa-InputWrapperPrefix',\n inputWrapperSuffix: 'aa-InputWrapperSuffix',\n item: 'aa-Item',\n label: 'aa-Label',\n list: 'aa-List',\n loadingIndicator: 'aa-LoadingIndicator',\n panel: 'aa-Panel',\n panelLayout: 'aa-PanelLayout aa-Panel--scrollable',\n root: 'aa-Autocomplete',\n source: 'aa-Source',\n sourceFooter: 'aa-SourceFooter',\n sourceHeader: 'aa-SourceHeader',\n sourceNoResults: 'aa-SourceNoResults',\n submitButton: 'aa-SubmitButton',\n};\n\nconst defaultRender: AutocompleteRender = ({ children, render }, root) => {\n render(children, root);\n};\n\nconst defaultRenderer: Required = {\n createElement: preactCreateElement,\n Fragment: PreactFragment,\n render,\n};\n\nexport function getDefaultOptions(\n options: AutocompleteOptions\n) {\n const {\n classNames,\n container,\n getEnvironmentProps,\n getFormProps,\n getInputProps,\n getItemProps,\n getLabelProps,\n getListProps,\n getPanelProps,\n getRootProps,\n panelContainer,\n panelPlacement,\n render,\n renderNoResults,\n renderer,\n detachedMediaQuery,\n components,\n translations,\n ...core\n } = options;\n\n /* eslint-disable no-restricted-globals */\n const environment: AutocompleteEnvironment = (typeof window !== 'undefined'\n ? window\n : {}) as typeof window;\n /* eslint-enable no-restricted-globals */\n const containerElement = getHTMLElement(environment, container);\n\n invariant(\n containerElement.tagName !== 'INPUT',\n 'The `container` option does not support `input` elements. You need to change the container to a `div`.'\n );\n\n warn(\n !(render && renderer && !renderer?.render),\n `You provided the \\`render\\` option but did not provide a \\`renderer.render\\`. Since v1.6.0, you can provide a \\`render\\` function directly in \\`renderer\\`.` +\n `\\nTo get rid of this warning, do any of the following depending on your use case.` +\n \"\\n- If you are using the `render` option only to override Autocomplete's default `render` function, pass the `render` function into `renderer` and remove the `render` option.\" +\n '\\n- If you are using the `render` option to customize the layout, pass your `render` function into `renderer` and use it from the provided parameters of the `render` option.' +\n '\\n- If you are using the `render` option to work with React 18, pass an empty `render` function into `renderer`.' +\n '\\nSee https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-render'\n );\n\n warn(\n !renderer ||\n render ||\n (renderer.Fragment && renderer.createElement && renderer.render),\n `You provided an incomplete \\`renderer\\` (missing: ${[\n !renderer?.createElement && '`renderer.createElement`',\n !renderer?.Fragment && '`renderer.Fragment`',\n !renderer?.render && '`renderer.render`',\n ]\n .filter(Boolean)\n .join(', ')}). This can cause rendering issues.` +\n '\\nSee https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-renderer'\n );\n\n const defaultedRenderer = { ...defaultRenderer, ...renderer };\n\n const defaultComponents: AutocompleteComponents = {\n Highlight: createHighlightComponent(defaultedRenderer),\n ReverseHighlight: createReverseHighlightComponent(defaultedRenderer),\n ReverseSnippet: createReverseSnippetComponent(defaultedRenderer),\n Snippet: createSnippetComponent(defaultedRenderer),\n };\n\n const defaultTranslations: AutocompleteTranslations = {\n clearButtonTitle: 'Clear',\n detachedCancelButtonText: 'Cancel',\n submitButtonTitle: 'Submit',\n };\n\n return {\n renderer: {\n classNames: mergeClassNames(\n defaultClassNames,\n classNames ?? {}\n ) as AutocompleteClassNames,\n container: containerElement,\n getEnvironmentProps: getEnvironmentProps ?? (({ props }) => props),\n getFormProps: getFormProps ?? (({ props }) => props),\n getInputProps: getInputProps ?? (({ props }) => props),\n getItemProps: getItemProps ?? (({ props }) => props),\n getLabelProps: getLabelProps ?? (({ props }) => props),\n getListProps: getListProps ?? (({ props }) => props),\n getPanelProps: getPanelProps ?? (({ props }) => props),\n getRootProps: getRootProps ?? (({ props }) => props),\n panelContainer: panelContainer\n ? getHTMLElement(environment, panelContainer)\n : environment.document.body,\n panelPlacement: panelPlacement ?? 'input-wrapper-width',\n render: render ?? defaultRender,\n renderNoResults,\n renderer: defaultedRenderer,\n detachedMediaQuery:\n detachedMediaQuery ??\n getComputedStyle(environment.document.documentElement).getPropertyValue(\n '--aa-detached-media-query'\n ),\n components: {\n // @MAJOR Deal with registering components with the same name as the\n // default ones. We could disallow registering these components by\n // merging the default components second.\n ...defaultComponents,\n ...components,\n },\n translations: {\n ...defaultTranslations,\n ...translations,\n },\n },\n core: {\n ...core,\n id: core.id ?? generateAutocompleteId(),\n environment,\n },\n };\n}\n","import { AutocompleteOptions } from './types';\n\ntype GetPanelPlacementStyleParams = Pick<\n Required>,\n 'panelPlacement' | 'environment'\n> & {\n container: HTMLElement;\n form: HTMLElement;\n};\n\nexport function getPanelPlacementStyle({\n panelPlacement,\n container,\n form,\n environment,\n}: GetPanelPlacementStyleParams) {\n const containerRect = container.getBoundingClientRect();\n // Some browsers have specificities to retrieve the document scroll position.\n // See https://stackoverflow.com/a/28633515/9940315\n const scrollTop =\n (environment.pageYOffset as number) ||\n environment.document.documentElement.scrollTop ||\n environment.document.body.scrollTop ||\n 0;\n const top = scrollTop + containerRect.top + containerRect.height;\n\n switch (panelPlacement) {\n case 'start': {\n return {\n top,\n left: containerRect.left,\n };\n }\n\n case 'end': {\n return {\n top,\n right:\n environment.document.documentElement.clientWidth -\n (containerRect.left + containerRect.width),\n };\n }\n\n case 'full-width': {\n return {\n top,\n left: 0,\n right: 0,\n width: 'unset',\n maxWidth: 'unset',\n };\n }\n\n case 'input-wrapper-width': {\n const formRect = form.getBoundingClientRect();\n\n return {\n top,\n left: formRect.left,\n right:\n environment.document.documentElement.clientWidth -\n (formRect.left + formRect.width),\n width: 'unset',\n maxWidth: 'unset',\n };\n }\n\n default: {\n throw new Error(\n `[Autocomplete] The \\`panelPlacement\\` value ${JSON.stringify(\n panelPlacement\n )} is not valid.`\n );\n }\n }\n}\n","/** @jsx renderer.createElement */\nimport {\n AutocompleteApi as AutocompleteCoreApi,\n AutocompleteScopeApi,\n BaseItem,\n} from '@algolia/autocomplete-core';\n\nimport {\n AutocompleteClassNames,\n AutocompleteComponents,\n AutocompleteDom,\n AutocompletePropGetters,\n AutocompleteRender,\n AutocompleteRenderer,\n AutocompleteState,\n HTMLTemplate,\n} from './types';\nimport { setProperties, setPropertiesWithoutEvents } from './utils';\n\ntype RenderProps = {\n autocomplete: AutocompleteCoreApi;\n autocompleteScopeApi: AutocompleteScopeApi;\n classNames: AutocompleteClassNames;\n components: AutocompleteComponents;\n html: HTMLTemplate;\n dom: AutocompleteDom;\n panelContainer: HTMLElement;\n propGetters: AutocompletePropGetters;\n state: AutocompleteState;\n renderer: Required;\n};\n\nexport function renderSearchBox({\n autocomplete,\n autocompleteScopeApi,\n dom,\n propGetters,\n state,\n}: RenderProps): void {\n setPropertiesWithoutEvents(\n dom.root,\n propGetters.getRootProps({\n state,\n props: autocomplete.getRootProps({}),\n ...autocompleteScopeApi,\n })\n );\n setPropertiesWithoutEvents(\n dom.input,\n propGetters.getInputProps({\n state,\n props: autocomplete.getInputProps({ inputElement: dom.input }),\n inputElement: dom.input,\n ...autocompleteScopeApi,\n })\n );\n setProperties(dom.label, { hidden: state.status === 'stalled' });\n setProperties(dom.loadingIndicator, { hidden: state.status !== 'stalled' });\n setProperties(dom.clearButton, { hidden: !state.query });\n}\n\nexport function renderPanel(\n render: AutocompleteRender,\n {\n autocomplete,\n autocompleteScopeApi,\n classNames,\n html,\n dom,\n panelContainer,\n propGetters,\n state,\n components,\n renderer,\n }: RenderProps\n): void {\n if (!state.isOpen) {\n if (panelContainer.contains(dom.panel)) {\n panelContainer.removeChild(dom.panel);\n }\n\n return;\n }\n\n // We add the panel element to the DOM when it's not yet appended and that the\n // items are fetched.\n if (!panelContainer.contains(dom.panel) && state.status !== 'loading') {\n panelContainer.appendChild(dom.panel);\n }\n\n dom.panel.classList.toggle('aa-Panel--stalled', state.status === 'stalled');\n\n const sections = state.collections\n .filter(\n ({ source, items }) => source.templates.noResults || items.length > 0\n )\n .map(({ source, items }, sourceIndex) => (\n \n {source.templates.header && (\n
\n {source.templates.header({\n components,\n createElement: renderer.createElement,\n Fragment: renderer.Fragment,\n items,\n source,\n state,\n html,\n })}\n
\n )}\n\n {source.templates.noResults && items.length === 0 ? (\n
\n {source.templates.noResults({\n components,\n createElement: renderer.createElement,\n Fragment: renderer.Fragment,\n source,\n state,\n html,\n })}\n
\n ) : (\n \n {items.map((item) => {\n const itemProps = autocomplete.getItemProps({\n item,\n source,\n });\n\n return (\n \n {source.templates.item({\n components,\n createElement: renderer.createElement,\n Fragment: renderer.Fragment,\n item,\n state,\n html,\n })}\n \n );\n })}\n \n )}\n\n {source.templates.footer && (\n
\n {source.templates.footer({\n components,\n createElement: renderer.createElement,\n Fragment: renderer.Fragment,\n items,\n source,\n state,\n html,\n })}\n
\n )}\n \n ));\n\n const children = (\n \n
{sections}
\n
\n \n );\n const elements = sections.reduce((acc, current) => {\n acc[current.props['data-autocomplete-source-id']] = current;\n return acc;\n }, {});\n\n render(\n {\n children,\n state,\n sections,\n elements,\n ...renderer,\n components,\n html,\n ...autocompleteScopeApi,\n },\n dom.panel\n );\n}\n","import { version } from '@algolia/autocomplete-shared';\n\nexport const userAgents = [{ segment: 'autocomplete-js', version }];\n","import {\n AutocompleteScopeApi,\n BaseItem,\n createAutocomplete,\n} from '@algolia/autocomplete-core';\nimport {\n createRef,\n debounce,\n getItemsCount,\n} from '@algolia/autocomplete-shared';\nimport htm from 'htm';\n\nimport { createAutocompleteDom } from './createAutocompleteDom';\nimport { createEffectWrapper } from './createEffectWrapper';\nimport { createReactiveWrapper } from './createReactiveWrapper';\nimport { getDefaultOptions } from './getDefaultOptions';\nimport { getPanelPlacementStyle } from './getPanelPlacementStyle';\nimport { renderPanel, renderSearchBox } from './render';\nimport {\n AutocompleteApi,\n AutocompleteOptions,\n AutocompletePropGetters,\n AutocompleteSource,\n AutocompleteState,\n VNode,\n} from './types';\nimport { userAgents } from './userAgents';\nimport { mergeDeep, pickBy, setProperties } from './utils';\n\nexport function autocomplete(\n options: AutocompleteOptions\n): AutocompleteApi {\n const { runEffect, cleanupEffects, runEffects } = createEffectWrapper();\n const { reactive, runReactives } = createReactiveWrapper();\n\n const hasNoResultsSourceTemplateRef = createRef(false);\n const optionsRef = createRef(options);\n const onStateChangeRef = createRef<\n AutocompleteOptions['onStateChange']\n >(undefined);\n const props = reactive(() => getDefaultOptions(optionsRef.current));\n const isDetached = reactive(\n () =>\n props.value.core.environment.matchMedia(\n props.value.renderer.detachedMediaQuery\n ).matches\n );\n\n const autocomplete = reactive(() =>\n createAutocomplete({\n ...props.value.core,\n onStateChange(params) {\n hasNoResultsSourceTemplateRef.current = params.state.collections.some(\n (collection) =>\n (collection.source as AutocompleteSource).templates.noResults\n );\n onStateChangeRef.current?.(params as any);\n props.value.core.onStateChange?.(params as any);\n },\n shouldPanelOpen:\n optionsRef.current.shouldPanelOpen ||\n (({ state }) => {\n if (isDetached.value) {\n return true;\n }\n\n const hasItems = getItemsCount(state) > 0;\n\n if (!props.value.core.openOnFocus && !state.query) {\n return hasItems;\n }\n\n const hasNoResultsTemplate = Boolean(\n hasNoResultsSourceTemplateRef.current ||\n props.value.renderer.renderNoResults\n );\n\n return (!hasItems && hasNoResultsTemplate) || hasItems;\n }),\n __autocomplete_metadata: {\n userAgents,\n options,\n },\n })\n );\n const lastStateRef = createRef>({\n collections: [],\n completion: null,\n context: {},\n isOpen: false,\n query: '',\n activeItemId: null,\n status: 'idle',\n ...props.value.core.initialState,\n });\n\n const propGetters: AutocompletePropGetters = {\n getEnvironmentProps: props.value.renderer.getEnvironmentProps,\n getFormProps: props.value.renderer.getFormProps,\n getInputProps: props.value.renderer.getInputProps,\n getItemProps: props.value.renderer.getItemProps,\n getLabelProps: props.value.renderer.getLabelProps,\n getListProps: props.value.renderer.getListProps,\n getPanelProps: props.value.renderer.getPanelProps,\n getRootProps: props.value.renderer.getRootProps,\n };\n const autocompleteScopeApi: AutocompleteScopeApi = {\n setActiveItemId: autocomplete.value.setActiveItemId,\n setQuery: autocomplete.value.setQuery,\n setCollections: autocomplete.value.setCollections,\n setIsOpen: autocomplete.value.setIsOpen,\n setStatus: autocomplete.value.setStatus,\n setContext: autocomplete.value.setContext,\n refresh: autocomplete.value.refresh,\n };\n\n const html = reactive(() =>\n htm.bind(props.value.renderer.renderer.createElement)\n );\n\n const dom = reactive(() =>\n createAutocompleteDom({\n autocomplete: autocomplete.value,\n autocompleteScopeApi,\n classNames: props.value.renderer.classNames,\n environment: props.value.core.environment,\n isDetached: isDetached.value,\n placeholder: props.value.core.placeholder,\n propGetters,\n setIsModalOpen,\n state: lastStateRef.current,\n translations: props.value.renderer.translations,\n })\n );\n\n function setPanelPosition() {\n setProperties(dom.value.panel, {\n style: isDetached.value\n ? {}\n : getPanelPlacementStyle({\n panelPlacement: props.value.renderer.panelPlacement,\n container: dom.value.root,\n form: dom.value.form,\n environment: props.value.core.environment,\n }),\n });\n }\n\n function scheduleRender(state: AutocompleteState) {\n lastStateRef.current = state;\n\n const renderProps = {\n autocomplete: autocomplete.value,\n autocompleteScopeApi,\n classNames: props.value.renderer.classNames,\n components: props.value.renderer.components,\n container: props.value.renderer.container,\n html: html.value,\n dom: dom.value,\n panelContainer: isDetached.value\n ? dom.value.detachedContainer\n : props.value.renderer.panelContainer,\n propGetters,\n state: lastStateRef.current,\n renderer: props.value.renderer.renderer,\n };\n\n const render =\n (!getItemsCount(state) &&\n !hasNoResultsSourceTemplateRef.current &&\n props.value.renderer.renderNoResults) ||\n props.value.renderer.render;\n\n renderSearchBox(renderProps);\n renderPanel(render, renderProps);\n }\n\n runEffect(() => {\n const environmentProps = autocomplete.value.getEnvironmentProps({\n formElement: dom.value.form,\n panelElement: dom.value.panel,\n inputElement: dom.value.input,\n });\n\n setProperties(props.value.core.environment as any, environmentProps);\n\n return () => {\n setProperties(\n props.value.core.environment as any,\n Object.keys(environmentProps).reduce((acc, key) => {\n return {\n ...acc,\n [key]: undefined,\n };\n }, {})\n );\n };\n });\n\n runEffect(() => {\n const panelContainerElement = isDetached.value\n ? props.value.core.environment.document.body\n : props.value.renderer.panelContainer;\n const panelElement = isDetached.value\n ? dom.value.detachedOverlay\n : dom.value.panel;\n\n if (isDetached.value && lastStateRef.current.isOpen) {\n setIsModalOpen(true);\n }\n\n scheduleRender(lastStateRef.current);\n\n return () => {\n if (panelContainerElement.contains(panelElement)) {\n panelContainerElement.removeChild(panelElement);\n }\n };\n });\n\n runEffect(() => {\n const containerElement = props.value.renderer.container;\n containerElement.appendChild(dom.value.root);\n\n return () => {\n containerElement.removeChild(dom.value.root);\n };\n });\n\n runEffect(() => {\n const debouncedRender = debounce<{\n state: AutocompleteState;\n }>(({ state }) => {\n scheduleRender(state);\n }, 0);\n\n onStateChangeRef.current = ({ state, prevState }) => {\n if (isDetached.value && prevState.isOpen !== state.isOpen) {\n setIsModalOpen(state.isOpen);\n }\n\n // The outer DOM might have changed since the last time the panel was\n // positioned. The layout might have shifted vertically for instance.\n // It's therefore safer to re-calculate the panel position before opening\n // it again.\n if (!isDetached.value && state.isOpen && !prevState.isOpen) {\n setPanelPosition();\n }\n\n // We scroll to the top of the panel whenever the query changes (i.e. new\n // results come in) so that users don't have to.\n if (state.query !== prevState.query) {\n const scrollablePanels = props.value.core.environment.document.querySelectorAll(\n '.aa-Panel--scrollable'\n );\n scrollablePanels.forEach((scrollablePanel) => {\n if (scrollablePanel.scrollTop !== 0) {\n scrollablePanel.scrollTop = 0;\n }\n });\n }\n\n debouncedRender({ state });\n };\n\n return () => {\n onStateChangeRef.current = undefined;\n };\n });\n\n runEffect(() => {\n const onResize = debounce(() => {\n const previousIsDetached = isDetached.value;\n isDetached.value = props.value.core.environment.matchMedia(\n props.value.renderer.detachedMediaQuery\n ).matches;\n\n if (previousIsDetached !== isDetached.value) {\n update({});\n } else {\n requestAnimationFrame(setPanelPosition);\n }\n }, 20);\n props.value.core.environment.addEventListener('resize', onResize);\n\n return () => {\n props.value.core.environment.removeEventListener('resize', onResize);\n };\n });\n\n runEffect(() => {\n if (!isDetached.value) {\n return () => {};\n }\n\n function toggleModalClassname(isActive: boolean) {\n dom.value.detachedContainer.classList.toggle(\n 'aa-DetachedContainer--modal',\n isActive\n );\n }\n\n function onChange(event: MediaQueryListEvent) {\n toggleModalClassname(event.matches);\n }\n\n const isModalDetachedMql = props.value.core.environment.matchMedia(\n getComputedStyle(\n props.value.core.environment.document.documentElement\n ).getPropertyValue('--aa-detached-modal-media-query')\n );\n\n toggleModalClassname(isModalDetachedMql.matches);\n\n // Prior to Safari 14, `MediaQueryList` isn't based on `EventTarget`,\n // so we must use `addListener` and `removeListener` to observe media query lists.\n // See https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList/addListener\n const hasModernEventListener = Boolean(isModalDetachedMql.addEventListener);\n\n hasModernEventListener\n ? isModalDetachedMql.addEventListener('change', onChange)\n : isModalDetachedMql.addListener(onChange);\n\n return () => {\n hasModernEventListener\n ? isModalDetachedMql.removeEventListener('change', onChange)\n : isModalDetachedMql.removeListener(onChange);\n };\n });\n\n runEffect(() => {\n requestAnimationFrame(setPanelPosition);\n\n return () => {};\n });\n\n function destroy() {\n cleanupEffects();\n }\n\n function update(updatedOptions: Partial> = {}) {\n cleanupEffects();\n\n const { components, ...rendererProps } = props.value.renderer;\n\n optionsRef.current = mergeDeep(\n rendererProps,\n props.value.core,\n {\n // We need to filter out default components so they can be replaced with\n // a new `renderer`, without getting rid of user components.\n // @MAJOR Deal with registering components with the same name as the\n // default ones. If we disallow overriding default components, we'd just\n // need to pass all `components` here.\n components: pickBy(\n components,\n ({ value }) => !value.hasOwnProperty('__autocomplete_componentName')\n ),\n initialState: lastStateRef.current,\n },\n updatedOptions\n );\n\n runReactives();\n runEffects();\n\n autocomplete.value.refresh().then(() => {\n scheduleRender(lastStateRef.current);\n });\n }\n\n function setIsModalOpen(value: boolean) {\n requestAnimationFrame(() => {\n const prevValue = props.value.core.environment.document.body.contains(\n dom.value.detachedOverlay\n );\n\n if (value === prevValue) {\n return;\n }\n\n if (value) {\n props.value.core.environment.document.body.appendChild(\n dom.value.detachedOverlay\n );\n props.value.core.environment.document.body.classList.add('aa-Detached');\n dom.value.input.focus();\n } else {\n props.value.core.environment.document.body.removeChild(\n dom.value.detachedOverlay\n );\n props.value.core.environment.document.body.classList.remove(\n 'aa-Detached'\n );\n autocomplete.value.setQuery('');\n autocomplete.value.refresh();\n }\n });\n }\n\n return {\n ...autocompleteScopeApi,\n update,\n destroy,\n };\n}\n","import {\n createRequester,\n fetchAlgoliaResults,\n} from '@algolia/autocomplete-preset-algolia';\n\nimport { userAgents } from '../userAgents';\n\nexport const createAlgoliaRequester = createRequester(\n (params) =>\n fetchAlgoliaResults({\n ...params,\n userAgents,\n }),\n 'algolia'\n);\n","import { RequestParams } from '@algolia/autocomplete-preset-algolia';\nimport { MultipleQueriesQuery } from '@algolia/client-search';\n\nimport { createAlgoliaRequester } from './createAlgoliaRequester';\n\n/**\n * Retrieves Algolia facet hits from multiple indices.\n */\nexport function getAlgoliaFacets(requestParams: RequestParams) {\n const requester = createAlgoliaRequester({\n transformResponse: (response) => response.facetHits,\n });\n\n const queries = requestParams.queries.map((query) => ({\n ...query,\n type: 'facet',\n })) as MultipleQueriesQuery[];\n\n return requester({\n ...requestParams,\n queries,\n });\n}\n","import { createAlgoliaRequester } from './createAlgoliaRequester';\n\n/**\n * Retrieves Algolia results from multiple indices.\n */\nexport const getAlgoliaResults = createAlgoliaRequester({\n transformResponse: (response) => response.hits,\n});\n"],"names":["createRef","initialValue","current","debounce","fn","time","timerId","undefined","_len","arguments","length","args","Array","_key","clearTimeout","setTimeout","apply","_slicedToArray","arr","i","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","o","minLen","_arrayLikeToArray","n","Object","prototype","toString","call","slice","constructor","name","from","test","len","arr2","_i","Symbol","iterator","_arr","_n","_d","_s","_e","next","done","push","value","err","isArray","_typeof","obj","decycle","seen","Set","has","newSeen","add","map","x","fromEntries","entries","_ref","_ref2","key","flatten","values","reduce","a","b","concat","autocompleteId","generateAutocompleteId","getAttributeValueByPath","record","path","getItemsCount","state","collections","sum","collection","items","invariant","condition","message","Error","noop","version","userAgents","segment","warnCache","warn","sanitizedMessage","trim","hasAlreadyPrinted","console","checkOptions","options","process","debug","createInternalCancelablePromise","promise","initialState","then","onfulfilled","onrejected","createCallback","catch","_catch","finally","_finally","onfinally","onCancelList","cancel","isCanceled","callbacks","forEach","callback","cancelable","onResult","fallback","arg","createCancelablePromiseList","list","cancelablePromise","filter","item","cancelAll","isEmpty","createConcurrentSafePromise","basePromiseId","latestResolvedId","latestResolvedValue","runConcurrentSafePromise","currentPromiseId","Promise","resolve","getNextActiveItemId","moveAmount","baseIndex","itemCount","defaultActiveItemId","numericIndex","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","_objectSpread","target","source","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","configurable","writable","getNormalizedSources","getSources","params","seenSourceIds","sources","JSON","stringify","all","maybeSource","Boolean","sourceId","includes","normalizedSource","getItemInputValue","query","getItemUrl","onSelect","setIsOpen","onActive","getCollectionFromActiveItemId","accumulatedCollectionsCount","acc","collectionsCount","index","previousValue","nextValue","collectionIndex","activeItemId","getRelativeActiveItemId","isOffsetFound","counter","previousItemsOffset","currentCollection","getActiveItem","itemInputValue","itemUrl","isOrContainsNode","parent","child","contains","regex","isSamsung","userAgent","match","mapToAlgoliaResponse","rawResults","results","result","_hits","hits","hit","__autocomplete_indexName","__autocomplete_queryID","queryID","facetHits","_facetHits","facetHit","label","count","_highlightResult","highlighted","createStore","reducer","props","onStoreStateChange","getState","dispatch","action","payload","prevState","type","pendingRequests","getAutocompleteSetters","store","setActiveItemId","setQuery","setCollections","rawValue","baseItemId","__autocomplete_id","setStatus","setContext","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","iter","getDefaultProps","pluginSubscribers","_props$id","environment","window","plugins","openOnFocus","placeholder","autoFocus","stallThreshold","shouldPanelOpen","reshape","id","completion","isOpen","status","context","onStateChange","_props$onStateChange","_x$onStateChange","onSubmit","_props$onSubmit","_x$onSubmit","onReset","_props$onReset","_x$onReset","plugin","nested","_x$onSelect","_x$onActive","navigator","navigate","_ref3","location","assign","navigateNewTab","_ref4","windowReference","open","focus","navigateNewWindow","_ref5","sourcesBySourceId","getItems","reshapeSources","isDescription","execute","isRequesterDescription","description","preResolve","itemsOrDescription","requests","queries","transformResponse","packed","searchClient","requesterId","container","find","_container$items","request","maybeDescription","responses","postResolve","matches","response","transform","every","_excluded","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","indexOf","propertyIsEnumerable","sourceKeys","lastStalledId","onInput","event","_ref$nextState","nextState","refresh","setters","_nextState$isOpen","_request","_nextState$isOpen2","isPanelOpen","highlightedItem","onKeyDown","triggerScrollIntoView","nodeItem","document","getElementById","scrollIntoViewIfNeeded","scrollIntoView","triggerOnActive","preventDefault","nextActiveItemId","metaKey","ctrlKey","shiftKey","altKey","_excluded2","_excluded3","_excluded4","_excluded5","getPropGetters","getEnvironmentProps","providedProps","inputElement","formElement","panelElement","rest","onMouseDownOrTouchStart","isAutocompleteInteraction","isTargetWithinAutocomplete","some","contextNode","onTouchStart","onMouseDown","onTouchMove","activeElement","blur","getRootProps","role","getFormProps","noValidate","_providedProps$inputE","_providedProps$inputE2","getInputProps","_props$environment$na","onFocus","_ref2$maxLength","maxLength","activeItem","shouldFallbackKeyHint","enterKeyHint","autoComplete","autoCorrect","autoCapitalize","spellCheck","onChange","currentTarget","_onKeyDown","onBlur","onClick","getLabelProps","htmlFor","getListProps","getPanelProps","onMouseLeave","getItemProps","onMouseMove","_item","_source","runPreCommand","getMetadata","_","_options$__autocomple","_options$__autocomple2","_options$__autocomple3","optionsKey","__autocomplete_metadata","extraOptions","__autocomplete_pluginOptions","ua","injectMetadata","_environment$navigato","_environment$navigato2","metadata","isMetadataEnabled","metadataContainer","createElement","headRef","querySelector","content","appendChild","getCompletion","_getActiveItem","stateReducer","hasOwnProperty","_nextState","createAutocomplete","subscribers","propGetters","Event","_plugin$subscribe","subscribe","t","ClearIcon","element","createElementNS","setAttribute","getHTMLElement","mergeClassNames","accValue","currentValue","join","isPlainObject","mergeDeep","pickBy","predicate","TOUCH_EVENTS_ALIASES","setStyle","style","eventProxy","_listeners","setProperty","dom","useCapture","nameLower","oldValue","replace","toLowerCase","addEventListener","removeEventListener","removeAttribute","getNormalizedName","setProperties","setPropertiesWithoutEvents","getCreateDomElement","createDomElement","tagName","children","append","Input","autocompleteScopeApi","classNames","getInputPropsCore","isDetached","inputProps","LoadingIcon","innerHTML","SearchIcon","createAutocompleteDom","autocomplete","setIsModalOpen","translations","rootProps","root","class","detachedContainer","stopPropagation","detachedOverlay","labelProps","submitButton","title","submitButtonTitle","clearButton","clearButtonTitle","loadingIndicator","input","inputWrapperPrefix","inputWrapperSuffix","inputWrapper","formProps","form","panelProps","panel","detachedSearchButtonIcon","detachedSearchButtonPlaceholder","textContent","detachedSearchButton","detachedCancelButton","detachedCancelButtonText","detachedFormContainer","createEffectWrapper","effects","cleanups","runEffect","effectCleanup","cleanupEffects","currentCleanups","cleanup","runEffects","currentEffects","effect","createReactiveWrapper","reactives","reactive","_fn","runReactives","HIGHLIGHT_PRE_TAG","HIGHLIGHT_POST_TAG","createAttributeSet","get","part","lastPart","isHighlighted","parseAttribute","highlightedValue","preTagParts","split","firstValue","shift","parts","postTagParts","parseAlgoliaHitHighlight","attribute","htmlEscapes","hasAlphanumeric","RegExp","regexEscapedHtml","regexHasEscapedHtml","unescape","character","isPartHighlighted","_parts","_parts2","isNextHighlighted","isPreviousHighlighted","reverseHighlightedParts","parseAlgoliaHitReverseHighlight","parseAlgoliaHitSnippet","parseAlgoliaHitReverseSnippet","createRequester","fetcher","fetcherParams","_fetcherParams$reques","createSpecifiedRequester","requesterParams","requester","requestParams","fetchAlgoliaResults","_ref$userAgents","addAlgoliaAgent","algoliaAgents","coreUserAgents","search","searchParameters","headers","hitsPerPage","highlightPreTag","highlightPostTag","createHighlightComponent","Fragment","Highlight","__autocomplete_componentName","createReverseHighlightComponent","ReverseHighlight","createReverseSnippetComponent","ReverseSnippet","createSnippetComponent","Snippet","defaultClassNames","panelLayout","sourceFooter","sourceHeader","sourceNoResults","defaultRender","render","defaultRenderer","preactCreateElement","PreactFragment","getDefaultOptions","panelContainer","panelPlacement","renderNoResults","renderer","detachedMediaQuery","components","core","containerElement","defaultedRenderer","defaultComponents","defaultTranslations","body","getComputedStyle","documentElement","getPropertyValue","getPanelPlacementStyle","containerRect","getBoundingClientRect","scrollTop","pageYOffset","top","height","left","right","clientWidth","width","maxWidth","formRect","renderSearchBox","hidden","renderPanel","html","removeChild","classList","toggle","sections","templates","noResults","sourceIndex","header","itemProps","footer","elements","hasNoResultsSourceTemplateRef","optionsRef","onStateChangeRef","matchMedia","hasItems","hasNoResultsTemplate","lastStateRef","htm","bind","setPanelPosition","scheduleRender","renderProps","environmentProps","panelContainerElement","debouncedRender","scrollablePanels","querySelectorAll","scrollablePanel","onResize","previousIsDetached","update","requestAnimationFrame","toggleModalClassname","isActive","isModalDetachedMql","hasModernEventListener","addListener","removeListener","destroy","updatedOptions","rendererProps","prevValue","remove","createAlgoliaRequester","getAlgoliaFacets","getAlgoliaResults"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAO,SAASA,SAAT,CAAmBC,YAAnB,EAAiC;EACtC,SAAO;EACLC,IAAAA,OAAO,EAAED;EADJ,GAAP;EAGD;;ECJM,SAASE,QAAT,CAAkBC,EAAlB,EAAsBC,IAAtB,EAA4B;EACjC,MAAIC,OAAO,GAAGC,SAAd;EACA,SAAO,YAAY;EACjB,SAAK,IAAIC,IAAI,GAAGC,SAAS,CAACC,MAArB,EAA6BC,IAAI,GAAG,IAAIC,KAAJ,CAAUJ,IAAV,CAApC,EAAqDK,IAAI,GAAG,CAAjE,EAAoEA,IAAI,GAAGL,IAA3E,EAAiFK,IAAI,EAArF,EAAyF;EACvFF,MAAAA,IAAI,CAACE,IAAD,CAAJ,GAAaJ,SAAS,CAACI,IAAD,CAAtB;EACD;;EAED,QAAIP,OAAJ,EAAa;EACXQ,MAAAA,YAAY,CAACR,OAAD,CAAZ;EACD;;EAEDA,IAAAA,OAAO,GAAGS,UAAU,CAAC,YAAY;EAC/B,aAAOX,EAAE,CAACY,KAAH,CAAS,KAAK,CAAd,EAAiBL,IAAjB,CAAP;EACD,KAFmB,EAEjBN,IAFiB,CAApB;EAGD,GAZD;EAaD;;ECfD,SAASY,cAAT,CAAwBC,GAAxB,EAA6BC,CAA7B,EAAgC;EAAE,SAAOC,eAAe,CAACF,GAAD,CAAf,IAAwBG,qBAAqB,CAACH,GAAD,EAAMC,CAAN,CAA7C,IAAyDG,6BAA2B,CAACJ,GAAD,EAAMC,CAAN,CAApF,IAAgGI,gBAAgB,EAAvH;EAA4H;;EAE9J,SAASA,gBAAT,GAA4B;EAAE,QAAM,IAAIC,SAAJ,CAAc,2IAAd,CAAN;EAAmK;;EAEjM,SAASF,6BAAT,CAAqCG,CAArC,EAAwCC,MAAxC,EAAgD;EAAE,MAAI,CAACD,CAAL,EAAQ;EAAQ,MAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B,OAAOE,mBAAiB,CAACF,CAAD,EAAIC,MAAJ,CAAxB;EAAqC,MAAIE,CAAC,GAAGC,MAAM,CAACC,SAAP,CAAiBC,QAAjB,CAA0BC,IAA1B,CAA+BP,CAA/B,EAAkCQ,KAAlC,CAAwC,CAAxC,EAA2C,CAAC,CAA5C,CAAR;EAAwD,MAAIL,CAAC,KAAK,QAAN,IAAkBH,CAAC,CAACS,WAAxB,EAAqCN,CAAC,GAAGH,CAAC,CAACS,WAAF,CAAcC,IAAlB;EAAwB,MAAIP,CAAC,KAAK,KAAN,IAAeA,CAAC,KAAK,KAAzB,EAAgC,OAAOhB,KAAK,CAACwB,IAAN,CAAWX,CAAX,CAAP;EAAsB,MAAIG,CAAC,KAAK,WAAN,IAAqB,2CAA2CS,IAA3C,CAAgDT,CAAhD,CAAzB,EAA6E,OAAOD,mBAAiB,CAACF,CAAD,EAAIC,MAAJ,CAAxB;EAAsC;;EAEha,SAASC,mBAAT,CAA2BT,GAA3B,EAAgCoB,GAAhC,EAAqC;EAAE,MAAIA,GAAG,IAAI,IAAP,IAAeA,GAAG,GAAGpB,GAAG,CAACR,MAA7B,EAAqC4B,GAAG,GAAGpB,GAAG,CAACR,MAAV;;EAAkB,OAAK,IAAIS,CAAC,GAAG,CAAR,EAAWoB,IAAI,GAAG,IAAI3B,KAAJ,CAAU0B,GAAV,CAAvB,EAAuCnB,CAAC,GAAGmB,GAA3C,EAAgDnB,CAAC,EAAjD,EAAqD;EAAEoB,IAAAA,IAAI,CAACpB,CAAD,CAAJ,GAAUD,GAAG,CAACC,CAAD,CAAb;EAAmB;;EAAC,SAAOoB,IAAP;EAAc;;EAEvL,SAASlB,qBAAT,CAA+BH,GAA/B,EAAoCC,CAApC,EAAuC;EAAE,MAAIqB,EAAE,GAAGtB,GAAG,IAAI,IAAP,GAAc,IAAd,GAAqB,OAAOuB,MAAP,KAAkB,WAAlB,IAAiCvB,GAAG,CAACuB,MAAM,CAACC,QAAR,CAApC,IAAyDxB,GAAG,CAAC,YAAD,CAA1F;;EAA0G,MAAIsB,EAAE,IAAI,IAAV,EAAgB;EAAQ,MAAIG,IAAI,GAAG,EAAX;EAAe,MAAIC,EAAE,GAAG,IAAT;EAAe,MAAIC,EAAE,GAAG,KAAT;;EAAgB,MAAIC,EAAJ,EAAQC,EAAR;;EAAY,MAAI;EAAE,SAAKP,EAAE,GAAGA,EAAE,CAACR,IAAH,CAAQd,GAAR,CAAV,EAAwB,EAAE0B,EAAE,GAAG,CAACE,EAAE,GAAGN,EAAE,CAACQ,IAAH,EAAN,EAAiBC,IAAxB,CAAxB,EAAuDL,EAAE,GAAG,IAA5D,EAAkE;EAAED,MAAAA,IAAI,CAACO,IAAL,CAAUJ,EAAE,CAACK,KAAb;;EAAqB,UAAIhC,CAAC,IAAIwB,IAAI,CAACjC,MAAL,KAAgBS,CAAzB,EAA4B;EAAQ;EAAE,GAArI,CAAsI,OAAOiC,GAAP,EAAY;EAAEP,IAAAA,EAAE,GAAG,IAAL;EAAWE,IAAAA,EAAE,GAAGK,GAAL;EAAW,GAA1K,SAAmL;EAAE,QAAI;EAAE,UAAI,CAACR,EAAD,IAAOJ,EAAE,CAAC,QAAD,CAAF,IAAgB,IAA3B,EAAiCA,EAAE,CAAC,QAAD,CAAF;EAAiB,KAAxD,SAAiE;EAAE,UAAIK,EAAJ,EAAQ,MAAME,EAAN;EAAW;EAAE;;EAAC,SAAOJ,IAAP;EAAc;;EAEjgB,SAASvB,eAAT,CAAyBF,GAAzB,EAA8B;EAAE,MAAIN,KAAK,CAACyC,OAAN,CAAcnC,GAAd,CAAJ,EAAwB,OAAOA,GAAP;EAAa;;EAErE,SAASoC,SAAT,CAAiBC,GAAjB,EAAsB;EAAE;;EAA2B,SAAOD,SAAO,GAAG,cAAc,OAAOb,MAArB,IAA+B,YAAY,OAAOA,MAAM,CAACC,QAAzD,GAAoE,UAAUa,GAAV,EAAe;EAAE,WAAO,OAAOA,GAAd;EAAoB,GAAzG,GAA4G,UAAUA,GAAV,EAAe;EAAE,WAAOA,GAAG,IAAI,cAAc,OAAOd,MAA5B,IAAsCc,GAAG,CAACrB,WAAJ,KAAoBO,MAA1D,IAAoEc,GAAG,KAAKd,MAAM,CAACX,SAAnF,GAA+F,QAA/F,GAA0G,OAAOyB,GAAxH;EAA8H,GAArQ,EAAuQD,SAAO,CAACC,GAAD,CAArR;EAA6R;EAEhV;EACA;EACA;EACA;;;EACO,SAASC,OAAT,CAAiBD,GAAjB,EAAsB;EAC3B,MAAIE,IAAI,GAAGhD,SAAS,CAACC,MAAV,GAAmB,CAAnB,IAAwBD,SAAS,CAAC,CAAD,CAAT,KAAiBF,SAAzC,GAAqDE,SAAS,CAAC,CAAD,CAA9D,GAAoE,IAAIiD,GAAJ,EAA/E;;EAEA,MAAgD,CAACH,GAA7C,IAAoDD,SAAO,CAACC,GAAD,CAAP,KAAiB,QAAzE,EAAmF;EACjF,WAAOA,GAAP;EACD;;EAED,MAAIE,IAAI,CAACE,GAAL,CAASJ,GAAT,CAAJ,EAAmB;EACjB,WAAO,YAAP;EACD;;EAED,MAAIK,OAAO,GAAGH,IAAI,CAACI,GAAL,CAASN,GAAT,CAAd;;EAEA,MAAI3C,KAAK,CAACyC,OAAN,CAAcE,GAAd,CAAJ,EAAwB;EACtB,WAAOA,GAAG,CAACO,GAAJ,CAAQ,UAAUC,CAAV,EAAa;EAC1B,aAAOP,OAAO,CAACO,CAAD,EAAIH,OAAJ,CAAd;EACD,KAFM,CAAP;EAGD;;EAED,SAAO/B,MAAM,CAACmC,WAAP,CAAmBnC,MAAM,CAACoC,OAAP,CAAeV,GAAf,EAAoBO,GAApB,CAAwB,UAAUI,IAAV,EAAgB;EAChE,QAAIC,KAAK,GAAGlD,cAAc,CAACiD,IAAD,EAAO,CAAP,CAA1B;EAAA,QACIE,GAAG,GAAGD,KAAK,CAAC,CAAD,CADf;EAAA,QAEIhB,KAAK,GAAGgB,KAAK,CAAC,CAAD,CAFjB;;EAIA,WAAO,CAACC,GAAD,EAAMZ,OAAO,CAACL,KAAD,EAAQS,OAAR,CAAb,CAAP;EACD,GANyB,CAAnB,CAAP;;;ECrCK,SAASS,OAAT,CAAiBC,MAAjB,EAAyB;EAC9B,SAAOA,MAAM,CAACC,MAAP,CAAc,UAAUC,CAAV,EAAaC,CAAb,EAAgB;EACnC,WAAOD,CAAC,CAACE,MAAF,CAASD,CAAT,CAAP;EACD,GAFM,EAEJ,EAFI,CAAP;EAGD;;ECJD,IAAIE,cAAc,GAAG,CAArB;EACO,SAASC,sBAAT,GAAkC;EACvC,SAAO,gBAAgBF,MAAhB,CAAuBC,cAAc,EAArC,CAAP;EACD;;ECHM,SAASE,uBAAT,CAAiCC,MAAjC,EAAyCC,IAAzC,EAA+C;EACpD,SAAOA,IAAI,CAACR,MAAL,CAAY,UAAUrE,OAAV,EAAmBkE,GAAnB,EAAwB;EACzC,WAAOlE,OAAO,IAAIA,OAAO,CAACkE,GAAD,CAAzB;EACD,GAFM,EAEJU,MAFI,CAAP;EAGD;;ECJM,SAASE,aAAT,CAAuBC,KAAvB,EAA8B;EACnC,MAAIA,KAAK,CAACC,WAAN,CAAkBxE,MAAlB,KAA6B,CAAjC,EAAoC;EAClC,WAAO,CAAP;EACD;;EAED,SAAOuE,KAAK,CAACC,WAAN,CAAkBX,MAAlB,CAAyB,UAAUY,GAAV,EAAeC,UAAf,EAA2B;EACzD,WAAOD,GAAG,GAAGC,UAAU,CAACC,KAAX,CAAiB3E,MAA9B;EACD,GAFM,EAEJ,CAFI,CAAP;EAGD;;ECRD;EACA;EACA;EACA;EACA;EACO,SAAS4E,SAAT,CAAmBC,SAAnB,EAA8BC,OAA9B,EAAuC;;EAK5C,MAAI,CAACD,SAAL,EAAgB;EACd,UAAM,IAAIE,KAAJ,CAAU,kBAAkBf,MAAlB,CAAyB,OAAOc,OAAP,KAAmB,UAAnB,GAAgCA,OAAO,EAAvC,GAA4CA,OAArE,CAAV,CAAN;EACD;;;ECZI,IAAIE,IAAI,GAAG,SAASA,IAAT,GAAgB,EAA3B;;ECAA,IAAIC,OAAO,GAAG,OAAd;;ECCA,IAAIC,YAAU,GAAG,CAAC;EACvBC,EAAAA,OAAO,EAAE,mBADc;EAEvBF,EAAAA,OAAO,EAAEA;EAFc,CAAD,CAAjB;;ECDA,IAAIG,SAAS,GAAG;EACrB5F,EAAAA,OAAO,EAAE;EADY,CAAhB;EAGP;EACA;EACA;EACA;;EAEO,SAAS6F,IAAT,CAAcR,SAAd,EAAyBC,OAAzB,EAAkC;;EAKvC,MAAID,SAAJ,EAAe;EACb;EACD;;EAED,MAAIS,gBAAgB,GAAGR,OAAO,CAACS,IAAR,EAAvB;EACA,MAAIC,iBAAiB,GAAGJ,SAAS,CAAC5F,OAAV,CAAkB8F,gBAAlB,CAAxB;;EAEA,MAAI,CAACE,iBAAL,EAAwB;EACtBJ,IAAAA,SAAS,CAAC5F,OAAV,CAAkB8F,gBAAlB,IAAsC,IAAtC,CADsB;;EAGtBG,IAAAA,OAAO,CAACJ,IAAR,CAAa,kBAAkBrB,MAAlB,CAAyBsB,gBAAzB,CAAb;EACD;;;ECvBI,SAASI,YAAT,CAAsBC,OAAtB,EAA+B;EACpC,EAFFC,aAAA,KAAyB,YAEvB,GAAwCP,IAAI,CAAC,CAACM,OAAO,CAACE,KAAV,EAAiB,6FAAjB,CAA5C,UAAA;;;ECFF,SAASC,+BAAT,CAAyCC,OAAzC,EAAkDC,YAAlD,EAAgE;EAC9D,MAAIzB,KAAK,GAAGyB,YAAZ;EACA,SAAO;EACLC,IAAAA,IAAI,EAAE,SAASA,IAAT,CAAcC,WAAd,EAA2BC,UAA3B,EAAuC;EAC3C,aAAOL,+BAA+B,CAACC,OAAO,CAACE,IAAR,CAAaG,cAAc,CAACF,WAAD,EAAc3B,KAAd,EAAqBwB,OAArB,CAA3B,EAA0DK,cAAc,CAACD,UAAD,EAAa5B,KAAb,EAAoBwB,OAApB,CAAxE,CAAD,EAAwGxB,KAAxG,CAAtC;EACD,KAHI;EAIL8B,IAAAA,KAAK,EAAE,SAASC,MAAT,CAAgBH,UAAhB,EAA4B;EACjC,aAAOL,+BAA+B,CAACC,OAAO,CAACM,KAAR,CAAcD,cAAc,CAACD,UAAD,EAAa5B,KAAb,EAAoBwB,OAApB,CAA5B,CAAD,EAA4DxB,KAA5D,CAAtC;EACD,KANI;EAOLgC,IAAAA,OAAO,EAAE,SAASC,QAAT,CAAkBC,SAAlB,EAA6B;EACpC,UAAIA,SAAJ,EAAe;EACblC,QAAAA,KAAK,CAACmC,YAAN,CAAmBlE,IAAnB,CAAwBiE,SAAxB;EACD;;EAED,aAAOX,+BAA+B,CAACC,OAAO,CAACQ,OAAR,CAAgBH,cAAc,CAACK,SAAS,IAAI,YAAY;EAC7FlC,QAAAA,KAAK,CAACmC,YAAN,GAAqB,EAArB;EACA,eAAOD,SAAS,EAAhB;EACD,OAHoE,EAGlElC,KAHkE,EAG3DwB,OAH2D,CAA9B,CAAD,EAGjBxB,KAHiB,CAAtC;EAID,KAhBI;EAiBLoC,IAAAA,MAAM,EAAE,SAASA,MAAT,GAAkB;EACxBpC,MAAAA,KAAK,CAACqC,UAAN,GAAmB,IAAnB;EACA,UAAIC,SAAS,GAAGtC,KAAK,CAACmC,YAAtB;EACAnC,MAAAA,KAAK,CAACmC,YAAN,GAAqB,EAArB;EACAG,MAAAA,SAAS,CAACC,OAAV,CAAkB,UAAUC,QAAV,EAAoB;EACpCA,QAAAA,QAAQ;EACT,OAFD;EAGD,KAxBI;EAyBLH,IAAAA,UAAU,EAAE,SAASA,UAAT,GAAsB;EAChC,aAAOrC,KAAK,CAACqC,UAAN,KAAqB,IAA5B;EACD;EA3BI,GAAP;EA6BD;;EAmBM,SAASI,UAAT,CAAoBjB,OAApB,EAA6B;EAClC,SAAOD,+BAA+B,CAACC,OAAD,EAAU;EAC9Ca,IAAAA,UAAU,EAAE,KADkC;EAE9CF,IAAAA,YAAY,EAAE;EAFgC,GAAV,CAAtC;EAID;;EAED,SAASN,cAAT,CAAwBa,QAAxB,EAAkC1C,KAAlC,EAAyC2C,QAAzC,EAAmD;EACjD,MAAI,CAACD,QAAL,EAAe;EACb,WAAOC,QAAP;EACD;;EAED,SAAO,SAASH,QAAT,CAAkBI,GAAlB,EAAuB;EAC5B,QAAI5C,KAAK,CAACqC,UAAV,EAAsB;EACpB,aAAOO,GAAP;EACD;;EAED,WAAOF,QAAQ,CAACE,GAAD,CAAf;EACD,GAND;EAOD;;ECrEM,SAASC,2BAAT,GAAuC;EAC5C,MAAIC,IAAI,GAAG,EAAX;EACA,SAAO;EACLlE,IAAAA,GAAG,EAAE,SAASA,GAAT,CAAamE,iBAAb,EAAgC;EACnCD,MAAAA,IAAI,CAAC7E,IAAL,CAAU8E,iBAAV;EACA,aAAOA,iBAAiB,CAACf,OAAlB,CAA0B,YAAY;EAC3Cc,QAAAA,IAAI,GAAGA,IAAI,CAACE,MAAL,CAAY,UAAUC,IAAV,EAAgB;EACjC,iBAAOA,IAAI,KAAKF,iBAAhB;EACD,SAFM,CAAP;EAGD,OAJM,CAAP;EAKD,KARI;EASLG,IAAAA,SAAS,EAAE,SAASA,SAAT,GAAqB;EAC9BJ,MAAAA,IAAI,CAACP,OAAL,CAAa,UAAUf,OAAV,EAAmB;EAC9B,eAAOA,OAAO,CAACY,MAAR,EAAP;EACD,OAFD;EAGD,KAbI;EAcLe,IAAAA,OAAO,EAAE,SAASA,OAAT,GAAmB;EAC1B,aAAOL,IAAI,CAACrH,MAAL,KAAgB,CAAvB;EACD;EAhBI,GAAP;EAkBD;;ECpBD;EACA;EACA;EACA;EACA;EACA;EACO,SAAS2H,2BAAT,GAAuC;EAC5C,MAAIC,aAAa,GAAG,CAAC,CAArB;EACA,MAAIC,gBAAgB,GAAG,CAAC,CAAxB;EACA,MAAIC,mBAAmB,GAAGjI,SAA1B;EACA,SAAO,SAASkI,wBAAT,CAAkChC,OAAlC,EAA2C;EAChD6B,IAAAA,aAAa;EACb,QAAII,gBAAgB,GAAGJ,aAAvB;EACA,WAAOK,OAAO,CAACC,OAAR,CAAgBnC,OAAhB,EAAyBE,IAAzB,CAA8B,UAAU5C,CAAV,EAAa;EAChD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAIyE,mBAAmB,IAAIE,gBAAgB,GAAGH,gBAA9C,EAAgE;EAC9D,eAAOC,mBAAP;EACD;;EAEDD,MAAAA,gBAAgB,GAAGG,gBAAnB;EACAF,MAAAA,mBAAmB,GAAGzE,CAAtB;EACA,aAAOA,CAAP;EACD,KArBM,CAAP;EAsBD,GAzBD;EA0BD;;ECpCD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACO,SAAS8E,mBAAT,CAA6BC,UAA7B,EAAyCC,SAAzC,EAAoDC,SAApD,EAA+DC,mBAA/D,EAAoF;EACzF,MAAI,CAACD,SAAL,EAAgB;EACd,WAAO,IAAP;EACD;;EAED,MAAIF,UAAU,GAAG,CAAb,KAAmBC,SAAS,KAAK,IAAd,IAAsBE,mBAAmB,KAAK,IAAxB,IAAgCF,SAAS,KAAK,CAAvF,CAAJ,EAA+F;EAC7F,WAAOC,SAAS,GAAGF,UAAnB;EACD;;EAED,MAAII,YAAY,GAAG,CAACH,SAAS,KAAK,IAAd,GAAqB,CAAC,CAAtB,GAA0BA,SAA3B,IAAwCD,UAA3D;;EAEA,MAAII,YAAY,IAAI,CAAC,CAAjB,IAAsBA,YAAY,IAAIF,SAA1C,EAAqD;EACnD,WAAOC,mBAAmB,KAAK,IAAxB,GAA+B,IAA/B,GAAsC,CAA7C;EACD;;EAED,SAAOC,YAAP;EACD;;EChCD,SAASC,SAAT,CAAiBC,MAAjB,EAAyBC,cAAzB,EAAyC;EAAE,MAAIC,IAAI,GAAGzH,MAAM,CAACyH,IAAP,CAAYF,MAAZ,CAAX;;EAAgC,MAAIvH,MAAM,CAAC0H,qBAAX,EAAkC;EAAE,QAAIC,OAAO,GAAG3H,MAAM,CAAC0H,qBAAP,CAA6BH,MAA7B,CAAd;EAAoDC,IAAAA,cAAc,KAAKG,OAAO,GAAGA,OAAO,CAACvB,MAAR,CAAe,UAAUwB,GAAV,EAAe;EAAE,aAAO5H,MAAM,CAAC6H,wBAAP,CAAgCN,MAAhC,EAAwCK,GAAxC,EAA6CE,UAApD;EAAiE,KAAjG,CAAf,CAAd,EAAkIL,IAAI,CAACpG,IAAL,CAAUlC,KAAV,CAAgBsI,IAAhB,EAAsBE,OAAtB,CAAlI;EAAmK;;EAAC,SAAOF,IAAP;EAAc;;EAErV,SAASM,eAAT,CAAuBC,MAAvB,EAA+B;EAAE,OAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGV,SAAS,CAACC,MAA9B,EAAsCS,CAAC,EAAvC,EAA2C;EAAE,QAAI2I,MAAM,GAAG,QAAQrJ,SAAS,CAACU,CAAD,CAAjB,GAAuBV,SAAS,CAACU,CAAD,CAAhC,GAAsC,EAAnD;EAAuDA,IAAAA,CAAC,GAAG,CAAJ,GAAQgI,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,EAAiB,CAAC,CAAlB,CAAP,CAA4BtC,OAA5B,CAAoC,UAAUpD,GAAV,EAAe;EAAE2F,MAAAA,iBAAe,CAACF,MAAD,EAASzF,GAAT,EAAc0F,MAAM,CAAC1F,GAAD,CAApB,CAAf;EAA4C,KAAjG,CAAR,GAA6GvC,MAAM,CAACmI,yBAAP,GAAmCnI,MAAM,CAACoI,gBAAP,CAAwBJ,MAAxB,EAAgChI,MAAM,CAACmI,yBAAP,CAAiCF,MAAjC,CAAhC,CAAnC,GAA+GX,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,CAAP,CAAwBtC,OAAxB,CAAgC,UAAUpD,GAAV,EAAe;EAAEvC,MAAAA,MAAM,CAACqI,cAAP,CAAsBL,MAAtB,EAA8BzF,GAA9B,EAAmCvC,MAAM,CAAC6H,wBAAP,CAAgCI,MAAhC,EAAwC1F,GAAxC,CAAnC;EAAmF,KAApI,CAA5N;EAAoW;;EAAC,SAAOyF,MAAP;EAAgB;;EAE1f,SAASE,iBAAT,CAAyBxG,GAAzB,EAA8Ba,GAA9B,EAAmCjB,KAAnC,EAA0C;EAAE,MAAIiB,GAAG,IAAIb,GAAX,EAAgB;EAAE1B,IAAAA,MAAM,CAACqI,cAAP,CAAsB3G,GAAtB,EAA2Ba,GAA3B,EAAgC;EAAEjB,MAAAA,KAAK,EAAEA,KAAT;EAAgBwG,MAAAA,UAAU,EAAE,IAA5B;EAAkCQ,MAAAA,YAAY,EAAE,IAAhD;EAAsDC,MAAAA,QAAQ,EAAE;EAAhE,KAAhC;EAA0G,GAA5H,MAAkI;EAAE7G,IAAAA,GAAG,CAACa,GAAD,CAAH,GAAWjB,KAAX;EAAmB;;EAAC,SAAOI,GAAP;EAAa;;EAEjN,SAASD,SAAT,CAAiBC,GAAjB,EAAsB;EAAE;;EAA2B,SAAOD,SAAO,GAAG,cAAc,OAAOb,MAArB,IAA+B,YAAY,OAAOA,MAAM,CAACC,QAAzD,GAAoE,UAAUa,GAAV,EAAe;EAAE,WAAO,OAAOA,GAAd;EAAoB,GAAzG,GAA4G,UAAUA,GAAV,EAAe;EAAE,WAAOA,GAAG,IAAI,cAAc,OAAOd,MAA5B,IAAsCc,GAAG,CAACrB,WAAJ,KAAoBO,MAA1D,IAAoEc,GAAG,KAAKd,MAAM,CAACX,SAAnF,GAA+F,QAA/F,GAA0G,OAAOyB,GAAxH;EAA8H,GAArQ,EAAuQD,SAAO,CAACC,GAAD,CAArR;EAA6R;EAGzU,SAAS8G,oBAAT,CAA8BC,UAA9B,EAA0CC,MAA1C,EAAkD;EACvD,MAAIC,aAAa,GAAG,EAApB;EACA,SAAO7B,OAAO,CAACC,OAAR,CAAgB0B,UAAU,CAACC,MAAD,CAA1B,EAAoC5D,IAApC,CAAyC,UAAU8D,OAAV,EAAmB;EACjEnF,IAAAA,SAAS,CAAC1E,KAAK,CAACyC,OAAN,CAAcoH,OAAd,CAAD,EAAyB,YAAY;EAC5C,aAAO,+EAA+E/F,MAA/E,CAAsFgG,IAAI,CAACC,SAAL,CAAerH,SAAO,CAACmH,OAAD,CAAtB,CAAtF,EAAwH,OAAxH,EAAiI/F,MAAjI,CAAwIgG,IAAI,CAACC,SAAL,CAAenH,OAAO,CAACiH,OAAD,CAAtB,EAAiC,IAAjC,EAAuC,CAAvC,CAAxI,CAAP;EACD,KAFQ,CAAT;EAGA,WAAO9B,OAAO,CAACiC,GAAR,CAAYH,OAAO;EAC1B;EACA;EAF0B,KAGzBxC,MAHkB,CAGX,UAAU4C,WAAV,EAAuB;EAC7B,aAAOC,OAAO,CAACD,WAAD,CAAd;EACD,KALkB,EAKhB/G,GALgB,CAKZ,UAAUgG,MAAV,EAAkB;EACvBxE,MAAAA,SAAS,CAAC,OAAOwE,MAAM,CAACiB,QAAd,KAA2B,QAA5B,EAAsC,4CAAtC,CAAT;;EAEA,UAAIP,aAAa,CAACQ,QAAd,CAAuBlB,MAAM,CAACiB,QAA9B,CAAJ,EAA6C;EAC3C,cAAM,IAAItF,KAAJ,CAAU,iCAAiCf,MAAjC,CAAwCgG,IAAI,CAACC,SAAL,CAAeb,MAAM,CAACiB,QAAtB,CAAxC,EAAyE,iBAAzE,CAAV,CAAN;EACD;;EAEDP,MAAAA,aAAa,CAACtH,IAAd,CAAmB4G,MAAM,CAACiB,QAA1B;;EAEA,UAAIE,gBAAgB,GAAGrB,eAAa,CAAC;EACnCsB,QAAAA,iBAAiB,EAAE,SAASA,iBAAT,CAA2BhH,IAA3B,EAAiC;EAClD,cAAIe,KAAK,GAAGf,IAAI,CAACe,KAAjB;EACA,iBAAOA,KAAK,CAACkG,KAAb;EACD,SAJkC;EAKnCC,QAAAA,UAAU,EAAE,SAASA,UAAT,GAAsB;EAChC,iBAAO7K,SAAP;EACD,SAPkC;EAQnC8K,QAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkBlH,KAAlB,EAAyB;EACjC,cAAImH,SAAS,GAAGnH,KAAK,CAACmH,SAAtB;EACAA,UAAAA,SAAS,CAAC,KAAD,CAAT;EACD,SAXkC;EAYnCC,QAAAA,QAAQ,EAAE7F;EAZyB,OAAD,EAajCoE,MAbiC,CAApC;;EAeA,aAAOnB,OAAO,CAACC,OAAR,CAAgBqC,gBAAhB,CAAP;EACD,KA9BkB,CAAZ,CAAP;EA+BD,GAnCM,CAAP;EAoCD;;EC/CD;EACA;EACA;EACA,SAASO,6BAAT,CAAuCvG,KAAvC,EAA8C;EAC5C;EACA;EACA;EACA,MAAIwG,2BAA2B,GAAGxG,KAAK,CAACC,WAAN,CAAkBpB,GAAlB,CAAsB,UAAUoB,WAAV,EAAuB;EAC7E,WAAOA,WAAW,CAACG,KAAZ,CAAkB3E,MAAzB;EACD,GAFiC,EAE/B6D,MAF+B,CAExB,UAAUmH,GAAV,EAAeC,gBAAf,EAAiCC,KAAjC,EAAwC;EAChD,QAAIC,aAAa,GAAGH,GAAG,CAACE,KAAK,GAAG,CAAT,CAAH,IAAkB,CAAtC;EACA,QAAIE,SAAS,GAAGD,aAAa,GAAGF,gBAAhC;EACAD,IAAAA,GAAG,CAACxI,IAAJ,CAAS4I,SAAT;EACA,WAAOJ,GAAP;EACD,GAPiC,EAO/B,EAP+B,CAAlC,CAJ4C;;EAa5C,MAAIK,eAAe,GAAGN,2BAA2B,CAAClH,MAA5B,CAAmC,UAAUmH,GAAV,EAAexL,OAAf,EAAwB;EAC/E,QAAIA,OAAO,IAAI+E,KAAK,CAAC+G,YAArB,EAAmC;EACjC,aAAON,GAAG,GAAG,CAAb;EACD;;EAED,WAAOA,GAAP;EACD,GANqB,EAMnB,CANmB,CAAtB;EAOA,SAAOzG,KAAK,CAACC,WAAN,CAAkB6G,eAAlB,CAAP;EACD;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EAGA,SAASE,uBAAT,CAAiC/H,IAAjC,EAAuC;EACrC,MAAIe,KAAK,GAAGf,IAAI,CAACe,KAAjB;EAAA,MACIG,UAAU,GAAGlB,IAAI,CAACkB,UADtB;EAEA,MAAI8G,aAAa,GAAG,KAApB;EACA,MAAIC,OAAO,GAAG,CAAd;EACA,MAAIC,mBAAmB,GAAG,CAA1B;;EAEA,SAAOF,aAAa,KAAK,KAAzB,EAAgC;EAC9B,QAAIG,iBAAiB,GAAGpH,KAAK,CAACC,WAAN,CAAkBiH,OAAlB,CAAxB;;EAEA,QAAIE,iBAAiB,KAAKjH,UAA1B,EAAsC;EACpC8G,MAAAA,aAAa,GAAG,IAAhB;EACA;EACD;;EAEDE,IAAAA,mBAAmB,IAAIC,iBAAiB,CAAChH,KAAlB,CAAwB3E,MAA/C;EACAyL,IAAAA,OAAO;EACR;;EAED,SAAOlH,KAAK,CAAC+G,YAAN,GAAqBI,mBAA5B;EACD;;EAEM,SAASE,aAAT,CAAuBrH,KAAvB,EAA8B;EACnC,MAAIG,UAAU,GAAGoG,6BAA6B,CAACvG,KAAD,CAA9C;;EAEA,MAAI,CAACG,UAAL,EAAiB;EACf,WAAO,IAAP;EACD;;EAED,MAAI8C,IAAI,GAAG9C,UAAU,CAACC,KAAX,CAAiB4G,uBAAuB,CAAC;EAClDhH,IAAAA,KAAK,EAAEA,KAD2C;EAElDG,IAAAA,UAAU,EAAEA;EAFsC,GAAD,CAAxC,CAAX;EAIA,MAAI0E,MAAM,GAAG1E,UAAU,CAAC0E,MAAxB;EACA,MAAIyC,cAAc,GAAGzC,MAAM,CAACoB,iBAAP,CAAyB;EAC5ChD,IAAAA,IAAI,EAAEA,IADsC;EAE5CjD,IAAAA,KAAK,EAAEA;EAFqC,GAAzB,CAArB;EAIA,MAAIuH,OAAO,GAAG1C,MAAM,CAACsB,UAAP,CAAkB;EAC9BlD,IAAAA,IAAI,EAAEA,IADwB;EAE9BjD,IAAAA,KAAK,EAAEA;EAFuB,GAAlB,CAAd;EAIA,SAAO;EACLiD,IAAAA,IAAI,EAAEA,IADD;EAELqE,IAAAA,cAAc,EAAEA,cAFX;EAGLC,IAAAA,OAAO,EAAEA,OAHJ;EAIL1C,IAAAA,MAAM,EAAEA;EAJH,GAAP;EAMD;;ECpFM,SAAS2C,gBAAT,CAA0BC,MAA1B,EAAkCC,KAAlC,EAAyC;EAC9C,SAAOD,MAAM,KAAKC,KAAX,IAAoBD,MAAM,CAACE,QAAP,CAAgBD,KAAhB,CAA3B;EACD;;ECFD,IAAIE,KAAK,GAAG,sCAAZ;EACO,SAASC,SAAT,CAAmBC,SAAnB,EAA8B;EACnC,SAAOjC,OAAO,CAACiC,SAAS,IAAIA,SAAS,CAACC,KAAV,CAAgBH,KAAhB,CAAd,CAAd;EACD;;ECHD,SAAS1D,SAAT,CAAiBC,MAAjB,EAAyBC,cAAzB,EAAyC;EAAE,MAAIC,IAAI,GAAGzH,MAAM,CAACyH,IAAP,CAAYF,MAAZ,CAAX;;EAAgC,MAAIvH,MAAM,CAAC0H,qBAAX,EAAkC;EAAE,QAAIC,OAAO,GAAG3H,MAAM,CAAC0H,qBAAP,CAA6BH,MAA7B,CAAd;EAAoDC,IAAAA,cAAc,KAAKG,OAAO,GAAGA,OAAO,CAACvB,MAAR,CAAe,UAAUwB,GAAV,EAAe;EAAE,aAAO5H,MAAM,CAAC6H,wBAAP,CAAgCN,MAAhC,EAAwCK,GAAxC,EAA6CE,UAApD;EAAiE,KAAjG,CAAf,CAAd,EAAkIL,IAAI,CAACpG,IAAL,CAAUlC,KAAV,CAAgBsI,IAAhB,EAAsBE,OAAtB,CAAlI;EAAmK;;EAAC,SAAOF,IAAP;EAAc;;EAErV,SAASM,eAAT,CAAuBC,MAAvB,EAA+B;EAAE,OAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGV,SAAS,CAACC,MAA9B,EAAsCS,CAAC,EAAvC,EAA2C;EAAE,QAAI2I,MAAM,GAAG,QAAQrJ,SAAS,CAACU,CAAD,CAAjB,GAAuBV,SAAS,CAACU,CAAD,CAAhC,GAAsC,EAAnD;EAAuDA,IAAAA,CAAC,GAAG,CAAJ,GAAQgI,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,EAAiB,CAAC,CAAlB,CAAP,CAA4BtC,OAA5B,CAAoC,UAAUpD,GAAV,EAAe;EAAE2F,MAAAA,iBAAe,CAACF,MAAD,EAASzF,GAAT,EAAc0F,MAAM,CAAC1F,GAAD,CAApB,CAAf;EAA4C,KAAjG,CAAR,GAA6GvC,MAAM,CAACmI,yBAAP,GAAmCnI,MAAM,CAACoI,gBAAP,CAAwBJ,MAAxB,EAAgChI,MAAM,CAACmI,yBAAP,CAAiCF,MAAjC,CAAhC,CAAnC,GAA+GX,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,CAAP,CAAwBtC,OAAxB,CAAgC,UAAUpD,GAAV,EAAe;EAAEvC,MAAAA,MAAM,CAACqI,cAAP,CAAsBL,MAAtB,EAA8BzF,GAA9B,EAAmCvC,MAAM,CAAC6H,wBAAP,CAAgCI,MAAhC,EAAwC1F,GAAxC,CAAnC;EAAmF,KAApI,CAA5N;EAAoW;;EAAC,SAAOyF,MAAP;EAAgB;;EAE1f,SAASE,iBAAT,CAAyBxG,GAAzB,EAA8Ba,GAA9B,EAAmCjB,KAAnC,EAA0C;EAAE,MAAIiB,GAAG,IAAIb,GAAX,EAAgB;EAAE1B,IAAAA,MAAM,CAACqI,cAAP,CAAsB3G,GAAtB,EAA2Ba,GAA3B,EAAgC;EAAEjB,MAAAA,KAAK,EAAEA,KAAT;EAAgBwG,MAAAA,UAAU,EAAE,IAA5B;EAAkCQ,MAAAA,YAAY,EAAE,IAAhD;EAAsDC,MAAAA,QAAQ,EAAE;EAAhE,KAAhC;EAA0G,GAA5H,MAAkI;EAAE7G,IAAAA,GAAG,CAACa,GAAD,CAAH,GAAWjB,KAAX;EAAmB;;EAAC,SAAOI,GAAP;EAAa;;EAE1M,SAAS0J,oBAAT,CAA8BC,UAA9B,EAA0C;EAC/C,MAAIC,OAAO,GAAGD,UAAU,CAACpJ,GAAX,CAAe,UAAUsJ,MAAV,EAAkB;EAC7C,QAAIC,KAAJ;;EAEA,WAAOzD,eAAa,CAACA,eAAa,CAAC,EAAD,EAAKwD,MAAL,CAAd,EAA4B,EAA5B,EAAgC;EAClDE,MAAAA,IAAI,EAAE,CAACD,KAAK,GAAGD,MAAM,CAACE,IAAhB,MAA0B,IAA1B,IAAkCD,KAAK,KAAK,KAAK,CAAjD,GAAqD,KAAK,CAA1D,GAA8DA,KAAK,CAACvJ,GAAN,CAAU,UAAUyJ,GAAV,EAAe;EAC3F;EACA,eAAO3D,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK2D,GAAL,CAAd,EAAyB,EAAzB,EAA6B;EAC/CC,UAAAA,wBAAwB,EAAEJ,MAAM,CAACxB,KADc;EAE/C6B,UAAAA,sBAAsB,EAAEL,MAAM,CAACM;EAFgB,SAA7B,CAApB;EAID,OANmE;EADlB,KAAhC,CAApB;EASD,GAZa,CAAd;EAaA,SAAO;EACLP,IAAAA,OAAO,EAAEA,OADJ;EAELG,IAAAA,IAAI,EAAEH,OAAO,CAACrJ,GAAR,CAAY,UAAUsJ,MAAV,EAAkB;EAClC,aAAOA,MAAM,CAACE,IAAd;EACD,KAFK,EAEHrF,MAFG,CAEI6C,OAFJ,CAFD;EAKL6C,IAAAA,SAAS,EAAER,OAAO,CAACrJ,GAAR,CAAY,UAAUsJ,MAAV,EAAkB;EACvC,UAAIQ,UAAJ;;EAEA,aAAO,CAACA,UAAU,GAAGR,MAAM,CAACO,SAArB,MAAoC,IAApC,IAA4CC,UAAU,KAAK,KAAK,CAAhE,GAAoE,KAAK,CAAzE,GAA6EA,UAAU,CAAC9J,GAAX,CAAe,UAAU+J,QAAV,EAAoB;EACrH;EACA,eAAO;EACLC,UAAAA,KAAK,EAAED,QAAQ,CAAC1K,KADX;EAEL4K,UAAAA,KAAK,EAAEF,QAAQ,CAACE,KAFX;EAGLC,UAAAA,gBAAgB,EAAE;EAChBF,YAAAA,KAAK,EAAE;EACL3K,cAAAA,KAAK,EAAE0K,QAAQ,CAACI;EADX;EADS;EAHb,SAAP;EASD,OAXmF,CAApF;EAYD,KAfU,EAeRhG,MAfQ,CAeD6C,OAfC;EALN,GAAP;EAsBD;;EC1CD,SAAS3B,SAAT,CAAiBC,MAAjB,EAAyBC,cAAzB,EAAyC;EAAE,MAAIC,IAAI,GAAGzH,MAAM,CAACyH,IAAP,CAAYF,MAAZ,CAAX;;EAAgC,MAAIvH,MAAM,CAAC0H,qBAAX,EAAkC;EAAE,QAAIC,OAAO,GAAG3H,MAAM,CAAC0H,qBAAP,CAA6BH,MAA7B,CAAd;EAAoDC,IAAAA,cAAc,KAAKG,OAAO,GAAGA,OAAO,CAACvB,MAAR,CAAe,UAAUwB,GAAV,EAAe;EAAE,aAAO5H,MAAM,CAAC6H,wBAAP,CAAgCN,MAAhC,EAAwCK,GAAxC,EAA6CE,UAApD;EAAiE,KAAjG,CAAf,CAAd,EAAkIL,IAAI,CAACpG,IAAL,CAAUlC,KAAV,CAAgBsI,IAAhB,EAAsBE,OAAtB,CAAlI;EAAmK;;EAAC,SAAOF,IAAP;EAAc;;EAErV,SAASM,eAAT,CAAuBC,MAAvB,EAA+B;EAAE,OAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGV,SAAS,CAACC,MAA9B,EAAsCS,CAAC,EAAvC,EAA2C;EAAE,QAAI2I,MAAM,GAAG,QAAQrJ,SAAS,CAACU,CAAD,CAAjB,GAAuBV,SAAS,CAACU,CAAD,CAAhC,GAAsC,EAAnD;EAAuDA,IAAAA,CAAC,GAAG,CAAJ,GAAQgI,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,EAAiB,CAAC,CAAlB,CAAP,CAA4BtC,OAA5B,CAAoC,UAAUpD,GAAV,EAAe;EAAE2F,MAAAA,iBAAe,CAACF,MAAD,EAASzF,GAAT,EAAc0F,MAAM,CAAC1F,GAAD,CAApB,CAAf;EAA4C,KAAjG,CAAR,GAA6GvC,MAAM,CAACmI,yBAAP,GAAmCnI,MAAM,CAACoI,gBAAP,CAAwBJ,MAAxB,EAAgChI,MAAM,CAACmI,yBAAP,CAAiCF,MAAjC,CAAhC,CAAnC,GAA+GX,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,CAAP,CAAwBtC,OAAxB,CAAgC,UAAUpD,GAAV,EAAe;EAAEvC,MAAAA,MAAM,CAACqI,cAAP,CAAsBL,MAAtB,EAA8BzF,GAA9B,EAAmCvC,MAAM,CAAC6H,wBAAP,CAAgCI,MAAhC,EAAwC1F,GAAxC,CAAnC;EAAmF,KAApI,CAA5N;EAAoW;;EAAC,SAAOyF,MAAP;EAAgB;;EAE1f,SAASE,iBAAT,CAAyBxG,GAAzB,EAA8Ba,GAA9B,EAAmCjB,KAAnC,EAA0C;EAAE,MAAIiB,GAAG,IAAIb,GAAX,EAAgB;EAAE1B,IAAAA,MAAM,CAACqI,cAAP,CAAsB3G,GAAtB,EAA2Ba,GAA3B,EAAgC;EAAEjB,MAAAA,KAAK,EAAEA,KAAT;EAAgBwG,MAAAA,UAAU,EAAE,IAA5B;EAAkCQ,MAAAA,YAAY,EAAE,IAAhD;EAAsDC,MAAAA,QAAQ,EAAE;EAAhE,KAAhC;EAA0G,GAA5H,MAAkI;EAAE7G,IAAAA,GAAG,CAACa,GAAD,CAAH,GAAWjB,KAAX;EAAmB;;EAAC,SAAOI,GAAP;EAAa;EAG1M,SAAS2K,WAAT,CAAqBC,OAArB,EAA8BC,KAA9B,EAAqCC,kBAArC,EAAyD;EAC9D,MAAIpJ,KAAK,GAAGmJ,KAAK,CAAC1H,YAAlB;EACA,SAAO;EACL4H,IAAAA,QAAQ,EAAE,SAASA,QAAT,GAAoB;EAC5B,aAAOrJ,KAAP;EACD,KAHI;EAILsJ,IAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkBC,MAAlB,EAA0BC,OAA1B,EAAmC;EAC3C,UAAIC,SAAS,GAAG9E,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAA7B;;EAEAA,MAAAA,KAAK,GAAGkJ,OAAO,CAAClJ,KAAD,EAAQ;EACrB0J,QAAAA,IAAI,EAAEH,MADe;EAErBJ,QAAAA,KAAK,EAAEA,KAFc;EAGrBK,QAAAA,OAAO,EAAEA;EAHY,OAAR,CAAf;EAKAJ,MAAAA,kBAAkB,CAAC;EACjBpJ,QAAAA,KAAK,EAAEA,KADU;EAEjByJ,QAAAA,SAAS,EAAEA;EAFM,OAAD,CAAlB;EAID,KAhBI;EAiBLE,IAAAA,eAAe,EAAE9G,2BAA2B;EAjBvC,GAAP;EAmBD;;EC5BD,SAASqB,SAAT,CAAiBC,MAAjB,EAAyBC,cAAzB,EAAyC;EAAE,MAAIC,IAAI,GAAGzH,MAAM,CAACyH,IAAP,CAAYF,MAAZ,CAAX;;EAAgC,MAAIvH,MAAM,CAAC0H,qBAAX,EAAkC;EAAE,QAAIC,OAAO,GAAG3H,MAAM,CAAC0H,qBAAP,CAA6BH,MAA7B,CAAd;EAAoDC,IAAAA,cAAc,KAAKG,OAAO,GAAGA,OAAO,CAACvB,MAAR,CAAe,UAAUwB,GAAV,EAAe;EAAE,aAAO5H,MAAM,CAAC6H,wBAAP,CAAgCN,MAAhC,EAAwCK,GAAxC,EAA6CE,UAApD;EAAiE,KAAjG,CAAf,CAAd,EAAkIL,IAAI,CAACpG,IAAL,CAAUlC,KAAV,CAAgBsI,IAAhB,EAAsBE,OAAtB,CAAlI;EAAmK;;EAAC,SAAOF,IAAP;EAAc;;EAErV,SAASM,eAAT,CAAuBC,MAAvB,EAA+B;EAAE,OAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGV,SAAS,CAACC,MAA9B,EAAsCS,CAAC,EAAvC,EAA2C;EAAE,QAAI2I,MAAM,GAAG,QAAQrJ,SAAS,CAACU,CAAD,CAAjB,GAAuBV,SAAS,CAACU,CAAD,CAAhC,GAAsC,EAAnD;EAAuDA,IAAAA,CAAC,GAAG,CAAJ,GAAQgI,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,EAAiB,CAAC,CAAlB,CAAP,CAA4BtC,OAA5B,CAAoC,UAAUpD,GAAV,EAAe;EAAE2F,MAAAA,iBAAe,CAACF,MAAD,EAASzF,GAAT,EAAc0F,MAAM,CAAC1F,GAAD,CAApB,CAAf;EAA4C,KAAjG,CAAR,GAA6GvC,MAAM,CAACmI,yBAAP,GAAmCnI,MAAM,CAACoI,gBAAP,CAAwBJ,MAAxB,EAAgChI,MAAM,CAACmI,yBAAP,CAAiCF,MAAjC,CAAhC,CAAnC,GAA+GX,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,CAAP,CAAwBtC,OAAxB,CAAgC,UAAUpD,GAAV,EAAe;EAAEvC,MAAAA,MAAM,CAACqI,cAAP,CAAsBL,MAAtB,EAA8BzF,GAA9B,EAAmCvC,MAAM,CAAC6H,wBAAP,CAAgCI,MAAhC,EAAwC1F,GAAxC,CAAnC;EAAmF,KAApI,CAA5N;EAAoW;;EAAC,SAAOyF,MAAP;EAAgB;;EAE1f,SAASE,iBAAT,CAAyBxG,GAAzB,EAA8Ba,GAA9B,EAAmCjB,KAAnC,EAA0C;EAAE,MAAIiB,GAAG,IAAIb,GAAX,EAAgB;EAAE1B,IAAAA,MAAM,CAACqI,cAAP,CAAsB3G,GAAtB,EAA2Ba,GAA3B,EAAgC;EAAEjB,MAAAA,KAAK,EAAEA,KAAT;EAAgBwG,MAAAA,UAAU,EAAE,IAA5B;EAAkCQ,MAAAA,YAAY,EAAE,IAAhD;EAAsDC,MAAAA,QAAQ,EAAE;EAAhE,KAAhC;EAA0G,GAA5H,MAAkI;EAAE7G,IAAAA,GAAG,CAACa,GAAD,CAAH,GAAWjB,KAAX;EAAmB;;EAAC,SAAOI,GAAP;EAAa;EAG1M,SAASsL,sBAAT,CAAgC3K,IAAhC,EAAsC;EAC3C,MAAI4K,KAAK,GAAG5K,IAAI,CAAC4K,KAAjB;;EAEA,MAAIC,eAAe,GAAG,SAASA,eAAT,CAAyB5L,KAAzB,EAAgC;EACpD2L,IAAAA,KAAK,CAACP,QAAN,CAAe,iBAAf,EAAkCpL,KAAlC;EACD,GAFD;;EAIA,MAAI6L,QAAQ,GAAG,SAASA,QAAT,CAAkB7L,KAAlB,EAAyB;EACtC2L,IAAAA,KAAK,CAACP,QAAN,CAAe,UAAf,EAA2BpL,KAA3B;EACD,GAFD;;EAIA,MAAI8L,cAAc,GAAG,SAASA,cAAT,CAAwBC,QAAxB,EAAkC;EACrD,QAAIC,UAAU,GAAG,CAAjB;EACA,QAAIhM,KAAK,GAAG+L,QAAQ,CAACpL,GAAT,CAAa,UAAUsB,UAAV,EAAsB;EAC7C,aAAOwE,eAAa,CAACA,eAAa,CAAC,EAAD,EAAKxE,UAAL,CAAd,EAAgC,EAAhC,EAAoC;EACtD;EACA;EACAC,QAAAA,KAAK,EAAEhB,OAAO,CAACe,UAAU,CAACC,KAAZ,CAAP,CAA0BvB,GAA1B,CAA8B,UAAUoE,IAAV,EAAgB;EACnD,iBAAO0B,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK1B,IAAL,CAAd,EAA0B,EAA1B,EAA8B;EAChDkH,YAAAA,iBAAiB,EAAED,UAAU;EADmB,WAA9B,CAApB;EAGD,SAJM;EAH+C,OAApC,CAApB;EASD,KAVW,CAAZ;EAWAL,IAAAA,KAAK,CAACP,QAAN,CAAe,gBAAf,EAAiCpL,KAAjC;EACD,GAdD;;EAgBA,MAAImI,SAAS,GAAG,SAASA,SAAT,CAAmBnI,KAAnB,EAA0B;EACxC2L,IAAAA,KAAK,CAACP,QAAN,CAAe,WAAf,EAA4BpL,KAA5B;EACD,GAFD;;EAIA,MAAIkM,SAAS,GAAG,SAASA,SAAT,CAAmBlM,KAAnB,EAA0B;EACxC2L,IAAAA,KAAK,CAACP,QAAN,CAAe,WAAf,EAA4BpL,KAA5B;EACD,GAFD;;EAIA,MAAImM,UAAU,GAAG,SAASA,UAAT,CAAoBnM,KAApB,EAA2B;EAC1C2L,IAAAA,KAAK,CAACP,QAAN,CAAe,YAAf,EAA6BpL,KAA7B;EACD,GAFD;;EAIA,SAAO;EACL4L,IAAAA,eAAe,EAAEA,eADZ;EAELC,IAAAA,QAAQ,EAAEA,QAFL;EAGLC,IAAAA,cAAc,EAAEA,cAHX;EAIL3D,IAAAA,SAAS,EAAEA,SAJN;EAKL+D,IAAAA,SAAS,EAAEA,SALN;EAMLC,IAAAA,UAAU,EAAEA;EANP,GAAP;EAQD;;ECtDD,SAASC,oBAAT,CAA4BrO,GAA5B,EAAiC;EAAE,SAAOsO,oBAAkB,CAACtO,GAAD,CAAlB,IAA2BuO,kBAAgB,CAACvO,GAAD,CAA3C,IAAoDI,6BAA2B,CAACJ,GAAD,CAA/E,IAAwFwO,oBAAkB,EAAjH;EAAsH;;EAEzJ,SAASA,oBAAT,GAA8B;EAAE,QAAM,IAAIlO,SAAJ,CAAc,sIAAd,CAAN;EAA8J;;EAE9L,SAASF,6BAAT,CAAqCG,CAArC,EAAwCC,MAAxC,EAAgD;EAAE,MAAI,CAACD,CAAL,EAAQ;EAAQ,MAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B,OAAOE,mBAAiB,CAACF,CAAD,EAAIC,MAAJ,CAAxB;EAAqC,MAAIE,CAAC,GAAGC,MAAM,CAACC,SAAP,CAAiBC,QAAjB,CAA0BC,IAA1B,CAA+BP,CAA/B,EAAkCQ,KAAlC,CAAwC,CAAxC,EAA2C,CAAC,CAA5C,CAAR;EAAwD,MAAIL,CAAC,KAAK,QAAN,IAAkBH,CAAC,CAACS,WAAxB,EAAqCN,CAAC,GAAGH,CAAC,CAACS,WAAF,CAAcC,IAAlB;EAAwB,MAAIP,CAAC,KAAK,KAAN,IAAeA,CAAC,KAAK,KAAzB,EAAgC,OAAOhB,KAAK,CAACwB,IAAN,CAAWX,CAAX,CAAP;EAAsB,MAAIG,CAAC,KAAK,WAAN,IAAqB,2CAA2CS,IAA3C,CAAgDT,CAAhD,CAAzB,EAA6E,OAAOD,mBAAiB,CAACF,CAAD,EAAIC,MAAJ,CAAxB;EAAsC;;EAEha,SAAS+N,kBAAT,CAA0BE,IAA1B,EAAgC;EAAE,MAAI,OAAOlN,MAAP,KAAkB,WAAlB,IAAiCkN,IAAI,CAAClN,MAAM,CAACC,QAAR,CAAJ,IAAyB,IAA1D,IAAkEiN,IAAI,CAAC,YAAD,CAAJ,IAAsB,IAA5F,EAAkG,OAAO/O,KAAK,CAACwB,IAAN,CAAWuN,IAAX,CAAP;EAA0B;;EAE9J,SAASH,oBAAT,CAA4BtO,GAA5B,EAAiC;EAAE,MAAIN,KAAK,CAACyC,OAAN,CAAcnC,GAAd,CAAJ,EAAwB,OAAOS,mBAAiB,CAACT,GAAD,CAAxB;EAAgC;;EAE3F,SAASS,mBAAT,CAA2BT,GAA3B,EAAgCoB,GAAhC,EAAqC;EAAE,MAAIA,GAAG,IAAI,IAAP,IAAeA,GAAG,GAAGpB,GAAG,CAACR,MAA7B,EAAqC4B,GAAG,GAAGpB,GAAG,CAACR,MAAV;;EAAkB,OAAK,IAAIS,CAAC,GAAG,CAAR,EAAWoB,IAAI,GAAG,IAAI3B,KAAJ,CAAU0B,GAAV,CAAvB,EAAuCnB,CAAC,GAAGmB,GAA3C,EAAgDnB,CAAC,EAAjD,EAAqD;EAAEoB,IAAAA,IAAI,CAACpB,CAAD,CAAJ,GAAUD,GAAG,CAACC,CAAD,CAAb;EAAmB;;EAAC,SAAOoB,IAAP;EAAc;;EAEvL,SAAS4G,SAAT,CAAiBC,MAAjB,EAAyBC,cAAzB,EAAyC;EAAE,MAAIC,IAAI,GAAGzH,MAAM,CAACyH,IAAP,CAAYF,MAAZ,CAAX;;EAAgC,MAAIvH,MAAM,CAAC0H,qBAAX,EAAkC;EAAE,QAAIC,OAAO,GAAG3H,MAAM,CAAC0H,qBAAP,CAA6BH,MAA7B,CAAd;EAAoDC,IAAAA,cAAc,KAAKG,OAAO,GAAGA,OAAO,CAACvB,MAAR,CAAe,UAAUwB,GAAV,EAAe;EAAE,aAAO5H,MAAM,CAAC6H,wBAAP,CAAgCN,MAAhC,EAAwCK,GAAxC,EAA6CE,UAApD;EAAiE,KAAjG,CAAf,CAAd,EAAkIL,IAAI,CAACpG,IAAL,CAAUlC,KAAV,CAAgBsI,IAAhB,EAAsBE,OAAtB,CAAlI;EAAmK;;EAAC,SAAOF,IAAP;EAAc;;EAErV,SAASM,eAAT,CAAuBC,MAAvB,EAA+B;EAAE,OAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGV,SAAS,CAACC,MAA9B,EAAsCS,CAAC,EAAvC,EAA2C;EAAE,QAAI2I,MAAM,GAAG,QAAQrJ,SAAS,CAACU,CAAD,CAAjB,GAAuBV,SAAS,CAACU,CAAD,CAAhC,GAAsC,EAAnD;EAAuDA,IAAAA,CAAC,GAAG,CAAJ,GAAQgI,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,EAAiB,CAAC,CAAlB,CAAP,CAA4BtC,OAA5B,CAAoC,UAAUpD,GAAV,EAAe;EAAE2F,MAAAA,iBAAe,CAACF,MAAD,EAASzF,GAAT,EAAc0F,MAAM,CAAC1F,GAAD,CAApB,CAAf;EAA4C,KAAjG,CAAR,GAA6GvC,MAAM,CAACmI,yBAAP,GAAmCnI,MAAM,CAACoI,gBAAP,CAAwBJ,MAAxB,EAAgChI,MAAM,CAACmI,yBAAP,CAAiCF,MAAjC,CAAhC,CAAnC,GAA+GX,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,CAAP,CAAwBtC,OAAxB,CAAgC,UAAUpD,GAAV,EAAe;EAAEvC,MAAAA,MAAM,CAACqI,cAAP,CAAsBL,MAAtB,EAA8BzF,GAA9B,EAAmCvC,MAAM,CAAC6H,wBAAP,CAAgCI,MAAhC,EAAwC1F,GAAxC,CAAnC;EAAmF,KAApI,CAA5N;EAAoW;;EAAC,SAAOyF,MAAP;EAAgB;;EAE1f,SAASE,iBAAT,CAAyBxG,GAAzB,EAA8Ba,GAA9B,EAAmCjB,KAAnC,EAA0C;EAAE,MAAIiB,GAAG,IAAIb,GAAX,EAAgB;EAAE1B,IAAAA,MAAM,CAACqI,cAAP,CAAsB3G,GAAtB,EAA2Ba,GAA3B,EAAgC;EAAEjB,MAAAA,KAAK,EAAEA,KAAT;EAAgBwG,MAAAA,UAAU,EAAE,IAA5B;EAAkCQ,MAAAA,YAAY,EAAE,IAAhD;EAAsDC,MAAAA,QAAQ,EAAE;EAAhE,KAAhC;EAA0G,GAA5H,MAAkI;EAAE7G,IAAAA,GAAG,CAACa,GAAD,CAAH,GAAWjB,KAAX;EAAmB;;EAAC,SAAOI,GAAP;EAAa;EAI1M,SAASqM,eAAT,CAAyBxB,KAAzB,EAAgCyB,iBAAhC,EAAmD;EACxD,MAAIC,SAAJ;EAEA;;;EACA,MAAIC,WAAW,GAAG,OAAOC,MAAP,KAAkB,WAAlB,GAAgCA,MAAhC,GAAyC,EAA3D;EACA;;EAEA,MAAIC,OAAO,GAAG7B,KAAK,CAAC6B,OAAN,IAAiB,EAA/B;EACA,SAAOrG,eAAa,CAACA,eAAa,CAAC;EACjCrD,IAAAA,KAAK,EAAE,KAD0B;EAEjC2J,IAAAA,WAAW,EAAE,KAFoB;EAGjCC,IAAAA,WAAW,EAAE,EAHoB;EAIjCC,IAAAA,SAAS,EAAE,KAJsB;EAKjCnH,IAAAA,mBAAmB,EAAE,IALY;EAMjCoH,IAAAA,cAAc,EAAE,GANiB;EAOjCN,IAAAA,WAAW,EAAEA,WAPoB;EAQjCO,IAAAA,eAAe,EAAE,SAASA,eAAT,CAAyBpM,IAAzB,EAA+B;EAC9C,UAAIe,KAAK,GAAGf,IAAI,CAACe,KAAjB;EACA,aAAOD,aAAa,CAACC,KAAD,CAAb,GAAuB,CAA9B;EACD,KAXgC;EAYjCsL,IAAAA,OAAO,EAAE,SAASA,OAAT,CAAiBpM,KAAjB,EAAwB;EAC/B,UAAIsG,OAAO,GAAGtG,KAAK,CAACsG,OAApB;EACA,aAAOA,OAAP;EACD;EAfgC,GAAD,EAgB/B2D,KAhB+B,CAAd,EAgBT,EAhBS,EAgBL;EACb;EACA;EACAoC,IAAAA,EAAE,EAAE,CAACV,SAAS,GAAG1B,KAAK,CAACoC,EAAnB,MAA2B,IAA3B,IAAmCV,SAAS,KAAK,KAAK,CAAtD,GAA0DA,SAA1D,GAAsElL,sBAAsB,EAHnF;EAIbqL,IAAAA,OAAO,EAAEA,OAJI;EAKb;EACAvJ,IAAAA,YAAY,EAAEkD,eAAa,CAAC;EAC1BoC,MAAAA,YAAY,EAAE,IADY;EAE1Bb,MAAAA,KAAK,EAAE,EAFmB;EAG1BsF,MAAAA,UAAU,EAAE,IAHc;EAI1BvL,MAAAA,WAAW,EAAE,EAJa;EAK1BwL,MAAAA,MAAM,EAAE,KALkB;EAM1BC,MAAAA,MAAM,EAAE,MANkB;EAO1BC,MAAAA,OAAO,EAAE;EAPiB,KAAD,EAQxBxC,KAAK,CAAC1H,YARkB,CANd;EAebmK,IAAAA,aAAa,EAAE,SAASA,aAAT,CAAuBtG,MAAvB,EAA+B;EAC5C,UAAIuG,oBAAJ;;EAEA,OAACA,oBAAoB,GAAG1C,KAAK,CAACyC,aAA9B,MAAiD,IAAjD,IAAyDC,oBAAoB,KAAK,KAAK,CAAvF,GAA2F,KAAK,CAAhG,GAAoGA,oBAAoB,CAAC9O,IAArB,CAA0BoM,KAA1B,EAAiC7D,MAAjC,CAApG;EACA0F,MAAAA,OAAO,CAACzI,OAAR,CAAgB,UAAUzD,CAAV,EAAa;EAC3B,YAAIgN,gBAAJ;;EAEA,eAAO,CAACA,gBAAgB,GAAGhN,CAAC,CAAC8M,aAAtB,MAAyC,IAAzC,IAAiDE,gBAAgB,KAAK,KAAK,CAA3E,GAA+E,KAAK,CAApF,GAAwFA,gBAAgB,CAAC/O,IAAjB,CAAsB+B,CAAtB,EAAyBwG,MAAzB,CAA/F;EACD,OAJD;EAKD,KAxBY;EAyBbyG,IAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkBzG,MAAlB,EAA0B;EAClC,UAAI0G,eAAJ;;EAEA,OAACA,eAAe,GAAG7C,KAAK,CAAC4C,QAAzB,MAAuC,IAAvC,IAA+CC,eAAe,KAAK,KAAK,CAAxE,GAA4E,KAAK,CAAjF,GAAqFA,eAAe,CAACjP,IAAhB,CAAqBoM,KAArB,EAA4B7D,MAA5B,CAArF;EACA0F,MAAAA,OAAO,CAACzI,OAAR,CAAgB,UAAUzD,CAAV,EAAa;EAC3B,YAAImN,WAAJ;;EAEA,eAAO,CAACA,WAAW,GAAGnN,CAAC,CAACiN,QAAjB,MAA+B,IAA/B,IAAuCE,WAAW,KAAK,KAAK,CAA5D,GAAgE,KAAK,CAArE,GAAyEA,WAAW,CAAClP,IAAZ,CAAiB+B,CAAjB,EAAoBwG,MAApB,CAAhF;EACD,OAJD;EAKD,KAlCY;EAmCb4G,IAAAA,OAAO,EAAE,SAASA,OAAT,CAAiB5G,MAAjB,EAAyB;EAChC,UAAI6G,cAAJ;;EAEA,OAACA,cAAc,GAAGhD,KAAK,CAAC+C,OAAxB,MAAqC,IAArC,IAA6CC,cAAc,KAAK,KAAK,CAArE,GAAyE,KAAK,CAA9E,GAAkFA,cAAc,CAACpP,IAAf,CAAoBoM,KAApB,EAA2B7D,MAA3B,CAAlF;EACA0F,MAAAA,OAAO,CAACzI,OAAR,CAAgB,UAAUzD,CAAV,EAAa;EAC3B,YAAIsN,UAAJ;;EAEA,eAAO,CAACA,UAAU,GAAGtN,CAAC,CAACoN,OAAhB,MAA6B,IAA7B,IAAqCE,UAAU,KAAK,KAAK,CAAzD,GAA6D,KAAK,CAAlE,GAAsEA,UAAU,CAACrP,IAAX,CAAgB+B,CAAhB,EAAmBwG,MAAnB,CAA7E;EACD,OAJD;EAKD,KA5CY;EA6CbD,IAAAA,UAAU,EAAE,SAASA,UAAT,CAAoBC,MAApB,EAA4B;EACtC,aAAO5B,OAAO,CAACiC,GAAR,CAAY,GAAGlG,MAAH,CAAU6K,oBAAkB,CAACU,OAAO,CAACnM,GAAR,CAAY,UAAUwN,MAAV,EAAkB;EAC5E,eAAOA,MAAM,CAAChH,UAAd;EACD,OAF+C,CAAD,CAA5B,EAEd,CAAC8D,KAAK,CAAC9D,UAAP,CAFc,EAEMrC,MAFN,CAEa6C,OAFb,EAEsBhH,GAFtB,CAE0B,UAAUwG,UAAV,EAAsB;EACjE,eAAOD,oBAAoB,CAACC,UAAD,EAAaC,MAAb,CAA3B;EACD,OAJkB,CAAZ,EAIH5D,IAJG,CAIE,UAAU4K,MAAV,EAAkB;EACzB,eAAOlN,OAAO,CAACkN,MAAD,CAAd;EACD,OANM,EAMJ5K,IANI,CAMC,UAAU8D,OAAV,EAAmB;EACzB,eAAOA,OAAO,CAAC3G,GAAR,CAAY,UAAUgG,MAAV,EAAkB;EACnC,iBAAOF,eAAa,CAACA,eAAa,CAAC,EAAD,EAAKE,MAAL,CAAd,EAA4B,EAA5B,EAAgC;EAClDuB,YAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkBd,MAAlB,EAA0B;EAClCT,cAAAA,MAAM,CAACuB,QAAP,CAAgBd,MAAhB;EACAsF,cAAAA,iBAAiB,CAACrI,OAAlB,CAA0B,UAAUzD,CAAV,EAAa;EACrC,oBAAIyN,WAAJ;;EAEA,uBAAO,CAACA,WAAW,GAAGzN,CAAC,CAACsH,QAAjB,MAA+B,IAA/B,IAAuCmG,WAAW,KAAK,KAAK,CAA5D,GAAgE,KAAK,CAArE,GAAyEA,WAAW,CAACxP,IAAZ,CAAiB+B,CAAjB,EAAoBwG,MAApB,CAAhF;EACD,eAJD;EAKD,aARiD;EASlDgB,YAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkBhB,MAAlB,EAA0B;EAClCT,cAAAA,MAAM,CAACyB,QAAP,CAAgBhB,MAAhB;EACAsF,cAAAA,iBAAiB,CAACrI,OAAlB,CAA0B,UAAUzD,CAAV,EAAa;EACrC,oBAAI0N,WAAJ;;EAEA,uBAAO,CAACA,WAAW,GAAG1N,CAAC,CAACwH,QAAjB,MAA+B,IAA/B,IAAuCkG,WAAW,KAAK,KAAK,CAA5D,GAAgE,KAAK,CAArE,GAAyEA,WAAW,CAACzP,IAAZ,CAAiB+B,CAAjB,EAAoBwG,MAApB,CAAhF;EACD,eAJD;EAKD;EAhBiD,WAAhC,CAApB;EAkBD,SAnBM,CAAP;EAoBD,OA3BM,CAAP;EA4BD,KA1EY;EA2EbmH,IAAAA,SAAS,EAAE9H,eAAa,CAAC;EACvB+H,MAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkBC,KAAlB,EAAyB;EACjC,YAAIpF,OAAO,GAAGoF,KAAK,CAACpF,OAApB;EACAuD,QAAAA,WAAW,CAAC8B,QAAZ,CAAqBC,MAArB,CAA4BtF,OAA5B;EACD,OAJsB;EAKvBuF,MAAAA,cAAc,EAAE,SAASA,cAAT,CAAwBC,KAAxB,EAA+B;EAC7C,YAAIxF,OAAO,GAAGwF,KAAK,CAACxF,OAApB;EACA,YAAIyF,eAAe,GAAGlC,WAAW,CAACmC,IAAZ,CAAiB1F,OAAjB,EAA0B,QAA1B,EAAoC,UAApC,CAAtB;EACAyF,QAAAA,eAAe,KAAK,IAApB,IAA4BA,eAAe,KAAK,KAAK,CAArD,GAAyD,KAAK,CAA9D,GAAkEA,eAAe,CAACE,KAAhB,EAAlE;EACD,OATsB;EAUvBC,MAAAA,iBAAiB,EAAE,SAASA,iBAAT,CAA2BC,KAA3B,EAAkC;EACnD,YAAI7F,OAAO,GAAG6F,KAAK,CAAC7F,OAApB;EACAuD,QAAAA,WAAW,CAACmC,IAAZ,CAAiB1F,OAAjB,EAA0B,QAA1B,EAAoC,UAApC;EACD;EAbsB,KAAD,EAcrB4B,KAAK,CAACsD,SAde;EA3EX,GAhBK,CAApB;EA2GD;;ECvID,SAASvI,SAAT,CAAiBC,MAAjB,EAAyBC,cAAzB,EAAyC;EAAE,MAAIC,IAAI,GAAGzH,MAAM,CAACyH,IAAP,CAAYF,MAAZ,CAAX;;EAAgC,MAAIvH,MAAM,CAAC0H,qBAAX,EAAkC;EAAE,QAAIC,OAAO,GAAG3H,MAAM,CAAC0H,qBAAP,CAA6BH,MAA7B,CAAd;EAAoDC,IAAAA,cAAc,KAAKG,OAAO,GAAGA,OAAO,CAACvB,MAAR,CAAe,UAAUwB,GAAV,EAAe;EAAE,aAAO5H,MAAM,CAAC6H,wBAAP,CAAgCN,MAAhC,EAAwCK,GAAxC,EAA6CE,UAApD;EAAiE,KAAjG,CAAf,CAAd,EAAkIL,IAAI,CAACpG,IAAL,CAAUlC,KAAV,CAAgBsI,IAAhB,EAAsBE,OAAtB,CAAlI;EAAmK;;EAAC,SAAOF,IAAP;EAAc;;EAErV,SAASM,eAAT,CAAuBC,MAAvB,EAA+B;EAAE,OAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGV,SAAS,CAACC,MAA9B,EAAsCS,CAAC,EAAvC,EAA2C;EAAE,QAAI2I,MAAM,GAAG,QAAQrJ,SAAS,CAACU,CAAD,CAAjB,GAAuBV,SAAS,CAACU,CAAD,CAAhC,GAAsC,EAAnD;EAAuDA,IAAAA,CAAC,GAAG,CAAJ,GAAQgI,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,EAAiB,CAAC,CAAlB,CAAP,CAA4BtC,OAA5B,CAAoC,UAAUpD,GAAV,EAAe;EAAE2F,MAAAA,iBAAe,CAACF,MAAD,EAASzF,GAAT,EAAc0F,MAAM,CAAC1F,GAAD,CAApB,CAAf;EAA4C,KAAjG,CAAR,GAA6GvC,MAAM,CAACmI,yBAAP,GAAmCnI,MAAM,CAACoI,gBAAP,CAAwBJ,MAAxB,EAAgChI,MAAM,CAACmI,yBAAP,CAAiCF,MAAjC,CAAhC,CAAnC,GAA+GX,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,CAAP,CAAwBtC,OAAxB,CAAgC,UAAUpD,GAAV,EAAe;EAAEvC,MAAAA,MAAM,CAACqI,cAAP,CAAsBL,MAAtB,EAA8BzF,GAA9B,EAAmCvC,MAAM,CAAC6H,wBAAP,CAAgCI,MAAhC,EAAwC1F,GAAxC,CAAnC;EAAmF,KAApI,CAA5N;EAAoW;;EAAC,SAAOyF,MAAP;EAAgB;;EAE1f,SAASE,iBAAT,CAAyBxG,GAAzB,EAA8Ba,GAA9B,EAAmCjB,KAAnC,EAA0C;EAAE,MAAIiB,GAAG,IAAIb,GAAX,EAAgB;EAAE1B,IAAAA,MAAM,CAACqI,cAAP,CAAsB3G,GAAtB,EAA2Ba,GAA3B,EAAgC;EAAEjB,MAAAA,KAAK,EAAEA,KAAT;EAAgBwG,MAAAA,UAAU,EAAE,IAA5B;EAAkCQ,MAAAA,YAAY,EAAE,IAAhD;EAAsDC,MAAAA,QAAQ,EAAE;EAAhE,KAAhC;EAA0G,GAA5H,MAAkI;EAAE7G,IAAAA,GAAG,CAACa,GAAD,CAAH,GAAWjB,KAAX;EAAmB;;EAAC,SAAOI,GAAP;EAAa;EAG1M,SAASgN,OAAT,CAAiBrM,IAAjB,EAAuB;EAC5B,MAAIgB,WAAW,GAAGhB,IAAI,CAACgB,WAAvB;EAAA,MACIkJ,KAAK,GAAGlK,IAAI,CAACkK,KADjB;EAAA,MAEInJ,KAAK,GAAGf,IAAI,CAACe,KAFjB,CAD4B;EAK5B;;EACA,MAAIqN,iBAAiB,GAAGpN,WAAW,CAACX,MAAZ,CAAmB,UAAUmH,GAAV,EAAetG,UAAf,EAA2B;EACpE,WAAOwE,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK8B,GAAL,CAAd,EAAyB,EAAzB,EAA6B3B,iBAAe,CAAC,EAAD,EAAK3E,UAAU,CAAC0E,MAAX,CAAkBiB,QAAvB,EAAiCnB,eAAa,CAACA,eAAa,CAAC,EAAD,EAAKxE,UAAU,CAAC0E,MAAhB,CAAd,EAAuC,EAAvC,EAA2C;EACvJyI,MAAAA,QAAQ,EAAE,SAASA,QAAT,GAAoB;EAC5B;EACA,eAAOlO,OAAO,CAACe,UAAU,CAACC,KAAZ,CAAd;EACD;EAJsJ,KAA3C,CAA9C,CAA5C,CAApB;EAMD,GAPuB,EAOrB,EAPqB,CAAxB;EAQA,MAAImN,cAAc,GAAGpE,KAAK,CAACmC,OAAN,CAAc;EACjC9F,IAAAA,OAAO,EAAE5I,MAAM,CAACyC,MAAP,CAAcgO,iBAAd,CADwB;EAEjCA,IAAAA,iBAAiB,EAAEA,iBAFc;EAGjCrN,IAAAA,KAAK,EAAEA;EAH0B,GAAd,CAArB,CAd4B;;EAoB5B,SAAOZ,OAAO,CAACmO,cAAD,CAAP,CAAwBvK,MAAxB,CAA+B6C,OAA/B,EAAwChH,GAAxC,CAA4C,UAAUgG,MAAV,EAAkB;EACnE,WAAO;EACLA,MAAAA,MAAM,EAAEA,MADH;EAELzE,MAAAA,KAAK,EAAEyE,MAAM,CAACyI,QAAP;EAFF,KAAP;EAID,GALM,CAAP;EAMD;;ECjCD,SAASjP,OAAT,CAAiBC,GAAjB,EAAsB;EAAE;;EAA2B,SAAOD,OAAO,GAAG,cAAc,OAAOb,MAArB,IAA+B,YAAY,OAAOA,MAAM,CAACC,QAAzD,GAAoE,UAAUa,GAAV,EAAe;EAAE,WAAO,OAAOA,GAAd;EAAoB,GAAzG,GAA4G,UAAUA,GAAV,EAAe;EAAE,WAAOA,GAAG,IAAI,cAAc,OAAOd,MAA5B,IAAsCc,GAAG,CAACrB,WAAJ,KAAoBO,MAA1D,IAAoEc,GAAG,KAAKd,MAAM,CAACX,SAAnF,GAA+F,QAA/F,GAA0G,OAAOyB,GAAxH;EAA8H,GAArQ,EAAuQD,OAAO,CAACC,GAAD,CAArR;EAA6R;;EAEhV,SAASgM,oBAAT,CAA4BrO,GAA5B,EAAiC;EAAE,SAAOsO,oBAAkB,CAACtO,GAAD,CAAlB,IAA2BuO,kBAAgB,CAACvO,GAAD,CAA3C,IAAoDI,6BAA2B,CAACJ,GAAD,CAA/E,IAAwFwO,oBAAkB,EAAjH;EAAsH;;EAEzJ,SAASA,oBAAT,GAA8B;EAAE,QAAM,IAAIlO,SAAJ,CAAc,sIAAd,CAAN;EAA8J;;EAE9L,SAASF,6BAAT,CAAqCG,CAArC,EAAwCC,MAAxC,EAAgD;EAAE,MAAI,CAACD,CAAL,EAAQ;EAAQ,MAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B,OAAOE,mBAAiB,CAACF,CAAD,EAAIC,MAAJ,CAAxB;EAAqC,MAAIE,CAAC,GAAGC,MAAM,CAACC,SAAP,CAAiBC,QAAjB,CAA0BC,IAA1B,CAA+BP,CAA/B,EAAkCQ,KAAlC,CAAwC,CAAxC,EAA2C,CAAC,CAA5C,CAAR;EAAwD,MAAIL,CAAC,KAAK,QAAN,IAAkBH,CAAC,CAACS,WAAxB,EAAqCN,CAAC,GAAGH,CAAC,CAACS,WAAF,CAAcC,IAAlB;EAAwB,MAAIP,CAAC,KAAK,KAAN,IAAeA,CAAC,KAAK,KAAzB,EAAgC,OAAOhB,KAAK,CAACwB,IAAN,CAAWX,CAAX,CAAP;EAAsB,MAAIG,CAAC,KAAK,WAAN,IAAqB,2CAA2CS,IAA3C,CAAgDT,CAAhD,CAAzB,EAA6E,OAAOD,mBAAiB,CAACF,CAAD,EAAIC,MAAJ,CAAxB;EAAsC;;EAEha,SAAS+N,kBAAT,CAA0BE,IAA1B,EAAgC;EAAE,MAAI,OAAOlN,MAAP,KAAkB,WAAlB,IAAiCkN,IAAI,CAAClN,MAAM,CAACC,QAAR,CAAJ,IAAyB,IAA1D,IAAkEiN,IAAI,CAAC,YAAD,CAAJ,IAAsB,IAA5F,EAAkG,OAAO/O,KAAK,CAACwB,IAAN,CAAWuN,IAAX,CAAP;EAA0B;;EAE9J,SAASH,oBAAT,CAA4BtO,GAA5B,EAAiC;EAAE,MAAIN,KAAK,CAACyC,OAAN,CAAcnC,GAAd,CAAJ,EAAwB,OAAOS,mBAAiB,CAACT,GAAD,CAAxB;EAAgC;;EAE3F,SAASS,mBAAT,CAA2BT,GAA3B,EAAgCoB,GAAhC,EAAqC;EAAE,MAAIA,GAAG,IAAI,IAAP,IAAeA,GAAG,GAAGpB,GAAG,CAACR,MAA7B,EAAqC4B,GAAG,GAAGpB,GAAG,CAACR,MAAV;;EAAkB,OAAK,IAAIS,CAAC,GAAG,CAAR,EAAWoB,IAAI,GAAG,IAAI3B,KAAJ,CAAU0B,GAAV,CAAvB,EAAuCnB,CAAC,GAAGmB,GAA3C,EAAgDnB,CAAC,EAAjD,EAAqD;EAAEoB,IAAAA,IAAI,CAACpB,CAAD,CAAJ,GAAUD,GAAG,CAACC,CAAD,CAAb;EAAmB;;EAAC,SAAOoB,IAAP;EAAc;;EAEvL,SAAS4G,SAAT,CAAiBC,MAAjB,EAAyBC,cAAzB,EAAyC;EAAE,MAAIC,IAAI,GAAGzH,MAAM,CAACyH,IAAP,CAAYF,MAAZ,CAAX;;EAAgC,MAAIvH,MAAM,CAAC0H,qBAAX,EAAkC;EAAE,QAAIC,OAAO,GAAG3H,MAAM,CAAC0H,qBAAP,CAA6BH,MAA7B,CAAd;EAAoDC,IAAAA,cAAc,KAAKG,OAAO,GAAGA,OAAO,CAACvB,MAAR,CAAe,UAAUwB,GAAV,EAAe;EAAE,aAAO5H,MAAM,CAAC6H,wBAAP,CAAgCN,MAAhC,EAAwCK,GAAxC,EAA6CE,UAApD;EAAiE,KAAjG,CAAf,CAAd,EAAkIL,IAAI,CAACpG,IAAL,CAAUlC,KAAV,CAAgBsI,IAAhB,EAAsBE,OAAtB,CAAlI;EAAmK;;EAAC,SAAOF,IAAP;EAAc;;EAErV,SAASM,eAAT,CAAuBC,MAAvB,EAA+B;EAAE,OAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGV,SAAS,CAACC,MAA9B,EAAsCS,CAAC,EAAvC,EAA2C;EAAE,QAAI2I,MAAM,GAAG,QAAQrJ,SAAS,CAACU,CAAD,CAAjB,GAAuBV,SAAS,CAACU,CAAD,CAAhC,GAAsC,EAAnD;EAAuDA,IAAAA,CAAC,GAAG,CAAJ,GAAQgI,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,EAAiB,CAAC,CAAlB,CAAP,CAA4BtC,OAA5B,CAAoC,UAAUpD,GAAV,EAAe;EAAE2F,MAAAA,iBAAe,CAACF,MAAD,EAASzF,GAAT,EAAc0F,MAAM,CAAC1F,GAAD,CAApB,CAAf;EAA4C,KAAjG,CAAR,GAA6GvC,MAAM,CAACmI,yBAAP,GAAmCnI,MAAM,CAACoI,gBAAP,CAAwBJ,MAAxB,EAAgChI,MAAM,CAACmI,yBAAP,CAAiCF,MAAjC,CAAhC,CAAnC,GAA+GX,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,CAAP,CAAwBtC,OAAxB,CAAgC,UAAUpD,GAAV,EAAe;EAAEvC,MAAAA,MAAM,CAACqI,cAAP,CAAsBL,MAAtB,EAA8BzF,GAA9B,EAAmCvC,MAAM,CAAC6H,wBAAP,CAAgCI,MAAhC,EAAwC1F,GAAxC,CAAnC;EAAmF,KAApI,CAA5N;EAAoW;;EAAC,SAAOyF,MAAP;EAAgB;;EAE1f,SAASE,iBAAT,CAAyBxG,GAAzB,EAA8Ba,GAA9B,EAAmCjB,KAAnC,EAA0C;EAAE,MAAIiB,GAAG,IAAIb,GAAX,EAAgB;EAAE1B,IAAAA,MAAM,CAACqI,cAAP,CAAsB3G,GAAtB,EAA2Ba,GAA3B,EAAgC;EAAEjB,MAAAA,KAAK,EAAEA,KAAT;EAAgBwG,MAAAA,UAAU,EAAE,IAA5B;EAAkCQ,MAAAA,YAAY,EAAE,IAAhD;EAAsDC,MAAAA,QAAQ,EAAE;EAAhE,KAAhC;EAA0G,GAA5H,MAAkI;EAAE7G,IAAAA,GAAG,CAACa,GAAD,CAAH,GAAWjB,KAAX;EAAmB;;EAAC,SAAOI,GAAP;EAAa;;EAKjN,SAASkP,aAAT,CAAuBvK,IAAvB,EAA6B;EAC3B,SAAO4C,OAAO,CAAC5C,IAAI,CAACwK,OAAN,CAAd;EACD;;EAED,SAASC,sBAAT,CAAgCC,WAAhC,EAA6C;EAC3C,SAAO9H,OAAO,CAAC8H,WAAW,KAAK,IAAhB,IAAwBA,WAAW,KAAK,KAAK,CAA7C,GAAiD,KAAK,CAAtD,GAA0DA,WAAW,CAACF,OAAvE,CAAd;EACD;;EAEM,SAASG,UAAT,CAAoBC,kBAApB,EAAwC/H,QAAxC,EAAkD;EACvD,MAAI4H,sBAAsB,CAACG,kBAAD,CAA1B,EAAgD;EAC9C,WAAOlJ,eAAa,CAACA,eAAa,CAAC,EAAD,EAAKkJ,kBAAL,CAAd,EAAwC,EAAxC,EAA4C;EAC9DC,MAAAA,QAAQ,EAAED,kBAAkB,CAACE,OAAnB,CAA2BlP,GAA3B,CAA+B,UAAUqH,KAAV,EAAiB;EACxD,eAAO;EACLA,UAAAA,KAAK,EAAEA,KADF;EAELJ,UAAAA,QAAQ,EAAEA,QAFL;EAGLkI,UAAAA,iBAAiB,EAAEH,kBAAkB,CAACG;EAHjC,SAAP;EAKD,OANS;EADoD,KAA5C,CAApB;EASD;;EAED,SAAO;EACL5N,IAAAA,KAAK,EAAEyN,kBADF;EAEL/H,IAAAA,QAAQ,EAAEA;EAFL,GAAP;EAID;EACM,SAASnC,OAAT,CAAiBvD,KAAjB,EAAwB;EAC7B,MAAI6N,MAAM,GAAG7N,KAAK,CAACd,MAAN,CAAa,UAAUmH,GAAV,EAAexL,OAAf,EAAwB;EAChD,QAAI,CAACuS,aAAa,CAACvS,OAAD,CAAlB,EAA6B;EAC3BwL,MAAAA,GAAG,CAACxI,IAAJ,CAAShD,OAAT;EACA,aAAOwL,GAAP;EACD;;EAED,QAAIyH,YAAY,GAAGjT,OAAO,CAACiT,YAA3B;EAAA,QACIT,OAAO,GAAGxS,OAAO,CAACwS,OADtB;EAAA,QAEIU,WAAW,GAAGlT,OAAO,CAACkT,WAF1B;EAAA,QAGIL,QAAQ,GAAG7S,OAAO,CAAC6S,QAHvB;EAIA,QAAIM,SAAS,GAAG3H,GAAG,CAAC4H,IAAJ,CAAS,UAAUpL,IAAV,EAAgB;EACvC,aAAOuK,aAAa,CAACvS,OAAD,CAAb,IAA0BuS,aAAa,CAACvK,IAAD,CAAvC,IAAiDA,IAAI,CAACiL,YAAL,KAAsBA,YAAvE,IAAuFrI,OAAO,CAACsI,WAAD,CAA9F,IAA+GlL,IAAI,CAACkL,WAAL,KAAqBA,WAA3I;EACD,KAFe,CAAhB;;EAIA,QAAIC,SAAJ,EAAe;EACb,UAAIE,gBAAJ;;EAEA,OAACA,gBAAgB,GAAGF,SAAS,CAAChO,KAA9B,EAAqCnC,IAArC,CAA0ClC,KAA1C,CAAgDuS,gBAAhD,EAAkEhE,oBAAkB,CAACwD,QAAD,CAApF;EACD,KAJD,MAIO;EACL,UAAIS,OAAO,GAAG;EACZd,QAAAA,OAAO,EAAEA,OADG;EAEZU,QAAAA,WAAW,EAAEA,WAFD;EAGZ/N,QAAAA,KAAK,EAAE0N,QAHK;EAIZI,QAAAA,YAAY,EAAEA;EAJF,OAAd;EAMAzH,MAAAA,GAAG,CAACxI,IAAJ,CAASsQ,OAAT;EACD;;EAED,WAAO9H,GAAP;EACD,GA7BY,EA6BV,EA7BU,CAAb;EA8BA,MAAIpH,MAAM,GAAG4O,MAAM,CAACpP,GAAP,CAAW,UAAU2P,gBAAV,EAA4B;EAClD,QAAI,CAAChB,aAAa,CAACgB,gBAAD,CAAlB,EAAsC;EACpC,aAAO9K,OAAO,CAACC,OAAR,CAAgB6K,gBAAhB,CAAP;EACD;;EAED,QAAIvP,IAAI,GAAGuP,gBAAX;EAAA,QACIf,OAAO,GAAGxO,IAAI,CAACwO,OADnB;EAAA,QAEIrN,KAAK,GAAGnB,IAAI,CAACmB,KAFjB;EAAA,QAGI8N,YAAY,GAAGjP,IAAI,CAACiP,YAHxB;EAIA,WAAOT,OAAO,CAAC;EACbS,MAAAA,YAAY,EAAEA,YADD;EAEbJ,MAAAA,QAAQ,EAAE1N;EAFG,KAAD,CAAd;EAID,GAbY,CAAb;EAcA,SAAOsD,OAAO,CAACiC,GAAR,CAAYtG,MAAZ,EAAoBqC,IAApB,CAAyB,UAAU+M,SAAV,EAAqB;EACnD,WAAOrP,OAAO,CAACqP,SAAD,CAAd;EACD,GAFM,CAAP;EAGD;EACM,SAASC,WAAT,CAAqBD,SAArB,EAAgCjJ,OAAhC,EAAyC;EAC9C,SAAOA,OAAO,CAAC3G,GAAR,CAAY,UAAUgG,MAAV,EAAkB;EACnC,QAAI8J,OAAO,GAAGF,SAAS,CAACzL,MAAV,CAAiB,UAAU4L,QAAV,EAAoB;EACjD,aAAOA,QAAQ,CAAC9I,QAAT,KAAsBjB,MAAM,CAACiB,QAApC;EACD,KAFa,CAAd;EAGA,QAAIoC,OAAO,GAAGyG,OAAO,CAAC9P,GAAR,CAAY,UAAUK,KAAV,EAAiB;EACzC,UAAIkB,KAAK,GAAGlB,KAAK,CAACkB,KAAlB;EACA,aAAOA,KAAP;EACD,KAHa,CAAd;EAIA,QAAIyO,SAAS,GAAGF,OAAO,CAAC,CAAD,CAAP,CAAWX,iBAA3B;EACA,QAAI5N,KAAK,GAAGyO,SAAS,GAAGA,SAAS,CAAC7G,oBAAoB,CAACE,OAAD,CAArB,CAAZ,GAA8CA,OAAnE;EACA7H,IAAAA,SAAS,CAAC1E,KAAK,CAACyC,OAAN,CAAcgC,KAAd,CAAD,EAAuB,YAAY;EAC1C,aAAO,yCAAyCX,MAAzC,CAAgDoF,MAAM,CAACiB,QAAvD,EAAiE,qDAAjE,EAAwHrG,MAAxH,CAA+HgG,IAAI,CAACC,SAAL,CAAerH,OAAO,CAAC+B,KAAD,CAAtB,CAA/H,EAA+J,OAA/J,EAAwKX,MAAxK,CAA+KgG,IAAI,CAACC,SAAL,CAAenH,OAAO,CAAC6B,KAAD,CAAtB,EAA+B,IAA/B,EAAqC,CAArC,CAA/K,EAAwN,uGAAxN,CAAP;EACD,KAFQ,CAAT;EAGAC,IAAAA,SAAS,CAACD,KAAK,CAAC0O,KAAN,CAAYjJ,OAAZ,CAAD,EAAuB,yCAAyCpG,MAAzC,CAAgDoF,MAAM,CAACiB,QAAvD,EAAiE,gDAAjE,EAAmHrG,MAAnH,CAA0HgG,IAAI,CAACC,SAAL,CAAepK,SAAf,CAA1H,EAAqJ,0IAArJ,CAAvB,CAAT;EACA,WAAO;EACLuJ,MAAAA,MAAM,EAAEA,MADH;EAELzE,MAAAA,KAAK,EAAEA;EAFF,KAAP;EAID,GAlBM,CAAP;EAmBD;;ECtHD,IAAI2O,WAAS,GAAG,CAAC,OAAD,EAAU,WAAV,EAAuB,OAAvB,EAAgC,OAAhC,EAAyC,SAAzC,EAAoD,OAApD,CAAhB;;EAEA,SAAS7K,SAAT,CAAiBC,MAAjB,EAAyBC,cAAzB,EAAyC;EAAE,MAAIC,IAAI,GAAGzH,MAAM,CAACyH,IAAP,CAAYF,MAAZ,CAAX;;EAAgC,MAAIvH,MAAM,CAAC0H,qBAAX,EAAkC;EAAE,QAAIC,OAAO,GAAG3H,MAAM,CAAC0H,qBAAP,CAA6BH,MAA7B,CAAd;EAAoDC,IAAAA,cAAc,KAAKG,OAAO,GAAGA,OAAO,CAACvB,MAAR,CAAe,UAAUwB,GAAV,EAAe;EAAE,aAAO5H,MAAM,CAAC6H,wBAAP,CAAgCN,MAAhC,EAAwCK,GAAxC,EAA6CE,UAApD;EAAiE,KAAjG,CAAf,CAAd,EAAkIL,IAAI,CAACpG,IAAL,CAAUlC,KAAV,CAAgBsI,IAAhB,EAAsBE,OAAtB,CAAlI;EAAmK;;EAAC,SAAOF,IAAP;EAAc;;EAErV,SAASM,eAAT,CAAuBC,MAAvB,EAA+B;EAAE,OAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGV,SAAS,CAACC,MAA9B,EAAsCS,CAAC,EAAvC,EAA2C;EAAE,QAAI2I,MAAM,GAAG,QAAQrJ,SAAS,CAACU,CAAD,CAAjB,GAAuBV,SAAS,CAACU,CAAD,CAAhC,GAAsC,EAAnD;EAAuDA,IAAAA,CAAC,GAAG,CAAJ,GAAQgI,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,EAAiB,CAAC,CAAlB,CAAP,CAA4BtC,OAA5B,CAAoC,UAAUpD,GAAV,EAAe;EAAE2F,MAAAA,iBAAe,CAACF,MAAD,EAASzF,GAAT,EAAc0F,MAAM,CAAC1F,GAAD,CAApB,CAAf;EAA4C,KAAjG,CAAR,GAA6GvC,MAAM,CAACmI,yBAAP,GAAmCnI,MAAM,CAACoI,gBAAP,CAAwBJ,MAAxB,EAAgChI,MAAM,CAACmI,yBAAP,CAAiCF,MAAjC,CAAhC,CAAnC,GAA+GX,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,CAAP,CAAwBtC,OAAxB,CAAgC,UAAUpD,GAAV,EAAe;EAAEvC,MAAAA,MAAM,CAACqI,cAAP,CAAsBL,MAAtB,EAA8BzF,GAA9B,EAAmCvC,MAAM,CAAC6H,wBAAP,CAAgCI,MAAhC,EAAwC1F,GAAxC,CAAnC;EAAmF,KAApI,CAA5N;EAAoW;;EAAC,SAAOyF,MAAP;EAAgB;;EAE1f,SAASE,iBAAT,CAAyBxG,GAAzB,EAA8Ba,GAA9B,EAAmCjB,KAAnC,EAA0C;EAAE,MAAIiB,GAAG,IAAIb,GAAX,EAAgB;EAAE1B,IAAAA,MAAM,CAACqI,cAAP,CAAsB3G,GAAtB,EAA2Ba,GAA3B,EAAgC;EAAEjB,MAAAA,KAAK,EAAEA,KAAT;EAAgBwG,MAAAA,UAAU,EAAE,IAA5B;EAAkCQ,MAAAA,YAAY,EAAE,IAAhD;EAAsDC,MAAAA,QAAQ,EAAE;EAAhE,KAAhC;EAA0G,GAA5H,MAAkI;EAAE7G,IAAAA,GAAG,CAACa,GAAD,CAAH,GAAWjB,KAAX;EAAmB;;EAAC,SAAOI,GAAP;EAAa;;EAEjN,SAAS0Q,0BAAT,CAAkCnK,MAAlC,EAA0CoK,QAA1C,EAAoD;EAAE,MAAIpK,MAAM,IAAI,IAAd,EAAoB,OAAO,EAAP;;EAAW,MAAID,MAAM,GAAGsK,+BAA6B,CAACrK,MAAD,EAASoK,QAAT,CAA1C;;EAA8D,MAAI9P,GAAJ,EAASjD,CAAT;;EAAY,MAAIU,MAAM,CAAC0H,qBAAX,EAAkC;EAAE,QAAI6K,gBAAgB,GAAGvS,MAAM,CAAC0H,qBAAP,CAA6BO,MAA7B,CAAvB;;EAA6D,SAAK3I,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGiT,gBAAgB,CAAC1T,MAAjC,EAAyCS,CAAC,EAA1C,EAA8C;EAAEiD,MAAAA,GAAG,GAAGgQ,gBAAgB,CAACjT,CAAD,CAAtB;EAA2B,UAAI+S,QAAQ,CAACG,OAAT,CAAiBjQ,GAAjB,KAAyB,CAA7B,EAAgC;EAAU,UAAI,CAACvC,MAAM,CAACC,SAAP,CAAiBwS,oBAAjB,CAAsCtS,IAAtC,CAA2C8H,MAA3C,EAAmD1F,GAAnD,CAAL,EAA8D;EAAUyF,MAAAA,MAAM,CAACzF,GAAD,CAAN,GAAc0F,MAAM,CAAC1F,GAAD,CAApB;EAA4B;EAAE;;EAAC,SAAOyF,MAAP;EAAgB;;EAE5e,SAASsK,+BAAT,CAAuCrK,MAAvC,EAA+CoK,QAA/C,EAAyD;EAAE,MAAIpK,MAAM,IAAI,IAAd,EAAoB,OAAO,EAAP;EAAW,MAAID,MAAM,GAAG,EAAb;EAAiB,MAAI0K,UAAU,GAAG1S,MAAM,CAACyH,IAAP,CAAYQ,MAAZ,CAAjB;EAAsC,MAAI1F,GAAJ,EAASjD,CAAT;;EAAY,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoT,UAAU,CAAC7T,MAA3B,EAAmCS,CAAC,EAApC,EAAwC;EAAEiD,IAAAA,GAAG,GAAGmQ,UAAU,CAACpT,CAAD,CAAhB;EAAqB,QAAI+S,QAAQ,CAACG,OAAT,CAAiBjQ,GAAjB,KAAyB,CAA7B,EAAgC;EAAUyF,IAAAA,MAAM,CAACzF,GAAD,CAAN,GAAc0F,MAAM,CAAC1F,GAAD,CAApB;EAA4B;;EAAC,SAAOyF,MAAP;EAAgB;EAKnT,IAAI2K,aAAa,GAAG,IAApB;EACA,IAAI/L,wBAAwB,GAAGJ,2BAA2B,EAA1D;EACO,SAASoM,OAAT,CAAiBvQ,IAAjB,EAAuB;EAC5B,MAAIwQ,KAAK,GAAGxQ,IAAI,CAACwQ,KAAjB;EAAA,MACIC,cAAc,GAAGzQ,IAAI,CAAC0Q,SAD1B;EAAA,MAEIA,SAAS,GAAGD,cAAc,KAAK,KAAK,CAAxB,GAA4B,EAA5B,GAAiCA,cAFjD;EAAA,MAGIvG,KAAK,GAAGlK,IAAI,CAACkK,KAHjB;EAAA,MAIIjD,KAAK,GAAGjH,IAAI,CAACiH,KAJjB;EAAA,MAKI0J,OAAO,GAAG3Q,IAAI,CAAC2Q,OALnB;EAAA,MAMI/F,KAAK,GAAG5K,IAAI,CAAC4K,KANjB;EAAA,MAOIgG,OAAO,GAAGb,0BAAwB,CAAC/P,IAAD,EAAO8P,WAAP,CAPtC;;EASA,MAAIQ,aAAJ,EAAmB;EACjBpG,IAAAA,KAAK,CAAC2B,WAAN,CAAkBjP,YAAlB,CAA+B0T,aAA/B;EACD;;EAED,MAAIvF,cAAc,GAAG6F,OAAO,CAAC7F,cAA7B;EAAA,MACI3D,SAAS,GAAGwJ,OAAO,CAACxJ,SADxB;EAAA,MAEI0D,QAAQ,GAAG8F,OAAO,CAAC9F,QAFvB;EAAA,MAGID,eAAe,GAAG+F,OAAO,CAAC/F,eAH9B;EAAA,MAIIM,SAAS,GAAGyF,OAAO,CAACzF,SAJxB;EAKAL,EAAAA,QAAQ,CAAC7D,KAAD,CAAR;EACA4D,EAAAA,eAAe,CAACX,KAAK,CAACnF,mBAAP,CAAf;;EAEA,MAAI,CAACkC,KAAD,IAAUiD,KAAK,CAAC8B,WAAN,KAAsB,KAApC,EAA2C;EACzC,QAAI6E,iBAAJ;;EAEA,QAAI7P,WAAW,GAAG4J,KAAK,CAACR,QAAN,GAAiBpJ,WAAjB,CAA6BpB,GAA7B,CAAiC,UAAUsB,UAAV,EAAsB;EACvE,aAAOwE,eAAa,CAACA,eAAa,CAAC,EAAD,EAAKxE,UAAL,CAAd,EAAgC,EAAhC,EAAoC;EACtDC,QAAAA,KAAK,EAAE;EAD+C,OAApC,CAApB;EAGD,KAJiB,CAAlB;EAKAgK,IAAAA,SAAS,CAAC,MAAD,CAAT;EACAJ,IAAAA,cAAc,CAAC/J,WAAD,CAAd;EACAoG,IAAAA,SAAS,CAAC,CAACyJ,iBAAiB,GAAGH,SAAS,CAAClE,MAA/B,MAA2C,IAA3C,IAAmDqE,iBAAiB,KAAK,KAAK,CAA9E,GAAkFA,iBAAlF,GAAsG3G,KAAK,CAACkC,eAAN,CAAsB;EACpIrL,MAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAD6H,KAAtB,CAAvG,CAAT,CAVyC;EAazC;EACA;EACA;;EAEA,QAAI0G,QAAQ,GAAGtN,UAAU,CAACe,wBAAwB,CAACvD,WAAD,CAAxB,CAAsCyB,IAAtC,CAA2C,YAAY;EAC/E,aAAOgC,OAAO,CAACC,OAAR,EAAP;EACD,KAFyB,CAAD,CAAzB;;EAIA,WAAOkG,KAAK,CAACF,eAAN,CAAsB/K,GAAtB,CAA0BmR,QAA1B,CAAP;EACD;;EAED3F,EAAAA,SAAS,CAAC,SAAD,CAAT;EACAmF,EAAAA,aAAa,GAAGpG,KAAK,CAAC2B,WAAN,CAAkBhP,UAAlB,CAA6B,YAAY;EACvDsO,IAAAA,SAAS,CAAC,SAAD,CAAT;EACD,GAFe,EAEbjB,KAAK,CAACiC,cAFO,CAAhB,CA/C4B;EAkD5B;EACA;EACA;EACA;EACA;;EAEA,MAAImD,OAAO,GAAG9L,UAAU,CAACe,wBAAwB,CAAC2F,KAAK,CAAC9D,UAAN,CAAiBV,eAAa,CAAC;EAC/EuB,IAAAA,KAAK,EAAEA,KADwE;EAE/E0J,IAAAA,OAAO,EAAEA,OAFsE;EAG/E5P,IAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAHwE,GAAD,EAI7EwG,OAJ6E,CAA9B,EAIrCnO,IAJqC,CAIhC,UAAU8D,OAAV,EAAmB;EACnC,WAAO9B,OAAO,CAACiC,GAAR,CAAYH,OAAO,CAAC3G,GAAR,CAAY,UAAUgG,MAAV,EAAkB;EAC/C,aAAOnB,OAAO,CAACC,OAAR,CAAgBkB,MAAM,CAACyI,QAAP,CAAgB3I,eAAa,CAAC;EACnDuB,QAAAA,KAAK,EAAEA,KAD4C;EAEnD0J,QAAAA,OAAO,EAAEA,OAF0C;EAGnD5P,QAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAH4C,OAAD,EAIjDwG,OAJiD,CAA7B,CAAhB,EAIOnO,IAJP,CAIY,UAAUmM,kBAAV,EAA8B;EAC/C,eAAOD,UAAU,CAACC,kBAAD,EAAqBhJ,MAAM,CAACiB,QAA5B,CAAjB;EACD,OANM,CAAP;EAOD,KARkB,CAAZ,EAQHpE,IARG,CAQEiC,OARF,EAQWjC,IARX,CAQgB,UAAU+M,SAAV,EAAqB;EAC1C,aAAOC,WAAW,CAACD,SAAD,EAAYjJ,OAAZ,CAAlB;EACD,KAVM,EAUJ9D,IAVI,CAUC,UAAUzB,WAAV,EAAuB;EAC7B,aAAOqL,OAAO,CAAC;EACbrL,QAAAA,WAAW,EAAEA,WADA;EAEbkJ,QAAAA,KAAK,EAAEA,KAFM;EAGbnJ,QAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAHM,OAAD,CAAd;EAKD,KAhBM,CAAP;EAiBD,GAtBiD,CAAD,CAAzB,CAAV,CAsBT3H,IAtBS,CAsBJ,UAAUzB,WAAV,EAAuB;EAC/B,QAAI+P,kBAAJ,CAD+B;EAI/B;EACA;EACA;;;EACA5F,IAAAA,SAAS,CAAC,MAAD,CAAT;EACAJ,IAAAA,cAAc,CAAC/J,WAAD,CAAd;EACA,QAAIgQ,WAAW,GAAG9G,KAAK,CAACkC,eAAN,CAAsB;EACtCrL,MAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAD+B,KAAtB,CAAlB;EAGAhD,IAAAA,SAAS,CAAC,CAAC2J,kBAAkB,GAAGL,SAAS,CAAClE,MAAhC,MAA4C,IAA5C,IAAoDuE,kBAAkB,KAAK,KAAK,CAAhF,GAAoFA,kBAApF,GAAyG7G,KAAK,CAAC8B,WAAN,IAAqB,CAAC/E,KAAtB,IAA+B+J,WAA/B,IAA8CA,WAAxJ,CAAT;EACA,QAAIC,eAAe,GAAG7I,aAAa,CAACwC,KAAK,CAACR,QAAN,EAAD,CAAnC;;EAEA,QAAIQ,KAAK,CAACR,QAAN,GAAiBtC,YAAjB,KAAkC,IAAlC,IAA0CmJ,eAA9C,EAA+D;EAC7D,UAAIjN,IAAI,GAAGiN,eAAe,CAACjN,IAA3B;EAAA,UACIqE,cAAc,GAAG4I,eAAe,CAAC5I,cADrC;EAAA,UAEIC,OAAO,GAAG2I,eAAe,CAAC3I,OAF9B;EAAA,UAGI1C,MAAM,GAAGqL,eAAe,CAACrL,MAH7B;EAIAA,MAAAA,MAAM,CAACyB,QAAP,CAAgB3B,eAAa,CAAC;EAC5B8K,QAAAA,KAAK,EAAEA,KADqB;EAE5BxM,QAAAA,IAAI,EAAEA,IAFsB;EAG5BqE,QAAAA,cAAc,EAAEA,cAHY;EAI5BC,QAAAA,OAAO,EAAEA,OAJmB;EAK5BqI,QAAAA,OAAO,EAAEA,OALmB;EAM5B/K,QAAAA,MAAM,EAAEA,MANoB;EAO5B7E,QAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAPqB,OAAD,EAQ1BwG,OAR0B,CAA7B;EASD;EACF,GApDa,EAoDX7N,OApDW,CAoDH,YAAY;EACrBoI,IAAAA,SAAS,CAAC,MAAD,CAAT;;EAEA,QAAImF,aAAJ,EAAmB;EACjBpG,MAAAA,KAAK,CAAC2B,WAAN,CAAkBjP,YAAlB,CAA+B0T,aAA/B;EACD;EACF,GA1Da,CAAd;EA2DA,SAAO1F,KAAK,CAACF,eAAN,CAAsB/K,GAAtB,CAA0B2P,OAA1B,CAAP;EACD;;ECrID,IAAIQ,WAAS,GAAG,CAAC,OAAD,EAAU,OAAV,EAAmB,SAAnB,EAA8B,OAA9B,CAAhB;;EAEA,SAAS7K,SAAT,CAAiBC,MAAjB,EAAyBC,cAAzB,EAAyC;EAAE,MAAIC,IAAI,GAAGzH,MAAM,CAACyH,IAAP,CAAYF,MAAZ,CAAX;;EAAgC,MAAIvH,MAAM,CAAC0H,qBAAX,EAAkC;EAAE,QAAIC,OAAO,GAAG3H,MAAM,CAAC0H,qBAAP,CAA6BH,MAA7B,CAAd;EAAoDC,IAAAA,cAAc,KAAKG,OAAO,GAAGA,OAAO,CAACvB,MAAR,CAAe,UAAUwB,GAAV,EAAe;EAAE,aAAO5H,MAAM,CAAC6H,wBAAP,CAAgCN,MAAhC,EAAwCK,GAAxC,EAA6CE,UAApD;EAAiE,KAAjG,CAAf,CAAd,EAAkIL,IAAI,CAACpG,IAAL,CAAUlC,KAAV,CAAgBsI,IAAhB,EAAsBE,OAAtB,CAAlI;EAAmK;;EAAC,SAAOF,IAAP;EAAc;;EAErV,SAASM,eAAT,CAAuBC,MAAvB,EAA+B;EAAE,OAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGV,SAAS,CAACC,MAA9B,EAAsCS,CAAC,EAAvC,EAA2C;EAAE,QAAI2I,MAAM,GAAG,QAAQrJ,SAAS,CAACU,CAAD,CAAjB,GAAuBV,SAAS,CAACU,CAAD,CAAhC,GAAsC,EAAnD;EAAuDA,IAAAA,CAAC,GAAG,CAAJ,GAAQgI,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,EAAiB,CAAC,CAAlB,CAAP,CAA4BtC,OAA5B,CAAoC,UAAUpD,GAAV,EAAe;EAAE2F,MAAAA,iBAAe,CAACF,MAAD,EAASzF,GAAT,EAAc0F,MAAM,CAAC1F,GAAD,CAApB,CAAf;EAA4C,KAAjG,CAAR,GAA6GvC,MAAM,CAACmI,yBAAP,GAAmCnI,MAAM,CAACoI,gBAAP,CAAwBJ,MAAxB,EAAgChI,MAAM,CAACmI,yBAAP,CAAiCF,MAAjC,CAAhC,CAAnC,GAA+GX,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,CAAP,CAAwBtC,OAAxB,CAAgC,UAAUpD,GAAV,EAAe;EAAEvC,MAAAA,MAAM,CAACqI,cAAP,CAAsBL,MAAtB,EAA8BzF,GAA9B,EAAmCvC,MAAM,CAAC6H,wBAAP,CAAgCI,MAAhC,EAAwC1F,GAAxC,CAAnC;EAAmF,KAApI,CAA5N;EAAoW;;EAAC,SAAOyF,MAAP;EAAgB;;EAE1f,SAASE,iBAAT,CAAyBxG,GAAzB,EAA8Ba,GAA9B,EAAmCjB,KAAnC,EAA0C;EAAE,MAAIiB,GAAG,IAAIb,GAAX,EAAgB;EAAE1B,IAAAA,MAAM,CAACqI,cAAP,CAAsB3G,GAAtB,EAA2Ba,GAA3B,EAAgC;EAAEjB,MAAAA,KAAK,EAAEA,KAAT;EAAgBwG,MAAAA,UAAU,EAAE,IAA5B;EAAkCQ,MAAAA,YAAY,EAAE,IAAhD;EAAsDC,MAAAA,QAAQ,EAAE;EAAhE,KAAhC;EAA0G,GAA5H,MAAkI;EAAE7G,IAAAA,GAAG,CAACa,GAAD,CAAH,GAAWjB,KAAX;EAAmB;;EAAC,SAAOI,GAAP;EAAa;;EAEjN,SAAS0Q,0BAAT,CAAkCnK,MAAlC,EAA0CoK,QAA1C,EAAoD;EAAE,MAAIpK,MAAM,IAAI,IAAd,EAAoB,OAAO,EAAP;;EAAW,MAAID,MAAM,GAAGsK,+BAA6B,CAACrK,MAAD,EAASoK,QAAT,CAA1C;;EAA8D,MAAI9P,GAAJ,EAASjD,CAAT;;EAAY,MAAIU,MAAM,CAAC0H,qBAAX,EAAkC;EAAE,QAAI6K,gBAAgB,GAAGvS,MAAM,CAAC0H,qBAAP,CAA6BO,MAA7B,CAAvB;;EAA6D,SAAK3I,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGiT,gBAAgB,CAAC1T,MAAjC,EAAyCS,CAAC,EAA1C,EAA8C;EAAEiD,MAAAA,GAAG,GAAGgQ,gBAAgB,CAACjT,CAAD,CAAtB;EAA2B,UAAI+S,QAAQ,CAACG,OAAT,CAAiBjQ,GAAjB,KAAyB,CAA7B,EAAgC;EAAU,UAAI,CAACvC,MAAM,CAACC,SAAP,CAAiBwS,oBAAjB,CAAsCtS,IAAtC,CAA2C8H,MAA3C,EAAmD1F,GAAnD,CAAL,EAA8D;EAAUyF,MAAAA,MAAM,CAACzF,GAAD,CAAN,GAAc0F,MAAM,CAAC1F,GAAD,CAApB;EAA4B;EAAE;;EAAC,SAAOyF,MAAP;EAAgB;;EAE5e,SAASsK,+BAAT,CAAuCrK,MAAvC,EAA+CoK,QAA/C,EAAyD;EAAE,MAAIpK,MAAM,IAAI,IAAd,EAAoB,OAAO,EAAP;EAAW,MAAID,MAAM,GAAG,EAAb;EAAiB,MAAI0K,UAAU,GAAG1S,MAAM,CAACyH,IAAP,CAAYQ,MAAZ,CAAjB;EAAsC,MAAI1F,GAAJ,EAASjD,CAAT;;EAAY,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoT,UAAU,CAAC7T,MAA3B,EAAmCS,CAAC,EAApC,EAAwC;EAAEiD,IAAAA,GAAG,GAAGmQ,UAAU,CAACpT,CAAD,CAAhB;EAAqB,QAAI+S,QAAQ,CAACG,OAAT,CAAiBjQ,GAAjB,KAAyB,CAA7B,EAAgC;EAAUyF,IAAAA,MAAM,CAACzF,GAAD,CAAN,GAAc0F,MAAM,CAAC1F,GAAD,CAApB;EAA4B;;EAAC,SAAOyF,MAAP;EAAgB;EAI5S,SAASuL,SAAT,CAAmBlR,IAAnB,EAAyB;EAC9B,MAAIwQ,KAAK,GAAGxQ,IAAI,CAACwQ,KAAjB;EAAA,MACItG,KAAK,GAAGlK,IAAI,CAACkK,KADjB;EAAA,MAEIyG,OAAO,GAAG3Q,IAAI,CAAC2Q,OAFnB;EAAA,MAGI/F,KAAK,GAAG5K,IAAI,CAAC4K,KAHjB;EAAA,MAIIgG,OAAO,GAAGb,0BAAwB,CAAC/P,IAAD,EAAO8P,WAAP,CAJtC;;EAMA,MAAIU,KAAK,CAACtQ,GAAN,KAAc,SAAd,IAA2BsQ,KAAK,CAACtQ,GAAN,KAAc,WAA7C,EAA0D;EACxD;EACA,QAAIiR,qBAAqB,GAAG,SAASA,qBAAT,GAAiC;EAC3D,UAAIC,QAAQ,GAAGlH,KAAK,CAAC2B,WAAN,CAAkBwF,QAAlB,CAA2BC,cAA3B,CAA0C,GAAG9Q,MAAH,CAAU0J,KAAK,CAACoC,EAAhB,EAAoB,QAApB,EAA8B9L,MAA9B,CAAqCoK,KAAK,CAACR,QAAN,GAAiBtC,YAAtD,CAA1C,CAAf;;EAEA,UAAIsJ,QAAJ,EAAc;EACZ,YAAIA,QAAQ,CAACG,sBAAb,EAAqC;EACnCH,UAAAA,QAAQ,CAACG,sBAAT,CAAgC,KAAhC;EACD,SAFD,MAEO;EACLH,UAAAA,QAAQ,CAACI,cAAT,CAAwB,KAAxB;EACD;EACF;EACF,KAVD,CAFwD;;;EAexD,QAAIC,eAAe,GAAG,SAASA,eAAT,GAA2B;EAC/C,UAAIR,eAAe,GAAG7I,aAAa,CAACwC,KAAK,CAACR,QAAN,EAAD,CAAnC;;EAEA,UAAIQ,KAAK,CAACR,QAAN,GAAiBtC,YAAjB,KAAkC,IAAlC,IAA0CmJ,eAA9C,EAA+D;EAC7D,YAAIjN,IAAI,GAAGiN,eAAe,CAACjN,IAA3B;EAAA,YACIqE,cAAc,GAAG4I,eAAe,CAAC5I,cADrC;EAAA,YAEIC,OAAO,GAAG2I,eAAe,CAAC3I,OAF9B;EAAA,YAGI1C,MAAM,GAAGqL,eAAe,CAACrL,MAH7B;EAIAA,QAAAA,MAAM,CAACyB,QAAP,CAAgB3B,eAAa,CAAC;EAC5B8K,UAAAA,KAAK,EAAEA,KADqB;EAE5BxM,UAAAA,IAAI,EAAEA,IAFsB;EAG5BqE,UAAAA,cAAc,EAAEA,cAHY;EAI5BC,UAAAA,OAAO,EAAEA,OAJmB;EAK5BqI,UAAAA,OAAO,EAAEA,OALmB;EAM5B/K,UAAAA,MAAM,EAAEA,MANoB;EAO5B7E,UAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAPqB,SAAD,EAQ1BwG,OAR0B,CAA7B;EASD;EACF,KAlBD,CAfwD;EAkCxD;;;EAGAJ,IAAAA,KAAK,CAACkB,cAAN,GArCwD;EAsCxD;;EAEA,QAAI9G,KAAK,CAACR,QAAN,GAAiBoC,MAAjB,KAA4B,KAA5B,KAAsCtC,KAAK,CAAC8B,WAAN,IAAqBpF,OAAO,CAACgE,KAAK,CAACR,QAAN,GAAiBnD,KAAlB,CAAlE,CAAJ,EAAiG;EAC/FsJ,MAAAA,OAAO,CAAC7K,eAAa,CAAC;EACpB8K,QAAAA,KAAK,EAAEA,KADa;EAEpBtG,QAAAA,KAAK,EAAEA,KAFa;EAGpBjD,QAAAA,KAAK,EAAE2D,KAAK,CAACR,QAAN,GAAiBnD,KAHJ;EAIpB0J,QAAAA,OAAO,EAAEA,OAJW;EAKpB/F,QAAAA,KAAK,EAAEA;EALa,OAAD,EAMlBgG,OANkB,CAAd,CAAP,CAManO,IANb,CAMkB,YAAY;EAC5BmI,QAAAA,KAAK,CAACP,QAAN,CAAemG,KAAK,CAACtQ,GAArB,EAA0B;EACxByR,UAAAA,gBAAgB,EAAEzH,KAAK,CAACnF;EADA,SAA1B;EAGA0M,QAAAA,eAAe,GAJa;EAK5B;EACA;;EAEA5U,QAAAA,UAAU,CAACsU,qBAAD,EAAwB,CAAxB,CAAV;EACD,OAfD;EAgBD,KAjBD,MAiBO;EACLvG,MAAAA,KAAK,CAACP,QAAN,CAAemG,KAAK,CAACtQ,GAArB,EAA0B,EAA1B;EACAuR,MAAAA,eAAe;EACfN,MAAAA,qBAAqB;EACtB;EACF,GA9DD,MA8DO,IAAIX,KAAK,CAACtQ,GAAN,KAAc,QAAlB,EAA4B;EACjC;EACA;EACA;EACAsQ,IAAAA,KAAK,CAACkB,cAAN;EACA9G,IAAAA,KAAK,CAACP,QAAN,CAAemG,KAAK,CAACtQ,GAArB,EAA0B,IAA1B,EALiC;EAMjC;EACA;EACA;;EAEA0K,IAAAA,KAAK,CAACF,eAAN,CAAsBzG,SAAtB;EACD,GAXM,MAWA,IAAIuM,KAAK,CAACtQ,GAAN,KAAc,KAAlB,EAAyB;EAC9B0K,IAAAA,KAAK,CAACP,QAAN,CAAe,MAAf,EAAuB,IAAvB,EAD8B;EAE9B;EACA;EACA;;EAEAO,IAAAA,KAAK,CAACF,eAAN,CAAsBzG,SAAtB;EACD,GAPM,MAOA,IAAIuM,KAAK,CAACtQ,GAAN,KAAc,OAAlB,EAA2B;EAChC;EACA;EACA,QAAI0K,KAAK,CAACR,QAAN,GAAiBtC,YAAjB,KAAkC,IAAlC,IAA0C8C,KAAK,CAACR,QAAN,GAAiBpJ,WAAjB,CAA6B6O,KAA7B,CAAmC,UAAU3O,UAAV,EAAsB;EACrG,aAAOA,UAAU,CAACC,KAAX,CAAiB3E,MAAjB,KAA4B,CAAnC;EACD,KAF6C,CAA9C,EAEI;EACF;EACA;EACA;EACA;EACA,UAAI,CAAC0N,KAAK,CAAC7H,KAAX,EAAkB;EAChBuI,QAAAA,KAAK,CAACF,eAAN,CAAsBzG,SAAtB;EACD;;EAED;EACD,KAf+B;EAgBhC;;;EAGAuM,IAAAA,KAAK,CAACkB,cAAN;;EAEA,QAAIzR,KAAK,GAAGmI,aAAa,CAACwC,KAAK,CAACR,QAAN,EAAD,CAAzB;EAAA,QACIpG,IAAI,GAAG/D,KAAK,CAAC+D,IADjB;EAAA,QAEIqE,cAAc,GAAGpI,KAAK,CAACoI,cAF3B;EAAA,QAGIC,OAAO,GAAGrI,KAAK,CAACqI,OAHpB;EAAA,QAII1C,MAAM,GAAG3F,KAAK,CAAC2F,MAJnB;;EAMA,QAAI4K,KAAK,CAACoB,OAAN,IAAiBpB,KAAK,CAACqB,OAA3B,EAAoC;EAClC,UAAIvJ,OAAO,KAAKjM,SAAhB,EAA2B;EACzBuJ,QAAAA,MAAM,CAACuB,QAAP,CAAgBzB,eAAa,CAAC;EAC5B8K,UAAAA,KAAK,EAAEA,KADqB;EAE5BxM,UAAAA,IAAI,EAAEA,IAFsB;EAG5BqE,UAAAA,cAAc,EAAEA,cAHY;EAI5BC,UAAAA,OAAO,EAAEA,OAJmB;EAK5BqI,UAAAA,OAAO,EAAEA,OALmB;EAM5B/K,UAAAA,MAAM,EAAEA,MANoB;EAO5B7E,UAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAPqB,SAAD,EAQ1BwG,OAR0B,CAA7B;EASA1G,QAAAA,KAAK,CAACsD,SAAN,CAAgBK,cAAhB,CAA+B;EAC7BvF,UAAAA,OAAO,EAAEA,OADoB;EAE7BtE,UAAAA,IAAI,EAAEA,IAFuB;EAG7BjD,UAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAHsB,SAA/B;EAKD;EACF,KAjBD,MAiBO,IAAIoG,KAAK,CAACsB,QAAV,EAAoB;EACzB,UAAIxJ,OAAO,KAAKjM,SAAhB,EAA2B;EACzBuJ,QAAAA,MAAM,CAACuB,QAAP,CAAgBzB,eAAa,CAAC;EAC5B8K,UAAAA,KAAK,EAAEA,KADqB;EAE5BxM,UAAAA,IAAI,EAAEA,IAFsB;EAG5BqE,UAAAA,cAAc,EAAEA,cAHY;EAI5BC,UAAAA,OAAO,EAAEA,OAJmB;EAK5BqI,UAAAA,OAAO,EAAEA,OALmB;EAM5B/K,UAAAA,MAAM,EAAEA,MANoB;EAO5B7E,UAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAPqB,SAAD,EAQ1BwG,OAR0B,CAA7B;EASA1G,QAAAA,KAAK,CAACsD,SAAN,CAAgBU,iBAAhB,CAAkC;EAChC5F,UAAAA,OAAO,EAAEA,OADuB;EAEhCtE,UAAAA,IAAI,EAAEA,IAF0B;EAGhCjD,UAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAHyB,SAAlC;EAKD;EACF,KAjBM,MAiBA,IAAIoG,KAAK,CAACuB,MAAV,EAAkB,CAAlB,MACA;EACL,UAAIzJ,OAAO,KAAKjM,SAAhB,EAA2B;EACzBuJ,QAAAA,MAAM,CAACuB,QAAP,CAAgBzB,eAAa,CAAC;EAC5B8K,UAAAA,KAAK,EAAEA,KADqB;EAE5BxM,UAAAA,IAAI,EAAEA,IAFsB;EAG5BqE,UAAAA,cAAc,EAAEA,cAHY;EAI5BC,UAAAA,OAAO,EAAEA,OAJmB;EAK5BqI,UAAAA,OAAO,EAAEA,OALmB;EAM5B/K,UAAAA,MAAM,EAAEA,MANoB;EAO5B7E,UAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAPqB,SAAD,EAQ1BwG,OAR0B,CAA7B;EASA1G,QAAAA,KAAK,CAACsD,SAAN,CAAgBC,QAAhB,CAAyB;EACvBnF,UAAAA,OAAO,EAAEA,OADc;EAEvBtE,UAAAA,IAAI,EAAEA,IAFiB;EAGvBjD,UAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAHgB,SAAzB;EAKA;EACD;;EAEDmG,MAAAA,OAAO,CAAC7K,eAAa,CAAC;EACpB8K,QAAAA,KAAK,EAAEA,KADa;EAEpBE,QAAAA,SAAS,EAAE;EACTlE,UAAAA,MAAM,EAAE;EADC,SAFS;EAKpBtC,QAAAA,KAAK,EAAEA,KALa;EAMpBjD,QAAAA,KAAK,EAAEoB,cANa;EAOpBsI,QAAAA,OAAO,EAAEA,OAPW;EAQpB/F,QAAAA,KAAK,EAAEA;EARa,OAAD,EASlBgG,OATkB,CAAd,CAAP,CASanO,IATb,CASkB,YAAY;EAC5BmD,QAAAA,MAAM,CAACuB,QAAP,CAAgBzB,eAAa,CAAC;EAC5B8K,UAAAA,KAAK,EAAEA,KADqB;EAE5BxM,UAAAA,IAAI,EAAEA,IAFsB;EAG5BqE,UAAAA,cAAc,EAAEA,cAHY;EAI5BC,UAAAA,OAAO,EAAEA,OAJmB;EAK5BqI,UAAAA,OAAO,EAAEA,OALmB;EAM5B/K,UAAAA,MAAM,EAAEA,MANoB;EAO5B7E,UAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAPqB,SAAD,EAQ1BwG,OAR0B,CAA7B;EASD,OAnBD;EAoBD;EACF;EACF;;EC5MD,IAAId,WAAS,GAAG,CAAC,OAAD,EAAU,SAAV,EAAqB,OAArB,CAAhB;EAAA,IACIkC,UAAU,GAAG,CAAC,cAAD,EAAiB,aAAjB,EAAgC,cAAhC,CADjB;EAAA,IAEIC,UAAU,GAAG,CAAC,cAAD,CAFjB;EAAA,IAGIC,UAAU,GAAG,CAAC,cAAD,EAAiB,WAAjB,CAHjB;EAAA,IAIIC,UAAU,GAAG,CAAC,MAAD,EAAS,QAAT,CAJjB;;EAMA,SAASlN,SAAT,CAAiBC,MAAjB,EAAyBC,cAAzB,EAAyC;EAAE,MAAIC,IAAI,GAAGzH,MAAM,CAACyH,IAAP,CAAYF,MAAZ,CAAX;;EAAgC,MAAIvH,MAAM,CAAC0H,qBAAX,EAAkC;EAAE,QAAIC,OAAO,GAAG3H,MAAM,CAAC0H,qBAAP,CAA6BH,MAA7B,CAAd;EAAoDC,IAAAA,cAAc,KAAKG,OAAO,GAAGA,OAAO,CAACvB,MAAR,CAAe,UAAUwB,GAAV,EAAe;EAAE,aAAO5H,MAAM,CAAC6H,wBAAP,CAAgCN,MAAhC,EAAwCK,GAAxC,EAA6CE,UAApD;EAAiE,KAAjG,CAAf,CAAd,EAAkIL,IAAI,CAACpG,IAAL,CAAUlC,KAAV,CAAgBsI,IAAhB,EAAsBE,OAAtB,CAAlI;EAAmK;;EAAC,SAAOF,IAAP;EAAc;;EAErV,SAASM,eAAT,CAAuBC,MAAvB,EAA+B;EAAE,OAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGV,SAAS,CAACC,MAA9B,EAAsCS,CAAC,EAAvC,EAA2C;EAAE,QAAI2I,MAAM,GAAG,QAAQrJ,SAAS,CAACU,CAAD,CAAjB,GAAuBV,SAAS,CAACU,CAAD,CAAhC,GAAsC,EAAnD;EAAuDA,IAAAA,CAAC,GAAG,CAAJ,GAAQgI,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,EAAiB,CAAC,CAAlB,CAAP,CAA4BtC,OAA5B,CAAoC,UAAUpD,GAAV,EAAe;EAAE2F,MAAAA,iBAAe,CAACF,MAAD,EAASzF,GAAT,EAAc0F,MAAM,CAAC1F,GAAD,CAApB,CAAf;EAA4C,KAAjG,CAAR,GAA6GvC,MAAM,CAACmI,yBAAP,GAAmCnI,MAAM,CAACoI,gBAAP,CAAwBJ,MAAxB,EAAgChI,MAAM,CAACmI,yBAAP,CAAiCF,MAAjC,CAAhC,CAAnC,GAA+GX,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,CAAP,CAAwBtC,OAAxB,CAAgC,UAAUpD,GAAV,EAAe;EAAEvC,MAAAA,MAAM,CAACqI,cAAP,CAAsBL,MAAtB,EAA8BzF,GAA9B,EAAmCvC,MAAM,CAAC6H,wBAAP,CAAgCI,MAAhC,EAAwC1F,GAAxC,CAAnC;EAAmF,KAApI,CAA5N;EAAoW;;EAAC,SAAOyF,MAAP;EAAgB;;EAE1f,SAASE,iBAAT,CAAyBxG,GAAzB,EAA8Ba,GAA9B,EAAmCjB,KAAnC,EAA0C;EAAE,MAAIiB,GAAG,IAAIb,GAAX,EAAgB;EAAE1B,IAAAA,MAAM,CAACqI,cAAP,CAAsB3G,GAAtB,EAA2Ba,GAA3B,EAAgC;EAAEjB,MAAAA,KAAK,EAAEA,KAAT;EAAgBwG,MAAAA,UAAU,EAAE,IAA5B;EAAkCQ,MAAAA,YAAY,EAAE,IAAhD;EAAsDC,MAAAA,QAAQ,EAAE;EAAhE,KAAhC;EAA0G,GAA5H,MAAkI;EAAE7G,IAAAA,GAAG,CAACa,GAAD,CAAH,GAAWjB,KAAX;EAAmB;;EAAC,SAAOI,GAAP;EAAa;;EAEjN,SAAS0Q,0BAAT,CAAkCnK,MAAlC,EAA0CoK,QAA1C,EAAoD;EAAE,MAAIpK,MAAM,IAAI,IAAd,EAAoB,OAAO,EAAP;;EAAW,MAAID,MAAM,GAAGsK,+BAA6B,CAACrK,MAAD,EAASoK,QAAT,CAA1C;;EAA8D,MAAI9P,GAAJ,EAASjD,CAAT;;EAAY,MAAIU,MAAM,CAAC0H,qBAAX,EAAkC;EAAE,QAAI6K,gBAAgB,GAAGvS,MAAM,CAAC0H,qBAAP,CAA6BO,MAA7B,CAAvB;;EAA6D,SAAK3I,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGiT,gBAAgB,CAAC1T,MAAjC,EAAyCS,CAAC,EAA1C,EAA8C;EAAEiD,MAAAA,GAAG,GAAGgQ,gBAAgB,CAACjT,CAAD,CAAtB;EAA2B,UAAI+S,QAAQ,CAACG,OAAT,CAAiBjQ,GAAjB,KAAyB,CAA7B,EAAgC;EAAU,UAAI,CAACvC,MAAM,CAACC,SAAP,CAAiBwS,oBAAjB,CAAsCtS,IAAtC,CAA2C8H,MAA3C,EAAmD1F,GAAnD,CAAL,EAA8D;EAAUyF,MAAAA,MAAM,CAACzF,GAAD,CAAN,GAAc0F,MAAM,CAAC1F,GAAD,CAApB;EAA4B;EAAE;;EAAC,SAAOyF,MAAP;EAAgB;;EAE5e,SAASsK,+BAAT,CAAuCrK,MAAvC,EAA+CoK,QAA/C,EAAyD;EAAE,MAAIpK,MAAM,IAAI,IAAd,EAAoB,OAAO,EAAP;EAAW,MAAID,MAAM,GAAG,EAAb;EAAiB,MAAI0K,UAAU,GAAG1S,MAAM,CAACyH,IAAP,CAAYQ,MAAZ,CAAjB;EAAsC,MAAI1F,GAAJ,EAASjD,CAAT;;EAAY,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoT,UAAU,CAAC7T,MAA3B,EAAmCS,CAAC,EAApC,EAAwC;EAAEiD,IAAAA,GAAG,GAAGmQ,UAAU,CAACpT,CAAD,CAAhB;EAAqB,QAAI+S,QAAQ,CAACG,OAAT,CAAiBjQ,GAAjB,KAAyB,CAA7B,EAAgC;EAAUyF,IAAAA,MAAM,CAACzF,GAAD,CAAN,GAAc0F,MAAM,CAAC1F,GAAD,CAApB;EAA4B;;EAAC,SAAOyF,MAAP;EAAgB;EAM5S,SAASyM,cAAT,CAAwBpS,IAAxB,EAA8B;EACnC,MAAIkK,KAAK,GAAGlK,IAAI,CAACkK,KAAjB;EAAA,MACIyG,OAAO,GAAG3Q,IAAI,CAAC2Q,OADnB;EAAA,MAEI/F,KAAK,GAAG5K,IAAI,CAAC4K,KAFjB;EAAA,MAGIgG,OAAO,GAAGb,0BAAwB,CAAC/P,IAAD,EAAO8P,WAAP,CAHtC;;EAKA,MAAIuC,mBAAmB,GAAG,SAASA,mBAAT,CAA6BC,aAA7B,EAA4C;EACpE,QAAIC,YAAY,GAAGD,aAAa,CAACC,YAAjC;EAAA,QACIC,WAAW,GAAGF,aAAa,CAACE,WADhC;EAAA,QAEIC,YAAY,GAAGH,aAAa,CAACG,YAFjC;EAAA,QAGIC,IAAI,GAAG3C,0BAAwB,CAACuC,aAAD,EAAgBN,UAAhB,CAHnC;;EAKA,aAASW,uBAAT,CAAiCnC,KAAjC,EAAwC;EACtC;EACA;EACA;EACA;EACA;EACA;EACA,UAAIoC,yBAAyB,GAAGhI,KAAK,CAACR,QAAN,GAAiBoC,MAAjB,IAA2B,CAAC5B,KAAK,CAACF,eAAN,CAAsBxG,OAAtB,EAA5D;;EAEA,UAAI,CAAC0O,yBAAD,IAA8BpC,KAAK,CAAC7K,MAAN,KAAiB4M,YAAnD,EAAiE;EAC/D;EACD,OAXqC;EAYtC;;;EAGA,UAAIM,0BAA0B,GAAG,CAACL,WAAD,EAAcC,YAAd,EAA4BK,IAA5B,CAAiC,UAAUC,WAAV,EAAuB;EACvF,eAAOxK,gBAAgB,CAACwK,WAAD,EAAcvC,KAAK,CAAC7K,MAApB,CAAvB;EACD,OAFgC,CAAjC;;EAIA,UAAIkN,0BAA0B,KAAK,KAAnC,EAA0C;EACxCjI,QAAAA,KAAK,CAACP,QAAN,CAAe,MAAf,EAAuB,IAAvB,EADwC;EAExC;EACA;EACA;;EAEA,YAAI,CAACH,KAAK,CAAC7H,KAAX,EAAkB;EAChBuI,UAAAA,KAAK,CAACF,eAAN,CAAsBzG,SAAtB;EACD;EACF;EACF;;EAED,WAAOyB,eAAa,CAAC;EACnB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACAsN,MAAAA,YAAY,EAAEL,uBAVK;EAWnBM,MAAAA,WAAW,EAAEN,uBAXM;EAYnB;EACA;EACA;EACA;EACAO,MAAAA,WAAW,EAAE,SAASA,WAAT,CAAqB1C,KAArB,EAA4B;EACvC,YAAI5F,KAAK,CAACR,QAAN,GAAiBoC,MAAjB,KAA4B,KAA5B,IAAqC+F,YAAY,KAAKrI,KAAK,CAAC2B,WAAN,CAAkBwF,QAAlB,CAA2B8B,aAAjF,IAAkG3C,KAAK,CAAC7K,MAAN,KAAiB4M,YAAvH,EAAqI;EACnI;EACD;;EAEDA,QAAAA,YAAY,CAACa,IAAb;EACD;EAtBkB,KAAD,EAuBjBV,IAvBiB,CAApB;EAwBD,GA7DD;;EA+DA,MAAIW,YAAY,GAAG,SAASA,YAAT,CAAsBX,IAAtB,EAA4B;EAC7C,WAAOhN,eAAa,CAAC;EACnB4N,MAAAA,IAAI,EAAE,UADa;EAEnB,uBAAiB1I,KAAK,CAACR,QAAN,GAAiBoC,MAFf;EAGnB,uBAAiB,SAHE;EAInB,mBAAa5B,KAAK,CAACR,QAAN,GAAiBoC,MAAjB,GAA0B,GAAGhM,MAAH,CAAU0J,KAAK,CAACoC,EAAhB,EAAoB,OAApB,CAA1B,GAAyDjQ,SAJnD;EAKnB,yBAAmB,GAAGmE,MAAH,CAAU0J,KAAK,CAACoC,EAAhB,EAAoB,QAApB;EALA,KAAD,EAMjBoG,IANiB,CAApB;EAOD,GARD;;EAUA,MAAIa,YAAY,GAAG,SAASA,YAAT,CAAsBjB,aAAtB,EAAqC;EACtD,IAAmBA,aAAa,CAACC,YAAjC;EAAA,YACIG,IAAI,GAAG3C,0BAAwB,CAACuC,aAAD,EAAgBL,UAAhB;;EAEnC,WAAOvM,eAAa,CAAC;EACnB4E,MAAAA,MAAM,EAAE,EADW;EAEnBkJ,MAAAA,UAAU,EAAE,IAFO;EAGnBF,MAAAA,IAAI,EAAE,QAHa;EAInBxG,MAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkB0D,KAAlB,EAAyB;EACjC,YAAIiD,qBAAJ;;EAEAjD,QAAAA,KAAK,CAACkB,cAAN;EACAxH,QAAAA,KAAK,CAAC4C,QAAN,CAAepH,eAAa,CAAC;EAC3B8K,UAAAA,KAAK,EAAEA,KADoB;EAE3BG,UAAAA,OAAO,EAAEA,OAFkB;EAG3B5P,UAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAHoB,SAAD,EAIzBwG,OAJyB,CAA5B;EAKAhG,QAAAA,KAAK,CAACP,QAAN,CAAe,QAAf,EAAyB,IAAzB;EACA,SAACoJ,qBAAqB,GAAGnB,aAAa,CAACC,YAAvC,MAAyD,IAAzD,IAAiEkB,qBAAqB,KAAK,KAAK,CAAhG,GAAoG,KAAK,CAAzG,GAA6GA,qBAAqB,CAACL,IAAtB,EAA7G;EACD,OAfkB;EAgBnBnG,MAAAA,OAAO,EAAE,SAASA,OAAT,CAAiBuD,KAAjB,EAAwB;EAC/B,YAAIkD,sBAAJ;;EAEAlD,QAAAA,KAAK,CAACkB,cAAN;EACAxH,QAAAA,KAAK,CAAC+C,OAAN,CAAcvH,eAAa,CAAC;EAC1B8K,UAAAA,KAAK,EAAEA,KADmB;EAE1BG,UAAAA,OAAO,EAAEA,OAFiB;EAG1B5P,UAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAHmB,SAAD,EAIxBwG,OAJwB,CAA3B;EAKAhG,QAAAA,KAAK,CAACP,QAAN,CAAe,OAAf,EAAwB,IAAxB;EACA,SAACqJ,sBAAsB,GAAGpB,aAAa,CAACC,YAAxC,MAA0D,IAA1D,IAAkEmB,sBAAsB,KAAK,KAAK,CAAlG,GAAsG,KAAK,CAA3G,GAA+GA,sBAAsB,CAACzF,KAAvB,EAA/G;EACD;EA3BkB,KAAD,EA4BjByE,IA5BiB,CAApB;EA6BD,GAjCD;;EAmCA,MAAIiB,aAAa,GAAG,SAASA,aAAT,CAAuBrB,aAAvB,EAAsC;EACxD,QAAIsB,qBAAJ;;EAEA,aAASC,OAAT,CAAiBrD,KAAjB,EAAwB;EACtB;EACA;EACA,UAAItG,KAAK,CAAC8B,WAAN,IAAqBpF,OAAO,CAACgE,KAAK,CAACR,QAAN,GAAiBnD,KAAlB,CAAhC,EAA0D;EACxDsJ,QAAAA,OAAO,CAAC7K,eAAa,CAAC;EACpB8K,UAAAA,KAAK,EAAEA,KADa;EAEpBtG,UAAAA,KAAK,EAAEA,KAFa;EAGpBjD,UAAAA,KAAK,EAAE2D,KAAK,CAACR,QAAN,GAAiBmC,UAAjB,IAA+B3B,KAAK,CAACR,QAAN,GAAiBnD,KAHnC;EAIpB0J,UAAAA,OAAO,EAAEA,OAJW;EAKpB/F,UAAAA,KAAK,EAAEA;EALa,SAAD,EAMlBgG,OANkB,CAAd,CAAP;EAOD;;EAEDhG,MAAAA,KAAK,CAACP,QAAN,CAAe,OAAf,EAAwB,IAAxB;EACD;;EAED,QAAIpK,KAAK,GAAGqS,aAAa,IAAI,EAA7B;EAAA,QACmBrS,KAAK,CAACsS,YADzB;EAAA,YAEIuB,eAAe,GAAG7T,KAAK,CAAC8T,SAF5B;EAAA,QAGIA,SAAS,GAAGD,eAAe,KAAK,KAAK,CAAzB,GAA6B,GAA7B,GAAmCA,eAHnD;EAAA,QAIIpB,IAAI,GAAG3C,0BAAwB,CAAC9P,KAAD,EAAQiS,UAAR;;EAEnC,QAAI8B,UAAU,GAAG5L,aAAa,CAACwC,KAAK,CAACR,QAAN,EAAD,CAA9B;EACA,QAAIvB,SAAS,GAAG,CAAC,CAAC+K,qBAAqB,GAAG1J,KAAK,CAAC2B,WAAN,CAAkB2B,SAA3C,MAA0D,IAA1D,IAAkEoG,qBAAqB,KAAK,KAAK,CAAjG,GAAqG,KAAK,CAA1G,GAA8GA,qBAAqB,CAAC/K,SAArI,KAAmJ,EAAnK;EACA,QAAIoL,qBAAqB,GAAGrL,SAAS,CAACC,SAAD,CAArC;EACA,QAAIqL,YAAY,GAAGF,UAAU,KAAK,IAAf,IAAuBA,UAAU,KAAK,KAAK,CAA3C,IAAgDA,UAAU,CAAC1L,OAA3D,IAAsE,CAAC2L,qBAAvE,GAA+F,IAA/F,GAAsG,QAAzH;EACA,WAAOvO,eAAa,CAAC;EACnB,2BAAqB,MADF;EAEnB,+BAAyBkF,KAAK,CAACR,QAAN,GAAiBoC,MAAjB,IAA2B5B,KAAK,CAACR,QAAN,GAAiBtC,YAAjB,KAAkC,IAA7D,GAAoE,GAAGtH,MAAH,CAAU0J,KAAK,CAACoC,EAAhB,EAAoB,QAApB,EAA8B9L,MAA9B,CAAqCoK,KAAK,CAACR,QAAN,GAAiBtC,YAAtD,CAApE,GAA0IzL,SAFhJ;EAGnB,uBAAiBuO,KAAK,CAACR,QAAN,GAAiBoC,MAAjB,GAA0B,GAAGhM,MAAH,CAAU0J,KAAK,CAACoC,EAAhB,EAAoB,OAApB,CAA1B,GAAyDjQ,SAHvD;EAInB,yBAAmB,GAAGmE,MAAH,CAAU0J,KAAK,CAACoC,EAAhB,EAAoB,QAApB,CAJA;EAKnBrN,MAAAA,KAAK,EAAE2L,KAAK,CAACR,QAAN,GAAiBmC,UAAjB,IAA+B3B,KAAK,CAACR,QAAN,GAAiBnD,KALpC;EAMnBqF,MAAAA,EAAE,EAAE,GAAG9L,MAAH,CAAU0J,KAAK,CAACoC,EAAhB,EAAoB,QAApB,CANe;EAOnB6H,MAAAA,YAAY,EAAE,KAPK;EAQnBC,MAAAA,WAAW,EAAE,KARM;EASnBC,MAAAA,cAAc,EAAE,KATG;EAUnBH,MAAAA,YAAY,EAAEA,YAVK;EAWnBI,MAAAA,UAAU,EAAE,OAXO;EAYnBpI,MAAAA,SAAS,EAAEhC,KAAK,CAACgC,SAZE;EAanBD,MAAAA,WAAW,EAAE/B,KAAK,CAAC+B,WAbA;EAcnB8H,MAAAA,SAAS,EAAEA,SAdQ;EAenBtJ,MAAAA,IAAI,EAAE,QAfa;EAgBnB8J,MAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkB/D,KAAlB,EAAyB;EACjCD,QAAAA,OAAO,CAAC7K,eAAa,CAAC;EACpB8K,UAAAA,KAAK,EAAEA,KADa;EAEpBtG,UAAAA,KAAK,EAAEA,KAFa;EAGpBjD,UAAAA,KAAK,EAAEuJ,KAAK,CAACgE,aAAN,CAAoBvV,KAApB,CAA0BlB,KAA1B,CAAgC,CAAhC,EAAmCgW,SAAnC,CAHa;EAIpBpD,UAAAA,OAAO,EAAEA,OAJW;EAKpB/F,UAAAA,KAAK,EAAEA;EALa,SAAD,EAMlBgG,OANkB,CAAd,CAAP;EAOD,OAxBkB;EAyBnBM,MAAAA,SAAS,EAAE,SAASA,WAAT,CAAmBV,KAAnB,EAA0B;EACnCiE,QAAAA,SAAU,CAAC/O,eAAa,CAAC;EACvB8K,UAAAA,KAAK,EAAEA,KADgB;EAEvBtG,UAAAA,KAAK,EAAEA,KAFgB;EAGvByG,UAAAA,OAAO,EAAEA,OAHc;EAIvB/F,UAAAA,KAAK,EAAEA;EAJgB,SAAD,EAKrBgG,OALqB,CAAd,CAAV;EAMD,OAhCkB;EAiCnBiD,MAAAA,OAAO,EAAEA,OAjCU;EAkCnB;EACA;EACA;EACAa,MAAAA,MAAM,EAAElT,IArCW;EAsCnBmT,MAAAA,OAAO,EAAE,SAASA,OAAT,CAAiBnE,KAAjB,EAAwB;EAC/B;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YAAI8B,aAAa,CAACC,YAAd,KAA+BrI,KAAK,CAAC2B,WAAN,CAAkBwF,QAAlB,CAA2B8B,aAA1D,IAA2E,CAACvI,KAAK,CAACR,QAAN,GAAiBoC,MAAjG,EAAyG;EACvGqH,UAAAA,OAAO,CAACrD,KAAD,CAAP;EACD;EACF;EAjDkB,KAAD,EAkDjBkC,IAlDiB,CAApB;EAmDD,GAhFD;;EAkFA,MAAIkC,aAAa,GAAG,SAASA,aAAT,CAAuBlC,IAAvB,EAA6B;EAC/C,WAAOhN,eAAa,CAAC;EACnBmP,MAAAA,OAAO,EAAE,GAAGrU,MAAH,CAAU0J,KAAK,CAACoC,EAAhB,EAAoB,QAApB,CADU;EAEnBA,MAAAA,EAAE,EAAE,GAAG9L,MAAH,CAAU0J,KAAK,CAACoC,EAAhB,EAAoB,QAApB;EAFe,KAAD,EAGjBoG,IAHiB,CAApB;EAID,GALD;;EAOA,MAAIoC,YAAY,GAAG,SAASA,YAAT,CAAsBpC,IAAtB,EAA4B;EAC7C,WAAOhN,eAAa,CAAC;EACnB4N,MAAAA,IAAI,EAAE,SADa;EAEnB,yBAAmB,GAAG9S,MAAH,CAAU0J,KAAK,CAACoC,EAAhB,EAAoB,QAApB,CAFA;EAGnBA,MAAAA,EAAE,EAAE,GAAG9L,MAAH,CAAU0J,KAAK,CAACoC,EAAhB,EAAoB,OAApB;EAHe,KAAD,EAIjBoG,IAJiB,CAApB;EAKD,GAND;;EAQA,MAAIqC,aAAa,GAAG,SAASA,aAAT,CAAuBrC,IAAvB,EAA6B;EAC/C,WAAOhN,eAAa,CAAC;EACnBuN,MAAAA,WAAW,EAAE,SAASA,WAAT,CAAqBzC,KAArB,EAA4B;EACvC;EACA;EACA;EACAA,QAAAA,KAAK,CAACkB,cAAN;EACD,OANkB;EAOnBsD,MAAAA,YAAY,EAAE,SAASA,YAAT,GAAwB;EACpCpK,QAAAA,KAAK,CAACP,QAAN,CAAe,YAAf,EAA6B,IAA7B;EACD;EATkB,KAAD,EAUjBqI,IAViB,CAApB;EAWD,GAZD;;EAcA,MAAIuC,YAAY,GAAG,SAASA,YAAT,CAAsB3C,aAAtB,EAAqC;EACtD,QAAItO,IAAI,GAAGsO,aAAa,CAACtO,IAAzB;EAAA,QACI4B,MAAM,GAAG0M,aAAa,CAAC1M,MAD3B;EAAA,QAEI8M,IAAI,GAAG3C,0BAAwB,CAACuC,aAAD,EAAgBH,UAAhB,CAFnC;;EAIA,WAAOzM,eAAa,CAAC;EACnB4G,MAAAA,EAAE,EAAE,GAAG9L,MAAH,CAAU0J,KAAK,CAACoC,EAAhB,EAAoB,QAApB,EAA8B9L,MAA9B,CAAqCwD,IAAI,CAACkH,iBAA1C,CADe;EAEnBoI,MAAAA,IAAI,EAAE,QAFa;EAGnB,uBAAiB1I,KAAK,CAACR,QAAN,GAAiBtC,YAAjB,KAAkC9D,IAAI,CAACkH,iBAHrC;EAInBgK,MAAAA,WAAW,EAAE,SAASA,WAAT,CAAqB1E,KAArB,EAA4B;EACvC,YAAIxM,IAAI,CAACkH,iBAAL,KAA2BN,KAAK,CAACR,QAAN,GAAiBtC,YAAhD,EAA8D;EAC5D;EACD;;EAED8C,QAAAA,KAAK,CAACP,QAAN,CAAe,WAAf,EAA4BrG,IAAI,CAACkH,iBAAjC;EACA,YAAI8I,UAAU,GAAG5L,aAAa,CAACwC,KAAK,CAACR,QAAN,EAAD,CAA9B;;EAEA,YAAIQ,KAAK,CAACR,QAAN,GAAiBtC,YAAjB,KAAkC,IAAlC,IAA0CkM,UAA9C,EAA0D;EACxD,cAAImB,KAAK,GAAGnB,UAAU,CAAChQ,IAAvB;EAAA,cACIqE,cAAc,GAAG2L,UAAU,CAAC3L,cADhC;EAAA,cAEIC,OAAO,GAAG0L,UAAU,CAAC1L,OAFzB;EAAA,cAGI8M,OAAO,GAAGpB,UAAU,CAACpO,MAHzB;;EAKAwP,UAAAA,OAAO,CAAC/N,QAAR,CAAiB3B,eAAa,CAAC;EAC7B8K,YAAAA,KAAK,EAAEA,KADsB;EAE7BxM,YAAAA,IAAI,EAAEmR,KAFuB;EAG7B9M,YAAAA,cAAc,EAAEA,cAHa;EAI7BC,YAAAA,OAAO,EAAEA,OAJoB;EAK7BqI,YAAAA,OAAO,EAAEA,OALoB;EAM7B/K,YAAAA,MAAM,EAAEwP,OANqB;EAO7BrU,YAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAPsB,WAAD,EAQ3BwG,OAR2B,CAA9B;EASD;EACF,OA5BkB;EA6BnBqC,MAAAA,WAAW,EAAE,SAASA,WAAT,CAAqBzC,KAArB,EAA4B;EACvC;EACA;EACAA,QAAAA,KAAK,CAACkB,cAAN;EACD,OAjCkB;EAkCnBiD,MAAAA,OAAO,EAAE,SAASA,OAAT,CAAiBnE,KAAjB,EAAwB;EAC/B,YAAInI,cAAc,GAAGzC,MAAM,CAACoB,iBAAP,CAAyB;EAC5ChD,UAAAA,IAAI,EAAEA,IADsC;EAE5CjD,UAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAFqC,SAAzB,CAArB;EAIA,YAAI9B,OAAO,GAAG1C,MAAM,CAACsB,UAAP,CAAkB;EAC9BlD,UAAAA,IAAI,EAAEA,IADwB;EAE9BjD,UAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAFuB,SAAlB,CAAd,CAL+B;EAS/B;EACA;EACA;EACA;;EAEA,YAAIiL,aAAa,GAAG/M,OAAO,GAAG7D,OAAO,CAACC,OAAR,EAAH,GAAuB6L,OAAO,CAAC7K,eAAa,CAAC;EACtE8K,UAAAA,KAAK,EAAEA,KAD+D;EAEtEE,UAAAA,SAAS,EAAE;EACTlE,YAAAA,MAAM,EAAE;EADC,WAF2D;EAKtEtC,UAAAA,KAAK,EAAEA,KAL+D;EAMtEjD,UAAAA,KAAK,EAAEoB,cAN+D;EAOtEsI,UAAAA,OAAO,EAAEA,OAP6D;EAQtE/F,UAAAA,KAAK,EAAEA;EAR+D,SAAD,EASpEgG,OAToE,CAAd,CAAzD;EAUAyE,QAAAA,aAAa,CAAC5S,IAAd,CAAmB,YAAY;EAC7BmD,UAAAA,MAAM,CAACuB,QAAP,CAAgBzB,eAAa,CAAC;EAC5B8K,YAAAA,KAAK,EAAEA,KADqB;EAE5BxM,YAAAA,IAAI,EAAEA,IAFsB;EAG5BqE,YAAAA,cAAc,EAAEA,cAHY;EAI5BC,YAAAA,OAAO,EAAEA,OAJmB;EAK5BqI,YAAAA,OAAO,EAAEA,OALmB;EAM5B/K,YAAAA,MAAM,EAAEA,MANoB;EAO5B7E,YAAAA,KAAK,EAAE6J,KAAK,CAACR,QAAN;EAPqB,WAAD,EAQ1BwG,OAR0B,CAA7B;EASD,SAVD;EAWD;EArEkB,KAAD,EAsEjB8B,IAtEiB,CAApB;EAuED,GA5ED;;EA8EA,SAAO;EACLL,IAAAA,mBAAmB,EAAEA,mBADhB;EAELgB,IAAAA,YAAY,EAAEA,YAFT;EAGLE,IAAAA,YAAY,EAAEA,YAHT;EAILqB,IAAAA,aAAa,EAAEA,aAJV;EAKLjB,IAAAA,aAAa,EAAEA,aALV;EAMLoB,IAAAA,aAAa,EAAEA,aANV;EAOLD,IAAAA,YAAY,EAAEA,YAPT;EAQLG,IAAAA,YAAY,EAAEA;EART,GAAP;EAUD;;EC7UD,SAAShQ,SAAT,CAAiBC,MAAjB,EAAyBC,cAAzB,EAAyC;EAAE,MAAIC,IAAI,GAAGzH,MAAM,CAACyH,IAAP,CAAYF,MAAZ,CAAX;;EAAgC,MAAIvH,MAAM,CAAC0H,qBAAX,EAAkC;EAAE,QAAIC,OAAO,GAAG3H,MAAM,CAAC0H,qBAAP,CAA6BH,MAA7B,CAAd;EAAoDC,IAAAA,cAAc,KAAKG,OAAO,GAAGA,OAAO,CAACvB,MAAR,CAAe,UAAUwB,GAAV,EAAe;EAAE,aAAO5H,MAAM,CAAC6H,wBAAP,CAAgCN,MAAhC,EAAwCK,GAAxC,EAA6CE,UAApD;EAAiE,KAAjG,CAAf,CAAd,EAAkIL,IAAI,CAACpG,IAAL,CAAUlC,KAAV,CAAgBsI,IAAhB,EAAsBE,OAAtB,CAAlI;EAAmK;;EAAC,SAAOF,IAAP;EAAc;;EAErV,SAASM,eAAT,CAAuBC,MAAvB,EAA+B;EAAE,OAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGV,SAAS,CAACC,MAA9B,EAAsCS,CAAC,EAAvC,EAA2C;EAAE,QAAI2I,MAAM,GAAG,QAAQrJ,SAAS,CAACU,CAAD,CAAjB,GAAuBV,SAAS,CAACU,CAAD,CAAhC,GAAsC,EAAnD;EAAuDA,IAAAA,CAAC,GAAG,CAAJ,GAAQgI,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,EAAiB,CAAC,CAAlB,CAAP,CAA4BtC,OAA5B,CAAoC,UAAUpD,GAAV,EAAe;EAAE2F,MAAAA,iBAAe,CAACF,MAAD,EAASzF,GAAT,EAAc0F,MAAM,CAAC1F,GAAD,CAApB,CAAf;EAA4C,KAAjG,CAAR,GAA6GvC,MAAM,CAACmI,yBAAP,GAAmCnI,MAAM,CAACoI,gBAAP,CAAwBJ,MAAxB,EAAgChI,MAAM,CAACmI,yBAAP,CAAiCF,MAAjC,CAAhC,CAAnC,GAA+GX,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,CAAP,CAAwBtC,OAAxB,CAAgC,UAAUpD,GAAV,EAAe;EAAEvC,MAAAA,MAAM,CAACqI,cAAP,CAAsBL,MAAtB,EAA8BzF,GAA9B,EAAmCvC,MAAM,CAAC6H,wBAAP,CAAgCI,MAAhC,EAAwC1F,GAAxC,CAAnC;EAAmF,KAApI,CAA5N;EAAoW;;EAAC,SAAOyF,MAAP;EAAgB;;EAE1f,SAASE,iBAAT,CAAyBxG,GAAzB,EAA8Ba,GAA9B,EAAmCjB,KAAnC,EAA0C;EAAE,MAAIiB,GAAG,IAAIb,GAAX,EAAgB;EAAE1B,IAAAA,MAAM,CAACqI,cAAP,CAAsB3G,GAAtB,EAA2Ba,GAA3B,EAAgC;EAAEjB,MAAAA,KAAK,EAAEA,KAAT;EAAgBwG,MAAAA,UAAU,EAAE,IAA5B;EAAkCQ,MAAAA,YAAY,EAAE,IAAhD;EAAsDC,MAAAA,QAAQ,EAAE;EAAhE,KAAhC;EAA0G,GAA5H,MAAkI;EAAE7G,IAAAA,GAAG,CAACa,GAAD,CAAH,GAAWjB,KAAX;EAAmB;;EAAC,SAAOI,GAAP;EAAa;EAG1M,SAASiW,WAAT,CAAqBtV,IAArB,EAA2B;EAChC,MAAIuV,CAAJ,EAAOC,qBAAP,EAA8BC,sBAA9B,EAAsDC,sBAAtD;;EAEA,MAAI3J,OAAO,GAAG/L,IAAI,CAAC+L,OAAnB;EAAA,MACI5J,OAAO,GAAGnC,IAAI,CAACmC,OADnB;EAEA,MAAIwT,UAAU,GAAG,CAACJ,CAAC,GAAG,CAAC,CAAC,CAACC,qBAAqB,GAAGrT,OAAO,CAACyT,uBAAjC,MAA8D,IAA9D,IAAsEJ,qBAAqB,KAAK,KAAK,CAArG,GAAyG,KAAK,CAA9G,GAAkHA,qBAAqB,CAAC9T,UAAzI,KAAwJ,EAAzJ,EAA6J,CAA7J,CAAL,MAA0K,IAA1K,IAAkL6T,CAAC,KAAK,KAAK,CAA7L,GAAiM,KAAK,CAAtM,GAA0MA,CAAC,CAAC5T,OAA7N;EACA,MAAIkU,YAAY,GAAGF,UAAU,GAAG9P,iBAAe,CAAC,EAAD,EAAK8P,UAAL,EAAiBhY,MAAM,CAACyH,IAAP,CAAY,CAAC,CAACqQ,sBAAsB,GAAGtT,OAAO,CAACyT,uBAAlC,MAA+D,IAA/D,IAAuEH,sBAAsB,KAAK,KAAK,CAAvG,GAA2G,KAAK,CAAhH,GAAoHA,sBAAsB,CAACtT,OAA5I,KAAwJ,EAApK,CAAjB,CAAlB,GAA8M,EAA3O;EACA,SAAO;EACL4J,IAAAA,OAAO,EAAEA,OAAO,CAACnM,GAAR,CAAY,UAAUwN,MAAV,EAAkB;EACrC,aAAO;EACLnP,QAAAA,IAAI,EAAEmP,MAAM,CAACnP,IADR;EAELkE,QAAAA,OAAO,EAAExE,MAAM,CAACyH,IAAP,CAAYgI,MAAM,CAAC0I,4BAAP,IAAuC,EAAnD;EAFJ,OAAP;EAID,KALQ,CADJ;EAOL3T,IAAAA,OAAO,EAAEuD,eAAa,CAAC;EACrB,2BAAqB/H,MAAM,CAACyH,IAAP,CAAYjD,OAAZ;EADA,KAAD,EAEnB0T,YAFmB,CAPjB;EAULE,IAAAA,EAAE,EAAErU,YAAU,CAAClB,MAAX,CAAkB,CAAC,CAACkV,sBAAsB,GAAGvT,OAAO,CAACyT,uBAAlC,MAA+D,IAA/D,IAAuEF,sBAAsB,KAAK,KAAK,CAAvG,GAA2G,KAAK,CAAhH,GAAoHA,sBAAsB,CAAChU,UAA5I,KAA2J,EAA7K;EAVC,GAAP;EAYD;EACM,SAASsU,cAAT,CAAwBtI,KAAxB,EAA+B;EACpC,MAAIuI,qBAAJ,EAA2BC,sBAA3B;;EAEA,MAAIC,QAAQ,GAAGzI,KAAK,CAACyI,QAArB;EAAA,MACItK,WAAW,GAAG6B,KAAK,CAAC7B,WADxB;EAEA,MAAIuK,iBAAiB,GAAG,CAACH,qBAAqB,GAAGpK,WAAW,CAAC2B,SAArC,MAAoD,IAApD,IAA4DyI,qBAAqB,KAAK,KAAK,CAA3F,GAA+F,KAAK,CAApG,GAAwG,CAACC,sBAAsB,GAAGD,qBAAqB,CAACpN,SAAhD,MAA+D,IAA/D,IAAuEqN,sBAAsB,KAAK,KAAK,CAAvG,GAA2G,KAAK,CAAhH,GAAoHA,sBAAsB,CAACpP,QAAvB,CAAgC,iBAAhC,CAApP;;EAEA,MAAIsP,iBAAJ,EAAuB;EACrB,QAAIC,iBAAiB,GAAGxK,WAAW,CAACwF,QAAZ,CAAqBiF,aAArB,CAAmC,MAAnC,CAAxB;EACA,QAAIC,OAAO,GAAG1K,WAAW,CAACwF,QAAZ,CAAqBmF,aAArB,CAAmC,MAAnC,CAAd;EACAH,IAAAA,iBAAiB,CAACpY,IAAlB,GAAyB,kBAAzB;EACApB,IAAAA,UAAU,CAAC,YAAY;EACrBwZ,MAAAA,iBAAiB,CAACI,OAAlB,GAA4BjQ,IAAI,CAACC,SAAL,CAAe0P,QAAf,CAA5B;EACAI,MAAAA,OAAO,CAACG,WAAR,CAAoBL,iBAApB;EACD,KAHS,EAGP,CAHO,CAAV;EAID;EACF;;EC1CM,SAASM,aAAT,CAAuB3W,IAAvB,EAA6B;EAClC,MAAI4W,cAAJ;;EAEA,MAAI7V,KAAK,GAAGf,IAAI,CAACe,KAAjB;;EAEA,MAAIA,KAAK,CAACyL,MAAN,KAAiB,KAAjB,IAA0BzL,KAAK,CAAC+G,YAAN,KAAuB,IAArD,EAA2D;EACzD,WAAO,IAAP;EACD;;EAED,SAAO,CAAC,CAAC8O,cAAc,GAAGxO,aAAa,CAACrH,KAAD,CAA/B,MAA4C,IAA5C,IAAoD6V,cAAc,KAAK,KAAK,CAA5E,GAAgF,KAAK,CAArF,GAAyFA,cAAc,CAACvO,cAAzG,KAA4H,IAAnI;EACD;;ECXD,SAASpD,SAAT,CAAiBC,MAAjB,EAAyBC,cAAzB,EAAyC;EAAE,MAAIC,IAAI,GAAGzH,MAAM,CAACyH,IAAP,CAAYF,MAAZ,CAAX;;EAAgC,MAAIvH,MAAM,CAAC0H,qBAAX,EAAkC;EAAE,QAAIC,OAAO,GAAG3H,MAAM,CAAC0H,qBAAP,CAA6BH,MAA7B,CAAd;EAAoDC,IAAAA,cAAc,KAAKG,OAAO,GAAGA,OAAO,CAACvB,MAAR,CAAe,UAAUwB,GAAV,EAAe;EAAE,aAAO5H,MAAM,CAAC6H,wBAAP,CAAgCN,MAAhC,EAAwCK,GAAxC,EAA6CE,UAApD;EAAiE,KAAjG,CAAf,CAAd,EAAkIL,IAAI,CAACpG,IAAL,CAAUlC,KAAV,CAAgBsI,IAAhB,EAAsBE,OAAtB,CAAlI;EAAmK;;EAAC,SAAOF,IAAP;EAAc;;EAErV,SAASM,eAAT,CAAuBC,MAAvB,EAA+B;EAAE,OAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGV,SAAS,CAACC,MAA9B,EAAsCS,CAAC,EAAvC,EAA2C;EAAE,QAAI2I,MAAM,GAAG,QAAQrJ,SAAS,CAACU,CAAD,CAAjB,GAAuBV,SAAS,CAACU,CAAD,CAAhC,GAAsC,EAAnD;EAAuDA,IAAAA,CAAC,GAAG,CAAJ,GAAQgI,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,EAAiB,CAAC,CAAlB,CAAP,CAA4BtC,OAA5B,CAAoC,UAAUpD,GAAV,EAAe;EAAE2F,MAAAA,iBAAe,CAACF,MAAD,EAASzF,GAAT,EAAc0F,MAAM,CAAC1F,GAAD,CAApB,CAAf;EAA4C,KAAjG,CAAR,GAA6GvC,MAAM,CAACmI,yBAAP,GAAmCnI,MAAM,CAACoI,gBAAP,CAAwBJ,MAAxB,EAAgChI,MAAM,CAACmI,yBAAP,CAAiCF,MAAjC,CAAhC,CAAnC,GAA+GX,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,CAAP,CAAwBtC,OAAxB,CAAgC,UAAUpD,GAAV,EAAe;EAAEvC,MAAAA,MAAM,CAACqI,cAAP,CAAsBL,MAAtB,EAA8BzF,GAA9B,EAAmCvC,MAAM,CAAC6H,wBAAP,CAAgCI,MAAhC,EAAwC1F,GAAxC,CAAnC;EAAmF,KAApI,CAA5N;EAAoW;;EAAC,SAAOyF,MAAP;EAAgB;;EAE1f,SAASE,iBAAT,CAAyBxG,GAAzB,EAA8Ba,GAA9B,EAAmCjB,KAAnC,EAA0C;EAAE,MAAIiB,GAAG,IAAIb,GAAX,EAAgB;EAAE1B,IAAAA,MAAM,CAACqI,cAAP,CAAsB3G,GAAtB,EAA2Ba,GAA3B,EAAgC;EAAEjB,MAAAA,KAAK,EAAEA,KAAT;EAAgBwG,MAAAA,UAAU,EAAE,IAA5B;EAAkCQ,MAAAA,YAAY,EAAE,IAAhD;EAAsDC,MAAAA,QAAQ,EAAE;EAAhE,KAAhC;EAA0G,GAA5H,MAAkI;EAAE7G,IAAAA,GAAG,CAACa,GAAD,CAAH,GAAWjB,KAAX;EAAmB;;EAAC,SAAOI,GAAP;EAAa;EAK1M,IAAIwX,YAAY,GAAG,SAASA,YAAT,CAAsB9V,KAAtB,EAA6BuJ,MAA7B,EAAqC;EAC7D,UAAQA,MAAM,CAACG,IAAf;EACE,SAAK,iBAAL;EACE;EACE,eAAO/E,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAAd,EAA2B,EAA3B,EAA+B;EACjD+G,UAAAA,YAAY,EAAEwC,MAAM,CAACC;EAD4B,SAA/B,CAApB;EAGD;;EAEH,SAAK,UAAL;EACE;EACE,eAAO7E,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAAd,EAA2B,EAA3B,EAA+B;EACjDkG,UAAAA,KAAK,EAAEqD,MAAM,CAACC,OADmC;EAEjDgC,UAAAA,UAAU,EAAE;EAFqC,SAA/B,CAApB;EAID;;EAEH,SAAK,gBAAL;EACE;EACE,eAAO7G,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAAd,EAA2B,EAA3B,EAA+B;EACjDC,UAAAA,WAAW,EAAEsJ,MAAM,CAACC;EAD6B,SAA/B,CAApB;EAGD;;EAEH,SAAK,WAAL;EACE;EACE,eAAO7E,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAAd,EAA2B,EAA3B,EAA+B;EACjDyL,UAAAA,MAAM,EAAElC,MAAM,CAACC;EADkC,SAA/B,CAApB;EAGD;;EAEH,SAAK,WAAL;EACE;EACE,eAAO7E,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAAd,EAA2B,EAA3B,EAA+B;EACjD0L,UAAAA,MAAM,EAAEnC,MAAM,CAACC;EADkC,SAA/B,CAApB;EAGD;;EAEH,SAAK,YAAL;EACE;EACE,eAAO7E,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAAd,EAA2B,EAA3B,EAA+B;EACjD2L,UAAAA,OAAO,EAAEhH,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAK,CAAC2L,OAAX,CAAd,EAAmCpC,MAAM,CAACC,OAA1C;EAD2B,SAA/B,CAApB;EAGD;;EAEH,SAAK,WAAL;EACE;EACE,YAAImG,SAAS,GAAGhL,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAAd,EAA2B,EAA3B,EAA+B;EAC1D+G,UAAAA,YAAY,EAAEwC,MAAM,CAACC,OAAP,CAAeuM,cAAf,CAA8B,kBAA9B,IAAoDxM,MAAM,CAACC,OAAP,CAAeoH,gBAAnE,GAAsFhN,mBAAmB,CAAC,CAAD,EAAI5D,KAAK,CAAC+G,YAAV,EAAwBhH,aAAa,CAACC,KAAD,CAArC,EAA8CuJ,MAAM,CAACJ,KAAP,CAAanF,mBAA3D;EAD7D,SAA/B,CAA7B;;EAIA,eAAOW,eAAa,CAACA,eAAa,CAAC,EAAD,EAAKgL,SAAL,CAAd,EAA+B,EAA/B,EAAmC;EACrDnE,UAAAA,UAAU,EAAEoK,aAAa,CAAC;EACxB5V,YAAAA,KAAK,EAAE2P;EADiB,WAAD;EAD4B,SAAnC,CAApB;EAKD;;EAEH,SAAK,SAAL;EACE;EACE,YAAIqG,UAAU,GAAGrR,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAAd,EAA2B,EAA3B,EAA+B;EAC3D+G,UAAAA,YAAY,EAAEnD,mBAAmB,CAAC,CAAC,CAAF,EAAK5D,KAAK,CAAC+G,YAAX,EAAyBhH,aAAa,CAACC,KAAD,CAAtC,EAA+CuJ,MAAM,CAACJ,KAAP,CAAanF,mBAA5D;EAD0B,SAA/B,CAA9B;;EAIA,eAAOW,eAAa,CAACA,eAAa,CAAC,EAAD,EAAKqR,UAAL,CAAd,EAAgC,EAAhC,EAAoC;EACtDxK,UAAAA,UAAU,EAAEoK,aAAa,CAAC;EACxB5V,YAAAA,KAAK,EAAEgW;EADiB,WAAD;EAD6B,SAApC,CAApB;EAKD;;EAEH,SAAK,QAAL;EACE;EACE,YAAIhW,KAAK,CAACyL,MAAV,EAAkB;EAChB,iBAAO9G,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAAd,EAA2B,EAA3B,EAA+B;EACjD+G,YAAAA,YAAY,EAAE,IADmC;EAEjD0E,YAAAA,MAAM,EAAE,KAFyC;EAGjDD,YAAAA,UAAU,EAAE;EAHqC,WAA/B,CAApB;EAKD;;EAED,eAAO7G,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAAd,EAA2B,EAA3B,EAA+B;EACjD+G,UAAAA,YAAY,EAAE,IADmC;EAEjDb,UAAAA,KAAK,EAAE,EAF0C;EAGjDwF,UAAAA,MAAM,EAAE,MAHyC;EAIjDzL,UAAAA,WAAW,EAAE;EAJoC,SAA/B,CAApB;EAMD;;EAEH,SAAK,QAAL;EACE;EACE,eAAO0E,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAAd,EAA2B,EAA3B,EAA+B;EACjD+G,UAAAA,YAAY,EAAE,IADmC;EAEjD0E,UAAAA,MAAM,EAAE,KAFyC;EAGjDC,UAAAA,MAAM,EAAE;EAHyC,SAA/B,CAApB;EAKD;;EAEH,SAAK,OAAL;EACE;EACE,eAAO/G,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAAd,EAA2B,EAA3B,EAA+B;EACjD+G,UAAAA,YAAY;EACZ;EACA;EACA;EACAwC,UAAAA,MAAM,CAACJ,KAAP,CAAa8B,WAAb,KAA6B,IAA7B,GAAoC1B,MAAM,CAACJ,KAAP,CAAanF,mBAAjD,GAAuE,IALtB;EAMjD0H,UAAAA,MAAM,EAAE,MANyC;EAOjDxF,UAAAA,KAAK,EAAE;EAP0C,SAA/B,CAApB;EASD;;EAEH,SAAK,OAAL;EACE;EACE,eAAOvB,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAAd,EAA2B,EAA3B,EAA+B;EACjD+G,UAAAA,YAAY,EAAEwC,MAAM,CAACJ,KAAP,CAAanF,mBADsB;EAEjDyH,UAAAA,MAAM,EAAE,CAAClC,MAAM,CAACJ,KAAP,CAAa8B,WAAb,IAA4BpF,OAAO,CAAC7F,KAAK,CAACkG,KAAP,CAApC,KAAsDqD,MAAM,CAACJ,KAAP,CAAakC,eAAb,CAA6B;EACzFrL,YAAAA,KAAK,EAAEA;EADkF,WAA7B;EAFb,SAA/B,CAApB;EAMD;;EAEH,SAAK,MAAL;EACE;EACE,YAAIuJ,MAAM,CAACJ,KAAP,CAAa7H,KAAjB,EAAwB;EACtB,iBAAOtB,KAAP;EACD;;EAED,eAAO2E,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAAd,EAA2B,EAA3B,EAA+B;EACjDyL,UAAAA,MAAM,EAAE,KADyC;EAEjD1E,UAAAA,YAAY,EAAE;EAFmC,SAA/B,CAApB;EAID;;EAEH,SAAK,WAAL;EACE;EACE,eAAOpC,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAAd,EAA2B,EAA3B,EAA+B;EACjD+G,UAAAA,YAAY,EAAEwC,MAAM,CAACC;EAD4B,SAA/B,CAApB;EAGD;;EAEH,SAAK,YAAL;EACE;EACE,eAAO7E,eAAa,CAACA,eAAa,CAAC,EAAD,EAAK3E,KAAL,CAAd,EAA2B,EAA3B,EAA+B;EACjD+G,UAAAA,YAAY,EAAEwC,MAAM,CAACJ,KAAP,CAAanF;EADsB,SAA/B,CAApB;EAGD;;EAEH;EACE3D,MAAAA,SAAS,CAAC,KAAD,EAAQ,sBAAsBZ,MAAtB,CAA6BgG,IAAI,CAACC,SAAL,CAAe6D,MAAM,CAACG,IAAtB,CAA7B,EAA0D,oBAA1D,CAAR,CAAT;EACA,aAAO1J,KAAP;EApJJ;EAsJD,CAvJM;;ECTP,SAASkE,SAAT,CAAiBC,MAAjB,EAAyBC,cAAzB,EAAyC;EAAE,MAAIC,IAAI,GAAGzH,MAAM,CAACyH,IAAP,CAAYF,MAAZ,CAAX;;EAAgC,MAAIvH,MAAM,CAAC0H,qBAAX,EAAkC;EAAE,QAAIC,OAAO,GAAG3H,MAAM,CAAC0H,qBAAP,CAA6BH,MAA7B,CAAd;EAAoDC,IAAAA,cAAc,KAAKG,OAAO,GAAGA,OAAO,CAACvB,MAAR,CAAe,UAAUwB,GAAV,EAAe;EAAE,aAAO5H,MAAM,CAAC6H,wBAAP,CAAgCN,MAAhC,EAAwCK,GAAxC,EAA6CE,UAApD;EAAiE,KAAjG,CAAf,CAAd,EAAkIL,IAAI,CAACpG,IAAL,CAAUlC,KAAV,CAAgBsI,IAAhB,EAAsBE,OAAtB,CAAlI;EAAmK;;EAAC,SAAOF,IAAP;EAAc;;EAErV,SAASM,eAAT,CAAuBC,MAAvB,EAA+B;EAAE,OAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGV,SAAS,CAACC,MAA9B,EAAsCS,CAAC,EAAvC,EAA2C;EAAE,QAAI2I,MAAM,GAAG,QAAQrJ,SAAS,CAACU,CAAD,CAAjB,GAAuBV,SAAS,CAACU,CAAD,CAAhC,GAAsC,EAAnD;EAAuDA,IAAAA,CAAC,GAAG,CAAJ,GAAQgI,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,EAAiB,CAAC,CAAlB,CAAP,CAA4BtC,OAA5B,CAAoC,UAAUpD,GAAV,EAAe;EAAE2F,MAAAA,iBAAe,CAACF,MAAD,EAASzF,GAAT,EAAc0F,MAAM,CAAC1F,GAAD,CAApB,CAAf;EAA4C,KAAjG,CAAR,GAA6GvC,MAAM,CAACmI,yBAAP,GAAmCnI,MAAM,CAACoI,gBAAP,CAAwBJ,MAAxB,EAAgChI,MAAM,CAACmI,yBAAP,CAAiCF,MAAjC,CAAhC,CAAnC,GAA+GX,SAAO,CAACtH,MAAM,CAACiI,MAAD,CAAP,CAAP,CAAwBtC,OAAxB,CAAgC,UAAUpD,GAAV,EAAe;EAAEvC,MAAAA,MAAM,CAACqI,cAAP,CAAsBL,MAAtB,EAA8BzF,GAA9B,EAAmCvC,MAAM,CAAC6H,wBAAP,CAAgCI,MAAhC,EAAwC1F,GAAxC,CAAnC;EAAmF,KAApI,CAA5N;EAAoW;;EAAC,SAAOyF,MAAP;EAAgB;;EAE1f,SAASE,iBAAT,CAAyBxG,GAAzB,EAA8Ba,GAA9B,EAAmCjB,KAAnC,EAA0C;EAAE,MAAIiB,GAAG,IAAIb,GAAX,EAAgB;EAAE1B,IAAAA,MAAM,CAACqI,cAAP,CAAsB3G,GAAtB,EAA2Ba,GAA3B,EAAgC;EAAEjB,MAAAA,KAAK,EAAEA,KAAT;EAAgBwG,MAAAA,UAAU,EAAE,IAA5B;EAAkCQ,MAAAA,YAAY,EAAE,IAAhD;EAAsDC,MAAAA,QAAQ,EAAE;EAAhE,KAAhC;EAA0G,GAA5H,MAAkI;EAAE7G,IAAAA,GAAG,CAACa,GAAD,CAAH,GAAWjB,KAAX;EAAmB;;EAAC,SAAOI,GAAP;EAAa;EAU1M,SAAS2X,kBAAT,CAA4B7U,OAA5B,EAAqC;EAC1CD,EAAAA,YAAY,CAACC,OAAD,CAAZ;EACA,MAAI8U,WAAW,GAAG,EAAlB;EACA,MAAI/M,KAAK,GAAGwB,eAAe,CAACvJ,OAAD,EAAU8U,WAAV,CAA3B;EACA,MAAIrM,KAAK,GAAGZ,WAAW,CAAC6M,YAAD,EAAe3M,KAAf,EAAsBC,kBAAtB,CAAvB;EACA,MAAIyG,OAAO,GAAGjG,sBAAsB,CAAC;EACnCC,IAAAA,KAAK,EAAEA;EAD4B,GAAD,CAApC;EAGA,MAAIsM,WAAW,GAAG9E,cAAc,CAAC1M,eAAa,CAAC;EAC7CwE,IAAAA,KAAK,EAAEA,KADsC;EAE7CyG,IAAAA,OAAO,EAAEA,OAFoC;EAG7C/F,IAAAA,KAAK,EAAEA;EAHsC,GAAD,EAI3CgG,OAJ2C,CAAd,CAAhC;;EAMA,WAASzG,kBAAT,CAA4BnK,IAA5B,EAAkC;EAChC,QAAIwK,SAAS,GAAGxK,IAAI,CAACwK,SAArB;EAAA,QACIzJ,KAAK,GAAGf,IAAI,CAACe,KADjB;EAEAmJ,IAAAA,KAAK,CAACyC,aAAN,CAAoBjH,eAAa,CAAC;EAChC8E,MAAAA,SAAS,EAAEA,SADqB;EAEhCzJ,MAAAA,KAAK,EAAEA,KAFyB;EAGhC4P,MAAAA,OAAO,EAAEA;EAHuB,KAAD,EAI9BC,OAJ8B,CAAjC;EAKD;;EAED,WAASD,OAAT,GAAmB;EACjB,WAAOJ,OAAO,CAAC7K,eAAa,CAAC;EAC3B8K,MAAAA,KAAK,EAAE,IAAI2G,KAAJ,CAAU,OAAV,CADoB;EAE3BzG,MAAAA,SAAS,EAAE;EACTlE,QAAAA,MAAM,EAAE5B,KAAK,CAACR,QAAN,GAAiBoC;EADhB,OAFgB;EAK3BtC,MAAAA,KAAK,EAAEA,KALoB;EAM3BjD,MAAAA,KAAK,EAAE2D,KAAK,CAACR,QAAN,GAAiBnD,KANG;EAO3B0J,MAAAA,OAAO,EAAEA,OAPkB;EAQ3B/F,MAAAA,KAAK,EAAEA;EARoB,KAAD,EASzBgG,OATyB,CAAd,CAAd;EAUD;;EAED1G,EAAAA,KAAK,CAAC6B,OAAN,CAAczI,OAAd,CAAsB,UAAU8J,MAAV,EAAkB;EACtC,QAAIgK,iBAAJ;;EAEA,WAAO,CAACA,iBAAiB,GAAGhK,MAAM,CAACiK,SAA5B,MAA2C,IAA3C,IAAmDD,iBAAiB,KAAK,KAAK,CAA9E,GAAkF,KAAK,CAAvF,GAA2FA,iBAAiB,CAACtZ,IAAlB,CAAuBsP,MAAvB,EAA+B1H,eAAa,CAACA,eAAa,CAAC,EAAD,EAAKkL,OAAL,CAAd,EAA6B,EAA7B,EAAiC;EAC7KD,MAAAA,OAAO,EAAEA,OADoK;EAE7KxJ,MAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkBjL,EAAlB,EAAsB;EAC9B+a,QAAAA,WAAW,CAACjY,IAAZ,CAAiB;EACfmI,UAAAA,QAAQ,EAAEjL;EADK,SAAjB;EAGD,OAN4K;EAO7KmL,MAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkBnL,EAAlB,EAAsB;EAC9B+a,QAAAA,WAAW,CAACjY,IAAZ,CAAiB;EACfqI,UAAAA,QAAQ,EAAEnL;EADK,SAAjB;EAGD;EAX4K,KAAjC,CAA5C,CAAlG;EAaD,GAhBD;EAiBA8Z,EAAAA,cAAc,CAAC;EACbG,IAAAA,QAAQ,EAAEb,WAAW,CAAC;EACpBvJ,MAAAA,OAAO,EAAE7B,KAAK,CAAC6B,OADK;EAEpB5J,MAAAA,OAAO,EAAEA;EAFW,KAAD,CADR;EAKb0J,IAAAA,WAAW,EAAE3B,KAAK,CAAC2B;EALN,GAAD,CAAd;EAOA,SAAOnG,eAAa,CAACA,eAAa,CAAC;EACjCiL,IAAAA,OAAO,EAAEA;EADwB,GAAD,EAE/BuG,WAF+B,CAAd,EAEHtG,OAFG,CAApB;EAGD;;EC9ED,IAAIlT,GAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAACA,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,OAAO,CAAC,CAAC,CAAC4Z,GAAC,CAAC,IAAI,GAAG,CAAgB,YAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAACA,GAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAACA,GAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC5Z,GAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC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C,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAA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"} \ No newline at end of file diff --git a/assets/autocomplete.js/dist/umd/index.production.js b/assets/autocomplete.js/dist/umd/index.production.js new file mode 100644 index 00000000..6c5e4741 --- /dev/null +++ b/assets/autocomplete.js/dist/umd/index.production.js @@ -0,0 +1,3 @@ +/*! @algolia/autocomplete-js 1.7.3 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@algolia/autocomplete-js"]={})}(this,(function(e){"use strict";function t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function n(e){for(var n=1;n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,o,i=[],u=!0,a=!1;try{for(n=n.call(e);!(u=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);u=!0);}catch(e){a=!0,o=e}finally{try{u||null==n.return||n.return()}finally{if(a)throw o}}return i}(e,t)||l(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||l(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){if(e){if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=n?null===r?null:0:o}function S(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function I(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function E(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t=function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var ae,ce,le,se=null,pe=(ae=-1,ce=-1,le=void 0,function(e){var t=++ae;return Promise.resolve(e).then((function(e){return le&&t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var ye=["props","refresh","store"],be=["inputElement","formElement","panelElement"],Oe=["inputElement"],_e=["inputElement","maxLength"],Pe=["item","source"];function je(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function we(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ee(e){var t=e.props,n=e.refresh,r=e.store,o=Ie(e,ye);return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,i=e.panelElement;function u(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,i].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return we({onTouchStart:u,onMouseDown:u,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},Ie(e,be))},getRootProps:function(e){return we({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){return e.inputElement,we({action:"",noValidate:!0,role:"search",onSubmit:function(i){var u;i.preventDefault(),t.onSubmit(we({event:i,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(u=e.inputElement)||void 0===u||u.blur()},onReset:function(i){var u;i.preventDefault(),t.onReset(we({event:i,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(u=e.inputElement)||void 0===u||u.focus()}},Ie(e,Oe))},getLabelProps:function(e){return we({htmlFor:"".concat(t.id,"-input"),id:"".concat(t.id,"-label")},e)},getInputProps:function(e){var i;function u(e){(t.openOnFocus||Boolean(r.getState().query))&&fe(we({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var a=e||{};a.inputElement;var c=a.maxLength,l=void 0===c?512:c,s=Ie(a,_e),p=A(r.getState()),f=function(e){return Boolean(e&&e.match(C))}((null===(i=t.environment.navigator)||void 0===i?void 0:i.userAgent)||""),d=null!=p&&p.itemUrl&&!f?"go":"search";return we({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?"".concat(t.id,"-item-").concat(r.getState().activeItemId):void 0,"aria-controls":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:r.getState().completion||r.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:d,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:l,type:"search",onChange:function(e){fe(we({event:e,props:t,query:e.currentTarget.value.slice(0,l),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,i=ge(e,de);if("ArrowUp"===t.key||"ArrowDown"===t.key){var u=function(){var e=n.environment.document.getElementById("".concat(n.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},a=function(){var e=A(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,u=e.itemInputValue,a=e.itemUrl,c=e.source;c.onActive(ve({event:t,item:n,itemInputValue:u,itemUrl:a,refresh:r,source:c,state:o.getState()},i))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?fe(ve({event:t,props:n,query:o.getState().query,refresh:r,store:o},i)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),a(),setTimeout(u,0)})):(o.dispatch(t.key,{}),a(),u())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var c=A(o.getState()),l=c.item,s=c.itemInputValue,p=c.itemUrl,f=c.source;if(t.metaKey||t.ctrlKey)void 0!==p&&(f.onSelect(ve({event:t,item:l,itemInputValue:s,itemUrl:p,refresh:r,source:f,state:o.getState()},i)),n.navigator.navigateNewTab({itemUrl:p,item:l,state:o.getState()}));else if(t.shiftKey)void 0!==p&&(f.onSelect(ve({event:t,item:l,itemInputValue:s,itemUrl:p,refresh:r,source:f,state:o.getState()},i)),n.navigator.navigateNewWindow({itemUrl:p,item:l,state:o.getState()}));else if(t.altKey);else{if(void 0!==p)return f.onSelect(ve({event:t,item:l,itemInputValue:s,itemUrl:p,refresh:r,source:f,state:o.getState()},i)),void n.navigator.navigate({itemUrl:p,item:l,state:o.getState()});fe(ve({event:t,nextState:{isOpen:!1},props:n,query:s,refresh:r,store:o},i)).then((function(){f.onSelect(ve({event:t,item:l,itemInputValue:s,itemUrl:p,refresh:r,source:f,state:o.getState()},i))}))}}}(we({event:e,props:t,refresh:n,store:r},o))},onFocus:u,onBlur:y,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||u(n)}},s)},getPanelProps:function(e){return we({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){return we({role:"listbox","aria-labelledby":"".concat(t.id,"-label"),id:"".concat(t.id,"-list")},e)},getItemProps:function(e){var i=e.item,u=e.source,a=Ie(e,Pe);return we({id:"".concat(t.id,"-item-").concat(i.__autocomplete_id),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=A(r.getState());if(null!==r.getState().activeItemId&&t){var u=t.item,a=t.itemInputValue,c=t.itemUrl,l=t.source;l.onActive(we({event:e,item:u,itemInputValue:a,itemUrl:c,refresh:n,source:l,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=u.getItemInputValue({item:i,state:r.getState()}),c=u.getItemUrl({item:i,state:r.getState()});(c?Promise.resolve():fe(we({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){u.onSelect(we({event:e,item:i,itemInputValue:a,itemUrl:c,refresh:n,source:u,state:r.getState()},o))}))}},a)}}}function Ae(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ce(e){for(var t=1;t0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:v(),plugins:o,initialState:H({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(F(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return E(e,n)}))).then((function(e){return d(e)})).then((function(e){return e.map((function(e){return H(H({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:H({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}(e,t),r=R(Te,n,(function(e){var t=e.prevState,r=e.state;n.onStateChange(Be({prevState:t,state:r,refresh:u},o))})),o=function(e){var t=e.store;return{setActiveItemId:function(e){t.dispatch("setActiveItemId",e)},setQuery:function(e){t.dispatch("setQuery",e)},setCollections:function(e){var n=0,r=e.map((function(e){return L(L({},e),{},{items:d(e.items).map((function(e){return L(L({},e),{},{__autocomplete_id:n++})}))})}));t.dispatch("setCollections",r)},setIsOpen:function(e){t.dispatch("setIsOpen",e)},setStatus:function(e){t.dispatch("setStatus",e)},setContext:function(e){t.dispatch("setContext",e)}}}({store:r}),i=Ee(Be({props:n,refresh:u,store:r},o));function u(){return fe(Be({event:new Event("input"),nextState:{isOpen:r.getState().isOpen},props:n,query:r.getState().query,refresh:u,store:r},o))}return n.plugins.forEach((function(e){var n;return null===(n=e.subscribe)||void 0===n?void 0:n.call(e,Be(Be({},o),{},{refresh:u,onSelect:function(e){t.push({onSelect:e})},onActive:function(e){t.push({onActive:e})}}))})),function(e){var t,n,r=e.metadata,o=e.environment;if(null===(t=o.navigator)||void 0===t||null===(n=t.userAgent)||void 0===n?void 0:n.includes("Algolia Crawler")){var i=o.document.createElement("meta"),u=o.document.querySelector("head");i.name="algolia:metadata",setTimeout((function(){i.content=JSON.stringify(r),u.appendChild(i)}),0)}}({metadata:ke({plugins:n.plugins,options:e}),environment:n.environment}),Be(Be({refresh:u},i),o)}var Ue=function(e,t,n,r){var o;t[0]=0;for(var i=1;i=5&&((o||!e&&5===r)&&(u.push(r,0,o,n),r=6),e&&(u.push(r,e,0,n),r=6)),o=""},c=0;c"===t?(r=1,o=""):o=t+o[0]:i?t===i?i="":o+=t:'"'===t||"'"===t?i=t:">"===t?(a(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[c][l+1])?(a(),3===r&&(u=u[0]),r=u,(u=u[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(a(),r=2):o+=t),3===r&&"!--"===o&&(r=4,u=u[0])}return a(),u}(e)),t),arguments,[])).length>1?t:t[0]}var We=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n};function Qe(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function $e(){for(var e=arguments.length,t=new Array(e),n=0;n2&&(u.children=arguments.length>3?lt.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(i in e.defaultProps)void 0===u[i]&&(u[i]=e.defaultProps[i]);return _t(e,u,r,o,null)}function _t(e,t,n,r,o){var i={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++pt:o};return null==o&&null!=st.vnode&&st.vnode(i),i}function Pt(e){return e.children}function jt(e,t){this.props=e,this.context=t}function wt(e,t){if(null==t)return e.__?wt(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t0?_t(d.type,d.props,d.key,null,d.__v):d)){if(d.__=n,d.__b=n.__b+1,null===(f=g[s])||f&&d.key==f.key&&d.type===f.type)g[s]=void 0;else for(p=0;p0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(Ht);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Wt(e){return function(e){if(Array.isArray(e))return Qt(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Qt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Qt(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Qt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n",""":'"',"'":"'"},Gt=new RegExp(/\w/i),Kt=/&(amp|quot|lt|gt|#39);/g,Jt=RegExp(Kt.source);function Yt(e,t){var n,r,o,i=e[t],u=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,a=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return Gt.test((o=i.value)&&Jt.test(o)?o.replace(Kt,(function(e){return zt[e]})):o)||a!==u?i.isHighlighted:a}function Xt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Zt(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function mn(e){return function(e){if(Array.isArray(e))return vn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return vn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return vn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function vn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0;if(!O.value.core.openOnFocus&&!t.query)return n;var r=Boolean(h.current||O.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:Sn,options:e}}))})),j=p(n({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},O.value.core.initialState)),w={getEnvironmentProps:O.value.renderer.getEnvironmentProps,getFormProps:O.value.renderer.getFormProps,getInputProps:O.value.renderer.getInputProps,getItemProps:O.value.renderer.getItemProps,getLabelProps:O.value.renderer.getLabelProps,getListProps:O.value.renderer.getListProps,getPanelProps:O.value.renderer.getPanelProps,getRootProps:O.value.renderer.getRootProps},S={setActiveItemId:P.value.setActiveItemId,setQuery:P.value.setQuery,setCollections:P.value.setCollections,setIsOpen:P.value.setIsOpen,setStatus:P.value.setStatus,setContext:P.value.setContext,refresh:P.value.refresh},I=d((function(){return Ve.bind(O.value.renderer.renderer.createElement)})),E=d((function(){return ct({autocomplete:P.value,autocompleteScopeApi:S,classNames:O.value.renderer.classNames,environment:O.value.core.environment,isDetached:_.value,placeholder:O.value.core.placeholder,propGetters:w,setIsModalOpen:k,state:j.current,translations:O.value.renderer.translations})}));function A(){tt(E.value.panel,{style:_.value?{}:wn({panelPlacement:O.value.renderer.panelPlacement,container:E.value.root,form:E.value.form,environment:O.value.core.environment})})}function C(e){j.current=e;var t={autocomplete:P.value,autocompleteScopeApi:S,classNames:O.value.renderer.classNames,components:O.value.renderer.components,container:O.value.renderer.container,html:I.value,dom:E.value,panelContainer:_.value?E.value.detachedContainer:O.value.renderer.panelContainer,propGetters:w,state:j.current,renderer:O.value.renderer.renderer},r=!g(e)&&!h.current&&O.value.renderer.renderNoResults||O.value.renderer.render;!function(e){var t=e.autocomplete,r=e.autocompleteScopeApi,o=e.dom,i=e.propGetters,u=e.state;nt(o.root,i.getRootProps(n({state:u,props:t.getRootProps({})},r))),nt(o.input,i.getInputProps(n({state:u,props:t.getInputProps({inputElement:o.input}),inputElement:o.input},r))),tt(o.label,{hidden:"stalled"===u.status}),tt(o.loadingIndicator,{hidden:"stalled"!==u.status}),tt(o.clearButton,{hidden:!u.query})}(t),function(e,t){var r=t.autocomplete,o=t.autocompleteScopeApi,u=t.classNames,a=t.html,c=t.dom,l=t.panelContainer,s=t.propGetters,p=t.state,f=t.components,d=t.renderer;if(p.isOpen){l.contains(c.panel)||"loading"===p.status||l.appendChild(c.panel),c.panel.classList.toggle("aa-Panel--stalled","stalled"===p.status);var m=p.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var c=e.source,l=e.items;return d.createElement("section",{key:t,className:u.source,"data-autocomplete-source-id":c.sourceId},c.templates.header&&d.createElement("div",{className:u.sourceHeader},c.templates.header({components:f,createElement:d.createElement,Fragment:d.Fragment,items:l,source:c,state:p,html:a})),c.templates.noResults&&0===l.length?d.createElement("div",{className:u.sourceNoResults},c.templates.noResults({components:f,createElement:d.createElement,Fragment:d.Fragment,source:c,state:p,html:a})):d.createElement("ul",i({className:u.list},s.getListProps(n({state:p,props:r.getListProps({})},o))),l.map((function(e){var t=r.getItemProps({item:e,source:c});return d.createElement("li",i({key:t.id,className:u.item},s.getItemProps(n({state:p,props:t},o))),c.templates.item({components:f,createElement:d.createElement,Fragment:d.Fragment,item:e,state:p,html:a}))}))),c.templates.footer&&d.createElement("div",{className:u.sourceFooter},c.templates.footer({components:f,createElement:d.createElement,Fragment:d.Fragment,items:l,source:c,state:p,html:a})))})),v=d.createElement(d.Fragment,null,d.createElement("div",{className:u.panelLayout},m),d.createElement("div",{className:"aa-GradientBottom"})),h=m.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(n(n({children:v,state:p,sections:m,elements:h},d),{},{components:f,html:a},o),c.panel)}else l.contains(c.panel)&&l.removeChild(c.panel)}(r,t)}function D(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};c();var t=O.value.renderer,n=t.components,r=u(t,In);y.current=Ge(r,O.value.core,{components:Ke(n,(function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")})),initialState:j.current},e),m(),l(),P.value.refresh().then((function(){C(j.current)}))}function k(e){requestAnimationFrame((function(){var t=O.value.core.environment.document.body.contains(E.value.detachedOverlay);e!==t&&(e?(O.value.core.environment.document.body.appendChild(E.value.detachedOverlay),O.value.core.environment.document.body.classList.add("aa-Detached"),E.value.input.focus()):(O.value.core.environment.document.body.removeChild(E.value.detachedOverlay),O.value.core.environment.document.body.classList.remove("aa-Detached"),P.value.setQuery(""),P.value.refresh()))}))}return a((function(){var e=P.value.getEnvironmentProps({formElement:E.value.form,panelElement:E.value.panel,inputElement:E.value.input});return tt(O.value.core.environment,e),function(){tt(O.value.core.environment,Object.keys(e).reduce((function(e,t){return n(n({},e),{},o({},t,void 0))}),{}))}})),a((function(){var e=_.value?O.value.core.environment.document.body:O.value.renderer.panelContainer,t=_.value?E.value.detachedOverlay:E.value.panel;return _.value&&j.current.isOpen&&k(!0),C(j.current),function(){e.contains(t)&&e.removeChild(t)}})),a((function(){var e=O.value.renderer.container;return e.appendChild(E.value.root),function(){e.removeChild(E.value.root)}})),a((function(){var e=f((function(e){C(e.state)}),0);return b.current=function(t){var n=t.state,r=t.prevState;(_.value&&r.isOpen!==n.isOpen&&k(n.isOpen),_.value||!n.isOpen||r.isOpen||A(),n.query!==r.query)&&O.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){b.current=void 0}})),a((function(){var e=f((function(){var e=_.value;_.value=O.value.core.environment.matchMedia(O.value.renderer.detachedMediaQuery).matches,e!==_.value?D({}):requestAnimationFrame(A)}),20);return O.value.core.environment.addEventListener("resize",e),function(){O.value.core.environment.removeEventListener("resize",e)}})),a((function(){if(!_.value)return function(){};function e(e){E.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=O.value.core.environment.matchMedia(getComputedStyle(O.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),a((function(){return requestAnimationFrame(A),function(){}})),n(n({},S),{},{update:D,destroy:function(){c()}})},e.getAlgoliaFacets=function(e){var t=En({transformResponse:function(e){return e.facetHits}}),r=e.queries.map((function(e){return n(n({},e),{},{type:"facet"})}));return t(n(n({},e),{},{queries:r}))},e.getAlgoliaResults=An,Object.defineProperty(e,"__esModule",{value:!0})})); +//# sourceMappingURL=index.production.js.map diff --git a/assets/autocomplete.js/dist/umd/index.production.js.map b/assets/autocomplete.js/dist/umd/index.production.js.map new file mode 100644 index 00000000..6bd3ffc9 --- /dev/null +++ b/assets/autocomplete.js/dist/umd/index.production.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.production.js","sources":["../../../autocomplete-shared/dist/esm/createRef.js","../../../autocomplete-shared/dist/esm/debounce.js","../../../autocomplete-shared/dist/esm/flatten.js","../../../autocomplete-shared/dist/esm/generateAutocompleteId.js","../../../autocomplete-shared/dist/esm/getAttributeValueByPath.js","../../../autocomplete-shared/dist/esm/getItemsCount.js","../../../autocomplete-shared/dist/esm/noop.js","../../../autocomplete-shared/dist/esm/version.js","../../../autocomplete-shared/dist/esm/userAgents.js","../../../autocomplete-core/dist/esm/utils/createCancelablePromise.js","../../../autocomplete-core/dist/esm/utils/getNextActiveItemId.js","../../../autocomplete-core/dist/esm/utils/getNormalizedSources.js","../../../autocomplete-core/dist/esm/utils/getActiveItem.js","../../../autocomplete-core/dist/esm/utils/isSamsung.js","../../../autocomplete-core/dist/esm/utils/mapToAlgoliaResponse.js","../../../autocomplete-core/dist/esm/createStore.js","../../../autocomplete-core/dist/esm/utils/createCancelablePromiseList.js","../../../autocomplete-core/dist/esm/getAutocompleteSetters.js","../../../autocomplete-core/dist/esm/getDefaultProps.js","../../../autocomplete-core/dist/esm/reshape.js","../../../autocomplete-core/dist/esm/resolve.js","../../../autocomplete-core/dist/esm/onInput.js","../../../autocomplete-core/dist/esm/utils/createConcurrentSafePromise.js","../../../autocomplete-core/dist/esm/onKeyDown.js","../../../autocomplete-core/dist/esm/getPropGetters.js","../../../autocomplete-core/dist/esm/utils/isOrContainsNode.js","../../../autocomplete-core/dist/esm/metadata.js","../../../autocomplete-core/dist/esm/getCompletion.js","../../../autocomplete-core/dist/esm/stateReducer.js","../../../autocomplete-core/dist/esm/createAutocomplete.js","../../../../node_modules/htm/dist/htm.mjs","../../src/elements/ClearIcon.ts","../../src/utils/getHTMLElement.ts","../../src/utils/mergeClassNames.ts","../../src/utils/mergeDeep.ts","../../src/utils/pickBy.ts","../../src/utils/setProperties.ts","../../src/getCreateDomElement.ts","../../src/elements/LoadingIcon.ts","../../src/elements/SearchIcon.ts","../../src/createAutocompleteDom.ts","../../src/elements/Input.ts","../../node_modules/preact/dist/preact.mjs","../../../autocomplete-preset-algolia/dist/esm/constants/index.js","../../../autocomplete-preset-algolia/dist/esm/highlight/parseAttribute.js","../../../autocomplete-preset-algolia/dist/esm/highlight/parseAlgoliaHitHighlight.js","../../../autocomplete-preset-algolia/dist/esm/highlight/isPartHighlighted.js","../../../autocomplete-preset-algolia/dist/esm/highlight/reverseHighlightedParts.js","../../../autocomplete-preset-algolia/dist/esm/highlight/parseAlgoliaHitSnippet.js","../../../autocomplete-preset-algolia/dist/esm/requester/createRequester.js","../../../autocomplete-preset-algolia/dist/esm/search/fetchAlgoliaResults.js","../../src/components/Highlight.ts","../../src/components/ReverseHighlight.ts","../../../autocomplete-preset-algolia/dist/esm/highlight/parseAlgoliaHitReverseHighlight.js","../../src/components/ReverseSnippet.ts","../../../autocomplete-preset-algolia/dist/esm/highlight/parseAlgoliaHitReverseSnippet.js","../../src/components/Snippet.ts","../../src/getDefaultOptions.ts","../../src/getPanelPlacementStyle.ts","../../src/userAgents.ts","../../src/requesters/createAlgoliaRequester.ts","../../src/requesters/getAlgoliaResults.ts","../../src/autocomplete.ts","../../src/createReactiveWrapper.ts","../../src/createEffectWrapper.ts","../../src/render.tsx","../../src/requesters/getAlgoliaFacets.ts"],"sourcesContent":["export function createRef(initialValue) {\n return {\n current: initialValue\n };\n}","export function debounce(fn, time) {\n var timerId = undefined;\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (timerId) {\n clearTimeout(timerId);\n }\n\n timerId = setTimeout(function () {\n return fn.apply(void 0, args);\n }, time);\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}","export function getAttributeValueByPath(record, path) {\n return path.reduce(function (current, key) {\n return current && current[key];\n }, record);\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}","export var noop = function noop() {};","export var version = '1.7.3';","import { version } from './version';\nexport var userAgents = [{\n segment: 'autocomplete-core',\n version: version\n}];","function createInternalCancelablePromise(promise, initialState) {\n var state = initialState;\n return {\n then: function then(onfulfilled, onrejected) {\n return createInternalCancelablePromise(promise.then(createCallback(onfulfilled, state, promise), createCallback(onrejected, state, promise)), state);\n },\n catch: function _catch(onrejected) {\n return createInternalCancelablePromise(promise.catch(createCallback(onrejected, state, promise)), state);\n },\n finally: function _finally(onfinally) {\n if (onfinally) {\n state.onCancelList.push(onfinally);\n }\n\n return createInternalCancelablePromise(promise.finally(createCallback(onfinally && function () {\n state.onCancelList = [];\n return onfinally();\n }, state, promise)), state);\n },\n cancel: function cancel() {\n state.isCanceled = true;\n var callbacks = state.onCancelList;\n state.onCancelList = [];\n callbacks.forEach(function (callback) {\n callback();\n });\n },\n isCanceled: function isCanceled() {\n return state.isCanceled === true;\n }\n };\n}\n\nexport function createCancelablePromise(executor) {\n return createInternalCancelablePromise(new Promise(function (resolve, reject) {\n return executor(resolve, reject);\n }), {\n isCanceled: false,\n onCancelList: []\n });\n}\n\ncreateCancelablePromise.resolve = function (value) {\n return cancelable(Promise.resolve(value));\n};\n\ncreateCancelablePromise.reject = function (reason) {\n return cancelable(Promise.reject(reason));\n};\n\nexport function cancelable(promise) {\n return createInternalCancelablePromise(promise, {\n isCanceled: false,\n onCancelList: []\n });\n}\n\nfunction createCallback(onResult, state, fallback) {\n if (!onResult) {\n return fallback;\n }\n\n return function callback(arg) {\n if (state.isCanceled) {\n return arg;\n }\n\n return onResult(arg);\n };\n}","/**\n * Returns the next active item ID from the current state.\n *\n * We allow circular keyboard navigation from the base index.\n * The base index can either be `null` (nothing is highlighted) or `0`\n * (the first item is highlighted).\n * The base index is allowed to get assigned `null` only if\n * `props.defaultActiveItemId` is `null`. This pattern allows to \"stop\"\n * by the actual query before navigating to other suggestions as seen on\n * Google or Amazon.\n *\n * @param moveAmount The offset to increment (or decrement) the last index\n * @param baseIndex The current index to compute the next index from\n * @param itemCount The number of items\n * @param defaultActiveItemId The default active index to fallback to\n */\nexport function getNextActiveItemId(moveAmount, baseIndex, itemCount, defaultActiveItemId) {\n if (!itemCount) {\n return null;\n }\n\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}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport { invariant, decycle, noop } from '@algolia/autocomplete-shared';\nexport function getNormalizedSources(getSources, params) {\n var seenSourceIds = [];\n return Promise.resolve(getSources(params)).then(function (sources) {\n invariant(Array.isArray(sources), function () {\n return \"The `getSources` function must return an array of sources but returned type \".concat(JSON.stringify(_typeof(sources)), \":\\n\\n\").concat(JSON.stringify(decycle(sources), null, 2));\n });\n return Promise.all(sources // 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 if (seenSourceIds.includes(source.sourceId)) {\n throw new Error(\"[Autocomplete] The `sourceId` \".concat(JSON.stringify(source.sourceId), \" is not unique.\"));\n }\n\n seenSourceIds.push(source.sourceId);\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}","var regex = /((gt|sm)-|galaxy nexus)|samsung[- ]/i;\nexport function isSamsung(userAgent) {\n return Boolean(userAgent && userAgent.match(regex));\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 mapToAlgoliaResponse(rawResults) {\n var results = rawResults.map(function (result) {\n var _hits;\n\n return _objectSpread(_objectSpread({}, result), {}, {\n hits: (_hits = result.hits) === null || _hits === void 0 ? void 0 : _hits.map(function (hit) {\n // Bring support for the Insights plugin.\n return _objectSpread(_objectSpread({}, hit), {}, {\n __autocomplete_indexName: result.index,\n __autocomplete_queryID: result.queryID\n });\n })\n });\n });\n return {\n results: results,\n hits: results.map(function (result) {\n return result.hits;\n }).filter(Boolean),\n facetHits: results.map(function (result) {\n var _facetHits;\n\n return (_facetHits = result.facetHits) === null || _facetHits === void 0 ? void 0 : _facetHits.map(function (facetHit) {\n // Bring support for the highlighting components.\n return {\n label: facetHit.value,\n count: facetHit.count,\n _highlightResult: {\n label: {\n value: facetHit.highlighted\n }\n }\n };\n });\n }).filter(Boolean)\n };\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 { createCancelablePromiseList } from './utils';\nexport function createStore(reducer, props, onStoreStateChange) {\n var state = props.initialState;\n return {\n getState: function getState() {\n return state;\n },\n dispatch: function dispatch(action, payload) {\n var prevState = _objectSpread({}, state);\n\n state = reducer(state, {\n type: action,\n props: props,\n payload: payload\n });\n onStoreStateChange({\n state: state,\n prevState: prevState\n });\n },\n pendingRequests: createCancelablePromiseList()\n };\n}","export function createCancelablePromiseList() {\n var list = [];\n return {\n add: function add(cancelablePromise) {\n list.push(cancelablePromise);\n return cancelablePromise.finally(function () {\n list = list.filter(function (item) {\n return item !== cancelablePromise;\n });\n });\n },\n cancelAll: function cancelAll() {\n list.forEach(function (promise) {\n return promise.cancel();\n });\n },\n isEmpty: function isEmpty() {\n return list.length === 0;\n }\n };\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 '@algolia/autocomplete-shared';\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 `getAlgoliaResults`\n // from the source itself.\n items: flatten(collection.items).map(function (item) {\n return _objectSpread(_objectSpread({}, item), {}, {\n __autocomplete_id: baseItemId++\n });\n })\n });\n });\n store.dispatch('setCollections', value);\n };\n\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\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) 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); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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, generateAutocompleteId, flatten } from '@algolia/autocomplete-shared';\nimport { getNormalizedSources } from './utils';\nexport function getDefaultProps(props, pluginSubscribers) {\n var _props$id;\n\n /* eslint-disable no-restricted-globals */\n var environment = typeof window !== 'undefined' ? window : {};\n /* eslint-enable no-restricted-globals */\n\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 reshape: function reshape(_ref2) {\n var sources = _ref2.sources;\n return sources;\n }\n }, props), {}, {\n // Since `generateAutocompleteId` triggers a side effect (it increments\n // an internal counter), we don't want to execute it if unnecessary.\n id: (_props$id = props.id) !== null && _props$id !== void 0 ? _props$id : generateAutocompleteId(),\n plugins: plugins,\n // The following props need to be deeply defaulted.\n initialState: _objectSpread({\n activeItemId: null,\n query: '',\n completion: null,\n collections: [],\n isOpen: false,\n status: 'idle',\n context: {}\n }, props.initialState),\n onStateChange: function onStateChange(params) {\n var _props$onStateChange;\n\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(_ref3) {\n var itemUrl = _ref3.itemUrl;\n environment.location.assign(itemUrl);\n },\n navigateNewTab: function navigateNewTab(_ref4) {\n var itemUrl = _ref4.itemUrl;\n var windowReference = environment.open(itemUrl, '_blank', 'noopener');\n windowReference === null || windowReference === void 0 ? void 0 : windowReference.focus();\n },\n navigateNewWindow: function navigateNewWindow(_ref5) {\n var itemUrl = _ref5.itemUrl;\n environment.open(itemUrl, '_blank', 'noopener');\n }\n }, props.navigator)\n });\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 '@algolia/autocomplete-shared';\nexport function reshape(_ref) {\n var collections = _ref.collections,\n props = _ref.props,\n state = _ref.state;\n // Sources are grouped by `sourceId` to conveniently pick them via destructuring.\n // Example: `const { recentSearchesPlugin } = sourcesBySourceId`\n var sourcesBySourceId = collections.reduce(function (acc, collection) {\n return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, collection.source.sourceId, _objectSpread(_objectSpread({}, collection.source), {}, {\n getItems: function getItems() {\n // We provide the resolved items from the collection to the `reshape` prop.\n return flatten(collection.items);\n }\n })));\n }, {});\n var reshapeSources = props.reshape({\n sources: Object.values(sourcesBySourceId),\n sourcesBySourceId: sourcesBySourceId,\n state: state\n }); // We reconstruct the collections with the items modified by the `reshape` prop.\n\n return flatten(reshapeSources).filter(Boolean).map(function (source) {\n return {\n source: source,\n items: source.getItems()\n };\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\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\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) 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); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 { decycle, flatten, invariant } from '@algolia/autocomplete-shared';\nimport { mapToAlgoliaResponse } from './utils';\n\nfunction isDescription(item) {\n return Boolean(item.execute);\n}\n\nfunction isRequesterDescription(description) {\n return Boolean(description === null || description === void 0 ? void 0 : description.execute);\n}\n\nexport function preResolve(itemsOrDescription, sourceId) {\n if (isRequesterDescription(itemsOrDescription)) {\n return _objectSpread(_objectSpread({}, itemsOrDescription), {}, {\n requests: itemsOrDescription.queries.map(function (query) {\n return {\n query: query,\n sourceId: sourceId,\n transformResponse: itemsOrDescription.transformResponse\n };\n })\n });\n }\n\n return {\n items: itemsOrDescription,\n sourceId: sourceId\n };\n}\nexport function resolve(items) {\n var packed = items.reduce(function (acc, current) {\n if (!isDescription(current)) {\n acc.push(current);\n return acc;\n }\n\n var searchClient = current.searchClient,\n execute = current.execute,\n requesterId = current.requesterId,\n requests = current.requests;\n var container = acc.find(function (item) {\n return isDescription(current) && isDescription(item) && item.searchClient === searchClient && Boolean(requesterId) && item.requesterId === requesterId;\n });\n\n if (container) {\n var _container$items;\n\n (_container$items = container.items).push.apply(_container$items, _toConsumableArray(requests));\n } else {\n var request = {\n execute: execute,\n requesterId: requesterId,\n items: requests,\n searchClient: searchClient\n };\n acc.push(request);\n }\n\n return acc;\n }, []);\n var values = packed.map(function (maybeDescription) {\n if (!isDescription(maybeDescription)) {\n return Promise.resolve(maybeDescription);\n }\n\n var _ref = maybeDescription,\n execute = _ref.execute,\n items = _ref.items,\n searchClient = _ref.searchClient;\n return execute({\n searchClient: searchClient,\n requests: items\n });\n });\n return Promise.all(values).then(function (responses) {\n return flatten(responses);\n });\n}\nexport function postResolve(responses, sources) {\n return sources.map(function (source) {\n var matches = responses.filter(function (response) {\n return response.sourceId === source.sourceId;\n });\n var results = matches.map(function (_ref2) {\n var items = _ref2.items;\n return items;\n });\n var transform = matches[0].transformResponse;\n var items = transform ? transform(mapToAlgoliaResponse(results)) : results;\n invariant(Array.isArray(items), function () {\n return \"The `getItems` function from source \\\"\".concat(source.sourceId, \"\\\" must return an array of items but returned type \").concat(JSON.stringify(_typeof(items)), \":\\n\\n\").concat(JSON.stringify(decycle(items), null, 2), \".\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems\");\n });\n invariant(items.every(Boolean), \"The `getItems` function from source \\\"\".concat(source.sourceId, \"\\\" must return an array of items but returned \").concat(JSON.stringify(undefined), \".\\n\\nDid you forget to return items?\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems\"));\n return {\n source: source,\n items: items\n };\n });\n}","var _excluded = [\"event\", \"nextState\", \"props\", \"query\", \"refresh\", \"store\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 { reshape } from './reshape';\nimport { preResolve, resolve, postResolve } from './resolve';\nimport { cancelable, createConcurrentSafePromise, getActiveItem } from './utils';\nvar lastStalledId = null;\nvar runConcurrentSafePromise = createConcurrentSafePromise();\nexport function onInput(_ref) {\n var event = _ref.event,\n _ref$nextState = _ref.nextState,\n nextState = _ref$nextState === void 0 ? {} : _ref$nextState,\n props = _ref.props,\n query = _ref.query,\n refresh = _ref.refresh,\n store = _ref.store,\n setters = _objectWithoutProperties(_ref, _excluded);\n\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 var collections = store.getState().collections.map(function (collection) {\n return _objectSpread(_objectSpread({}, collection), {}, {\n items: []\n });\n });\n setStatus('idle');\n setCollections(collections);\n setIsOpen((_nextState$isOpen = nextState.isOpen) !== null && _nextState$isOpen !== void 0 ? _nextState$isOpen : props.shouldPanelOpen({\n state: store.getState()\n })); // We make sure to update the latest resolved value of the tracked\n // promises to keep late resolving promises from \"cancelling\" the state\n // updates performed in this code path.\n // We chain with a void promise to respect `onInput`'s expected return type.\n\n var _request = cancelable(runConcurrentSafePromise(collections).then(function () {\n return Promise.resolve();\n }));\n\n return store.pendingRequests.add(_request);\n }\n\n setStatus('loading');\n lastStalledId = props.environment.setTimeout(function () {\n setStatus('stalled');\n }, props.stallThreshold); // We track the entire promise chain triggered by `onInput` before mutating\n // the Autocomplete state to make sure that any state manipulation is based on\n // fresh data regardless of when promises individually resolve.\n // We don't track nested promises and only rely on the full chain resolution,\n // meaning we should only ever manipulate the state once this concurrent-safe\n // promise is resolved.\n\n var request = cancelable(runConcurrentSafePromise(props.getSources(_objectSpread({\n query: query,\n refresh: refresh,\n state: store.getState()\n }, setters)).then(function (sources) {\n return Promise.all(sources.map(function (source) {\n return Promise.resolve(source.getItems(_objectSpread({\n query: query,\n refresh: refresh,\n state: store.getState()\n }, setters))).then(function (itemsOrDescription) {\n return preResolve(itemsOrDescription, source.sourceId);\n });\n })).then(resolve).then(function (responses) {\n return postResolve(responses, sources);\n }).then(function (collections) {\n return reshape({\n collections: collections,\n props: props,\n state: store.getState()\n });\n });\n }))).then(function (collections) {\n var _nextState$isOpen2;\n\n // Parameters passed to `onInput` could be stale when the following code\n // executes, because `onInput` calls may not resolve in order.\n // If it becomes a problem we'll need to save the last passed parameters.\n // See: https://codesandbox.io/s/agitated-cookies-y290z\n 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 setStatus('idle');\n\n if (lastStalledId) {\n props.environment.clearTimeout(lastStalledId);\n }\n });\n return store.pendingRequests.add(request);\n}","/**\n * Creates a runner that executes promises in a concurrent-safe way.\n *\n * This is useful to prevent older promises to resolve after a newer promise,\n * otherwise resulting in stale resolved values.\n */\nexport function createConcurrentSafePromise() {\n var basePromiseId = -1;\n var latestResolvedId = -1;\n var latestResolvedValue = undefined;\n return function runConcurrentSafePromise(promise) {\n basePromiseId++;\n var currentPromiseId = basePromiseId;\n return Promise.resolve(promise).then(function (x) {\n // The promise might take too long to resolve and get outdated. This would\n // result in resolving stale values.\n // When this happens, we ignore the promise value and return the one\n // coming from the latest resolved value.\n //\n // +----------------------------------+\n // | 100ms |\n // | run(1) +---> R1 |\n // | 300ms |\n // | run(2) +-------------> R2 (SKIP) |\n // | 200ms |\n // | run(3) +--------> R3 |\n // +----------------------------------+\n if (latestResolvedValue && currentPromiseId < latestResolvedId) {\n return latestResolvedValue;\n }\n\n latestResolvedId = currentPromiseId;\n latestResolvedValue = x;\n return x;\n });\n };\n}","var _excluded = [\"event\", \"props\", \"refresh\", \"store\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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, _excluded);\n\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n // eslint-disable-next-line no-inner-declarations\n var triggerScrollIntoView = function triggerScrollIntoView() {\n var nodeItem = props.environment.document.getElementById(\"\".concat(props.id, \"-item-\").concat(store.getState().activeItemId));\n\n if (nodeItem) {\n if (nodeItem.scrollIntoViewIfNeeded) {\n nodeItem.scrollIntoViewIfNeeded(false);\n } else {\n nodeItem.scrollIntoView(false);\n }\n }\n }; // eslint-disable-next-line no-inner-declarations\n\n\n var triggerOnActive = function triggerOnActive() {\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 }; // Default browser behavior changes the caret placement on ArrowUp and\n // ArrowDown.\n\n\n event.preventDefault(); // When re-opening the panel, we need to split the logic to keep the actions\n // synchronized as `onInput` returns a promise.\n\n if (store.getState().isOpen === false && (props.openOnFocus || Boolean(store.getState().query))) {\n onInput(_objectSpread({\n event: event,\n props: props,\n query: store.getState().query,\n refresh: refresh,\n store: store\n }, setters)).then(function () {\n store.dispatch(event.key, {\n nextActiveItemId: props.defaultActiveItemId\n });\n triggerOnActive(); // Since we rely on the DOM, we need to wait for all the micro tasks to\n // finish (which include re-opening the panel) to make sure all the\n // elements are available.\n\n setTimeout(triggerScrollIntoView, 0);\n });\n } else {\n store.dispatch(event.key, {});\n triggerOnActive();\n triggerScrollIntoView();\n }\n } else if (event.key === 'Escape') {\n // This prevents the default browser behavior on `input[type=\"search\"]`\n // from removing the query right away because we first want to close the\n // panel.\n event.preventDefault();\n store.dispatch(event.key, null); // Hitting the `Escape` key signals the end of a user interaction with the\n // autocomplete. At this point, we should ignore any requests that are still\n // pending and could reopen the panel once they resolve, because that would\n // result in an unsolicited UI behavior.\n\n store.pendingRequests.cancelAll();\n } else if (event.key === 'Tab') {\n store.dispatch('blur', null); // Hitting the `Escape` key signals the end of a user interaction with the\n // autocomplete. At this point, we should ignore any requests that are still\n // pending and could reopen the panel once they resolve, because that would\n // result in an unsolicited UI behavior.\n\n store.pendingRequests.cancelAll();\n } else if (event.key === 'Enter') {\n // No active item, so we let the browser handle the native `onSubmit` form\n // event.\n if (store.getState().activeItemId === null || store.getState().collections.every(function (collection) {\n return collection.items.length === 0;\n })) {\n // If requests are still pending when the panel closes, they could reopen\n // the panel once they resolve.\n // We want to prevent any subsequent query from reopening the panel\n // because it would result in an unsolicited UI behavior.\n if (!props.debug) {\n store.pendingRequests.cancelAll();\n }\n\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 props.navigator.navigateNewTab({\n itemUrl: itemUrl,\n item: item,\n state: store.getState()\n });\n }\n } else if (event.shiftKey) {\n if (itemUrl !== undefined) {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n props.navigator.navigateNewWindow({\n itemUrl: itemUrl,\n item: item,\n state: store.getState()\n });\n }\n } else if (event.altKey) {// Keep native browser behavior\n } else {\n if (itemUrl !== undefined) {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n props.navigator.navigate({\n itemUrl: itemUrl,\n item: item,\n state: store.getState()\n });\n return;\n }\n\n onInput(_objectSpread({\n event: event,\n nextState: {\n isOpen: false\n },\n props: props,\n query: itemInputValue,\n refresh: refresh,\n store: store\n }, setters)).then(function () {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n });\n }\n }\n}","var _excluded = [\"props\", \"refresh\", \"store\"],\n _excluded2 = [\"inputElement\", \"formElement\", \"panelElement\"],\n _excluded3 = [\"inputElement\"],\n _excluded4 = [\"inputElement\", \"maxLength\"],\n _excluded5 = [\"item\", \"source\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 { noop } from '@algolia/autocomplete-shared';\nimport { onInput } from './onInput';\nimport { onKeyDown as _onKeyDown } from './onKeyDown';\nimport { getActiveItem, isOrContainsNode, isSamsung } from './utils';\nexport function getPropGetters(_ref) {\n var props = _ref.props,\n refresh = _ref.refresh,\n store = _ref.store,\n setters = _objectWithoutProperties(_ref, _excluded);\n\n var getEnvironmentProps = function getEnvironmentProps(providedProps) {\n var inputElement = providedProps.inputElement,\n formElement = providedProps.formElement,\n panelElement = providedProps.panelElement,\n rest = _objectWithoutProperties(providedProps, _excluded2);\n\n function onMouseDownOrTouchStart(event) {\n // The `onTouchStart`/`onMouseDown` events shouldn't trigger the `blur`\n // handler when it's not an interaction with Autocomplete.\n // We detect it with the following heuristics:\n // - the panel is closed AND there are no pending requests\n // (no interaction with the autocomplete, no future state updates)\n // - OR the touched target is the input element (should open the panel)\n var isAutocompleteInteraction = store.getState().isOpen || !store.pendingRequests.isEmpty();\n\n if (!isAutocompleteInteraction || 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);\n });\n\n if (isTargetWithinAutocomplete === false) {\n store.dispatch('blur', null); // If requests are still pending when the user closes the panel, they\n // could reopen the panel once they resolve.\n // We want to prevent any subsequent query from reopening the panel\n // because it would result in an unsolicited UI behavior.\n\n if (!props.debug) {\n store.pendingRequests.cancelAll();\n }\n }\n }\n\n return _objectSpread({\n // We do not rely on the native `blur` event of the input to close the\n // panel, but rather on a custom `touchstart`/`mousedown` event outside\n // of the autocomplete elements.\n // This ensures we don't mistakenly interpret interactions within the\n // autocomplete (but outside of the input) as a signal to close the panel.\n // For example, clicking reset button causes an input blur, but if\n // `openOnFocus=true`, it shouldn't close the panel.\n // On touch devices, scrolling results (`touchmove`) causes an input blur\n // but shouldn't close the panel.\n onTouchStart: onMouseDownOrTouchStart,\n onMouseDown: onMouseDownOrTouchStart,\n // When scrolling on touch devices (mobiles, tablets, etc.), we want to\n // mimic the native platform behavior where the input is blurred to\n // hide the virtual keyboard. This gives more vertical space to\n // discover all the suggestions showing up in the panel.\n onTouchMove: function onTouchMove(event) {\n if (store.getState().isOpen === false || inputElement !== props.environment.document.activeElement || event.target === inputElement) {\n return;\n }\n\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, _excluded3);\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 var _props$environment$na;\n\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 _ref2 = providedProps || {},\n inputElement = _ref2.inputElement,\n _ref2$maxLength = _ref2.maxLength,\n maxLength = _ref2$maxLength === void 0 ? 512 : _ref2$maxLength,\n rest = _objectWithoutProperties(_ref2, _excluded4);\n\n var activeItem = getActiveItem(store.getState());\n var userAgent = ((_props$environment$na = props.environment.navigator) === null || _props$environment$na === void 0 ? void 0 : _props$environment$na.userAgent) || '';\n var shouldFallbackKeyHint = isSamsung(userAgent);\n var enterKeyHint = activeItem !== null && activeItem !== void 0 && activeItem.itemUrl && !shouldFallbackKeyHint ? 'go' : 'search';\n return _objectSpread({\n 'aria-autocomplete': 'both',\n 'aria-activedescendant': store.getState().isOpen && store.getState().activeItemId !== null ? \"\".concat(props.id, \"-item-\").concat(store.getState().activeItemId) : undefined,\n 'aria-controls': store.getState().isOpen ? \"\".concat(props.id, \"-list\") : undefined,\n 'aria-labelledby': \"\".concat(props.id, \"-label\"),\n value: store.getState().completion || store.getState().query,\n id: \"\".concat(props.id, \"-input\"),\n autoComplete: 'off',\n autoCorrect: 'off',\n autoCapitalize: 'off',\n enterKeyHint: enterKeyHint,\n spellCheck: 'false',\n autoFocus: props.autoFocus,\n placeholder: props.placeholder,\n maxLength: maxLength,\n type: 'search',\n onChange: function onChange(event) {\n onInput(_objectSpread({\n event: event,\n props: props,\n query: event.currentTarget.value.slice(0, maxLength),\n refresh: refresh,\n store: store\n }, setters));\n },\n onKeyDown: function onKeyDown(event) {\n _onKeyDown(_objectSpread({\n event: event,\n props: props,\n refresh: refresh,\n store: store\n }, setters));\n },\n onFocus: onFocus,\n // We don't rely on the `blur` event.\n // See explanation in `onTouchStart`/`onMouseDown`.\n // @MAJOR See if we need to keep this handler.\n onBlur: noop,\n onClick: function onClick(event) {\n // When the panel is closed and you click on the input while\n // the input is focused, the `onFocus` event is not triggered\n // (default browser behavior).\n // In an autocomplete context, it makes sense to open the panel in this\n // case.\n // We mimic this event by catching the `onClick` event which\n // triggers the `onFocus` for the panel to open.\n if (providedProps.inputElement === props.environment.document.activeElement && !store.getState().isOpen) {\n onFocus(event);\n }\n }\n }, rest);\n };\n\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, _excluded5);\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}","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); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 { userAgents } from '@algolia/autocomplete-shared';\nexport function getMetadata(_ref) {\n var _, _options$__autocomple, _options$__autocomple2, _options$__autocomple3;\n\n var plugins = _ref.plugins,\n options = _ref.options;\n var optionsKey = (_ = (((_options$__autocomple = options.__autocomplete_metadata) === null || _options$__autocomple === void 0 ? void 0 : _options$__autocomple.userAgents) || [])[0]) === null || _ === void 0 ? void 0 : _.segment;\n var extraOptions = optionsKey ? _defineProperty({}, optionsKey, Object.keys(((_options$__autocomple2 = options.__autocomplete_metadata) === null || _options$__autocomple2 === void 0 ? void 0 : _options$__autocomple2.options) || {})) : {};\n return {\n plugins: plugins.map(function (plugin) {\n return {\n name: plugin.name,\n options: Object.keys(plugin.__autocomplete_pluginOptions || [])\n };\n }),\n options: _objectSpread({\n 'autocomplete-core': Object.keys(options)\n }, extraOptions),\n ua: userAgents.concat(((_options$__autocomple3 = options.__autocomplete_metadata) === null || _options$__autocomple3 === void 0 ? void 0 : _options$__autocomple3.userAgents) || [])\n };\n}\nexport function injectMetadata(_ref3) {\n var _environment$navigato, _environment$navigato2;\n\n var metadata = _ref3.metadata,\n environment = _ref3.environment;\n var isMetadataEnabled = (_environment$navigato = environment.navigator) === null || _environment$navigato === void 0 ? void 0 : (_environment$navigato2 = _environment$navigato.userAgent) === null || _environment$navigato2 === void 0 ? void 0 : _environment$navigato2.includes('Algolia Crawler');\n\n if (isMetadataEnabled) {\n var metadataContainer = environment.document.createElement('meta');\n var headRef = environment.document.querySelector('head');\n metadataContainer.name = 'algolia:metadata';\n setTimeout(function () {\n metadataContainer.content = JSON.stringify(metadata);\n headRef.appendChild(metadataContainer);\n }, 0);\n }\n}","import { getActiveItem } from './utils';\nexport function getCompletion(_ref) {\n var _getActiveItem;\n\n var state = _ref.state;\n\n if (state.isOpen === false || state.activeItemId === null) {\n return null;\n }\n\n return ((_getActiveItem = getActiveItem(state)) === null || _getActiveItem === void 0 ? void 0 : _getActiveItem.itemInputValue) || null;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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: action.payload.hasOwnProperty('nextActiveItemId') ? action.payload.nextActiveItemId : 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 activeItemId: null,\n isOpen: false,\n completion: null\n });\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: null,\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); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 { getMetadata, injectMetadata } from './metadata';\nimport { onInput } from './onInput';\nimport { stateReducer } from './stateReducer';\nexport function createAutocomplete(options) {\n checkOptions(options);\n var subscribers = [];\n var props = getDefaultProps(options, subscribers);\n var store = createStore(stateReducer, props, onStoreStateChange);\n var setters = getAutocompleteSetters({\n store: store\n });\n var propGetters = getPropGetters(_objectSpread({\n props: props,\n refresh: refresh,\n store: store\n }, 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 injectMetadata({\n metadata: getMetadata({\n plugins: props.plugins,\n options: options\n }),\n environment: props.environment\n });\n return _objectSpread(_objectSpread({\n refresh: refresh\n }, propGetters), setters);\n}","var n=function(t,s,r,e){var u;s[0]=0;for(var h=1;h=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e=\"\"},a=0;a\"===t?(r=1,e=\"\"):e=t+e[0]:u?t===u?u=\"\":e+=t:'\"'===t||\"'\"===t?u=t:\">\"===t?(p(),r=1):r&&(\"=\"===t?(r=5,s=e,e=\"\"):\"/\"===t&&(r<5||\">\"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):\" \"===t||\"\\t\"===t||\"\\n\"===t||\"\\r\"===t?(p(),r=2):e+=t),3===r&&\"!--\"===e&&(r=4,h=h[0])}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]}\n","import { AutocompleteEnvironment } from '@algolia/autocomplete-core';\n\nimport { AutocompleteElement } from '../types/AutocompleteElement';\n\nexport const ClearIcon: AutocompleteElement<\n { environment: AutocompleteEnvironment },\n SVGSVGElement\n> = ({ environment }) => {\n const element = environment.document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'svg'\n );\n element.setAttribute('class', 'aa-ClearIcon');\n element.setAttribute('viewBox', '0 0 24 24');\n element.setAttribute('width', '18');\n element.setAttribute('height', '18');\n element.setAttribute('fill', 'currentColor');\n\n const path = environment.document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'path'\n );\n path.setAttribute(\n 'd',\n 'M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z'\n );\n\n element.appendChild(path);\n\n return element;\n};\n","import { AutocompleteEnvironment } from '@algolia/autocomplete-core';\nimport { invariant } from '@algolia/autocomplete-shared';\n\nexport function getHTMLElement(\n environment: AutocompleteEnvironment,\n value: string | HTMLElement\n): HTMLElement {\n if (typeof value === 'string') {\n const element = environment.document.querySelector(value);\n\n invariant(\n element !== null,\n `The element ${JSON.stringify(value)} is not in the document.`\n );\n\n return element!;\n }\n\n return value;\n}\n","import { AutocompleteClassNames } from '../types';\n\nexport function mergeClassNames(\n ...values: Array>\n) {\n return values.reduce((acc, current) => {\n Object.keys(current).forEach((key) => {\n const accValue = acc[key];\n const currentValue = current[key];\n\n if (accValue !== currentValue) {\n acc[key] = [accValue, currentValue].filter(Boolean).join(' ');\n }\n });\n\n return acc;\n }, {});\n}\n","const isPlainObject = (value: unknown) =>\n value &&\n typeof value === 'object' &&\n Object.prototype.toString.call(value) === '[object Object]';\n\nexport function mergeDeep(...values: any[]) {\n return values.reduce((acc, current) => {\n Object.keys(current).forEach((key) => {\n const accValue = acc[key];\n const currentValue = current[key];\n\n if (Array.isArray(accValue) && Array.isArray(currentValue)) {\n acc[key] = accValue.concat(...currentValue);\n } else if (isPlainObject(accValue) && isPlainObject(currentValue)) {\n acc[key] = mergeDeep(accValue, currentValue);\n } else {\n acc[key] = currentValue;\n }\n });\n\n return acc;\n }, {});\n}\n","export function pickBy(\n obj: Record,\n predicate: (value: { key: string; value: TValue }) => boolean\n) {\n return Object.entries(obj).reduce>(\n (acc, [key, value]) => {\n if (predicate({ key, value })) {\n return { ...acc, [key]: value };\n }\n\n return acc;\n },\n {}\n );\n}\n","/* eslint-disable */\n\n/**\n * Touch-specific event aliases\n *\n * See https://w3c.github.io/touch-events/#extensions-to-the-globaleventhandlers-mixin\n */\nconst TOUCH_EVENTS_ALIASES = [\n 'ontouchstart',\n 'ontouchend',\n 'ontouchmove',\n 'ontouchcancel',\n];\n\n/*\n * Taken from Preact\n *\n * See https://github.com/preactjs/preact/blob/6ab49d9020740127577bf4af66bf63f4af7f9fee/src/diff/props.js#L58-L151\n */\n\nfunction setStyle(style: object, key: string, value: any) {\n if (value === null) {\n style[key] = '';\n } else if (typeof value !== 'number') {\n style[key] = value;\n } else {\n style[key] = value + 'px';\n }\n}\n\n/**\n * Proxy an event to hooked event handlers\n */\nfunction eventProxy(this: any, event: Event) {\n this._listeners[event.type](event);\n}\n\n/**\n * Set a property value on a DOM node\n */\nexport function setProperty(dom: HTMLElement, name: string, value: any) {\n let useCapture: boolean;\n let nameLower: string;\n let oldValue = dom[name];\n\n if (name === 'style') {\n if (typeof value == 'string') {\n (dom as any).style = value;\n } else {\n if (value === null) {\n (dom as any).style = '';\n } else {\n for (name in value) {\n if (!oldValue || value[name] !== oldValue[name]) {\n setStyle(dom.style, name, value[name]);\n }\n }\n }\n }\n }\n // Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n else if (name[0] === 'o' && name[1] === 'n') {\n useCapture = name !== (name = name.replace(/Capture$/, ''));\n nameLower = name.toLowerCase();\n if (nameLower in dom || TOUCH_EVENTS_ALIASES.includes(nameLower))\n name = nameLower;\n name = name.slice(2);\n\n if (!(dom as any)._listeners) (dom as any)._listeners = {};\n (dom as any)._listeners[name] = value;\n\n if (value) {\n if (!oldValue) dom.addEventListener(name, eventProxy, useCapture);\n } else {\n dom.removeEventListener(name, eventProxy, useCapture);\n }\n } else if (\n name !== 'list' &&\n name !== 'tagName' &&\n // HTMLButtonElement.form and HTMLInputElement.form are read-only but can be set using\n // setAttribute\n name !== 'form' &&\n name !== 'type' &&\n name !== 'size' &&\n name !== 'download' &&\n name !== 'href' &&\n name in dom\n ) {\n dom[name] = value == null ? '' : value;\n } else if (typeof value != 'function' && name !== 'dangerouslySetInnerHTML') {\n if (\n value == null ||\n (value === false &&\n // ARIA-attributes have a different notion of boolean values.\n // The value `false` is different from the attribute not\n // existing on the DOM, so we can't remove it. For non-boolean\n // ARIA-attributes we could treat false as a removal, but the\n // amount of exceptions would cost us too many bytes. On top of\n // that other VDOM frameworks also always stringify `false`.\n !/^ar/.test(name))\n ) {\n dom.removeAttribute(name);\n } else {\n dom.setAttribute(name, value);\n }\n }\n}\n\nfunction getNormalizedName(name: string): string {\n switch (name) {\n case 'onChange':\n return 'onInput';\n default:\n return name;\n }\n}\n\nexport function setProperties(dom: HTMLElement, props: object): void {\n for (const name in props) {\n setProperty(dom, getNormalizedName(name), props[name]);\n }\n}\n\nexport function setPropertiesWithoutEvents(\n dom: HTMLElement,\n props: object\n): void {\n for (const name in props) {\n if (!(name[0] === 'o' && name[1] === 'n')) {\n setProperty(dom, getNormalizedName(name), props[name]);\n }\n }\n}\n","import { AutocompleteEnvironment } from '@algolia/autocomplete-core';\n\nimport { setProperties } from './utils';\n\ntype CreateDomElementProps = Record & {\n children?: Node[];\n};\n\nexport function getCreateDomElement(environment: AutocompleteEnvironment) {\n return function createDomElement(\n tagName: KParam,\n { children = [], ...props }: CreateDomElementProps\n ): HTMLElementTagNameMap[KParam] {\n const element = environment.document.createElement(tagName);\n setProperties(element, props);\n element.append(...children);\n\n return element;\n };\n}\n","import { AutocompleteEnvironment } from '@algolia/autocomplete-core';\n\nimport { AutocompleteElement } from '../types/AutocompleteElement';\n\nexport const LoadingIcon: AutocompleteElement<\n { environment: AutocompleteEnvironment },\n SVGSVGElement\n> = ({ environment }) => {\n const element = environment.document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'svg'\n );\n element.setAttribute('class', 'aa-LoadingIcon');\n element.setAttribute('viewBox', '0 0 100 100');\n element.setAttribute('width', '20');\n element.setAttribute('height', '20');\n\n element.innerHTML = `\n \n`;\n\n return element;\n};\n","import { AutocompleteEnvironment } from '@algolia/autocomplete-core';\n\nimport { AutocompleteElement } from '../types/AutocompleteElement';\n\nexport const SearchIcon: AutocompleteElement<\n { environment: AutocompleteEnvironment },\n SVGSVGElement\n> = ({ environment }) => {\n const element = environment.document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'svg'\n );\n element.setAttribute('class', 'aa-SubmitIcon');\n element.setAttribute('viewBox', '0 0 24 24');\n element.setAttribute('width', '20');\n element.setAttribute('height', '20');\n element.setAttribute('fill', 'currentColor');\n\n const path = environment.document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'path'\n );\n path.setAttribute(\n 'd',\n 'M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z'\n );\n\n element.appendChild(path);\n\n return element;\n};\n","import {\n AutocompleteApi as AutocompleteCoreApi,\n AutocompleteEnvironment,\n AutocompleteScopeApi,\n BaseItem,\n} from '@algolia/autocomplete-core';\n\nimport { ClearIcon, Input, LoadingIcon, SearchIcon } from './elements';\nimport { getCreateDomElement } from './getCreateDomElement';\nimport {\n AutocompleteClassNames,\n AutocompleteDom,\n AutocompletePropGetters,\n AutocompleteState,\n AutocompleteTranslations,\n} from './types';\nimport { setProperties } from './utils';\n\ntype CreateDomProps = {\n autocomplete: AutocompleteCoreApi;\n autocompleteScopeApi: AutocompleteScopeApi;\n classNames: AutocompleteClassNames;\n environment: AutocompleteEnvironment;\n isDetached: boolean;\n placeholder?: string;\n propGetters: AutocompletePropGetters;\n setIsModalOpen(value: boolean): void;\n state: AutocompleteState;\n translations: AutocompleteTranslations;\n};\n\nexport function createAutocompleteDom({\n autocomplete,\n autocompleteScopeApi,\n classNames,\n environment,\n isDetached,\n placeholder = 'Search',\n propGetters,\n setIsModalOpen,\n state,\n translations,\n}: CreateDomProps): AutocompleteDom {\n const createDomElement = getCreateDomElement(environment);\n\n const rootProps = propGetters.getRootProps({\n state,\n props: autocomplete.getRootProps({}),\n ...autocompleteScopeApi,\n });\n const root = createDomElement('div', {\n class: classNames.root,\n ...rootProps,\n });\n const detachedContainer = createDomElement('div', {\n class: classNames.detachedContainer,\n onMouseDown(event: MouseEvent) {\n event.stopPropagation();\n },\n });\n const detachedOverlay = createDomElement('div', {\n class: classNames.detachedOverlay,\n children: [detachedContainer],\n onMouseDown() {\n setIsModalOpen(false);\n autocomplete.setIsOpen(false);\n },\n });\n\n const labelProps = propGetters.getLabelProps({\n state,\n props: autocomplete.getLabelProps({}),\n ...autocompleteScopeApi,\n });\n const submitButton = createDomElement('button', {\n class: classNames.submitButton,\n type: 'submit',\n title: translations.submitButtonTitle,\n children: [SearchIcon({ environment })],\n });\n const label = createDomElement('label', {\n class: classNames.label,\n children: [submitButton],\n ...labelProps,\n });\n const clearButton = createDomElement('button', {\n class: classNames.clearButton,\n type: 'reset',\n title: translations.clearButtonTitle,\n children: [ClearIcon({ environment })],\n });\n const loadingIndicator = createDomElement('div', {\n class: classNames.loadingIndicator,\n children: [LoadingIcon({ environment })],\n });\n\n const input = Input({\n class: classNames.input,\n environment,\n state,\n getInputProps: propGetters.getInputProps,\n getInputPropsCore: autocomplete.getInputProps,\n autocompleteScopeApi,\n isDetached,\n });\n\n const inputWrapperPrefix = createDomElement('div', {\n class: classNames.inputWrapperPrefix,\n children: [label, loadingIndicator],\n });\n const inputWrapperSuffix = createDomElement('div', {\n class: classNames.inputWrapperSuffix,\n children: [clearButton],\n });\n const inputWrapper = createDomElement('div', {\n class: classNames.inputWrapper,\n children: [input],\n });\n\n const formProps = propGetters.getFormProps({\n state,\n props: autocomplete.getFormProps({ inputElement: input }),\n ...autocompleteScopeApi,\n });\n const form = createDomElement('form', {\n class: classNames.form,\n children: [inputWrapperPrefix, inputWrapper, inputWrapperSuffix],\n ...formProps,\n });\n const panelProps = propGetters.getPanelProps({\n state,\n props: autocomplete.getPanelProps({}),\n ...autocompleteScopeApi,\n });\n const panel = createDomElement('div', {\n class: classNames.panel,\n ...panelProps,\n });\n\n if (__TEST__) {\n setProperties(panel, {\n 'data-testid': 'panel',\n });\n }\n\n if (isDetached) {\n const detachedSearchButtonIcon = createDomElement('div', {\n class: classNames.detachedSearchButtonIcon,\n children: [SearchIcon({ environment })],\n });\n const detachedSearchButtonPlaceholder = createDomElement('div', {\n class: classNames.detachedSearchButtonPlaceholder,\n textContent: placeholder,\n });\n const detachedSearchButton = createDomElement('button', {\n type: 'button',\n class: classNames.detachedSearchButton,\n onClick() {\n setIsModalOpen(true);\n },\n children: [detachedSearchButtonIcon, detachedSearchButtonPlaceholder],\n });\n const detachedCancelButton = createDomElement('button', {\n type: 'button',\n class: classNames.detachedCancelButton,\n textContent: translations.detachedCancelButtonText,\n // Prevent `onTouchStart` from closing the panel\n // since it should be initiated by `onClick` only\n onTouchStart(event: TouchEvent) {\n event.stopPropagation();\n },\n onClick() {\n autocomplete.setIsOpen(false);\n setIsModalOpen(false);\n },\n });\n const detachedFormContainer = createDomElement('div', {\n class: classNames.detachedFormContainer,\n children: [form, detachedCancelButton],\n });\n\n detachedContainer.appendChild(detachedFormContainer);\n root.appendChild(detachedSearchButton);\n } else {\n root.appendChild(form);\n }\n\n return {\n detachedContainer,\n detachedOverlay,\n inputWrapper,\n input,\n root,\n form,\n label,\n submitButton,\n clearButton,\n loadingIndicator,\n panel,\n };\n}\n","import {\n AutocompleteApi as AutocompleteCoreApi,\n AutocompleteEnvironment,\n AutocompleteScopeApi,\n} from '@algolia/autocomplete-core';\n\nimport { getCreateDomElement } from '../getCreateDomElement';\nimport { AutocompletePropGetters, AutocompleteState } from '../types';\nimport { AutocompleteElement } from '../types/AutocompleteElement';\nimport { setProperties } from '../utils';\n\ntype InputProps = {\n autocompleteScopeApi: AutocompleteScopeApi;\n environment: AutocompleteEnvironment;\n getInputProps: AutocompletePropGetters['getInputProps'];\n getInputPropsCore: AutocompleteCoreApi['getInputProps'];\n isDetached: boolean;\n state: AutocompleteState;\n};\n\nexport const Input: AutocompleteElement = ({\n autocompleteScopeApi,\n environment,\n classNames,\n getInputProps,\n getInputPropsCore,\n isDetached,\n state,\n ...props\n}) => {\n const createDomElement = getCreateDomElement(environment);\n const element = createDomElement('input', props);\n const inputProps = getInputProps({\n state,\n props: getInputPropsCore({ inputElement: element }),\n inputElement: element,\n ...autocompleteScopeApi,\n });\n\n setProperties(element, {\n ...inputProps,\n onKeyDown(event: KeyboardEvent) {\n // In detached mode we don't want to close the panel when hittin `Tab`.\n if (isDetached && event.key === 'Tab') {\n return;\n }\n\n inputProps.onKeyDown(event);\n },\n });\n\n return element;\n};\n","var n,l,u,i,t,r,o,f,e={},c=[],s=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function a(n,l){for(var u in l)n[u]=l[u];return n}function h(n){var l=n.parentNode;l&&l.removeChild(n)}function v(l,u,i){var t,r,o,f={};for(o in u)\"key\"==o?t=u[o]:\"ref\"==o?r=u[o]:f[o]=u[o];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===f[o]&&(f[o]=l.defaultProps[o]);return y(l,f,t,r,null)}function y(n,i,t,r,o){var f={type:n,props:i,key:t,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++u:o};return null==o&&null!=l.vnode&&l.vnode(f),f}function p(){return{current:null}}function d(n){return n.children}function _(n,l){this.props=n,this.context=l}function k(n,l){if(null==l)return n.__?k(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l0?y(_.type,_.props,_.key,null,_.__v):_)){if(_.__=u,_.__b=u.__b+1,null===(p=w[h])||p&&_.key==p.key&&_.type===p.type)w[h]=void 0;else for(v=0;v2&&(f.children=arguments.length>3?n.call(arguments,2):i),y(l.type,f,t||l.key,r||l.ref,null)}function D(n,l){var u={__c:l=\"__cC\"+f++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,i;return this.getChildContext||(u=[],(i={})[l]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(m)},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=c.slice,l={__e:function(n,l){for(var u,i,t;l=l.__;)if((u=l.__c)&&!u.__)try{if((i=u.constructor)&&null!=i.getDerivedStateFromError&&(u.setState(i.getDerivedStateFromError(n)),t=u.__d),null!=u.componentDidCatch&&(u.componentDidCatch(n),t=u.__d),t)return u.__E=u}catch(l){n=l}throw n}},u=0,i=function(n){return null!=n&&void 0===n.constructor},_.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=a({},this.state),\"function\"==typeof n&&(n=n(a({},u),this.props)),n&&a(u,n),null!=n&&this.__v&&(l&&this.__h.push(l),m(this))},_.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),m(this))},_.prototype.render=d,t=[],r=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,g.__r=0,f=0;export{S as render,q as hydrate,v as createElement,v as h,d as Fragment,p as createRef,i as isValidElement,_ as Component,B as cloneElement,D as createContext,A as toChildArray,l as options};\n//# sourceMappingURL=preact.module.js.map\n","export var HIGHLIGHT_PRE_TAG = '__aa-highlight__';\nexport var HIGHLIGHT_POST_TAG = '__/aa-highlight__';","import { HIGHLIGHT_PRE_TAG, HIGHLIGHT_POST_TAG } from '../constants';\n\n/**\n * Creates a data structure that allows to concatenate similar highlighting\n * parts in a single value.\n */\nfunction createAttributeSet() {\n var initialValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var value = initialValue;\n return {\n get: function get() {\n return value;\n },\n add: function add(part) {\n var lastPart = value[value.length - 1];\n\n if ((lastPart === null || lastPart === void 0 ? void 0 : lastPart.isHighlighted) === part.isHighlighted) {\n value[value.length - 1] = {\n value: lastPart.value + part.value,\n isHighlighted: lastPart.isHighlighted\n };\n } else {\n value.push(part);\n }\n }\n };\n}\n\nexport function parseAttribute(_ref) {\n var highlightedValue = _ref.highlightedValue;\n var preTagParts = highlightedValue.split(HIGHLIGHT_PRE_TAG);\n var firstValue = preTagParts.shift();\n var parts = createAttributeSet(firstValue ? [{\n value: firstValue,\n isHighlighted: false\n }] : []);\n preTagParts.forEach(function (part) {\n var postTagParts = part.split(HIGHLIGHT_POST_TAG);\n parts.add({\n value: postTagParts[0],\n isHighlighted: true\n });\n\n if (postTagParts[1] !== '') {\n parts.add({\n value: postTagParts[1],\n isHighlighted: false\n });\n }\n });\n return parts.get();\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\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) 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 { getAttributeValueByPath, warn } from '@algolia/autocomplete-shared';\nimport { parseAttribute } from './parseAttribute';\nexport function parseAlgoliaHitHighlight(_ref) {\n var hit = _ref.hit,\n attribute = _ref.attribute;\n var path = Array.isArray(attribute) ? attribute : [attribute];\n var highlightedValue = getAttributeValueByPath(hit, ['_highlightResult'].concat(_toConsumableArray(path), ['value']));\n\n if (typeof highlightedValue !== 'string') {\n process.env.NODE_ENV !== 'production' ? warn(false, \"The attribute \\\"\".concat(path.join('.'), \"\\\" described by the path \").concat(JSON.stringify(path), \" does not exist on the hit. Did you set it in `attributesToHighlight`?\") + '\\nSee https://www.algolia.com/doc/api-reference/api-parameters/attributesToHighlight/') : void 0;\n highlightedValue = getAttributeValueByPath(hit, path) || '';\n }\n\n return parseAttribute({\n highlightedValue: highlightedValue\n });\n}","var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n};\nvar hasAlphanumeric = new RegExp(/\\w/i);\nvar regexEscapedHtml = /&(amp|quot|lt|gt|#39);/g;\nvar regexHasEscapedHtml = RegExp(regexEscapedHtml.source);\n\nfunction unescape(value) {\n return value && regexHasEscapedHtml.test(value) ? value.replace(regexEscapedHtml, function (character) {\n return htmlEscapes[character];\n }) : value;\n}\n\nexport function isPartHighlighted(parts, i) {\n var _parts, _parts2;\n\n var current = parts[i];\n var isNextHighlighted = ((_parts = parts[i + 1]) === null || _parts === void 0 ? void 0 : _parts.isHighlighted) || true;\n var isPreviousHighlighted = ((_parts2 = parts[i - 1]) === null || _parts2 === void 0 ? void 0 : _parts2.isHighlighted) || true;\n\n if (!hasAlphanumeric.test(unescape(current.value)) && isPreviousHighlighted === isNextHighlighted) {\n return isPreviousHighlighted;\n }\n\n return current.isHighlighted;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 { isPartHighlighted } from './isPartHighlighted';\nexport function reverseHighlightedParts(parts) {\n // We don't want to highlight the whole word when no parts match.\n if (!parts.some(function (part) {\n return part.isHighlighted;\n })) {\n return parts.map(function (part) {\n return _objectSpread(_objectSpread({}, part), {}, {\n isHighlighted: false\n });\n });\n }\n\n return parts.map(function (part, i) {\n return _objectSpread(_objectSpread({}, part), {}, {\n isHighlighted: !isPartHighlighted(parts, i)\n });\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\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) 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 { getAttributeValueByPath, warn } from '@algolia/autocomplete-shared';\nimport { parseAttribute } from './parseAttribute';\nexport function parseAlgoliaHitSnippet(_ref) {\n var hit = _ref.hit,\n attribute = _ref.attribute;\n var path = Array.isArray(attribute) ? attribute : [attribute];\n var highlightedValue = getAttributeValueByPath(hit, ['_snippetResult'].concat(_toConsumableArray(path), ['value']));\n\n if (typeof highlightedValue !== 'string') {\n process.env.NODE_ENV !== 'production' ? warn(false, \"The attribute \\\"\".concat(path.join('.'), \"\\\" described by the path \").concat(JSON.stringify(path), \" does not exist on the hit. Did you set it in `attributesToSnippet`?\") + '\\nSee https://www.algolia.com/doc/api-reference/api-parameters/attributesToSnippet/') : void 0;\n highlightedValue = getAttributeValueByPath(hit, path) || '';\n }\n\n return parseAttribute({\n highlightedValue: highlightedValue\n });\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 createRequester(fetcher, requesterId) {\n function execute(fetcherParams) {\n return fetcher({\n searchClient: fetcherParams.searchClient,\n queries: fetcherParams.requests.map(function (x) {\n return x.query;\n })\n }).then(function (responses) {\n return responses.map(function (response, index) {\n var _fetcherParams$reques = fetcherParams.requests[index],\n sourceId = _fetcherParams$reques.sourceId,\n transformResponse = _fetcherParams$reques.transformResponse;\n return {\n items: response,\n sourceId: sourceId,\n transformResponse: transformResponse\n };\n });\n });\n }\n\n return function createSpecifiedRequester(requesterParams) {\n return function requester(requestParams) {\n return _objectSpread(_objectSpread({\n requesterId: requesterId,\n execute: execute\n }, requesterParams), requestParams);\n };\n };\n}","var _excluded = [\"params\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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\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\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) 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 { userAgents as coreUserAgents } from '@algolia/autocomplete-shared';\nimport { HIGHLIGHT_PRE_TAG, HIGHLIGHT_POST_TAG } from '../constants';\nexport function fetchAlgoliaResults(_ref) {\n var searchClient = _ref.searchClient,\n queries = _ref.queries,\n _ref$userAgents = _ref.userAgents,\n userAgents = _ref$userAgents === void 0 ? [] : _ref$userAgents;\n\n if (typeof searchClient.addAlgoliaAgent === 'function') {\n var algoliaAgents = [].concat(_toConsumableArray(coreUserAgents), _toConsumableArray(userAgents));\n algoliaAgents.forEach(function (_ref2) {\n var segment = _ref2.segment,\n version = _ref2.version;\n searchClient.addAlgoliaAgent(segment, version);\n });\n }\n\n return searchClient.search(queries.map(function (searchParameters) {\n var params = searchParameters.params,\n headers = _objectWithoutProperties(searchParameters, _excluded);\n\n return _objectSpread(_objectSpread({}, headers), {}, {\n params: _objectSpread({\n hitsPerPage: 5,\n highlightPreTag: HIGHLIGHT_PRE_TAG,\n highlightPostTag: HIGHLIGHT_POST_TAG\n }, params)\n });\n })).then(function (response) {\n return response.results;\n });\n}","import { parseAlgoliaHitHighlight } from '@algolia/autocomplete-preset-algolia';\n\nimport { AutocompleteRenderer, HighlightHitParams } from '../types';\n\nexport function createHighlightComponent({\n createElement,\n Fragment,\n}: AutocompleteRenderer) {\n function Highlight({\n hit,\n attribute,\n tagName = 'mark',\n }: HighlightHitParams): JSX.Element {\n return createElement(\n Fragment,\n {},\n parseAlgoliaHitHighlight({ hit, attribute }).map((x, index) =>\n x.isHighlighted\n ? createElement(tagName, { key: index }, x.value)\n : x.value\n )\n );\n }\n\n Highlight.__autocomplete_componentName = 'Highlight';\n\n return Highlight;\n}\n","import { parseAlgoliaHitReverseHighlight } from '@algolia/autocomplete-preset-algolia';\n\nimport { AutocompleteRenderer, HighlightHitParams } from '../types';\n\nexport function createReverseHighlightComponent({\n createElement,\n Fragment,\n}: AutocompleteRenderer) {\n function ReverseHighlight({\n hit,\n attribute,\n tagName = 'mark',\n }: HighlightHitParams): JSX.Element {\n return createElement(\n Fragment,\n {},\n parseAlgoliaHitReverseHighlight({\n hit,\n attribute,\n }).map((x, index) =>\n x.isHighlighted\n ? createElement(tagName, { key: index }, x.value)\n : x.value\n )\n );\n }\n\n ReverseHighlight.__autocomplete_componentName = 'ReverseHighlight';\n\n return ReverseHighlight;\n}\n","import { parseAlgoliaHitHighlight } from './parseAlgoliaHitHighlight';\nimport { reverseHighlightedParts } from './reverseHighlightedParts';\nexport function parseAlgoliaHitReverseHighlight(props) {\n return reverseHighlightedParts(parseAlgoliaHitHighlight(props));\n}","import { parseAlgoliaHitReverseSnippet } from '@algolia/autocomplete-preset-algolia';\n\nimport { AutocompleteRenderer, HighlightHitParams } from '../types';\n\nexport function createReverseSnippetComponent({\n createElement,\n Fragment,\n}: AutocompleteRenderer) {\n function ReverseSnippet({\n hit,\n attribute,\n tagName = 'mark',\n }: HighlightHitParams): JSX.Element {\n return createElement(\n Fragment,\n {},\n parseAlgoliaHitReverseSnippet({\n hit,\n attribute,\n }).map((x, index) =>\n x.isHighlighted\n ? createElement(tagName, { key: index }, x.value)\n : x.value\n )\n );\n }\n\n ReverseSnippet.__autocomplete_componentName = 'ReverseSnippet';\n\n return ReverseSnippet;\n}\n","import { parseAlgoliaHitSnippet } from './parseAlgoliaHitSnippet';\nimport { reverseHighlightedParts } from './reverseHighlightedParts';\nexport function parseAlgoliaHitReverseSnippet(props) {\n return reverseHighlightedParts(parseAlgoliaHitSnippet(props));\n}","import { parseAlgoliaHitSnippet } from '@algolia/autocomplete-preset-algolia';\n\nimport { AutocompleteRenderer, HighlightHitParams } from '../types';\n\nexport function createSnippetComponent({\n createElement,\n Fragment,\n}: AutocompleteRenderer) {\n function Snippet({\n hit,\n attribute,\n tagName = 'mark',\n }: HighlightHitParams): JSX.Element {\n return createElement(\n Fragment,\n {},\n parseAlgoliaHitSnippet({ hit, attribute }).map((x, index) =>\n x.isHighlighted\n ? createElement(tagName, { key: index }, x.value)\n : x.value\n )\n );\n }\n\n Snippet.__autocomplete_componentName = 'Snippet';\n\n return Snippet;\n}\n","import { AutocompleteEnvironment, BaseItem } from '@algolia/autocomplete-core';\nimport {\n generateAutocompleteId,\n invariant,\n warn,\n} from '@algolia/autocomplete-shared';\nimport {\n createElement as preactCreateElement,\n Fragment as PreactFragment,\n render,\n} from 'preact';\n\nimport {\n createHighlightComponent,\n createReverseHighlightComponent,\n createReverseSnippetComponent,\n createSnippetComponent,\n} from './components';\nimport {\n AutocompleteClassNames,\n AutocompleteComponents,\n AutocompleteOptions,\n AutocompleteRender,\n AutocompleteRenderer,\n AutocompleteTranslations,\n} from './types';\nimport { getHTMLElement, mergeClassNames } from './utils';\n\nconst defaultClassNames: AutocompleteClassNames = {\n clearButton: 'aa-ClearButton',\n detachedCancelButton: 'aa-DetachedCancelButton',\n detachedContainer: 'aa-DetachedContainer',\n detachedFormContainer: 'aa-DetachedFormContainer',\n detachedOverlay: 'aa-DetachedOverlay',\n detachedSearchButton: 'aa-DetachedSearchButton',\n detachedSearchButtonIcon: 'aa-DetachedSearchButtonIcon',\n detachedSearchButtonPlaceholder: 'aa-DetachedSearchButtonPlaceholder',\n form: 'aa-Form',\n input: 'aa-Input',\n inputWrapper: 'aa-InputWrapper',\n inputWrapperPrefix: 'aa-InputWrapperPrefix',\n inputWrapperSuffix: 'aa-InputWrapperSuffix',\n item: 'aa-Item',\n label: 'aa-Label',\n list: 'aa-List',\n loadingIndicator: 'aa-LoadingIndicator',\n panel: 'aa-Panel',\n panelLayout: 'aa-PanelLayout aa-Panel--scrollable',\n root: 'aa-Autocomplete',\n source: 'aa-Source',\n sourceFooter: 'aa-SourceFooter',\n sourceHeader: 'aa-SourceHeader',\n sourceNoResults: 'aa-SourceNoResults',\n submitButton: 'aa-SubmitButton',\n};\n\nconst defaultRender: AutocompleteRender = ({ children, render }, root) => {\n render(children, root);\n};\n\nconst defaultRenderer: Required = {\n createElement: preactCreateElement,\n Fragment: PreactFragment,\n render,\n};\n\nexport function getDefaultOptions(\n options: AutocompleteOptions\n) {\n const {\n classNames,\n container,\n getEnvironmentProps,\n getFormProps,\n getInputProps,\n getItemProps,\n getLabelProps,\n getListProps,\n getPanelProps,\n getRootProps,\n panelContainer,\n panelPlacement,\n render,\n renderNoResults,\n renderer,\n detachedMediaQuery,\n components,\n translations,\n ...core\n } = options;\n\n /* eslint-disable no-restricted-globals */\n const environment: AutocompleteEnvironment = (typeof window !== 'undefined'\n ? window\n : {}) as typeof window;\n /* eslint-enable no-restricted-globals */\n const containerElement = getHTMLElement(environment, container);\n\n invariant(\n containerElement.tagName !== 'INPUT',\n 'The `container` option does not support `input` elements. You need to change the container to a `div`.'\n );\n\n warn(\n !(render && renderer && !renderer?.render),\n `You provided the \\`render\\` option but did not provide a \\`renderer.render\\`. Since v1.6.0, you can provide a \\`render\\` function directly in \\`renderer\\`.` +\n `\\nTo get rid of this warning, do any of the following depending on your use case.` +\n \"\\n- If you are using the `render` option only to override Autocomplete's default `render` function, pass the `render` function into `renderer` and remove the `render` option.\" +\n '\\n- If you are using the `render` option to customize the layout, pass your `render` function into `renderer` and use it from the provided parameters of the `render` option.' +\n '\\n- If you are using the `render` option to work with React 18, pass an empty `render` function into `renderer`.' +\n '\\nSee https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-render'\n );\n\n warn(\n !renderer ||\n render ||\n (renderer.Fragment && renderer.createElement && renderer.render),\n `You provided an incomplete \\`renderer\\` (missing: ${[\n !renderer?.createElement && '`renderer.createElement`',\n !renderer?.Fragment && '`renderer.Fragment`',\n !renderer?.render && '`renderer.render`',\n ]\n .filter(Boolean)\n .join(', ')}). This can cause rendering issues.` +\n '\\nSee https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-renderer'\n );\n\n const defaultedRenderer = { ...defaultRenderer, ...renderer };\n\n const defaultComponents: AutocompleteComponents = {\n Highlight: createHighlightComponent(defaultedRenderer),\n ReverseHighlight: createReverseHighlightComponent(defaultedRenderer),\n ReverseSnippet: createReverseSnippetComponent(defaultedRenderer),\n Snippet: createSnippetComponent(defaultedRenderer),\n };\n\n const defaultTranslations: AutocompleteTranslations = {\n clearButtonTitle: 'Clear',\n detachedCancelButtonText: 'Cancel',\n submitButtonTitle: 'Submit',\n };\n\n return {\n renderer: {\n classNames: mergeClassNames(\n defaultClassNames,\n classNames ?? {}\n ) as AutocompleteClassNames,\n container: containerElement,\n getEnvironmentProps: getEnvironmentProps ?? (({ props }) => props),\n getFormProps: getFormProps ?? (({ props }) => props),\n getInputProps: getInputProps ?? (({ props }) => props),\n getItemProps: getItemProps ?? (({ props }) => props),\n getLabelProps: getLabelProps ?? (({ props }) => props),\n getListProps: getListProps ?? (({ props }) => props),\n getPanelProps: getPanelProps ?? (({ props }) => props),\n getRootProps: getRootProps ?? (({ props }) => props),\n panelContainer: panelContainer\n ? getHTMLElement(environment, panelContainer)\n : environment.document.body,\n panelPlacement: panelPlacement ?? 'input-wrapper-width',\n render: render ?? defaultRender,\n renderNoResults,\n renderer: defaultedRenderer,\n detachedMediaQuery:\n detachedMediaQuery ??\n getComputedStyle(environment.document.documentElement).getPropertyValue(\n '--aa-detached-media-query'\n ),\n components: {\n // @MAJOR Deal with registering components with the same name as the\n // default ones. We could disallow registering these components by\n // merging the default components second.\n ...defaultComponents,\n ...components,\n },\n translations: {\n ...defaultTranslations,\n ...translations,\n },\n },\n core: {\n ...core,\n id: core.id ?? generateAutocompleteId(),\n environment,\n },\n };\n}\n","import { AutocompleteOptions } from './types';\n\ntype GetPanelPlacementStyleParams = Pick<\n Required>,\n 'panelPlacement' | 'environment'\n> & {\n container: HTMLElement;\n form: HTMLElement;\n};\n\nexport function getPanelPlacementStyle({\n panelPlacement,\n container,\n form,\n environment,\n}: GetPanelPlacementStyleParams) {\n const containerRect = container.getBoundingClientRect();\n // Some browsers have specificities to retrieve the document scroll position.\n // See https://stackoverflow.com/a/28633515/9940315\n const scrollTop =\n (environment.pageYOffset as number) ||\n environment.document.documentElement.scrollTop ||\n environment.document.body.scrollTop ||\n 0;\n const top = scrollTop + containerRect.top + containerRect.height;\n\n switch (panelPlacement) {\n case 'start': {\n return {\n top,\n left: containerRect.left,\n };\n }\n\n case 'end': {\n return {\n top,\n right:\n environment.document.documentElement.clientWidth -\n (containerRect.left + containerRect.width),\n };\n }\n\n case 'full-width': {\n return {\n top,\n left: 0,\n right: 0,\n width: 'unset',\n maxWidth: 'unset',\n };\n }\n\n case 'input-wrapper-width': {\n const formRect = form.getBoundingClientRect();\n\n return {\n top,\n left: formRect.left,\n right:\n environment.document.documentElement.clientWidth -\n (formRect.left + formRect.width),\n width: 'unset',\n maxWidth: 'unset',\n };\n }\n\n default: {\n throw new Error(\n `[Autocomplete] The \\`panelPlacement\\` value ${JSON.stringify(\n panelPlacement\n )} is not valid.`\n );\n }\n }\n}\n","import { version } from '@algolia/autocomplete-shared';\n\nexport const userAgents = [{ segment: 'autocomplete-js', version }];\n","import {\n createRequester,\n fetchAlgoliaResults,\n} from '@algolia/autocomplete-preset-algolia';\n\nimport { userAgents } from '../userAgents';\n\nexport const createAlgoliaRequester = createRequester(\n (params) =>\n fetchAlgoliaResults({\n ...params,\n userAgents,\n }),\n 'algolia'\n);\n","import { createAlgoliaRequester } from './createAlgoliaRequester';\n\n/**\n * Retrieves Algolia results from multiple indices.\n */\nexport const getAlgoliaResults = createAlgoliaRequester({\n transformResponse: (response) => response.hits,\n});\n","import {\n AutocompleteScopeApi,\n BaseItem,\n createAutocomplete,\n} from '@algolia/autocomplete-core';\nimport {\n createRef,\n debounce,\n getItemsCount,\n} from '@algolia/autocomplete-shared';\nimport htm from 'htm';\n\nimport { createAutocompleteDom } from './createAutocompleteDom';\nimport { createEffectWrapper } from './createEffectWrapper';\nimport { createReactiveWrapper } from './createReactiveWrapper';\nimport { getDefaultOptions } from './getDefaultOptions';\nimport { getPanelPlacementStyle } from './getPanelPlacementStyle';\nimport { renderPanel, renderSearchBox } from './render';\nimport {\n AutocompleteApi,\n AutocompleteOptions,\n AutocompletePropGetters,\n AutocompleteSource,\n AutocompleteState,\n VNode,\n} from './types';\nimport { userAgents } from './userAgents';\nimport { mergeDeep, pickBy, setProperties } from './utils';\n\nexport function autocomplete(\n options: AutocompleteOptions\n): AutocompleteApi {\n const { runEffect, cleanupEffects, runEffects } = createEffectWrapper();\n const { reactive, runReactives } = createReactiveWrapper();\n\n const hasNoResultsSourceTemplateRef = createRef(false);\n const optionsRef = createRef(options);\n const onStateChangeRef = createRef<\n AutocompleteOptions['onStateChange']\n >(undefined);\n const props = reactive(() => getDefaultOptions(optionsRef.current));\n const isDetached = reactive(\n () =>\n props.value.core.environment.matchMedia(\n props.value.renderer.detachedMediaQuery\n ).matches\n );\n\n const autocomplete = reactive(() =>\n createAutocomplete({\n ...props.value.core,\n onStateChange(params) {\n hasNoResultsSourceTemplateRef.current = params.state.collections.some(\n (collection) =>\n (collection.source as AutocompleteSource).templates.noResults\n );\n onStateChangeRef.current?.(params as any);\n props.value.core.onStateChange?.(params as any);\n },\n shouldPanelOpen:\n optionsRef.current.shouldPanelOpen ||\n (({ state }) => {\n if (isDetached.value) {\n return true;\n }\n\n const hasItems = getItemsCount(state) > 0;\n\n if (!props.value.core.openOnFocus && !state.query) {\n return hasItems;\n }\n\n const hasNoResultsTemplate = Boolean(\n hasNoResultsSourceTemplateRef.current ||\n props.value.renderer.renderNoResults\n );\n\n return (!hasItems && hasNoResultsTemplate) || hasItems;\n }),\n __autocomplete_metadata: {\n userAgents,\n options,\n },\n })\n );\n const lastStateRef = createRef>({\n collections: [],\n completion: null,\n context: {},\n isOpen: false,\n query: '',\n activeItemId: null,\n status: 'idle',\n ...props.value.core.initialState,\n });\n\n const propGetters: AutocompletePropGetters = {\n getEnvironmentProps: props.value.renderer.getEnvironmentProps,\n getFormProps: props.value.renderer.getFormProps,\n getInputProps: props.value.renderer.getInputProps,\n getItemProps: props.value.renderer.getItemProps,\n getLabelProps: props.value.renderer.getLabelProps,\n getListProps: props.value.renderer.getListProps,\n getPanelProps: props.value.renderer.getPanelProps,\n getRootProps: props.value.renderer.getRootProps,\n };\n const autocompleteScopeApi: AutocompleteScopeApi = {\n setActiveItemId: autocomplete.value.setActiveItemId,\n setQuery: autocomplete.value.setQuery,\n setCollections: autocomplete.value.setCollections,\n setIsOpen: autocomplete.value.setIsOpen,\n setStatus: autocomplete.value.setStatus,\n setContext: autocomplete.value.setContext,\n refresh: autocomplete.value.refresh,\n };\n\n const html = reactive(() =>\n htm.bind(props.value.renderer.renderer.createElement)\n );\n\n const dom = reactive(() =>\n createAutocompleteDom({\n autocomplete: autocomplete.value,\n autocompleteScopeApi,\n classNames: props.value.renderer.classNames,\n environment: props.value.core.environment,\n isDetached: isDetached.value,\n placeholder: props.value.core.placeholder,\n propGetters,\n setIsModalOpen,\n state: lastStateRef.current,\n translations: props.value.renderer.translations,\n })\n );\n\n function setPanelPosition() {\n setProperties(dom.value.panel, {\n style: isDetached.value\n ? {}\n : getPanelPlacementStyle({\n panelPlacement: props.value.renderer.panelPlacement,\n container: dom.value.root,\n form: dom.value.form,\n environment: props.value.core.environment,\n }),\n });\n }\n\n function scheduleRender(state: AutocompleteState) {\n lastStateRef.current = state;\n\n const renderProps = {\n autocomplete: autocomplete.value,\n autocompleteScopeApi,\n classNames: props.value.renderer.classNames,\n components: props.value.renderer.components,\n container: props.value.renderer.container,\n html: html.value,\n dom: dom.value,\n panelContainer: isDetached.value\n ? dom.value.detachedContainer\n : props.value.renderer.panelContainer,\n propGetters,\n state: lastStateRef.current,\n renderer: props.value.renderer.renderer,\n };\n\n const render =\n (!getItemsCount(state) &&\n !hasNoResultsSourceTemplateRef.current &&\n props.value.renderer.renderNoResults) ||\n props.value.renderer.render;\n\n renderSearchBox(renderProps);\n renderPanel(render, renderProps);\n }\n\n runEffect(() => {\n const environmentProps = autocomplete.value.getEnvironmentProps({\n formElement: dom.value.form,\n panelElement: dom.value.panel,\n inputElement: dom.value.input,\n });\n\n setProperties(props.value.core.environment as any, environmentProps);\n\n return () => {\n setProperties(\n props.value.core.environment as any,\n Object.keys(environmentProps).reduce((acc, key) => {\n return {\n ...acc,\n [key]: undefined,\n };\n }, {})\n );\n };\n });\n\n runEffect(() => {\n const panelContainerElement = isDetached.value\n ? props.value.core.environment.document.body\n : props.value.renderer.panelContainer;\n const panelElement = isDetached.value\n ? dom.value.detachedOverlay\n : dom.value.panel;\n\n if (isDetached.value && lastStateRef.current.isOpen) {\n setIsModalOpen(true);\n }\n\n scheduleRender(lastStateRef.current);\n\n return () => {\n if (panelContainerElement.contains(panelElement)) {\n panelContainerElement.removeChild(panelElement);\n }\n };\n });\n\n runEffect(() => {\n const containerElement = props.value.renderer.container;\n containerElement.appendChild(dom.value.root);\n\n return () => {\n containerElement.removeChild(dom.value.root);\n };\n });\n\n runEffect(() => {\n const debouncedRender = debounce<{\n state: AutocompleteState;\n }>(({ state }) => {\n scheduleRender(state);\n }, 0);\n\n onStateChangeRef.current = ({ state, prevState }) => {\n if (isDetached.value && prevState.isOpen !== state.isOpen) {\n setIsModalOpen(state.isOpen);\n }\n\n // The outer DOM might have changed since the last time the panel was\n // positioned. The layout might have shifted vertically for instance.\n // It's therefore safer to re-calculate the panel position before opening\n // it again.\n if (!isDetached.value && state.isOpen && !prevState.isOpen) {\n setPanelPosition();\n }\n\n // We scroll to the top of the panel whenever the query changes (i.e. new\n // results come in) so that users don't have to.\n if (state.query !== prevState.query) {\n const scrollablePanels = props.value.core.environment.document.querySelectorAll(\n '.aa-Panel--scrollable'\n );\n scrollablePanels.forEach((scrollablePanel) => {\n if (scrollablePanel.scrollTop !== 0) {\n scrollablePanel.scrollTop = 0;\n }\n });\n }\n\n debouncedRender({ state });\n };\n\n return () => {\n onStateChangeRef.current = undefined;\n };\n });\n\n runEffect(() => {\n const onResize = debounce(() => {\n const previousIsDetached = isDetached.value;\n isDetached.value = props.value.core.environment.matchMedia(\n props.value.renderer.detachedMediaQuery\n ).matches;\n\n if (previousIsDetached !== isDetached.value) {\n update({});\n } else {\n requestAnimationFrame(setPanelPosition);\n }\n }, 20);\n props.value.core.environment.addEventListener('resize', onResize);\n\n return () => {\n props.value.core.environment.removeEventListener('resize', onResize);\n };\n });\n\n runEffect(() => {\n if (!isDetached.value) {\n return () => {};\n }\n\n function toggleModalClassname(isActive: boolean) {\n dom.value.detachedContainer.classList.toggle(\n 'aa-DetachedContainer--modal',\n isActive\n );\n }\n\n function onChange(event: MediaQueryListEvent) {\n toggleModalClassname(event.matches);\n }\n\n const isModalDetachedMql = props.value.core.environment.matchMedia(\n getComputedStyle(\n props.value.core.environment.document.documentElement\n ).getPropertyValue('--aa-detached-modal-media-query')\n );\n\n toggleModalClassname(isModalDetachedMql.matches);\n\n // Prior to Safari 14, `MediaQueryList` isn't based on `EventTarget`,\n // so we must use `addListener` and `removeListener` to observe media query lists.\n // See https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList/addListener\n const hasModernEventListener = Boolean(isModalDetachedMql.addEventListener);\n\n hasModernEventListener\n ? isModalDetachedMql.addEventListener('change', onChange)\n : isModalDetachedMql.addListener(onChange);\n\n return () => {\n hasModernEventListener\n ? isModalDetachedMql.removeEventListener('change', onChange)\n : isModalDetachedMql.removeListener(onChange);\n };\n });\n\n runEffect(() => {\n requestAnimationFrame(setPanelPosition);\n\n return () => {};\n });\n\n function destroy() {\n cleanupEffects();\n }\n\n function update(updatedOptions: Partial> = {}) {\n cleanupEffects();\n\n const { components, ...rendererProps } = props.value.renderer;\n\n optionsRef.current = mergeDeep(\n rendererProps,\n props.value.core,\n {\n // We need to filter out default components so they can be replaced with\n // a new `renderer`, without getting rid of user components.\n // @MAJOR Deal with registering components with the same name as the\n // default ones. If we disallow overriding default components, we'd just\n // need to pass all `components` here.\n components: pickBy(\n components,\n ({ value }) => !value.hasOwnProperty('__autocomplete_componentName')\n ),\n initialState: lastStateRef.current,\n },\n updatedOptions\n );\n\n runReactives();\n runEffects();\n\n autocomplete.value.refresh().then(() => {\n scheduleRender(lastStateRef.current);\n });\n }\n\n function setIsModalOpen(value: boolean) {\n requestAnimationFrame(() => {\n const prevValue = props.value.core.environment.document.body.contains(\n dom.value.detachedOverlay\n );\n\n if (value === prevValue) {\n return;\n }\n\n if (value) {\n props.value.core.environment.document.body.appendChild(\n dom.value.detachedOverlay\n );\n props.value.core.environment.document.body.classList.add('aa-Detached');\n dom.value.input.focus();\n } else {\n props.value.core.environment.document.body.removeChild(\n dom.value.detachedOverlay\n );\n props.value.core.environment.document.body.classList.remove(\n 'aa-Detached'\n );\n autocomplete.value.setQuery('');\n autocomplete.value.refresh();\n }\n });\n }\n\n return {\n ...autocompleteScopeApi,\n update,\n destroy,\n };\n}\n","type ReactiveValue = () => TValue;\nexport type Reactive = {\n value: TValue;\n /**\n * @private\n */\n _fn: ReactiveValue;\n /**\n * @private\n */\n _ref: {\n current: TValue;\n };\n};\n\nexport function createReactiveWrapper() {\n const reactives: Array> = [];\n\n return {\n reactive(value: ReactiveValue) {\n const current = value();\n const reactive: Reactive = {\n _fn: value,\n _ref: { current },\n get value() {\n return this._ref.current;\n },\n set value(value) {\n this._ref.current = value;\n },\n };\n\n reactives.push(reactive);\n\n return reactive;\n },\n runReactives() {\n reactives.forEach((value) => {\n value._ref.current = value._fn();\n });\n },\n };\n}\n","type Effect = () => void;\ntype EffectFn = () => Effect;\ntype CleanupFn = () => void;\ntype EffectWrapper = {\n runEffect(fn: EffectFn): void;\n cleanupEffects(): void;\n runEffects(): void;\n};\n\nexport function createEffectWrapper(): EffectWrapper {\n let effects: EffectFn[] = [];\n let cleanups: CleanupFn[] = [];\n\n function runEffect(fn: EffectFn) {\n effects.push(fn);\n const effectCleanup = fn();\n cleanups.push(effectCleanup);\n }\n\n return {\n runEffect,\n cleanupEffects() {\n const currentCleanups = cleanups;\n cleanups = [];\n currentCleanups.forEach((cleanup) => {\n cleanup();\n });\n },\n runEffects() {\n const currentEffects = effects;\n effects = [];\n currentEffects.forEach((effect) => {\n runEffect(effect);\n });\n },\n };\n}\n","/** @jsx renderer.createElement */\nimport {\n AutocompleteApi as AutocompleteCoreApi,\n AutocompleteScopeApi,\n BaseItem,\n} from '@algolia/autocomplete-core';\n\nimport {\n AutocompleteClassNames,\n AutocompleteComponents,\n AutocompleteDom,\n AutocompletePropGetters,\n AutocompleteRender,\n AutocompleteRenderer,\n AutocompleteState,\n HTMLTemplate,\n} from './types';\nimport { setProperties, setPropertiesWithoutEvents } from './utils';\n\ntype RenderProps = {\n autocomplete: AutocompleteCoreApi;\n autocompleteScopeApi: AutocompleteScopeApi;\n classNames: AutocompleteClassNames;\n components: AutocompleteComponents;\n html: HTMLTemplate;\n dom: AutocompleteDom;\n panelContainer: HTMLElement;\n propGetters: AutocompletePropGetters;\n state: AutocompleteState;\n renderer: Required;\n};\n\nexport function renderSearchBox({\n autocomplete,\n autocompleteScopeApi,\n dom,\n propGetters,\n state,\n}: RenderProps): void {\n setPropertiesWithoutEvents(\n dom.root,\n propGetters.getRootProps({\n state,\n props: autocomplete.getRootProps({}),\n ...autocompleteScopeApi,\n })\n );\n setPropertiesWithoutEvents(\n dom.input,\n propGetters.getInputProps({\n state,\n props: autocomplete.getInputProps({ inputElement: dom.input }),\n inputElement: dom.input,\n ...autocompleteScopeApi,\n })\n );\n setProperties(dom.label, { hidden: state.status === 'stalled' });\n setProperties(dom.loadingIndicator, { hidden: state.status !== 'stalled' });\n setProperties(dom.clearButton, { hidden: !state.query });\n}\n\nexport function renderPanel(\n render: AutocompleteRender,\n {\n autocomplete,\n autocompleteScopeApi,\n classNames,\n html,\n dom,\n panelContainer,\n propGetters,\n state,\n components,\n renderer,\n }: RenderProps\n): void {\n if (!state.isOpen) {\n if (panelContainer.contains(dom.panel)) {\n panelContainer.removeChild(dom.panel);\n }\n\n return;\n }\n\n // We add the panel element to the DOM when it's not yet appended and that the\n // items are fetched.\n if (!panelContainer.contains(dom.panel) && state.status !== 'loading') {\n panelContainer.appendChild(dom.panel);\n }\n\n dom.panel.classList.toggle('aa-Panel--stalled', state.status === 'stalled');\n\n const sections = state.collections\n .filter(\n ({ source, items }) => source.templates.noResults || items.length > 0\n )\n .map(({ source, items }, sourceIndex) => (\n \n {source.templates.header && (\n
\n {source.templates.header({\n components,\n createElement: renderer.createElement,\n Fragment: renderer.Fragment,\n items,\n source,\n state,\n html,\n })}\n
\n )}\n\n {source.templates.noResults && items.length === 0 ? (\n
\n {source.templates.noResults({\n components,\n createElement: renderer.createElement,\n Fragment: renderer.Fragment,\n source,\n state,\n html,\n })}\n
\n ) : (\n \n {items.map((item) => {\n const itemProps = autocomplete.getItemProps({\n item,\n source,\n });\n\n return (\n \n {source.templates.item({\n components,\n createElement: renderer.createElement,\n Fragment: renderer.Fragment,\n item,\n state,\n html,\n })}\n \n );\n })}\n \n )}\n\n {source.templates.footer && (\n
\n {source.templates.footer({\n components,\n createElement: renderer.createElement,\n Fragment: renderer.Fragment,\n items,\n source,\n state,\n html,\n })}\n
\n )}\n \n ));\n\n const children = (\n \n
{sections}
\n
\n \n );\n const elements = sections.reduce((acc, current) => {\n acc[current.props['data-autocomplete-source-id']] = current;\n return acc;\n }, {});\n\n render(\n {\n children,\n state,\n sections,\n elements,\n ...renderer,\n components,\n html,\n ...autocompleteScopeApi,\n },\n dom.panel\n );\n}\n","import { RequestParams } from '@algolia/autocomplete-preset-algolia';\nimport { MultipleQueriesQuery } from '@algolia/client-search';\n\nimport { createAlgoliaRequester } from './createAlgoliaRequester';\n\n/**\n * Retrieves Algolia facet hits from multiple indices.\n */\nexport function getAlgoliaFacets(requestParams: RequestParams) {\n const requester = createAlgoliaRequester({\n transformResponse: (response) => response.facetHits,\n });\n\n const queries = requestParams.queries.map((query) => ({\n ...query,\n type: 'facet',\n })) as MultipleQueriesQuery[];\n\n return requester({\n ...requestParams,\n queries,\n });\n}\n"],"names":["createRef","initialValue","current","debounce","fn","time","timerId","undefined","_len","arguments","length","args","Array","_key","clearTimeout","setTimeout","apply","flatten","values","reduce","a","b","concat","autocompleteId","generateAutocompleteId","getAttributeValueByPath","record","path","key","getItemsCount","state","collections","sum","collection","items","noop","version","userAgents","segment","createInternalCancelablePromise","promise","initialState","then","onfulfilled","onrejected","createCallback","catch","finally","onfinally","onCancelList","push","cancel","isCanceled","callbacks","forEach","callback","cancelable","onResult","fallback","arg","getNextActiveItemId","moveAmount","baseIndex","itemCount","defaultActiveItemId","numericIndex","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","_defineProperty","obj","value","defineProperty","configurable","writable","getNormalizedSources","getSources","params","seenSourceIds","Promise","resolve","sources","all","maybeSource","Boolean","map","source","sourceId","includes","Error","JSON","stringify","normalizedSource","target","i","getOwnPropertyDescriptors","defineProperties","_objectSpread","getItemInputValue","_ref","query","getItemUrl","onSelect","_ref2","setIsOpen","onActive","getActiveItem","collectionIndex","acc","collectionsCount","index","nextValue","activeItemId","getCollectionFromActiveItemId","item","isOffsetFound","counter","previousItemsOffset","currentCollection","getRelativeActiveItemId","itemInputValue","itemUrl","regex","createStore","reducer","props","onStoreStateChange","list","getState","dispatch","action","payload","prevState","type","pendingRequests","add","cancelablePromise","cancelAll","isEmpty","_toConsumableArray","arr","isArray","_arrayLikeToArray","_arrayWithoutHoles","iter","Symbol","iterator","from","_iterableToArray","o","minLen","n","prototype","toString","call","slice","constructor","name","test","_unsupportedIterableToArray","TypeError","_nonIterableSpread","len","arr2","isDescription","execute","preResolve","itemsOrDescription","description","requests","queries","transformResponse","searchClient","requesterId","container","find","_container$items","request","maybeDescription","responses","postResolve","matches","response","results","transform","rawResults","result","_hits","hits","hit","__autocomplete_indexName","__autocomplete_queryID","queryID","facetHits","_facetHits","facetHit","label","count","_highlightResult","highlighted","mapToAlgoliaResponse","every","_excluded","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","basePromiseId","latestResolvedId","latestResolvedValue","lastStalledId","runConcurrentSafePromise","currentPromiseId","x","onInput","event","_ref$nextState","nextState","refresh","store","setters","environment","setCollections","setQuery","setActiveItemId","setStatus","openOnFocus","_nextState$isOpen","isOpen","shouldPanelOpen","_request","stallThreshold","getItems","sourcesBySourceId","reshape","_nextState$isOpen2","isPanelOpen","highlightedItem","_excluded2","_excluded3","_excluded4","_excluded5","getPropGetters","getEnvironmentProps","providedProps","inputElement","formElement","panelElement","onMouseDownOrTouchStart","some","contextNode","parent","child","contains","debug","onTouchStart","onMouseDown","onTouchMove","document","activeElement","blur","getRootProps","rest","role","id","getFormProps","noValidate","onSubmit","_providedProps$inputE","preventDefault","onReset","_providedProps$inputE2","focus","getLabelProps","htmlFor","getInputProps","_props$environment$na","onFocus","completion","_ref2$maxLength","maxLength","activeItem","shouldFallbackKeyHint","userAgent","match","isSamsung","navigator","enterKeyHint","autoComplete","autoCorrect","autoCapitalize","spellCheck","autoFocus","placeholder","onChange","currentTarget","onKeyDown","triggerScrollIntoView","nodeItem","getElementById","scrollIntoViewIfNeeded","scrollIntoView","triggerOnActive","nextActiveItemId","metaKey","ctrlKey","navigateNewTab","shiftKey","navigateNewWindow","altKey","navigate","_onKeyDown","onBlur","onClick","getPanelProps","onMouseLeave","getListProps","getItemProps","__autocomplete_id","onMouseMove","_item","_source","getMetadata","_","_options$__autocomple","_options$__autocomple2","_options$__autocomple3","plugins","options","optionsKey","__autocomplete_metadata","extraOptions","plugin","__autocomplete_pluginOptions","ua","getCompletion","_getActiveItem","stateReducer","status","context","hasOwnProperty","_nextState","createAutocomplete","subscribers","pluginSubscribers","_props$id","window","onStateChange","_props$onStateChange","_x$onStateChange","_props$onSubmit","_x$onSubmit","_props$onReset","_x$onReset","nested","_x$onSelect","_x$onActive","_ref3","location","assign","_ref4","windowReference","open","_ref5","getDefaultProps","rawValue","baseItemId","setContext","getAutocompleteSetters","propGetters","Event","_plugin$subscribe","subscribe","_environment$navigato","_environment$navigato2","metadata","metadataContainer","createElement","headRef","querySelector","content","appendChild","injectMetadata","t","s","r","e","u","h","p","Map","get","this","set","replace","l","ClearIcon","element","createElementNS","setAttribute","getHTMLElement","mergeClassNames","accValue","currentValue","join","isPlainObject","_typeof","mergeDeep","pickBy","predicate","entries","TOUCH_EVENTS_ALIASES","setStyle","style","eventProxy","_listeners","setProperty","dom","useCapture","nameLower","oldValue","toLowerCase","addEventListener","removeEventListener","removeAttribute","getNormalizedName","setProperties","setPropertiesWithoutEvents","getCreateDomElement","tagName","children","append","LoadingIcon","innerHTML","SearchIcon","createAutocompleteDom","autocomplete","autocompleteScopeApi","classNames","isDetached","setIsModalOpen","translations","createDomElement","rootProps","root","class","detachedContainer","stopPropagation","detachedOverlay","labelProps","submitButton","title","submitButtonTitle","clearButton","clearButtonTitle","loadingIndicator","input","getInputPropsCore","inputProps","Input","inputWrapperPrefix","inputWrapperSuffix","inputWrapper","formProps","form","panelProps","panel","detachedSearchButtonIcon","detachedSearchButtonPlaceholder","textContent","detachedSearchButton","detachedCancelButton","detachedCancelButtonText","detachedFormContainer","c","parentNode","removeChild","v","f","defaultProps","y","ref","__k","__","__b","__e","__d","__c","__h","__v","vnode","d","k","base","m","g","__r","debounceRendering","sort","__P","j","__n","ownerSVGElement","z","w","A","P","N","M","nextSibling","insertBefore","$","H","cssText","T","I","contextType","__E","render","O","sub","__s","getDerivedStateFromProps","componentWillMount","componentDidMount","componentWillReceiveProps","shouldComponentUpdate","componentWillUpdate","componentDidUpdate","getChildContext","getSnapshotBeforeUpdate","L","diffed","localName","nodeType","createTextNode","is","data","childNodes","dangerouslySetInnerHTML","attributes","__html","C","checked","unmount","componentWillUnmount","getDerivedStateFromError","setState","componentDidCatch","forceUpdate","bind","HIGHLIGHT_PRE_TAG","HIGHLIGHT_POST_TAG","parseAttribute","preTagParts","highlightedValue","split","firstValue","shift","parts","part","lastPart","isHighlighted","createAttributeSet","postTagParts","parseAlgoliaHitHighlight","attribute","htmlEscapes","hasAlphanumeric","RegExp","regexEscapedHtml","regexHasEscapedHtml","isPartHighlighted","_parts","_parts2","isNextHighlighted","isPreviousHighlighted","character","reverseHighlightedParts","parseAlgoliaHitSnippet","createHighlightComponent","Fragment","Highlight","__autocomplete_componentName","createReverseHighlightComponent","ReverseHighlight","createReverseSnippetComponent","ReverseSnippet","createSnippetComponent","Snippet","defaultClassNames","panelLayout","sourceFooter","sourceHeader","sourceNoResults","defaultRender","defaultRenderer","preactCreateElement","PreactFragment","firstChild","getPanelPlacementStyle","panelPlacement","containerRect","getBoundingClientRect","top","pageYOffset","documentElement","scrollTop","body","height","left","right","clientWidth","width","maxWidth","formRect","createAlgoliaRequester","fetcher","fetcherParams","_fetcherParams$reques","requesterParams","requestParams","createRequester","_ref$userAgents","addAlgoliaAgent","coreUserAgents","search","searchParameters","hitsPerPage","highlightPreTag","highlightPostTag","fetchAlgoliaResults","getAlgoliaResults","reactives","effects","cleanups","runEffect","effectCleanup","cleanupEffects","currentCleanups","cleanup","runEffects","currentEffects","effect","createEffectWrapper","reactive","_fn","runReactives","hasNoResultsSourceTemplateRef","optionsRef","onStateChangeRef","panelContainer","renderNoResults","renderer","detachedMediaQuery","components","core","containerElement","defaultedRenderer","defaultComponents","getComputedStyle","getPropertyValue","getDefaultOptions","matchMedia","templates","noResults","hasItems","hasNoResultsTemplate","lastStateRef","html","htm","setPanelPosition","scheduleRender","renderProps","hidden","renderSearchBox","classList","toggle","sections","sourceIndex","className","header","itemProps","footer","elements","renderPanel","update","updatedOptions","rendererProps","requestAnimationFrame","prevValue","remove","environmentProps","panelContainerElement","debouncedRender","querySelectorAll","scrollablePanel","onResize","previousIsDetached","toggleModalClassname","isActive","isModalDetachedMql","hasModernEventListener","addListener","removeListener","destroy","requester"],"mappings":";qhGAAO,SAASA,EAAUC,SACjB,CACLC,QAASD,GCFN,SAASE,EAASC,EAAIC,OACvBC,OAAUC,SACP,eACA,IAAIC,EAAOC,UAAUC,OAAQC,EAAO,IAAIC,MAAMJ,GAAOK,EAAO,EAAGA,EAAOL,EAAMK,IAC/EF,EAAKE,GAAQJ,UAAUI,GAGrBP,GACFQ,aAAaR,GAGfA,EAAUS,YAAW,kBACZX,EAAGY,WAAM,EAAQL,KACvBN,ICbA,SAASY,EAAQC,UACfA,EAAOC,QAAO,SAAUC,EAAGC,UACzBD,EAAEE,OAAOD,KACf,ICHL,IAAIE,EAAiB,EACd,SAASC,UACP,gBAAgBF,OAAOC,KCFzB,SAASE,EAAwBC,EAAQC,UACvCA,EAAKR,QAAO,SAAUjB,EAAS0B,UAC7B1B,GAAWA,EAAQ0B,KACzBF,GCHE,SAASG,EAAcC,UACK,IAA7BA,EAAMC,YAAYrB,OACb,EAGFoB,EAAMC,YAAYZ,QAAO,SAAUa,EAAKC,UACtCD,EAAMC,EAAWC,MAAMxB,SAC7B,GCPE,IAAIyB,EAAO,aCAPC,EAAU,QCCVC,EAAa,CAAC,CACvBC,QAAS,oBACTF,QAASA,ICHX,SAASG,EAAgCC,EAASC,OAC5CX,EAAQW,QACL,CACLC,KAAM,SAAcC,EAAaC,UACxBL,EAAgCC,EAAQE,KAAKG,EAAeF,EAAab,EAAOU,GAAUK,EAAeD,EAAYd,EAAOU,IAAWV,IAEhJgB,MAAO,SAAgBF,UACdL,EAAgCC,EAAQM,MAAMD,EAAeD,EAAYd,EAAOU,IAAWV,IAEpGiB,QAAS,SAAkBC,UACrBA,GACFlB,EAAMmB,aAAaC,KAAKF,GAGnBT,EAAgCC,EAAQO,QAAQF,EAAeG,GAAa,kBACjFlB,EAAMmB,aAAe,GACdD,KACNlB,EAAOU,IAAWV,IAEvBqB,OAAQ,WACNrB,EAAMsB,YAAa,MACfC,EAAYvB,EAAMmB,aACtBnB,EAAMmB,aAAe,GACrBI,EAAUC,SAAQ,SAAUC,GAC1BA,QAGJH,WAAY,kBACkB,IAArBtB,EAAMsB,aAsBZ,SAASI,EAAWhB,UAClBD,EAAgCC,EAAS,CAC9CY,YAAY,EACZH,aAAc,KAIlB,SAASJ,EAAeY,EAAU3B,EAAO4B,UAClCD,EAIE,SAAkBE,UACnB7B,EAAMsB,WACDO,EAGFF,EAASE,IARTD,EC3CJ,SAASE,EAAoBC,EAAYC,EAAWC,EAAWC,OAC/DD,SACI,QAGLF,EAAa,IAAoB,OAAdC,GAA8C,OAAxBE,GAA8C,IAAdF,UACpEC,EAAYF,MAGjBI,GAA8B,OAAdH,GAAsB,EAAIA,GAAaD,SAEvDI,IAAiB,GAAKA,GAAgBF,EACT,OAAxBC,EAA+B,KAAO,EAGxCC,EC/BT,SAASC,EAAQC,EAAQC,OAAsBC,EAAOC,OAAOD,KAAKF,MAAaG,OAAOC,sBAAuB,KAAMC,EAAUF,OAAOC,sBAAsBJ,GAASC,IAAmBI,EAAUA,EAAQC,QAAO,SAAUC,UAAcJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAiBP,EAAKnB,KAAKlC,MAAMqD,EAAMG,UAAmBH,EAI9U,SAASQ,EAAgBC,EAAKlD,EAAKmD,UAAanD,KAAOkD,EAAOR,OAAOU,eAAeF,EAAKlD,EAAK,CAAEmD,MAAOA,EAAOH,YAAY,EAAMK,cAAc,EAAMC,UAAU,IAAkBJ,EAAIlD,GAAOmD,EAAgBD,EAKpM,SAASK,EAAqBC,EAAYC,OAC3CC,EAAgB,UACbC,QAAQC,QAAQJ,EAAWC,IAAS3C,MAAK,SAAU+C,UAIjDF,QAAQG,IAAID,EAGlBhB,QAAO,SAAUkB,UACTC,QAAQD,MACdE,KAAI,SAAUC,MACEA,EAAOC,SAEpBT,EAAcU,SAASF,EAAOC,gBAC1B,IAAIE,MAAM,iCAAiC3E,OAAO4E,KAAKC,UAAUL,EAAOC,UAAW,oBAG3FT,EAAcpC,KAAK4C,EAAOC,cAEtBK,EA3BV,SAAuBC,OAAe,IAAIC,EAAI,EAAGA,EAAI7F,UAAUC,OAAQ4F,IAAK,KAAMR,EAAS,MAAQrF,UAAU6F,GAAK7F,UAAU6F,GAAK,GAAIA,EAAI,EAAIpC,EAAQI,OAAOwB,IAAS,GAAIxC,SAAQ,SAAU1B,GAAOiD,EAAgBwB,EAAQzE,EAAKkE,EAAOlE,OAAY0C,OAAOiC,0BAA4BjC,OAAOkC,iBAAiBH,EAAQ/B,OAAOiC,0BAA0BT,IAAW5B,EAAQI,OAAOwB,IAASxC,SAAQ,SAAU1B,GAAO0C,OAAOU,eAAeqB,EAAQzE,EAAK0C,OAAOK,yBAAyBmB,EAAQlE,cAAoByE,EA2BpdI,CAAc,CACnCC,kBAAmB,SAA2BC,UAChCA,EAAK7E,MACJ8E,OAEfC,WAAY,aAGZC,SAAU,SAAkBC,IAE1BC,EADgBD,EAAMC,YACZ,IAEZC,SAAU9E,GACT2D,UAEIP,QAAQC,QAAQY,UCctB,SAASc,EAAcpF,OACxBG,EAxDN,SAAuCH,OAajCqF,EAT8BrF,EAAMC,YAAY8D,KAAI,SAAU9D,UACzDA,EAAYG,MAAMxB,UACxBS,QAAO,SAAUiG,EAAKC,EAAkBC,OAErCC,GADgBH,EAAIE,EAAQ,IAAM,GACND,SAChCD,EAAIlE,KAAKqE,GACFH,IACN,IAE+CjG,QAAO,SAAUiG,EAAKlH,UAClEA,GAAW4B,EAAM0F,aACZJ,EAAM,EAGRA,IACN,UACItF,EAAMC,YAAYoF,GAoCRM,CAA8B3F,OAE1CG,SACI,SAGLyF,EAAOzF,EAAWC,MA7BxB,SAAiCyE,WAC3B7E,EAAQ6E,EAAK7E,MACbG,EAAa0E,EAAK1E,WAClB0F,GAAgB,EAChBC,EAAU,EACVC,EAAsB,GAED,IAAlBF,GAAyB,KAC1BG,EAAoBhG,EAAMC,YAAY6F,MAEtCE,IAAsB7F,EAAY,CACpC0F,GAAgB,QAIlBE,GAAuBC,EAAkB5F,MAAMxB,OAC/CkH,WAGK9F,EAAM0F,aAAeK,EAUAE,CAAwB,CAClDjG,MAAOA,EACPG,WAAYA,KAEV6D,EAAS7D,EAAW6D,aASjB,CACL4B,KAAMA,EACNM,eAVmBlC,EAAOY,kBAAkB,CAC5CgB,KAAMA,EACN5F,MAAOA,IASPmG,QAPYnC,EAAOe,WAAW,CAC9Ba,KAAMA,EACN5F,MAAOA,IAMPgE,OAAQA,GClFZ,IAAIoC,EAAQ,uCCAZ,SAAShE,EAAQC,EAAQC,OAAsBC,EAAOC,OAAOD,KAAKF,MAAaG,OAAOC,sBAAuB,KAAMC,EAAUF,OAAOC,sBAAsBJ,GAASC,IAAmBI,EAAUA,EAAQC,QAAO,SAAUC,UAAcJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAiBP,EAAKnB,KAAKlC,MAAMqD,EAAMG,UAAmBH,EAE9U,SAASoC,EAAcJ,OAAe,IAAIC,EAAI,EAAGA,EAAI7F,UAAUC,OAAQ4F,IAAK,KAAMR,EAAS,MAAQrF,UAAU6F,GAAK7F,UAAU6F,GAAK,GAAIA,EAAI,EAAIpC,EAAQI,OAAOwB,IAAS,GAAIxC,SAAQ,SAAU1B,GAAOiD,EAAgBwB,EAAQzE,EAAKkE,EAAOlE,OAAY0C,OAAOiC,0BAA4BjC,OAAOkC,iBAAiBH,EAAQ/B,OAAOiC,0BAA0BT,IAAW5B,EAAQI,OAAOwB,IAASxC,SAAQ,SAAU1B,GAAO0C,OAAOU,eAAeqB,EAAQzE,EAAK0C,OAAOK,yBAAyBmB,EAAQlE,cAAoByE,EAEjf,SAASxB,EAAgBC,EAAKlD,EAAKmD,UAAanD,KAAOkD,EAAOR,OAAOU,eAAeF,EAAKlD,EAAK,CAAEmD,MAAOA,EAAOH,YAAY,EAAMK,cAAc,EAAMC,UAAU,IAAkBJ,EAAIlD,GAAOmD,EAAgBD,ECJ3M,SAASZ,EAAQC,EAAQC,OAAsBC,EAAOC,OAAOD,KAAKF,MAAaG,OAAOC,sBAAuB,KAAMC,EAAUF,OAAOC,sBAAsBJ,GAASC,IAAmBI,EAAUA,EAAQC,QAAO,SAAUC,UAAcJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAiBP,EAAKnB,KAAKlC,MAAMqD,EAAMG,UAAmBH,EAI9U,SAASQ,EAAgBC,EAAKlD,EAAKmD,UAAanD,KAAOkD,EAAOR,OAAOU,eAAeF,EAAKlD,EAAK,CAAEmD,MAAOA,EAAOH,YAAY,EAAMK,cAAc,EAAMC,UAAU,IAAkBJ,EAAIlD,GAAOmD,EAAgBD,EAGpM,SAASqD,EAAYC,EAASC,EAAOC,OCNtCC,EDOAzG,EAAQuG,EAAM5F,mBACX,CACL+F,SAAU,kBACD1G,GAET2G,SAAU,SAAkBC,EAAQC,OAC9BC,EAZV,SAAuBvC,OAAe,IAAIC,EAAI,EAAGA,EAAI7F,UAAUC,OAAQ4F,IAAK,KAAMR,EAAS,MAAQrF,UAAU6F,GAAK7F,UAAU6F,GAAK,GAAIA,EAAI,EAAIpC,EAAQI,OAAOwB,IAAS,GAAIxC,SAAQ,SAAU1B,GAAOiD,EAAgBwB,EAAQzE,EAAKkE,EAAOlE,OAAY0C,OAAOiC,0BAA4BjC,OAAOkC,iBAAiBH,EAAQ/B,OAAOiC,0BAA0BT,IAAW5B,EAAQI,OAAOwB,IAASxC,SAAQ,SAAU1B,GAAO0C,OAAOU,eAAeqB,EAAQzE,EAAK0C,OAAOK,yBAAyBmB,EAAQlE,cAAoByE,EAY3dI,CAAc,GAAI3E,GAElCA,EAAQsG,EAAQtG,EAAO,CACrB+G,KAAMH,EACNL,MAAOA,EACPM,QAASA,IAEXL,EAAmB,CACjBxG,MAAOA,EACP8G,UAAWA,KAGfE,iBCzBEP,EAAO,GACJ,CACLQ,IAAK,SAAaC,UAChBT,EAAKrF,KAAK8F,GACHA,EAAkBjG,SAAQ,WAC/BwF,EAAOA,EAAK9D,QAAO,SAAUiD,UACpBA,IAASsB,SAItBC,UAAW,WACTV,EAAKjF,SAAQ,SAAUd,UACdA,EAAQW,aAGnB+F,QAAS,kBACgB,IAAhBX,EAAK7H,WCjBlB,SAASwD,EAAQC,EAAQC,OAAsBC,EAAOC,OAAOD,KAAKF,MAAaG,OAAOC,sBAAuB,KAAMC,EAAUF,OAAOC,sBAAsBJ,GAASC,IAAmBI,EAAUA,EAAQC,QAAO,SAAUC,UAAcJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAiBP,EAAKnB,KAAKlC,MAAMqD,EAAMG,UAAmBH,EAE9U,SAASoC,EAAcJ,OAAe,IAAIC,EAAI,EAAGA,EAAI7F,UAAUC,OAAQ4F,IAAK,KAAMR,EAAS,MAAQrF,UAAU6F,GAAK7F,UAAU6F,GAAK,GAAIA,EAAI,EAAIpC,EAAQI,OAAOwB,IAAS,GAAIxC,SAAQ,SAAU1B,GAAOiD,EAAgBwB,EAAQzE,EAAKkE,EAAOlE,OAAY0C,OAAOiC,0BAA4BjC,OAAOkC,iBAAiBH,EAAQ/B,OAAOiC,0BAA0BT,IAAW5B,EAAQI,OAAOwB,IAASxC,SAAQ,SAAU1B,GAAO0C,OAAOU,eAAeqB,EAAQzE,EAAK0C,OAAOK,yBAAyBmB,EAAQlE,cAAoByE,EAEjf,SAASxB,EAAgBC,EAAKlD,EAAKmD,UAAanD,KAAOkD,EAAOR,OAAOU,eAAeF,EAAKlD,EAAK,CAAEmD,MAAOA,EAAOH,YAAY,EAAMK,cAAc,EAAMC,UAAU,IAAkBJ,EAAIlD,GAAOmD,EAAgBD,ECJ3M,SAASqE,EAAmBC,UAQ5B,SAA4BA,MAAWxI,MAAMyI,QAAQD,GAAM,OAAOE,EAAkBF,GAR1CG,CAAmBH,IAM7D,SAA0BI,MAA8B,oBAAXC,QAAmD,MAAzBD,EAAKC,OAAOC,WAA2C,MAAtBF,EAAK,cAAuB,OAAO5I,MAAM+I,KAAKH,GANjFI,CAAiBR,IAItF,SAAqCS,EAAGC,OAAeD,EAAG,UAAyB,iBAANA,EAAgB,OAAOP,EAAkBO,EAAGC,OAAaC,EAAIzF,OAAO0F,UAAUC,SAASC,KAAKL,GAAGM,MAAM,GAAI,GAAc,WAANJ,GAAkBF,EAAEO,cAAaL,EAAIF,EAAEO,YAAYC,SAAgB,QAANN,GAAqB,QAANA,EAAa,OAAOnJ,MAAM+I,KAAKE,MAAc,cAANE,GAAqB,2CAA2CO,KAAKP,GAAI,OAAOT,EAAkBO,EAAGC,GAJxTS,CAA4BnB,IAE1H,iBAAsC,IAAIoB,UAAU,wIAF8EC,GAUlI,SAASnB,EAAkBF,EAAKsB,IAAkB,MAAPA,GAAeA,EAAMtB,EAAI1I,UAAQgK,EAAMtB,EAAI1I,YAAa,IAAI4F,EAAI,EAAGqE,EAAO,IAAI/J,MAAM8J,GAAMpE,EAAIoE,EAAKpE,IAAOqE,EAAKrE,GAAK8C,EAAI9C,UAAaqE,EAEhL,SAASzG,EAAQC,EAAQC,OAAsBC,EAAOC,OAAOD,KAAKF,MAAaG,OAAOC,sBAAuB,KAAMC,EAAUF,OAAOC,sBAAsBJ,GAASC,IAAmBI,EAAUA,EAAQC,QAAO,SAAUC,UAAcJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAiBP,EAAKnB,KAAKlC,MAAMqD,EAAMG,UAAmBH,EAE9U,SAASoC,EAAcJ,OAAe,IAAIC,EAAI,EAAGA,EAAI7F,UAAUC,OAAQ4F,IAAK,KAAMR,EAAS,MAAQrF,UAAU6F,GAAK7F,UAAU6F,GAAK,GAAIA,EAAI,EAAIpC,EAAQI,OAAOwB,IAAS,GAAIxC,SAAQ,SAAU1B,GAAOiD,EAAgBwB,EAAQzE,EAAKkE,EAAOlE,OAAY0C,OAAOiC,0BAA4BjC,OAAOkC,iBAAiBH,EAAQ/B,OAAOiC,0BAA0BT,IAAW5B,EAAQI,OAAOwB,IAASxC,SAAQ,SAAU1B,GAAO0C,OAAOU,eAAeqB,EAAQzE,EAAK0C,OAAOK,yBAAyBmB,EAAQlE,cAAoByE,EAEjf,SAASxB,EAAgBC,EAAKlD,EAAKmD,UAAanD,KAAOkD,EAAOR,OAAOU,eAAeF,EAAKlD,EAAK,CAAEmD,MAAOA,EAAOH,YAAY,EAAMK,cAAc,EAAMC,UAAU,IAAkBJ,EAAIlD,GAAOmD,EAAgBD,EChB3M,SAASZ,EAAQC,EAAQC,OAAsBC,EAAOC,OAAOD,KAAKF,MAAaG,OAAOC,sBAAuB,KAAMC,EAAUF,OAAOC,sBAAsBJ,GAASC,IAAmBI,EAAUA,EAAQC,QAAO,SAAUC,UAAcJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAiBP,EAAKnB,KAAKlC,MAAMqD,EAAMG,UAAmBH,EAE9U,SAASoC,EAAcJ,OAAe,IAAIC,EAAI,EAAGA,EAAI7F,UAAUC,OAAQ4F,IAAK,KAAMR,EAAS,MAAQrF,UAAU6F,GAAK7F,UAAU6F,GAAK,GAAIA,EAAI,EAAIpC,EAAQI,OAAOwB,IAAS,GAAIxC,SAAQ,SAAU1B,GAAOiD,EAAgBwB,EAAQzE,EAAKkE,EAAOlE,OAAY0C,OAAOiC,0BAA4BjC,OAAOkC,iBAAiBH,EAAQ/B,OAAOiC,0BAA0BT,IAAW5B,EAAQI,OAAOwB,IAASxC,SAAQ,SAAU1B,GAAO0C,OAAOU,eAAeqB,EAAQzE,EAAK0C,OAAOK,yBAAyBmB,EAAQlE,cAAoByE,EAEjf,SAASxB,EAAgBC,EAAKlD,EAAKmD,UAAanD,KAAOkD,EAAOR,OAAOU,eAAeF,EAAKlD,EAAK,CAAEmD,MAAOA,EAAOH,YAAY,EAAMK,cAAc,EAAMC,UAAU,IAAkBJ,EAAIlD,GAAOmD,EAAgBD,ECF3M,SAASqE,EAAmBC,UAQ5B,SAA4BA,MAAWxI,MAAMyI,QAAQD,GAAM,OAAOE,EAAkBF,GAR1CG,CAAmBH,IAM7D,SAA0BI,MAA8B,oBAAXC,QAAmD,MAAzBD,EAAKC,OAAOC,WAA2C,MAAtBF,EAAK,cAAuB,OAAO5I,MAAM+I,KAAKH,GANjFI,CAAiBR,IAItF,SAAqCS,EAAGC,OAAeD,EAAG,UAAyB,iBAANA,EAAgB,OAAOP,EAAkBO,EAAGC,OAAaC,EAAIzF,OAAO0F,UAAUC,SAASC,KAAKL,GAAGM,MAAM,GAAI,GAAc,WAANJ,GAAkBF,EAAEO,cAAaL,EAAIF,EAAEO,YAAYC,SAAgB,QAANN,GAAqB,QAANA,EAAa,OAAOnJ,MAAM+I,KAAKE,MAAc,cAANE,GAAqB,2CAA2CO,KAAKP,GAAI,OAAOT,EAAkBO,EAAGC,GAJxTS,CAA4BnB,IAE1H,iBAAsC,IAAIoB,UAAU,wIAF8EC,GAUlI,SAASnB,EAAkBF,EAAKsB,IAAkB,MAAPA,GAAeA,EAAMtB,EAAI1I,UAAQgK,EAAMtB,EAAI1I,YAAa,IAAI4F,EAAI,EAAGqE,EAAO,IAAI/J,MAAM8J,GAAMpE,EAAIoE,EAAKpE,IAAOqE,EAAKrE,GAAK8C,EAAI9C,UAAaqE,EAEhL,SAASzG,EAAQC,EAAQC,OAAsBC,EAAOC,OAAOD,KAAKF,MAAaG,OAAOC,sBAAuB,KAAMC,EAAUF,OAAOC,sBAAsBJ,GAASC,IAAmBI,EAAUA,EAAQC,QAAO,SAAUC,UAAcJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAiBP,EAAKnB,KAAKlC,MAAMqD,EAAMG,UAAmBH,EAE9U,SAASoC,EAAcJ,OAAe,IAAIC,EAAI,EAAGA,EAAI7F,UAAUC,OAAQ4F,IAAK,KAAMR,EAAS,MAAQrF,UAAU6F,GAAK7F,UAAU6F,GAAK,GAAIA,EAAI,EAAIpC,EAAQI,OAAOwB,IAAS,GAAIxC,SAAQ,SAAU1B,GAAOiD,EAAgBwB,EAAQzE,EAAKkE,EAAOlE,OAAY0C,OAAOiC,0BAA4BjC,OAAOkC,iBAAiBH,EAAQ/B,OAAOiC,0BAA0BT,IAAW5B,EAAQI,OAAOwB,IAASxC,SAAQ,SAAU1B,GAAO0C,OAAOU,eAAeqB,EAAQzE,EAAK0C,OAAOK,yBAAyBmB,EAAQlE,cAAoByE,EAEjf,SAASxB,EAAgBC,EAAKlD,EAAKmD,UAAanD,KAAOkD,EAAOR,OAAOU,eAAeF,EAAKlD,EAAK,CAAEmD,MAAOA,EAAOH,YAAY,EAAMK,cAAc,EAAMC,UAAU,IAAkBJ,EAAIlD,GAAOmD,EAAgBD,EAK3M,SAAS8F,EAAclD,UACd9B,QAAQ8B,EAAKmD,SAOf,SAASC,EAAWC,EAAoBhF,UAJfiF,EAKHD,EAJpBnF,QAAQoF,MAAAA,OAAiD,EAASA,EAAYH,SAK5EpE,EAAcA,EAAc,GAAIsE,GAAqB,GAAI,CAC9DE,SAAUF,EAAmBG,QAAQrF,KAAI,SAAUe,SAC1C,CACLA,MAAOA,EACPb,SAAUA,EACVoF,kBAAmBJ,EAAmBI,wBAMvC,CACLjJ,MAAO6I,EACPhF,SAAUA,GAnBd,IAAgCiF,EAsBzB,SAASxF,GAAQtD,OA+BlBhB,EA9BSgB,EAAMf,QAAO,SAAUiG,EAAKlH,OAClC0K,EAAc1K,UACjBkH,EAAIlE,KAAKhD,GACFkH,MAGLgE,EAAelL,EAAQkL,aACvBP,EAAU3K,EAAQ2K,QAClBQ,EAAcnL,EAAQmL,YACtBJ,EAAW/K,EAAQ+K,SACnBK,EAAYlE,EAAImE,MAAK,SAAU7D,UAC1BkD,EAAc1K,IAAY0K,EAAclD,IAASA,EAAK0D,eAAiBA,GAAgBxF,QAAQyF,IAAgB3D,EAAK2D,cAAgBA,QAGzIC,EAAW,KACTE,GAEHA,EAAmBF,EAAUpJ,OAAOgB,KAAKlC,MAAMwK,EAAkBrC,EAAmB8B,QAChF,KACDQ,EAAU,CACZZ,QAASA,EACTQ,YAAaA,EACbnJ,MAAO+I,EACPG,aAAcA,GAEhBhE,EAAIlE,KAAKuI,UAGJrE,IACN,IACiBvB,KAAI,SAAU6F,OAC3Bd,EAAcc,UACVnG,QAAQC,QAAQkG,OAGrB/E,EAAO+E,EACPb,EAAUlE,EAAKkE,QACf3I,EAAQyE,EAAKzE,aAEV2I,EAAQ,CACbO,aAFiBzE,EAAKyE,aAGtBH,SAAU/I,cAGPqD,QAAQG,IAAIxE,GAAQwB,MAAK,SAAUiJ,UACjC1K,EAAQ0K,MAGZ,SAASC,GAAYD,EAAWlG,UAC9BA,EAAQI,KAAI,SAAUC,OACvB+F,EAAUF,EAAUlH,QAAO,SAAUqH,UAChCA,EAAS/F,WAAaD,EAAOC,YAElCgG,EAAUF,EAAQhG,KAAI,SAAUkB,UACtBA,EAAM7E,SAGhB8J,EAAYH,EAAQ,GAAGV,kBACvBjJ,EAAQ8J,EAAYA,ENtGrB,SAA8BC,OAC/BF,EAAUE,EAAWpG,KAAI,SAAUqG,OACjCC,SAEG1F,EAAcA,EAAc,GAAIyF,GAAS,GAAI,CAClDE,KAAgC,QAAzBD,EAAQD,EAAOE,YAA4B,IAAVD,OAAmB,EAASA,EAAMtG,KAAI,SAAUwG,UAE/E5F,EAAcA,EAAc,GAAI4F,GAAM,GAAI,CAC/CC,yBAA0BJ,EAAO5E,MACjCiF,uBAAwBL,EAAOM,wBAKhC,CACLT,QAASA,EACTK,KAAML,EAAQlG,KAAI,SAAUqG,UACnBA,EAAOE,QACb3H,OAAOmB,SACV6G,UAAWV,EAAQlG,KAAI,SAAUqG,OAC3BQ,SAEuC,QAAnCA,EAAaR,EAAOO,iBAAsC,IAAfC,OAAwB,EAASA,EAAW7G,KAAI,SAAU8G,SAEpG,CACLC,MAAOD,EAAS5H,MAChB8H,MAAOF,EAASE,MAChBC,iBAAkB,CAChBF,MAAO,CACL7H,MAAO4H,EAASI,qBAKvBtI,OAAOmB,UMoEwBoH,CAAqBjB,IAAYA,SAIzD7J,EAAM+K,MAAMrH,SAAU,wCAAyCtE,OAAOwE,EAAOC,SAAU,iDAAkDzE,OAAO4E,KAAKC,eAAU5F,GAAY,4IAC9K,CACLuF,OAAQA,EACR5D,MAAOA,MCnHb,IAAIgL,GAAY,CAAC,QAAS,YAAa,QAAS,QAAS,UAAW,SAEpE,SAAShJ,GAAQC,EAAQC,OAAsBC,EAAOC,OAAOD,KAAKF,MAAaG,OAAOC,sBAAuB,KAAMC,EAAUF,OAAOC,sBAAsBJ,GAASC,IAAmBI,EAAUA,EAAQC,QAAO,SAAUC,UAAcJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAiBP,EAAKnB,KAAKlC,MAAMqD,EAAMG,UAAmBH,EAE9U,SAASoC,GAAcJ,OAAe,IAAIC,EAAI,EAAGA,EAAI7F,UAAUC,OAAQ4F,IAAK,KAAMR,EAAS,MAAQrF,UAAU6F,GAAK7F,UAAU6F,GAAK,GAAIA,EAAI,EAAIpC,GAAQI,OAAOwB,IAAS,GAAIxC,SAAQ,SAAU1B,GAAOiD,GAAgBwB,EAAQzE,EAAKkE,EAAOlE,OAAY0C,OAAOiC,0BAA4BjC,OAAOkC,iBAAiBH,EAAQ/B,OAAOiC,0BAA0BT,IAAW5B,GAAQI,OAAOwB,IAASxC,SAAQ,SAAU1B,GAAO0C,OAAOU,eAAeqB,EAAQzE,EAAK0C,OAAOK,yBAAyBmB,EAAQlE,cAAoByE,EAEjf,SAASxB,GAAgBC,EAAKlD,EAAKmD,UAAanD,KAAOkD,EAAOR,OAAOU,eAAeF,EAAKlD,EAAK,CAAEmD,MAAOA,EAAOH,YAAY,EAAMK,cAAc,EAAMC,UAAU,IAAkBJ,EAAIlD,GAAOmD,EAAgBD,EAE3M,SAASqI,GAAyBrH,EAAQsH,MAA0B,MAAVtH,EAAgB,MAAO,OAAsElE,EAAK0E,EAAnED,EAEzF,SAAuCP,EAAQsH,MAA0B,MAAVtH,EAAgB,MAAO,OAA+DlE,EAAK0E,EAA5DD,EAAS,GAAQgH,EAAa/I,OAAOD,KAAKyB,OAA0BQ,EAAI,EAAGA,EAAI+G,EAAW3M,OAAQ4F,IAAO1E,EAAMyL,EAAW/G,GAAQ8G,EAASE,QAAQ1L,IAAQ,IAAayE,EAAOzE,GAAOkE,EAAOlE,WAAeyE,EAFxMkH,CAA8BzH,EAAQsH,MAA2B9I,OAAOC,sBAAuB,KAAMiJ,EAAmBlJ,OAAOC,sBAAsBuB,OAAcQ,EAAI,EAAGA,EAAIkH,EAAiB9M,OAAQ4F,IAAO1E,EAAM4L,EAAiBlH,GAAQ8G,EAASE,QAAQ1L,IAAQ,GAAkB0C,OAAO0F,UAAUyD,qBAAqBvD,KAAKpE,EAAQlE,KAAgByE,EAAOzE,GAAOkE,EAAOlE,WAAiByE,EAOne,ICRMqH,GACAC,GACAC,GDMFC,GAAgB,KAChBC,ICTEJ,IAAiB,EACjBC,IAAoB,EACpBC,QAAsBrN,EACnB,SAAkCiC,OAEnCuL,IADJL,UAEOnI,QAAQC,QAAQhD,GAASE,MAAK,SAAUsL,UAczCJ,IAAuBG,EAAmBJ,GACrCC,IAGTD,GAAmBI,EACnBH,GAAsBI,EACfA,QDhBN,SAASC,GAAQtH,OAClBuH,EAAQvH,EAAKuH,MACbC,EAAiBxH,EAAKyH,UACtBA,OAA+B,IAAnBD,EAA4B,GAAKA,EAC7C9F,EAAQ1B,EAAK0B,MACbzB,EAAQD,EAAKC,MACbyH,EAAU1H,EAAK0H,QACfC,EAAQ3H,EAAK2H,MACbC,EAAUpB,GAAyBxG,EAAMuG,IAEzCW,IACFxF,EAAMmG,YAAY1N,aAAa+M,QAG7BY,EAAiBF,EAAQE,eACzBzH,EAAYuH,EAAQvH,UACpB0H,EAAWH,EAAQG,SACnBC,EAAkBJ,EAAQI,gBAC1BC,EAAYL,EAAQK,aACxBF,EAAS9H,GACT+H,EAAgBtG,EAAMrE,sBAEjB4C,IAA+B,IAAtByB,EAAMwG,YAAuB,KACrCC,EAEA/M,EAAcuM,EAAM9F,WAAWzG,YAAY8D,KAAI,SAAU5D,UACpDwE,GAAcA,GAAc,GAAIxE,GAAa,GAAI,CACtDC,MAAO,QAGX0M,EAAU,QACVH,EAAe1M,GACfiF,EAAqD,QAA1C8H,EAAoBV,EAAUW,cAA0C,IAAtBD,EAA+BA,EAAoBzG,EAAM2G,gBAAgB,CACpIlN,MAAOwM,EAAM9F,kBAMXyG,EAAWzL,EAAWsK,GAAyB/L,GAAaW,MAAK,kBAC5D6C,QAAQC,qBAGV8I,EAAMxF,gBAAgBC,IAAIkG,GAGnCL,EAAU,WACVf,GAAgBxF,EAAMmG,YAAYzN,YAAW,WAC3C6N,EAAU,aACTvG,EAAM6G,oBAOLzD,EAAUjI,EAAWsK,GAAyBzF,EAAMjD,WAAWqB,GAAc,CAC/EG,MAAOA,EACPyH,QAASA,EACTvM,MAAOwM,EAAM9F,YACZ+F,IAAU7L,MAAK,SAAU+C,UACnBF,QAAQG,IAAID,EAAQI,KAAI,SAAUC,UAChCP,QAAQC,QAAQM,EAAOqJ,SAAS1I,GAAc,CACnDG,MAAOA,EACPyH,QAASA,EACTvM,MAAOwM,EAAM9F,YACZ+F,KAAW7L,MAAK,SAAUqI,UACpBD,EAAWC,EAAoBjF,EAAOC,iBAE7CrD,KAAK8C,IAAS9C,MAAK,SAAUiJ,UACxBC,GAAYD,EAAWlG,MAC7B/C,MAAK,SAAUX,UFjFf,SAAiB4E,OAClB5E,EAAc4E,EAAK5E,YACnBsG,EAAQ1B,EAAK0B,MACbvG,EAAQ6E,EAAK7E,MAGbsN,EAAoBrN,EAAYZ,QAAO,SAAUiG,EAAKnF,UACjDwE,EAAcA,EAAc,GAAIW,GAAM,GAAIvC,EAAgB,GAAI5C,EAAW6D,OAAOC,SAAUU,EAAcA,EAAc,GAAIxE,EAAW6D,QAAS,GAAI,CACvJqJ,SAAU,kBAEDlO,EAAQgB,EAAWC,cAG7B,WAOIjB,EANcoH,EAAMgH,QAAQ,CACjC5J,QAASnB,OAAOpD,OAAOkO,GACvBA,kBAAmBA,EACnBtN,MAAOA,KAGsB2C,OAAOmB,SAASC,KAAI,SAAUC,SACpD,CACLA,OAAQA,EACR5D,MAAO4D,EAAOqJ,eE2DPE,CAAQ,CACbtN,YAAaA,EACbsG,MAAOA,EACPvG,MAAOwM,EAAM9F,qBAGd9F,MAAK,SAAUX,OACduN,EAMJV,EAAU,QACVH,EAAe1M,OACXwN,EAAclH,EAAM2G,gBAAgB,CACtClN,MAAOwM,EAAM9F,aAEfxB,EAAsD,QAA3CsI,EAAqBlB,EAAUW,cAA2C,IAAvBO,EAAgCA,EAAqBjH,EAAMwG,cAAgBjI,GAAS2I,GAAeA,OAC7JC,EAAkBtI,EAAcoH,EAAM9F,eAEJ,OAAlC8F,EAAM9F,WAAWhB,cAAyBgI,EAAiB,KACzD9H,EAAO8H,EAAgB9H,KACvBM,EAAiBwH,EAAgBxH,eACjCC,EAAUuH,EAAgBvH,QAC1BnC,EAAS0J,EAAgB1J,OAC7BA,EAAOmB,SAASR,GAAc,CAC5ByH,MAAOA,EACPxG,KAAMA,EACNM,eAAgBA,EAChBC,QAASA,EACToG,QAASA,EACTvI,OAAQA,EACRhE,MAAOwM,EAAM9F,YACZ+F,QAEJxL,SAAQ,WACT6L,EAAU,QAENf,IACFxF,EAAMmG,YAAY1N,aAAa+M,cAG5BS,EAAMxF,gBAAgBC,IAAI0C,GEpInC,IAAIyB,GAAY,CAAC,QAAS,QAAS,UAAW,SAE9C,SAAShJ,GAAQC,EAAQC,OAAsBC,EAAOC,OAAOD,KAAKF,MAAaG,OAAOC,sBAAuB,KAAMC,EAAUF,OAAOC,sBAAsBJ,GAASC,IAAmBI,EAAUA,EAAQC,QAAO,SAAUC,UAAcJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAiBP,EAAKnB,KAAKlC,MAAMqD,EAAMG,UAAmBH,EAE9U,SAASoC,GAAcJ,OAAe,IAAIC,EAAI,EAAGA,EAAI7F,UAAUC,OAAQ4F,IAAK,KAAMR,EAAS,MAAQrF,UAAU6F,GAAK7F,UAAU6F,GAAK,GAAIA,EAAI,EAAIpC,GAAQI,OAAOwB,IAAS,GAAIxC,SAAQ,SAAU1B,GAAOiD,GAAgBwB,EAAQzE,EAAKkE,EAAOlE,OAAY0C,OAAOiC,0BAA4BjC,OAAOkC,iBAAiBH,EAAQ/B,OAAOiC,0BAA0BT,IAAW5B,GAAQI,OAAOwB,IAASxC,SAAQ,SAAU1B,GAAO0C,OAAOU,eAAeqB,EAAQzE,EAAK0C,OAAOK,yBAAyBmB,EAAQlE,cAAoByE,EAEjf,SAASxB,GAAgBC,EAAKlD,EAAKmD,UAAanD,KAAOkD,EAAOR,OAAOU,eAAeF,EAAKlD,EAAK,CAAEmD,MAAOA,EAAOH,YAAY,EAAMK,cAAc,EAAMC,UAAU,IAAkBJ,EAAIlD,GAAOmD,EAAgBD,EAE3M,SAASqI,GAAyBrH,EAAQsH,MAA0B,MAAVtH,EAAgB,MAAO,OAAsElE,EAAK0E,EAAnED,EAEzF,SAAuCP,EAAQsH,MAA0B,MAAVtH,EAAgB,MAAO,OAA+DlE,EAAK0E,EAA5DD,EAAS,GAAQgH,EAAa/I,OAAOD,KAAKyB,OAA0BQ,EAAI,EAAGA,EAAI+G,EAAW3M,OAAQ4F,IAAO1E,EAAMyL,EAAW/G,GAAQ8G,EAASE,QAAQ1L,IAAQ,IAAayE,EAAOzE,GAAOkE,EAAOlE,WAAeyE,EAFxMkH,CAA8BzH,EAAQsH,MAA2B9I,OAAOC,sBAAuB,KAAMiJ,EAAmBlJ,OAAOC,sBAAsBuB,OAAcQ,EAAI,EAAGA,EAAIkH,EAAiB9M,OAAQ4F,IAAO1E,EAAM4L,EAAiBlH,GAAQ8G,EAASE,QAAQ1L,IAAQ,GAAkB0C,OAAO0F,UAAUyD,qBAAqBvD,KAAKpE,EAAQlE,KAAgByE,EAAOzE,GAAOkE,EAAOlE,WAAiByE,ECRne,IAAI6G,GAAY,CAAC,QAAS,UAAW,SACjCuC,GAAa,CAAC,eAAgB,cAAe,gBAC7CC,GAAa,CAAC,gBACdC,GAAa,CAAC,eAAgB,aAC9BC,GAAa,CAAC,OAAQ,UAE1B,SAAS1L,GAAQC,EAAQC,OAAsBC,EAAOC,OAAOD,KAAKF,MAAaG,OAAOC,sBAAuB,KAAMC,EAAUF,OAAOC,sBAAsBJ,GAASC,IAAmBI,EAAUA,EAAQC,QAAO,SAAUC,UAAcJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAiBP,EAAKnB,KAAKlC,MAAMqD,EAAMG,UAAmBH,EAE9U,SAASoC,GAAcJ,OAAe,IAAIC,EAAI,EAAGA,EAAI7F,UAAUC,OAAQ4F,IAAK,KAAMR,EAAS,MAAQrF,UAAU6F,GAAK7F,UAAU6F,GAAK,GAAIA,EAAI,EAAIpC,GAAQI,OAAOwB,IAAS,GAAIxC,SAAQ,SAAU1B,GAAOiD,GAAgBwB,EAAQzE,EAAKkE,EAAOlE,OAAY0C,OAAOiC,0BAA4BjC,OAAOkC,iBAAiBH,EAAQ/B,OAAOiC,0BAA0BT,IAAW5B,GAAQI,OAAOwB,IAASxC,SAAQ,SAAU1B,GAAO0C,OAAOU,eAAeqB,EAAQzE,EAAK0C,OAAOK,yBAAyBmB,EAAQlE,cAAoByE,EAEjf,SAASxB,GAAgBC,EAAKlD,EAAKmD,UAAanD,KAAOkD,EAAOR,OAAOU,eAAeF,EAAKlD,EAAK,CAAEmD,MAAOA,EAAOH,YAAY,EAAMK,cAAc,EAAMC,UAAU,IAAkBJ,EAAIlD,GAAOmD,EAAgBD,EAE3M,SAASqI,GAAyBrH,EAAQsH,MAA0B,MAAVtH,EAAgB,MAAO,OAAsElE,EAAK0E,EAAnED,EAEzF,SAAuCP,EAAQsH,MAA0B,MAAVtH,EAAgB,MAAO,OAA+DlE,EAAK0E,EAA5DD,EAAS,GAAQgH,EAAa/I,OAAOD,KAAKyB,OAA0BQ,EAAI,EAAGA,EAAI+G,EAAW3M,OAAQ4F,IAAO1E,EAAMyL,EAAW/G,GAAQ8G,EAASE,QAAQ1L,IAAQ,IAAayE,EAAOzE,GAAOkE,EAAOlE,WAAeyE,EAFxMkH,CAA8BzH,EAAQsH,MAA2B9I,OAAOC,sBAAuB,KAAMiJ,EAAmBlJ,OAAOC,sBAAsBuB,OAAcQ,EAAI,EAAGA,EAAIkH,EAAiB9M,OAAQ4F,IAAO1E,EAAM4L,EAAiBlH,GAAQ8G,EAASE,QAAQ1L,IAAQ,GAAkB0C,OAAO0F,UAAUyD,qBAAqBvD,KAAKpE,EAAQlE,KAAgByE,EAAOzE,GAAOkE,EAAOlE,WAAiByE,EAQ5d,SAASwJ,GAAelJ,OACzB0B,EAAQ1B,EAAK0B,MACbgG,EAAU1H,EAAK0H,QACfC,EAAQ3H,EAAK2H,MACbC,EAAUpB,GAAyBxG,EAAMuG,UA2StC,CACL4C,oBA1SwB,SAA6BC,OACjDC,EAAeD,EAAcC,aAC7BC,EAAcF,EAAcE,YAC5BC,EAAeH,EAAcG,sBAGxBC,EAAwBjC,IAOCI,EAAM9F,WAAWuG,QAAWT,EAAMxF,gBAAgBI,WAEhDgF,EAAM7H,SAAW2J,IAUhB,IAJF,CAACC,EAAaC,GAAcE,MAAK,SAAUC,UC/CjDC,EDgDDD,EChDSE,EDgDIrC,EAAM7H,OC/C1CiK,IAAWC,GAASD,EAAOE,SAASD,GADtC,IAA0BD,EAAQC,ODoDjCjC,EAAM7F,SAAS,OAAQ,MAKlBJ,EAAMoI,OACTnC,EAAMxF,gBAAgBG,oBAKrBxC,GAAc,CAUnBiK,aAAcP,EACdQ,YAAaR,EAKbS,YAAa,SAAqB1C,IACA,IAA5BI,EAAM9F,WAAWuG,QAAoBiB,IAAiB3H,EAAMmG,YAAYqC,SAASC,eAAiB5C,EAAM7H,SAAW2J,GAIvHA,EAAae,SAtDN5D,GAAyB4C,EAAeN,MAuSnDuB,aA5OiB,SAAsBC,UAChCxK,GAAc,CACnByK,KAAM,2BACW5C,EAAM9F,WAAWuG,uBACjB,sBACJT,EAAM9F,WAAWuG,OAAS,GAAGzN,OAAO+G,EAAM8I,GAAI,cAAW5Q,oBACnD,GAAGe,OAAO+G,EAAM8I,GAAI,WACtCF,IAsOHG,aAnOiB,SAAsBrB,UACpBA,EAAcC,aAG1BvJ,GAAc,CACnBiC,OAAQ,GACR2I,YAAY,EACZH,KAAM,SACNI,SAAU,SAAkBpD,OACtBqD,EAEJrD,EAAMsD,iBACNnJ,EAAMiJ,SAAS7K,GAAc,CAC3ByH,MAAOA,EACPG,QAASA,EACTvM,MAAOwM,EAAM9F,YACZ+F,IACHD,EAAM7F,SAAS,SAAU,MACgC,QAAxD8I,EAAwBxB,EAAcC,oBAAoD,IAA1BuB,GAA4CA,EAAsBR,QAErIU,QAAS,SAAiBvD,OACpBwD,EAEJxD,EAAMsD,iBACNnJ,EAAMoJ,QAAQhL,GAAc,CAC1ByH,MAAOA,EACPG,QAASA,EACTvM,MAAOwM,EAAM9F,YACZ+F,IACHD,EAAM7F,SAAS,QAAS,MACkC,QAAzDiJ,EAAyB3B,EAAcC,oBAAqD,IAA3B0B,GAA6CA,EAAuBC,UA5B/HxE,GAAyB4C,EAAeL,MAkOnDkC,cA/GkB,SAAuBX,UAClCxK,GAAc,CACnBoL,QAAS,GAAGvQ,OAAO+G,EAAM8I,GAAI,UAC7BA,GAAI,GAAG7P,OAAO+G,EAAM8I,GAAI,WACvBF,IA4GHa,cAlMkB,SAAuB/B,OACrCgC,WAEKC,EAAQ9D,IAGX7F,EAAMwG,aAAejJ,QAAQ0I,EAAM9F,WAAW5B,SAChDqH,GAAQxH,GAAc,CACpByH,MAAOA,EACP7F,MAAOA,EACPzB,MAAO0H,EAAM9F,WAAWyJ,YAAc3D,EAAM9F,WAAW5B,MACvDyH,QAASA,EACTC,MAAOA,GACNC,IAGLD,EAAM7F,SAAS,QAAS,UAGtB1B,EAAQgJ,GAAiB,GACVhJ,EAAMiJ,iBACrBkC,EAAkBnL,EAAMoL,UACxBA,OAAgC,IAApBD,EAA6B,IAAMA,EAC/CjB,EAAO9D,GAAyBpG,EAAO4I,IAEvCyC,EAAalL,EAAcoH,EAAM9F,YAEjC6J,EXhKD,SAAmBC,UACjB1M,QAAQ0M,GAAaA,EAAUC,MAAMrK,IW+JdsK,EAD+C,QAAzDT,EAAwB1J,EAAMmG,YAAYiE,iBAAiD,IAA1BV,OAAmC,EAASA,EAAsBO,YAAc,IAE/JI,EAAeN,MAAAA,GAAgDA,EAAWnK,UAAYoK,EAAwB,KAAO,gBAClH5L,GAAc,qBACE,+BACI6H,EAAM9F,WAAWuG,QAA4C,OAAlCT,EAAM9F,WAAWhB,aAAwB,GAAGlG,OAAO+G,EAAM8I,GAAI,UAAU7P,OAAOgN,EAAM9F,WAAWhB,mBAAgBjH,kBAClJ+N,EAAM9F,WAAWuG,OAAS,GAAGzN,OAAO+G,EAAM8I,GAAI,cAAW5Q,oBACvD,GAAGe,OAAO+G,EAAM8I,GAAI,UACvCpM,MAAOuJ,EAAM9F,WAAWyJ,YAAc3D,EAAM9F,WAAW5B,MACvDuK,GAAI,GAAG7P,OAAO+G,EAAM8I,GAAI,UACxBwB,aAAc,MACdC,YAAa,MACbC,eAAgB,MAChBH,aAAcA,EACdI,WAAY,QACZC,UAAW1K,EAAM0K,UACjBC,YAAa3K,EAAM2K,YACnBb,UAAWA,EACXtJ,KAAM,SACNoK,SAAU,SAAkB/E,GAC1BD,GAAQxH,GAAc,CACpByH,MAAOA,EACP7F,MAAOA,EACPzB,MAAOsH,EAAMgF,cAAcnO,MAAMoF,MAAM,EAAGgI,GAC1C9D,QAASA,EACTC,MAAOA,GACNC,KAEL4E,UAAW,SAAmBjF,ID9K7B,SAAmBvH,OACpBuH,EAAQvH,EAAKuH,MACb7F,EAAQ1B,EAAK0B,MACbgG,EAAU1H,EAAK0H,QACfC,EAAQ3H,EAAK2H,MACbC,EAAUpB,GAAyBxG,EAAMuG,OAE3B,YAAdgB,EAAMtM,KAAmC,cAAdsM,EAAMtM,IAAqB,KAEpDwR,EAAwB,eACtBC,EAAWhL,EAAMmG,YAAYqC,SAASyC,eAAe,GAAGhS,OAAO+G,EAAM8I,GAAI,UAAU7P,OAAOgN,EAAM9F,WAAWhB,eAE3G6L,IACEA,EAASE,uBACXF,EAASE,wBAAuB,GAEhCF,EAASG,gBAAe,KAM1BC,EAAkB,eAChBjE,EAAkBtI,EAAcoH,EAAM9F,eAEJ,OAAlC8F,EAAM9F,WAAWhB,cAAyBgI,EAAiB,KACzD9H,EAAO8H,EAAgB9H,KACvBM,EAAiBwH,EAAgBxH,eACjCC,EAAUuH,EAAgBvH,QAC1BnC,EAAS0J,EAAgB1J,OAC7BA,EAAOmB,SAASR,GAAc,CAC5ByH,MAAOA,EACPxG,KAAMA,EACNM,eAAgBA,EAChBC,QAASA,EACToG,QAASA,EACTvI,OAAQA,EACRhE,MAAOwM,EAAM9F,YACZ+F,MAMPL,EAAMsD,kBAG0B,IAA5BlD,EAAM9F,WAAWuG,SAAqB1G,EAAMwG,aAAejJ,QAAQ0I,EAAM9F,WAAW5B,QACtFqH,GAAQxH,GAAc,CACpByH,MAAOA,EACP7F,MAAOA,EACPzB,MAAO0H,EAAM9F,WAAW5B,MACxByH,QAASA,EACTC,MAAOA,GACNC,IAAU7L,MAAK,WAChB4L,EAAM7F,SAASyF,EAAMtM,IAAK,CACxB8R,iBAAkBrL,EAAMrE,sBAE1ByP,IAIA1S,WAAWqS,EAAuB,OAGpC9E,EAAM7F,SAASyF,EAAMtM,IAAK,IAC1B6R,IACAL,UAEG,GAAkB,WAAdlF,EAAMtM,IAIfsM,EAAMsD,iBACNlD,EAAM7F,SAASyF,EAAMtM,IAAK,MAK1B0M,EAAMxF,gBAAgBG,iBACjB,GAAkB,QAAdiF,EAAMtM,IACf0M,EAAM7F,SAAS,OAAQ,MAKvB6F,EAAMxF,gBAAgBG,iBACjB,GAAkB,UAAdiF,EAAMtM,IAAiB,IAGM,OAAlC0M,EAAM9F,WAAWhB,cAAyB8G,EAAM9F,WAAWzG,YAAYkL,OAAM,SAAUhL,UACtD,IAA5BA,EAAWC,MAAMxB,sBAMnB2H,EAAMoI,OACTnC,EAAMxF,gBAAgBG,aAQ1BiF,EAAMsD,qBAEFzK,EAAQG,EAAcoH,EAAM9F,YAC5Bd,EAAOX,EAAMW,KACbM,EAAiBjB,EAAMiB,eACvBC,EAAUlB,EAAMkB,QAChBnC,EAASiB,EAAMjB,UAEfoI,EAAMyF,SAAWzF,EAAM0F,aACTrT,IAAZ0H,IACFnC,EAAOgB,SAASL,GAAc,CAC5ByH,MAAOA,EACPxG,KAAMA,EACNM,eAAgBA,EAChBC,QAASA,EACToG,QAASA,EACTvI,OAAQA,EACRhE,MAAOwM,EAAM9F,YACZ+F,IACHlG,EAAMoK,UAAUoB,eAAe,CAC7B5L,QAASA,EACTP,KAAMA,EACN5F,MAAOwM,EAAM9F,mBAGZ,GAAI0F,EAAM4F,cACCvT,IAAZ0H,IACFnC,EAAOgB,SAASL,GAAc,CAC5ByH,MAAOA,EACPxG,KAAMA,EACNM,eAAgBA,EAChBC,QAASA,EACToG,QAASA,EACTvI,OAAQA,EACRhE,MAAOwM,EAAM9F,YACZ+F,IACHlG,EAAMoK,UAAUsB,kBAAkB,CAChC9L,QAASA,EACTP,KAAMA,EACN5F,MAAOwM,EAAM9F,mBAGZ,GAAI0F,EAAM8F,YACV,SACWzT,IAAZ0H,SACFnC,EAAOgB,SAASL,GAAc,CAC5ByH,MAAOA,EACPxG,KAAMA,EACNM,eAAgBA,EAChBC,QAASA,EACToG,QAASA,EACTvI,OAAQA,EACRhE,MAAOwM,EAAM9F,YACZ+F,SACHlG,EAAMoK,UAAUwB,SAAS,CACvBhM,QAASA,EACTP,KAAMA,EACN5F,MAAOwM,EAAM9F,aAKjByF,GAAQxH,GAAc,CACpByH,MAAOA,EACPE,UAAW,CACTW,QAAQ,GAEV1G,MAAOA,EACPzB,MAAOoB,EACPqG,QAASA,EACTC,MAAOA,GACNC,IAAU7L,MAAK,WAChBoD,EAAOgB,SAASL,GAAc,CAC5ByH,MAAOA,EACPxG,KAAMA,EACNM,eAAgBA,EAChBC,QAASA,EACToG,QAASA,EACTvI,OAAQA,EACRhE,MAAOwM,EAAM9F,YACZ+F,SCXH2F,CAAWzN,GAAc,CACvByH,MAAOA,EACP7F,MAAOA,EACPgG,QAASA,EACTC,MAAOA,GACNC,KAELyD,QAASA,EAITmC,OAAQhS,EACRiS,QAAS,SAAiBlG,GAQpB6B,EAAcC,eAAiB3H,EAAMmG,YAAYqC,SAASC,eAAkBxC,EAAM9F,WAAWuG,QAC/FiD,EAAQ9D,KAGX+C,IAoHHoD,cAlGkB,SAAuBpD,UAClCxK,GAAc,CACnBkK,YAAa,SAAqBzC,GAIhCA,EAAMsD,kBAER8C,aAAc,WACZhG,EAAM7F,SAAS,aAAc,QAE9BwI,IAwFHsD,aA3GiB,SAAsBtD,UAChCxK,GAAc,CACnByK,KAAM,4BACa,GAAG5P,OAAO+G,EAAM8I,GAAI,UACvCA,GAAI,GAAG7P,OAAO+G,EAAM8I,GAAI,UACvBF,IAuGHuD,aAtFiB,SAAsBzE,OACnCrI,EAAOqI,EAAcrI,KACrB5B,EAASiK,EAAcjK,OACvBmL,EAAO9D,GAAyB4C,EAAeH,WAE5CnJ,GAAc,CACnB0K,GAAI,GAAG7P,OAAO+G,EAAM8I,GAAI,UAAU7P,OAAOoG,EAAK+M,mBAC9CvD,KAAM,yBACW5C,EAAM9F,WAAWhB,eAAiBE,EAAK+M,kBACxDC,YAAa,SAAqBxG,MAC5BxG,EAAK+M,oBAAsBnG,EAAM9F,WAAWhB,cAIhD8G,EAAM7F,SAAS,YAAaf,EAAK+M,uBAC7BrC,EAAalL,EAAcoH,EAAM9F,eAEC,OAAlC8F,EAAM9F,WAAWhB,cAAyB4K,EAAY,KACpDuC,EAAQvC,EAAW1K,KACnBM,EAAiBoK,EAAWpK,eAC5BC,EAAUmK,EAAWnK,QACrB2M,EAAUxC,EAAWtM,OAEzB8O,EAAQ3N,SAASR,GAAc,CAC7ByH,MAAOA,EACPxG,KAAMiN,EACN3M,eAAgBA,EAChBC,QAASA,EACToG,QAASA,EACTvI,OAAQ8O,EACR9S,MAAOwM,EAAM9F,YACZ+F,OAGPoC,YAAa,SAAqBzC,GAGhCA,EAAMsD,kBAER4C,QAAS,SAAiBlG,OACpBlG,EAAiBlC,EAAOY,kBAAkB,CAC5CgB,KAAMA,EACN5F,MAAOwM,EAAM9F,aAEXP,EAAUnC,EAAOe,WAAW,CAC9Ba,KAAMA,EACN5F,MAAOwM,EAAM9F,cAOKP,EAAU1C,QAAQC,UAAYyI,GAAQxH,GAAc,CACtEyH,MAAOA,EACPE,UAAW,CACTW,QAAQ,GAEV1G,MAAOA,EACPzB,MAAOoB,EACPqG,QAASA,EACTC,MAAOA,GACNC,KACW7L,MAAK,WACjBoD,EAAOgB,SAASL,GAAc,CAC5ByH,MAAOA,EACPxG,KAAMA,EACNM,eAAgBA,EAChBC,QAASA,EACToG,QAASA,EACTvI,OAAQA,EACRhE,MAAOwM,EAAM9F,YACZ+F,SAGN0C,KEhUP,SAAS/M,GAAQC,EAAQC,OAAsBC,EAAOC,OAAOD,KAAKF,MAAaG,OAAOC,sBAAuB,KAAMC,EAAUF,OAAOC,sBAAsBJ,GAASC,IAAmBI,EAAUA,EAAQC,QAAO,SAAUC,UAAcJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAiBP,EAAKnB,KAAKlC,MAAMqD,EAAMG,UAAmBH,EAE9U,SAASoC,GAAcJ,OAAe,IAAIC,EAAI,EAAGA,EAAI7F,UAAUC,OAAQ4F,IAAK,KAAMR,EAAS,MAAQrF,UAAU6F,GAAK7F,UAAU6F,GAAK,GAAIA,EAAI,EAAIpC,GAAQI,OAAOwB,IAAS,GAAIxC,SAAQ,SAAU1B,GAAOiD,GAAgBwB,EAAQzE,EAAKkE,EAAOlE,OAAY0C,OAAOiC,0BAA4BjC,OAAOkC,iBAAiBH,EAAQ/B,OAAOiC,0BAA0BT,IAAW5B,GAAQI,OAAOwB,IAASxC,SAAQ,SAAU1B,GAAO0C,OAAOU,eAAeqB,EAAQzE,EAAK0C,OAAOK,yBAAyBmB,EAAQlE,cAAoByE,EAEjf,SAASxB,GAAgBC,EAAKlD,EAAKmD,UAAanD,KAAOkD,EAAOR,OAAOU,eAAeF,EAAKlD,EAAK,CAAEmD,MAAOA,EAAOH,YAAY,EAAMK,cAAc,EAAMC,UAAU,IAAkBJ,EAAIlD,GAAOmD,EAAgBD,EAGpM,SAAS+P,GAAYlO,OACtBmO,EAAGC,EAAuBC,EAAwBC,EAElDC,EAAUvO,EAAKuO,QACfC,EAAUxO,EAAKwO,QACfC,EAAuL,QAAzKN,IAAoE,QAA7DC,EAAwBI,EAAQE,+BAA+D,IAA1BN,OAAmC,EAASA,EAAsB1S,aAAe,IAAI,UAAsB,IAANyS,OAAe,EAASA,EAAExS,QACzNgT,EAAeF,EAAavQ,GAAgB,GAAIuQ,EAAY9Q,OAAOD,MAAqE,QAA9D2Q,EAAyBG,EAAQE,+BAAgE,IAA3BL,OAAoC,EAASA,EAAuBG,UAAY,KAAO,SACpO,CACLD,QAASA,EAAQrP,KAAI,SAAU0P,SACtB,CACLlL,KAAMkL,EAAOlL,KACb8K,QAAS7Q,OAAOD,KAAKkR,EAAOC,8BAAgC,QAGhEL,QAAS1O,GAAc,qBACAnC,OAAOD,KAAK8Q,IAChCG,GACHG,GAAIpT,EAAWf,QAAuE,QAA9D2T,EAAyBE,EAAQE,+BAAgE,IAA3BJ,OAAoC,EAASA,EAAuB5S,aAAe,KCvB9K,SAASqT,GAAc/O,OACxBgP,EAEA7T,EAAQ6E,EAAK7E,aAEI,IAAjBA,EAAMiN,QAA2C,OAAvBjN,EAAM0F,aAC3B,MAG2C,QAA3CmO,EAAiBzO,EAAcpF,UAAuC,IAAnB6T,OAA4B,EAASA,EAAe3N,iBAAmB,KCVrI,SAAS9D,GAAQC,EAAQC,OAAsBC,EAAOC,OAAOD,KAAKF,MAAaG,OAAOC,sBAAuB,KAAMC,EAAUF,OAAOC,sBAAsBJ,GAASC,IAAmBI,EAAUA,EAAQC,QAAO,SAAUC,UAAcJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAiBP,EAAKnB,KAAKlC,MAAMqD,EAAMG,UAAmBH,EAE9U,SAASoC,GAAcJ,OAAe,IAAIC,EAAI,EAAGA,EAAI7F,UAAUC,OAAQ4F,IAAK,KAAMR,EAAS,MAAQrF,UAAU6F,GAAK7F,UAAU6F,GAAK,GAAIA,EAAI,EAAIpC,GAAQI,OAAOwB,IAAS,GAAIxC,SAAQ,SAAU1B,GAAOiD,GAAgBwB,EAAQzE,EAAKkE,EAAOlE,OAAY0C,OAAOiC,0BAA4BjC,OAAOkC,iBAAiBH,EAAQ/B,OAAOiC,0BAA0BT,IAAW5B,GAAQI,OAAOwB,IAASxC,SAAQ,SAAU1B,GAAO0C,OAAOU,eAAeqB,EAAQzE,EAAK0C,OAAOK,yBAAyBmB,EAAQlE,cAAoByE,EAEjf,SAASxB,GAAgBC,EAAKlD,EAAKmD,UAAanD,KAAOkD,EAAOR,OAAOU,eAAeF,EAAKlD,EAAK,CAAEmD,MAAOA,EAAOH,YAAY,EAAMK,cAAc,EAAMC,UAAU,IAAkBJ,EAAIlD,GAAOmD,EAAgBD,EAKpM,IAAI8Q,GAAe,SAAsB9T,EAAO4G,UAC7CA,EAAOG,UACR,sBAmIA,mBAEMpC,GAAcA,GAAc,GAAI3E,GAAQ,GAAI,CACjD0F,aAAckB,EAAOC,cA/HtB,kBAEMlC,GAAcA,GAAc,GAAI3E,GAAQ,GAAI,CACjD8E,MAAO8B,EAAOC,QACdsJ,WAAY,WAIb,wBAEMxL,GAAcA,GAAc,GAAI3E,GAAQ,GAAI,CACjDC,YAAa2G,EAAOC,cAIrB,mBAEMlC,GAAcA,GAAc,GAAI3E,GAAQ,GAAI,CACjDiN,OAAQrG,EAAOC,cAIhB,mBAEMlC,GAAcA,GAAc,GAAI3E,GAAQ,GAAI,CACjD+T,OAAQnN,EAAOC,cAIhB,oBAEMlC,GAAcA,GAAc,GAAI3E,GAAQ,GAAI,CACjDgU,QAASrP,GAAcA,GAAc,GAAI3E,EAAMgU,SAAUpN,EAAOC,eAIjE,gBAEGyF,EAAY3H,GAAcA,GAAc,GAAI3E,GAAQ,GAAI,CAC1D0F,aAAckB,EAAOC,QAAQoN,eAAe,oBAAsBrN,EAAOC,QAAQ+K,iBAAmB9P,EAAoB,EAAG9B,EAAM0F,aAAc3F,EAAcC,GAAQ4G,EAAOL,MAAMrE,8BAG7KyC,GAAcA,GAAc,GAAI2H,GAAY,GAAI,CACrD6D,WAAYyD,GAAc,CACxB5T,MAAOsM,UAKV,cAEG4H,EAAavP,GAAcA,GAAc,GAAI3E,GAAQ,GAAI,CAC3D0F,aAAc5D,GAAqB,EAAG9B,EAAM0F,aAAc3F,EAAcC,GAAQ4G,EAAOL,MAAMrE,8BAGxFyC,GAAcA,GAAc,GAAIuP,GAAa,GAAI,CACtD/D,WAAYyD,GAAc,CACxB5T,MAAOkU,UAKV,gBAEGlU,EAAMiN,OACDtI,GAAcA,GAAc,GAAI3E,GAAQ,GAAI,CACjD0F,aAAc,KACduH,QAAQ,EACRkD,WAAY,OAITxL,GAAcA,GAAc,GAAI3E,GAAQ,GAAI,CACjD0F,aAAc,KACdZ,MAAO,GACPiP,OAAQ,OACR9T,YAAa,SAId,gBAEM0E,GAAcA,GAAc,GAAI3E,GAAQ,GAAI,CACjD0F,aAAc,KACduH,QAAQ,EACR8G,OAAQ,aAIT,eAEMpP,GAAcA,GAAc,GAAI3E,GAAQ,GAAI,CACjD0F,cAI6B,IAA7BkB,EAAOL,MAAMwG,YAAuBnG,EAAOL,MAAMrE,oBAAsB,KACvE6R,OAAQ,OACRjP,MAAO,SAIR,eAEMH,GAAcA,GAAc,GAAI3E,GAAQ,GAAI,CACjD0F,aAAckB,EAAOL,MAAMrE,oBAC3B+K,QAASrG,EAAOL,MAAMwG,aAAejJ,QAAQ9D,EAAM8E,SAAW8B,EAAOL,MAAM2G,gBAAgB,CACzFlN,MAAOA,UAKV,cAEG4G,EAAOL,MAAMoI,MACR3O,EAGF2E,GAAcA,GAAc,GAAI3E,GAAQ,GAAI,CACjDiN,QAAQ,EACRvH,aAAc,WAWf,oBAEMf,GAAcA,GAAc,GAAI3E,GAAQ,GAAI,CACjD0F,aAAckB,EAAOL,MAAMrE,oCAKd,sBAAsB1C,OAAO4E,KAAKC,UAAUuC,EAAOG,MAAO,sBACpE/G,IC9Jb,SAASoC,GAAQC,EAAQC,OAAsBC,EAAOC,OAAOD,KAAKF,MAAaG,OAAOC,sBAAuB,KAAMC,EAAUF,OAAOC,sBAAsBJ,GAASC,IAAmBI,EAAUA,EAAQC,QAAO,SAAUC,UAAcJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAiBP,EAAKnB,KAAKlC,MAAMqD,EAAMG,UAAmBH,EAE9U,SAASoC,GAAcJ,OAAe,IAAIC,EAAI,EAAGA,EAAI7F,UAAUC,OAAQ4F,IAAK,KAAMR,EAAS,MAAQrF,UAAU6F,GAAK7F,UAAU6F,GAAK,GAAIA,EAAI,EAAIpC,GAAQI,OAAOwB,IAAS,GAAIxC,SAAQ,SAAU1B,GAAOiD,GAAgBwB,EAAQzE,EAAKkE,EAAOlE,OAAY0C,OAAOiC,0BAA4BjC,OAAOkC,iBAAiBH,EAAQ/B,OAAOiC,0BAA0BT,IAAW5B,GAAQI,OAAOwB,IAASxC,SAAQ,SAAU1B,GAAO0C,OAAOU,eAAeqB,EAAQzE,EAAK0C,OAAOK,yBAAyBmB,EAAQlE,cAAoByE,EAEjf,SAASxB,GAAgBC,EAAKlD,EAAKmD,UAAanD,KAAOkD,EAAOR,OAAOU,eAAeF,EAAKlD,EAAK,CAAEmD,MAAOA,EAAOH,YAAY,EAAMK,cAAc,EAAMC,UAAU,IAAkBJ,EAAIlD,GAAOmD,EAAgBD,EAUpM,SAASmR,GAAmBd,OAE7Be,EAAc,GACd7N,EXGC,SAAyBA,EAAO8N,OACjCC,EAGA5H,EAAgC,oBAAX6H,OAAyBA,OAAS,GAGvDnB,EAAU7M,EAAM6M,SAAW,UACxBzO,EAAcA,EAAc,CACjCgK,OAAO,EACP5B,aAAa,EACbmE,YAAa,GACbD,WAAW,EACX/O,oBAAqB,KACrBkL,eAAgB,IAChBV,YAAaA,EACbQ,gBAAiB,SAAyBrI,UAEjC9E,EADK8E,EAAK7E,OACa,GAEhCuN,QAAS,SAAiBtI,UACVA,EAAMtB,UAGrB4C,GAAQ,GAAI,CAGb8I,GAA+B,QAA1BiF,EAAY/N,EAAM8I,UAA8B,IAAdiF,EAAuBA,EAAY5U,IAC1E0T,QAASA,EAETzS,aAAcgE,EAAc,CAC1Be,aAAc,KACdZ,MAAO,GACPqL,WAAY,KACZlQ,YAAa,GACbgN,QAAQ,EACR8G,OAAQ,OACRC,QAAS,IACRzN,EAAM5F,cACT6T,cAAe,SAAuBjR,OAChCkR,EAE6C,QAAhDA,EAAuBlO,EAAMiO,qBAAoD,IAAzBC,GAA2CA,EAAqBrM,KAAK7B,EAAOhD,GACrI6P,EAAQ5R,SAAQ,SAAU0K,OACpBwI,SAE4C,QAAxCA,EAAmBxI,EAAEsI,qBAAgD,IAArBE,OAA8B,EAASA,EAAiBtM,KAAK8D,EAAG3I,OAG5HiM,SAAU,SAAkBjM,OACtBoR,EAEmC,QAAtCA,EAAkBpO,EAAMiJ,gBAA0C,IAApBmF,GAAsCA,EAAgBvM,KAAK7B,EAAOhD,GACjH6P,EAAQ5R,SAAQ,SAAU0K,OACpB0I,SAEkC,QAA9BA,EAAc1I,EAAEsD,gBAAsC,IAAhBoF,OAAyB,EAASA,EAAYxM,KAAK8D,EAAG3I,OAGxGoM,QAAS,SAAiBpM,OACpBsR,EAEiC,QAApCA,EAAiBtO,EAAMoJ,eAAwC,IAAnBkF,GAAqCA,EAAezM,KAAK7B,EAAOhD,GAC7G6P,EAAQ5R,SAAQ,SAAU0K,OACpB4I,SAEgC,QAA5BA,EAAa5I,EAAEyD,eAAoC,IAAfmF,OAAwB,EAASA,EAAW1M,KAAK8D,EAAG3I,OAGpGD,WAAY,SAAoBC,UACvBE,QAAQG,IAAI,GAAGpE,OAAO6H,EAAmB+L,EAAQrP,KAAI,SAAU0P,UAC7DA,EAAOnQ,eACX,CAACiD,EAAMjD,aAAaX,OAAOmB,SAASC,KAAI,SAAUT,UAC9CD,EAAqBC,EAAYC,OACtC3C,MAAK,SAAUmU,UACV5V,EAAQ4V,MACdnU,MAAK,SAAU+C,UACTA,EAAQI,KAAI,SAAUC,UACpBW,EAAcA,EAAc,GAAIX,GAAS,GAAI,CAClDgB,SAAU,SAAkBzB,GAC1BS,EAAOgB,SAASzB,GAChB8Q,EAAkB7S,SAAQ,SAAU0K,OAC9B8I,SAEkC,QAA9BA,EAAc9I,EAAElH,gBAAsC,IAAhBgQ,OAAyB,EAASA,EAAY5M,KAAK8D,EAAG3I,OAGxG4B,SAAU,SAAkB5B,GAC1BS,EAAOmB,SAAS5B,GAChB8Q,EAAkB7S,SAAQ,SAAU0K,OAC9B+I,SAEkC,QAA9BA,EAAc/I,EAAE/G,gBAAsC,IAAhB8P,OAAyB,EAASA,EAAY7M,KAAK8D,EAAG3I,gBAOhHoN,UAAWhM,EAAc,CACvBwN,SAAU,SAAkB+C,OACtB/O,EAAU+O,EAAM/O,QACpBuG,EAAYyI,SAASC,OAAOjP,IAE9B4L,eAAgB,SAAwBsD,OAClClP,EAAUkP,EAAMlP,QAChBmP,EAAkB5I,EAAY6I,KAAKpP,EAAS,SAAU,YAC1DmP,MAAAA,GAAkEA,EAAgBzF,SAEpFoC,kBAAmB,SAA2BuD,OACxCrP,EAAUqP,EAAMrP,QACpBuG,EAAY6I,KAAKpP,EAAS,SAAU,cAErCI,EAAMoK,aWpHC8E,CAAgBpC,EAASe,GACjC5H,EAAQnG,EAAYyN,GAAcvN,YAUV1B,OACtBiC,EAAYjC,EAAKiC,UACjB9G,EAAQ6E,EAAK7E,MACjBuG,EAAMiO,cAAc7P,GAAc,CAChCmC,UAAWA,EACX9G,MAAOA,EACPuM,QAASA,GACRE,OAhBDA,EZZC,SAAgC5H,OACjC2H,EAAQ3H,EAAK2H,YAsCV,CACLK,gBArCoB,SAAyB5J,GAC7CuJ,EAAM7F,SAAS,kBAAmB1D,IAqClC2J,SAlCa,SAAkB3J,GAC/BuJ,EAAM7F,SAAS,WAAY1D,IAkC3B0J,eA/BmB,SAAwB+I,OACvCC,EAAa,EACb1S,EAAQyS,EAAS3R,KAAI,SAAU5D,UAC1BwE,EAAcA,EAAc,GAAIxE,GAAa,GAAI,CAGtDC,MAAOjB,EAAQgB,EAAWC,OAAO2D,KAAI,SAAU6B,UACtCjB,EAAcA,EAAc,GAAIiB,GAAO,GAAI,CAChD+M,kBAAmBgD,cAK3BnJ,EAAM7F,SAAS,iBAAkB1D,IAmBjCiC,UAhBc,SAAmBjC,GACjCuJ,EAAM7F,SAAS,YAAa1D,IAgB5B6J,UAbc,SAAmB7J,GACjCuJ,EAAM7F,SAAS,YAAa1D,IAa5B2S,WAVe,SAAoB3S,GACnCuJ,EAAM7F,SAAS,aAAc1D,KYxBjB4S,CAAuB,CACnCrJ,MAAOA,IAELsJ,EAAc/H,GAAepJ,GAAc,CAC7C4B,MAAOA,EACPgG,QAASA,EACTC,MAAOA,GACNC,aAYMF,WACAJ,GAAQxH,GAAc,CAC3ByH,MAAO,IAAI2J,MAAM,SACjBzJ,UAAW,CACTW,OAAQT,EAAM9F,WAAWuG,QAE3B1G,MAAOA,EACPzB,MAAO0H,EAAM9F,WAAW5B,MACxByH,QAASA,EACTC,MAAOA,GACNC,WAGLlG,EAAM6M,QAAQ5R,SAAQ,SAAUiS,OAC1BuC,SAE8C,QAA1CA,EAAoBvC,EAAOwC,iBAA6C,IAAtBD,OAA+B,EAASA,EAAkB5N,KAAKqL,EAAQ9O,GAAcA,GAAc,GAAI8H,GAAU,GAAI,CAC7KF,QAASA,EACTvH,SAAU,SAAkB1G,GAC1B8V,EAAYhT,KAAK,CACf4D,SAAU1G,KAGd6G,SAAU,SAAkB7G,GAC1B8V,EAAYhT,KAAK,CACf+D,SAAU7G,WHpCb,SAAwB4W,OACzBgB,EAAuBC,EAEvBC,EAAWlB,EAAMkB,SACjB1J,EAAcwI,EAAMxI,eACoD,QAAnDwJ,EAAwBxJ,EAAYiE,iBAAiD,IAA1BuF,GAA2G,QAA9DC,EAAyBD,EAAsB1F,iBAAkD,IAA3B2F,OAAhF,EAA6HA,EAAuBjS,SAAS,mBAE7P,KACjBmS,EAAoB3J,EAAYqC,SAASuH,cAAc,QACvDC,EAAU7J,EAAYqC,SAASyH,cAAc,QACjDH,EAAkB9N,KAAO,mBACzBtJ,YAAW,WACToX,EAAkBI,QAAUrS,KAAKC,UAAU+R,GAC3CG,EAAQG,YAAYL,KACnB,IG2BLM,CAAe,CACbP,SAAUrD,GAAY,CACpBK,QAAS7M,EAAM6M,QACfC,QAASA,IAEX3G,YAAanG,EAAMmG,cAEd/H,GAAcA,GAAc,CACjC4H,QAASA,GACRuJ,GAAcrJ,GC7EnB,IAAIxE,GAAE,SAAS2O,EAAEC,EAAEC,EAAEC,GAAG,IAAIC,EAAEH,EAAE,GAAG,EAAE,IAAI,IAAII,EAAE,EAAEA,EAAEJ,EAAEjY,OAAOqY,IAAI,CAAC,IAAIC,EAAEL,EAAEI,KAAK3X,EAAEuX,EAAEI,IAAIJ,EAAE,IAAIK,EAAE,EAAE,EAAEJ,EAAED,EAAEI,OAAOJ,IAAII,GAAG,IAAIC,EAAEH,EAAE,GAAGzX,EAAE,IAAI4X,EAAEH,EAAE,GAAGvU,OAAO4S,OAAO2B,EAAE,IAAI,GAAGzX,GAAG,IAAI4X,GAAGH,EAAE,GAAGA,EAAE,IAAI,IAAIF,IAAII,IAAI3X,EAAE,IAAI4X,EAAEH,EAAE,GAAGF,IAAII,KAAK3X,EAAE,GAAG4X,GAAGF,EAAEJ,EAAE1X,MAAMI,EAAE2I,GAAE2O,EAAEtX,EAAEwX,EAAE,CAAC,GAAG,QAAQC,EAAE3V,KAAK4V,GAAG1X,EAAE,GAAGuX,EAAE,IAAI,GAAGA,EAAEI,EAAE,GAAG,EAAEJ,EAAEI,GAAGD,IAAID,EAAE3V,KAAK9B,GAAG,OAAOyX,GAAGH,GAAE,IAAIO,IAAmB,YAASN,GAAG,IAAIC,EAAEF,GAAEQ,IAAIC,MAAM,OAAOP,IAAIA,EAAE,IAAIK,IAAIP,GAAEU,IAAID,KAAKP,KAAKA,EAAE7O,GAAEoP,KAAKP,EAAEM,IAAIP,KAAKC,EAAEQ,IAAIT,EAAEC,EAAE,SAAS7O,GAAG,IAAI,IAAI2O,EAAEC,EAAEC,EAAE,EAAEC,EAAE,GAAGC,EAAE,GAAGC,EAAE,CAAC,GAAGC,EAAE,SAASjP,GAAG,IAAI6O,IAAI7O,IAAI8O,EAAEA,EAAEQ,QAAQ,uBAAuB,MAAMN,EAAE7V,KAAK,EAAE6G,EAAE8O,GAAG,IAAID,IAAI7O,GAAG8O,IAAIE,EAAE7V,KAAK,EAAE6G,EAAE8O,GAAGD,EAAE,GAAG,IAAIA,GAAG,QAAQC,GAAG9O,EAAEgP,EAAE7V,KAAK,EAAE6G,EAAE,GAAG,IAAI6O,GAAGC,IAAI9O,EAAEgP,EAAE7V,KAAK,EAAE,GAAE,EAAG2V,GAAGD,GAAG,KAAKC,IAAI9O,GAAG,IAAI6O,KAAKG,EAAE7V,KAAK0V,EAAE,EAAEC,EAAEF,GAAGC,EAAE,GAAG7O,IAAIgP,EAAE7V,KAAK0V,EAAE7O,EAAE,EAAE4O,GAAGC,EAAE,IAAIC,EAAE,IAAIzX,EAAE,EAAEA,EAAE2I,EAAErJ,OAAOU,IAAI,CAACA,IAAI,IAAIwX,GAAGI,IAAIA,EAAE5X,IAAI,IAAI,IAAIkY,EAAE,EAAEA,EAAEvP,EAAE3I,GAAGV,OAAO4Y,IAAIZ,EAAE3O,EAAE3I,GAAGkY,GAAG,IAAIV,EAAE,MAAMF,GAAGM,IAAID,EAAE,CAACA,GAAGH,EAAE,GAAGC,GAAGH,EAAE,IAAIE,EAAE,OAAOC,GAAG,MAAMH,GAAGE,EAAE,EAAEC,EAAE,IAAIA,EAAEH,EAAEG,EAAE,GAAGC,EAAEJ,IAAII,EAAEA,EAAE,GAAGD,GAAGH,EAAE,MAAMA,GAAG,MAAMA,EAAEI,EAAEJ,EAAE,MAAMA,GAAGM,IAAIJ,EAAE,GAAGA,IAAI,MAAMF,GAAGE,EAAE,EAAED,EAAEE,EAAEA,EAAE,IAAI,MAAMH,IAAIE,EAAE,GAAG,MAAM7O,EAAE3I,GAAGkY,EAAE,KAAKN,IAAI,IAAIJ,IAAIG,EAAEA,EAAE,IAAIH,EAAEG,GAAGA,EAAEA,EAAE,IAAI7V,KAAK,EAAE,EAAE0V,GAAGA,EAAE,GAAG,MAAMF,GAAG,OAAOA,GAAG,OAAOA,GAAG,OAAOA,GAAGM,IAAIJ,EAAE,GAAGC,GAAGH,GAAG,IAAIE,GAAG,QAAQC,IAAID,EAAE,EAAEG,EAAEA,EAAE,IAAI,OAAOC,IAAID,EAAntB,CAAstBJ,IAAIC,GAAGnY,UAAU,KAAKC,OAAO,EAAEkY,EAAEA,EAAE,GCI5qC,IAAMW,GAGT,gBAAG/K,IAAAA,YACCgL,EAAUhL,EAAYqC,SAAS4I,gBACnC,6BACA,OAEFD,EAAQE,aAAa,QAAS,gBAC9BF,EAAQE,aAAa,UAAW,aAChCF,EAAQE,aAAa,QAAS,MAC9BF,EAAQE,aAAa,SAAU,MAC/BF,EAAQE,aAAa,OAAQ,oBAEvB/X,EAAO6M,EAAYqC,SAAS4I,gBAChC,6BACA,eAEF9X,EAAK+X,aACH,IACA,uUAGFF,EAAQhB,YAAY7W,GAEb6X,GC1BF,SAASG,GACdnL,EACAzJ,MAEqB,iBAAVA,EAAoB,KACvByU,EAAUhL,EAAYqC,SAASyH,cAA2BvT,+BAI/CmB,KAAKC,UAAUpB,+BAGzByU,SAGFzU,EChBF,SAAS6U,gCACX1Y,2BAAAA,yBAEIA,EAAOC,QAAO,SAACiG,EAAKlH,UACzBoE,OAAOD,KAAKnE,GAASoD,SAAQ,SAAC1B,OACtBiY,EAAWzS,EAAIxF,GACfkY,EAAe5Z,EAAQ0B,GAEzBiY,IAAaC,IACf1S,EAAIxF,GAAO,CAACiY,EAAUC,GAAcrV,OAAOmB,SAASmU,KAAK,SAItD3S,IACN,IChBL,IAAM4S,GAAgB,SAACjV,UACrBA,GACiB,WAAjBkV,EAAOlV,IACmC,oBAA1CT,OAAO0F,UAAUC,SAASC,KAAKnF,IAE1B,SAASmV,gCAAahZ,2BAAAA,yBACpBA,EAAOC,QAAO,SAACiG,EAAKlH,UACzBoE,OAAOD,KAAKnE,GAASoD,SAAQ,SAAC1B,OACtBiY,EAAWzS,EAAIxF,GACfkY,EAAe5Z,EAAQ0B,GAEzBhB,MAAMyI,QAAQwQ,IAAajZ,MAAMyI,QAAQyQ,GAC3C1S,EAAIxF,GAAOiY,EAASvY,aAATuY,IAAmBC,IACrBE,GAAcH,IAAaG,GAAcF,GAClD1S,EAAIxF,GAAOsY,GAAUL,EAAUC,GAE/B1S,EAAIxF,GAAOkY,KAIR1S,IACN,ICrBE,SAAS+S,GACdrV,EACAsV,UAEO9V,OAAO+V,QAAQvV,GAAK3D,QACzB,SAACiG,kBAAMxF,OAAKmD,cACNqV,EAAU,CAAExY,IAAAA,EAAKmD,MAAAA,WACPqC,WAAMxF,EAAMmD,IAGnBqC,IAET,ICLJ,IAAMkT,GAAuB,CAC3B,eACA,aACA,cACA,iBASF,SAASC,GAASC,EAAe5Y,EAAamD,GAE1CyV,EAAM5Y,GADM,OAAVmD,EACW,GACa,iBAAVA,EACHA,EAEAA,EAAQ,KAOzB,SAAS0V,GAAsBvM,QACxBwM,WAAWxM,EAAMrF,MAAMqF,GAMvB,SAASyM,GAAYC,EAAkBvQ,EAActF,OACtD8V,EACAC,EACAC,EAAWH,EAAIvQ,MAEN,UAATA,KACkB,iBAATtF,EACR6V,EAAYJ,MAAQzV,UAEP,OAAVA,EACD6V,EAAYJ,MAAQ,YAEhBnQ,KAAQtF,EACNgW,GAAYhW,EAAMsF,KAAU0Q,EAAS1Q,IACxCkQ,GAASK,EAAIJ,MAAOnQ,EAAMtF,EAAMsF,QAOrB,MAAZA,EAAK,IAA0B,MAAZA,EAAK,IAC/BwQ,EAAaxQ,KAAUA,EAAOA,EAAKgP,QAAQ,WAAY,OACvDyB,EAAYzQ,EAAK2Q,iBACAJ,GAAON,GAAqBtU,SAAS8U,MACpDzQ,EAAOyQ,GACTzQ,EAAOA,EAAKF,MAAM,GAEZyQ,EAAYF,aAAaE,EAAYF,WAAa,IACvDE,EAAYF,WAAWrQ,GAAQtF,EAE5BA,EACGgW,GAAUH,EAAIK,iBAAiB5Q,EAAMoQ,GAAYI,GAEtDD,EAAIM,oBAAoB7Q,EAAMoQ,GAAYI,IAGnC,SAATxQ,GACS,YAATA,GAGS,SAATA,GACS,SAATA,GACS,SAATA,GACS,aAATA,GACS,SAATA,GACAA,KAAQuQ,EAERA,EAAIvQ,GAAiB,MAATtF,EAAgB,GAAKA,EACR,mBAATA,GAAgC,4BAATsF,IAE5B,MAATtF,IACW,IAAVA,IAOE,MAAMuF,KAAKD,GAEduQ,EAAIO,gBAAgB9Q,GAEpBuQ,EAAIlB,aAAarP,EAAMtF,IAK7B,SAASqW,GAAkB/Q,SAElB,aADCA,EAEG,UAEAA,EAIN,SAASgR,GAAcT,EAAkBvS,OACzC,IAAMgC,KAAQhC,EACjBsS,GAAYC,EAAKQ,GAAkB/Q,GAAOhC,EAAMgC,IAI7C,SAASiR,GACdV,EACAvS,OAEK,IAAMgC,KAAQhC,EACC,MAAZgC,EAAK,IAA0B,MAAZA,EAAK,IAC5BsQ,GAAYC,EAAKQ,GAAkB/Q,GAAOhC,EAAMgC,wBCzH/C,SAASkR,GAAoB/M,UAC3B,SACLgN,aACEC,SAAAA,aAAW,KAAOpT,UAEdmR,EAAUhL,EAAYqC,SAASuH,cAAsBoD,UAC3DH,GAAc7B,EAASnR,GACvBmR,EAAQkC,aAARlC,IAAkBiC,IAEXjC,uHCbEmC,GAGT,gBACInC,IADDhL,YACuBqC,SAAS4I,gBACnC,6BACA,cAEFD,EAAQE,aAAa,QAAS,kBAC9BF,EAAQE,aAAa,UAAW,eAChCF,EAAQE,aAAa,QAAS,MAC9BF,EAAQE,aAAa,SAAU,MAE/BF,EAAQoC,mYAmBDpC,GChCIqC,GAGT,gBAAGrN,IAAAA,YACCgL,EAAUhL,EAAYqC,SAAS4I,gBACnC,6BACA,OAEFD,EAAQE,aAAa,QAAS,iBAC9BF,EAAQE,aAAa,UAAW,aAChCF,EAAQE,aAAa,QAAS,MAC9BF,EAAQE,aAAa,SAAU,MAC/BF,EAAQE,aAAa,OAAQ,oBAEvB/X,EAAO6M,EAAYqC,SAAS4I,gBAChC,6BACA,eAEF9X,EAAK+X,aACH,IACA,imBAGFF,EAAQhB,YAAY7W,GAEb6X,GCEF,SAASsC,UACdC,IAAAA,aACAC,IAAAA,qBACAC,IAAAA,WACAzN,IAAAA,YACA0N,IAAAA,eACAlJ,YAAAA,aAAc,WACd4E,IAAAA,YACAuE,IAAAA,eACAra,IAAAA,MACAsa,IAAAA,aAEMC,EAAmBd,GAAoB/M,GAEvC8N,EAAY1E,EAAY5G,gBAC5BlP,MAAAA,EACAuG,MAAO0T,EAAa/K,aAAa,KAC9BgL,IAECO,EAAOF,EAAiB,SAC5BG,MAAOP,EAAWM,MACfD,IAECG,EAAoBJ,EAAiB,MAAO,CAChDG,MAAOP,EAAWQ,kBAClB9L,qBAAYzC,GACVA,EAAMwO,qBAGJC,EAAkBN,EAAiB,MAAO,CAC9CG,MAAOP,EAAWU,gBAClBlB,SAAU,CAACgB,GACX9L,uBACEwL,GAAe,GACfJ,EAAa/U,WAAU,MAIrB4V,EAAahF,EAAYhG,iBAC7B9P,MAAAA,EACAuG,MAAO0T,EAAanK,cAAc,KAC/BoK,IAECa,EAAeR,EAAiB,SAAU,CAC9CG,MAAOP,EAAWY,aAClBhU,KAAM,SACNiU,MAAOV,EAAaW,kBACpBtB,SAAU,CAACI,GAAW,CAAErN,YAAAA,OAEpB5B,EAAQyP,EAAiB,WAC7BG,MAAOP,EAAWrP,MAClB6O,SAAU,CAACoB,IACRD,IAECI,EAAcX,EAAiB,SAAU,CAC7CG,MAAOP,EAAWe,YAClBnU,KAAM,QACNiU,MAAOV,EAAaa,iBACpBxB,SAAU,CAAClC,GAAU,CAAE/K,YAAAA,OAEnB0O,EAAmBb,EAAiB,MAAO,CAC/CG,MAAOP,EAAWiB,iBAClBzB,SAAU,CAACE,GAAY,CAAEnN,YAAAA,OAGrB2O,EC5EgE,gBACtEnB,IAAAA,qBACAxN,IAAAA,cACAyN,eACAnK,IAAAA,cACAsL,IAAAA,kBACAlB,IAAAA,WACApa,IAAAA,MACGuG,UAGGmR,EADmB+B,GAAoB/M,EAC7B6N,CAAiB,QAAShU,GACpCgV,EAAavL,KACjBhQ,MAAAA,EACAuG,MAAO+U,EAAkB,CAAEpN,aAAcwJ,IACzCxJ,aAAcwJ,GACXwC,WAGLX,GAAc7B,SACT6D,OACHlK,mBAAUjF,GAEJgO,GAA4B,QAAdhO,EAAMtM,KAIxByb,EAAWlK,UAAUjF,OAIlBsL,ED6CO8D,CAAM,CAClBd,MAAOP,EAAWkB,MAClB3O,YAAAA,EACA1M,MAAAA,EACAgQ,cAAe8F,EAAY9F,cAC3BsL,kBAAmBrB,EAAajK,cAChCkK,qBAAAA,EACAE,WAAAA,IAGIqB,EAAqBlB,EAAiB,MAAO,CACjDG,MAAOP,EAAWsB,mBAClB9B,SAAU,CAAC7O,EAAOsQ,KAEdM,EAAqBnB,EAAiB,MAAO,CACjDG,MAAOP,EAAWuB,mBAClB/B,SAAU,CAACuB,KAEPS,EAAepB,EAAiB,MAAO,CAC3CG,MAAOP,EAAWwB,aAClBhC,SAAU,CAAC0B,KAGPO,EAAY9F,EAAYxG,gBAC5BtP,MAAAA,EACAuG,MAAO0T,EAAa3K,aAAa,CAAEpB,aAAcmN,KAC9CnB,IAEC2B,EAAOtB,EAAiB,UAC5BG,MAAOP,EAAW0B,KAClBlC,SAAU,CAAC8B,EAAoBE,EAAcD,IAC1CE,IAECE,EAAahG,EAAYvD,iBAC7BvS,MAAAA,EACAuG,MAAO0T,EAAa1H,cAAc,KAC/B2H,IAEC6B,EAAQxB,EAAiB,SAC7BG,MAAOP,EAAW4B,OACfD,OASD1B,EAAY,KACR4B,EAA2BzB,EAAiB,MAAO,CACvDG,MAAOP,EAAW6B,yBAClBrC,SAAU,CAACI,GAAW,CAAErN,YAAAA,OAEpBuP,EAAkC1B,EAAiB,MAAO,CAC9DG,MAAOP,EAAW8B,gCAClBC,YAAahL,IAETiL,EAAuB5B,EAAiB,SAAU,CACtDxT,KAAM,SACN2T,MAAOP,EAAWgC,qBAClB7J,mBACE+H,GAAe,IAEjBV,SAAU,CAACqC,EAA0BC,KAEjCG,EAAuB7B,EAAiB,SAAU,CACtDxT,KAAM,SACN2T,MAAOP,EAAWiC,qBAClBF,YAAa5B,EAAa+B,yBAG1BzN,sBAAaxC,GACXA,EAAMwO,mBAERtI,mBACE2H,EAAa/U,WAAU,GACvBmV,GAAe,MAGbiC,EAAwB/B,EAAiB,MAAO,CACpDG,MAAOP,EAAWmC,sBAClB3C,SAAU,CAACkC,EAAMO,KAGnBzB,EAAkBjE,YAAY4F,GAC9B7B,EAAK/D,YAAYyF,QAEjB1B,EAAK/D,YAAYmF,SAGZ,CACLlB,kBAAAA,EACAE,gBAAAA,EACAc,aAAAA,EACAN,MAAAA,EACAZ,KAAAA,EACAoB,KAAAA,EACA/Q,MAAAA,EACAiQ,aAAAA,EACAG,YAAAA,EACAE,iBAAAA,EACAW,MAAAA,OEtMA9T,GAAEuP,GAAER,GAAIJ,GAAEE,GAAE/O,GAAIgP,GAAE,GAAGwF,GAAE,GAAG1F,GAAE,oEAAoE,SAASvX,GAAE2I,EAAEuP,GAAG,IAAI,IAAIR,KAAKQ,EAAEvP,EAAE+O,GAAGQ,EAAER,GAAG,OAAO/O,EAAE,SAASgP,GAAEhP,GAAG,IAAIuP,EAAEvP,EAAEuU,WAAWhF,GAAGA,EAAEiF,YAAYxU,GAAG,SAASyU,GAAElF,EAAER,EAAExS,GAAG,IAAIoS,EAAEE,EAAE/O,EAAE4U,EAAE,GAAG,IAAI5U,KAAKiP,EAAE,OAAOjP,EAAE6O,EAAEI,EAAEjP,GAAG,OAAOA,EAAE+O,EAAEE,EAAEjP,GAAG4U,EAAE5U,GAAGiP,EAAEjP,GAAG,GAAGpJ,UAAUC,OAAO,IAAI+d,EAAEhD,SAAShb,UAAUC,OAAO,EAAEqJ,GAAEG,KAAKzJ,UAAU,GAAG6F,GAAG,mBAAmBgT,GAAG,MAAMA,EAAEoF,aAAa,IAAI7U,KAAKyP,EAAEoF,kBAAa,IAASD,EAAE5U,KAAK4U,EAAE5U,GAAGyP,EAAEoF,aAAa7U,IAAI,OAAO8U,GAAErF,EAAEmF,EAAE/F,EAAEE,EAAE,MAAM,SAAS+F,GAAE5U,EAAEzD,EAAEoS,EAAEE,EAAE/O,GAAG,IAAI4U,EAAE,CAAC5V,KAAKkB,EAAE1B,MAAM/B,EAAE1E,IAAI8W,EAAEkG,IAAIhG,EAAEiG,IAAI,KAAKC,GAAG,KAAKC,IAAI,EAAEC,IAAI,KAAKC,SAAI,EAAOC,IAAI,KAAKC,IAAI,KAAK/U,iBAAY,EAAOgV,IAAI,MAAMvV,IAAIiP,GAAEjP,GAAG,OAAO,MAAMA,GAAG,MAAMyP,GAAE+F,OAAO/F,GAAE+F,MAAMZ,GAAGA,EAAoC,SAASa,GAAEvV,GAAG,OAAOA,EAAE0R,SAAS,SAAS3G,GAAE/K,EAAEuP,GAAGH,KAAK9Q,MAAM0B,EAAEoP,KAAKrD,QAAQwD,EAAE,SAASiG,GAAExV,EAAEuP,GAAG,GAAG,MAAMA,EAAE,OAAOvP,EAAE+U,GAAGS,GAAExV,EAAE+U,GAAG/U,EAAE+U,GAAGD,IAAIvR,QAAQvD,GAAG,GAAG,KAAK,IAAI,IAAI+O,EAAEQ,EAAEvP,EAAE8U,IAAIne,OAAO4Y,IAAI,GAAG,OAAOR,EAAE/O,EAAE8U,IAAIvF,KAAK,MAAMR,EAAEkG,IAAI,OAAOlG,EAAEkG,IAAI,MAAM,mBAAmBjV,EAAElB,KAAK0W,GAAExV,GAAG,KAAK,SAAS1I,GAAE0I,GAAG,IAAIuP,EAAER,EAAE,GAAG,OAAO/O,EAAEA,EAAE+U,KAAK,MAAM/U,EAAEmV,IAAI,CAAC,IAAInV,EAAEiV,IAAIjV,EAAEmV,IAAIM,KAAK,KAAKlG,EAAE,EAAEA,EAAEvP,EAAE8U,IAAIne,OAAO4Y,IAAI,GAAG,OAAOR,EAAE/O,EAAE8U,IAAIvF,KAAK,MAAMR,EAAEkG,IAAI,CAACjV,EAAEiV,IAAIjV,EAAEmV,IAAIM,KAAK1G,EAAEkG,IAAI,MAAM,OAAO3d,GAAE0I,IAAI,SAAS0V,GAAE1V,KAAKA,EAAEkV,MAAMlV,EAAEkV,KAAI,IAAKvG,GAAExV,KAAK6G,KAAK2V,GAAEC,OAAO9V,KAAIyP,GAAEsG,sBAAsB/V,GAAEyP,GAAEsG,oBAAoBhH,IAAG8G,IAAG,SAASA,KAAI,IAAI,IAAI3V,EAAE2V,GAAEC,IAAIjH,GAAEhY,QAAQqJ,EAAE2O,GAAEmH,MAAK,SAAS9V,EAAEuP,GAAG,OAAOvP,EAAEqV,IAAIL,IAAIzF,EAAE8F,IAAIL,OAAMrG,GAAE,GAAG3O,EAAEqG,MAAK,SAASrG,GAAG,IAAIuP,EAAER,EAAExS,EAAEoS,EAAEE,EAAE/O,EAAEE,EAAEkV,MAAMrG,GAAGF,GAAGY,EAAEvP,GAAGqV,KAAKJ,KAAKnV,EAAEyP,EAAEwG,OAAOhH,EAAE,IAAIxS,EAAElF,GAAE,GAAGsX,IAAI0G,IAAI1G,EAAE0G,IAAI,EAAEW,GAAElW,EAAE6O,EAAEpS,EAAEgT,EAAE0G,SAAI,IAASnW,EAAEoW,gBAAgB,MAAMvH,EAAEyG,IAAI,CAACvG,GAAG,KAAKE,EAAE,MAAMF,EAAE2G,GAAE7G,GAAGE,EAAEF,EAAEyG,KAAKe,GAAEpH,EAAEJ,GAAGA,EAAEsG,KAAKpG,GAAGvX,GAAEqX,QAAO,SAASyH,GAAEpW,EAAEuP,EAAER,EAAExS,EAAEoS,EAAEE,EAAE/O,EAAE4U,EAAE9F,EAAEvX,GAAG,IAAI2X,EAAEyF,EAAExF,EAAElE,EAAEzT,EAAEoe,EAAEC,EAAES,EAAE7Z,GAAGA,EAAEuY,KAAKR,GAAE+B,EAAED,EAAEzf,OAAO,IAAIoY,EAAE+F,IAAI,GAAG9F,EAAE,EAAEA,EAAEO,EAAE5Y,OAAOqY,IAAI,GAAG,OAAOjE,EAAEgE,EAAE+F,IAAI9F,GAAG,OAAOjE,EAAEwE,EAAEP,KAAK,kBAAkBjE,EAAE,KAAK,iBAAiBA,GAAG,iBAAiBA,GAAG,iBAAiBA,EAAE6J,GAAE,KAAK7J,EAAE,KAAK,KAAKA,GAAGlU,MAAMyI,QAAQyL,GAAG6J,GAAEW,GAAE,CAAC7D,SAAS3G,GAAG,KAAK,KAAK,MAAMA,EAAEiK,IAAI,EAAEJ,GAAE7J,EAAEjM,KAAKiM,EAAEzM,MAAMyM,EAAElT,IAAI,KAAKkT,EAAEsK,KAAKtK,GAAG,CAAC,GAAGA,EAAEgK,GAAGhG,EAAEhE,EAAEiK,IAAIjG,EAAEiG,IAAI,EAAE,QAAQ/F,EAAEmH,EAAEpH,KAAKC,GAAGlE,EAAElT,KAAKoX,EAAEpX,KAAKkT,EAAEjM,OAAOmQ,EAAEnQ,KAAKsX,EAAEpH,QAAG,OAAY,IAAIyF,EAAE,EAAEA,EAAE4B,EAAE5B,IAAI,CAAC,IAAIxF,EAAEmH,EAAE3B,KAAK1J,EAAElT,KAAKoX,EAAEpX,KAAKkT,EAAEjM,OAAOmQ,EAAEnQ,KAAK,CAACsX,EAAE3B,QAAG,EAAO,MAAMxF,EAAE,KAAK+G,GAAEhW,EAAE+K,EAAEkE,EAAEA,GAAGH,GAAEH,EAAEE,EAAE/O,EAAE4U,EAAE9F,EAAEvX,GAAGC,EAAEyT,EAAEkK,KAAKR,EAAE1J,EAAE8J,MAAM5F,EAAE4F,KAAKJ,IAAIkB,IAAIA,EAAE,IAAI1G,EAAE4F,KAAKc,EAAExc,KAAK8V,EAAE4F,IAAI,KAAK9J,GAAG4K,EAAExc,KAAKsb,EAAE1J,EAAEoK,KAAK7d,EAAEyT,IAAI,MAAMzT,GAAG,MAAMoe,IAAIA,EAAEpe,GAAG,mBAAmByT,EAAEjM,MAAMiM,EAAE+J,MAAM7F,EAAE6F,IAAI/J,EAAEmK,IAAItG,EAAE3K,GAAE8G,EAAE6D,EAAE5O,GAAG4O,EAAE0H,GAAEtW,EAAE+K,EAAEkE,EAAEmH,EAAE9e,EAAEsX,GAAG,mBAAmBG,EAAEjQ,OAAOiQ,EAAEmG,IAAItG,IAAIA,GAAGK,EAAEgG,KAAKrG,GAAGA,EAAE2F,YAAYvU,IAAI4O,EAAE4G,GAAEvG,IAAI,IAAIF,EAAEkG,IAAIS,EAAE1G,EAAEqH,EAAErH,KAAK,MAAMoH,EAAEpH,KAAK,mBAAmBD,EAAEjQ,MAAM,MAAMsX,EAAEpH,GAAGiG,KAAKmB,EAAEpH,GAAGiG,KAAKlG,EAAEmG,MAAMnG,EAAEmG,IAAIM,GAAEjZ,EAAEyS,EAAE,IAAIuH,GAAEH,EAAEpH,GAAGoH,EAAEpH,KAAK,GAAG2G,EAAE,IAAI3G,EAAE,EAAEA,EAAE2G,EAAEhf,OAAOqY,IAAIwH,GAAEb,EAAE3G,GAAG2G,IAAI3G,GAAG2G,IAAI3G,IAAI,SAAS/K,GAAEjE,EAAEuP,EAAER,GAAG,IAAI,IAAIxS,EAAEoS,EAAE3O,EAAE8U,IAAIjG,EAAE,EAAEF,GAAGE,EAAEF,EAAEhY,OAAOkY,KAAKtS,EAAEoS,EAAEE,MAAMtS,EAAEwY,GAAG/U,EAAEuP,EAAE,mBAAmBhT,EAAEuC,KAAKmF,GAAE1H,EAAEgT,EAAER,GAAGuH,GAAEvH,EAAExS,EAAEA,EAAEoS,EAAEpS,EAAE0Y,IAAI1F,IAAI,OAAOA,EAA0H,SAAS+G,GAAEtW,EAAEuP,EAAER,EAAExS,EAAEoS,EAAEE,GAAG,IAAI/O,EAAE4U,EAAE5F,EAAE,QAAG,IAASS,EAAE2F,IAAIpV,EAAEyP,EAAE2F,IAAI3F,EAAE2F,SAAI,OAAY,GAAG,MAAMnG,GAAGJ,GAAGE,GAAG,MAAMF,EAAE4F,WAAWvU,EAAE,GAAG,MAAM6O,GAAGA,EAAE0F,aAAavU,EAAEA,EAAEyO,YAAYE,GAAG7O,EAAE,SAAS,CAAC,IAAI4U,EAAE7F,EAAEC,EAAE,GAAG4F,EAAEA,EAAE+B,cAAc3H,EAAEvS,EAAE5F,OAAOmY,GAAG,EAAE,GAAG4F,GAAG/F,EAAE,MAAM3O,EAAEA,EAAE0W,aAAa/H,EAAEE,GAAG/O,EAAE+O,EAAE,YAAO,IAAS/O,EAAEA,EAAE6O,EAAE8H,YAAuO,SAASE,GAAE3W,EAAEuP,EAAER,GAAG,MAAMQ,EAAE,GAAGvP,EAAE4Q,YAAYrB,EAAER,GAAG/O,EAAEuP,GAAG,MAAMR,EAAE,GAAG,iBAAiBA,GAAGH,GAAErO,KAAKgP,GAAGR,EAAEA,EAAE,KAAK,SAAS6H,GAAE5W,EAAEuP,EAAER,EAAExS,EAAEoS,GAAG,IAAIE,EAAE7O,EAAE,GAAG,UAAUuP,EAAE,GAAG,iBAAiBR,EAAE/O,EAAEyQ,MAAMoG,QAAQ9H,MAAM,CAAC,GAAG,iBAAiBxS,IAAIyD,EAAEyQ,MAAMoG,QAAQta,EAAE,IAAIA,EAAE,IAAIgT,KAAKhT,EAAEwS,GAAGQ,KAAKR,GAAG4H,GAAE3W,EAAEyQ,MAAMlB,EAAE,IAAI,GAAGR,EAAE,IAAIQ,KAAKR,EAAExS,GAAGwS,EAAEQ,KAAKhT,EAAEgT,IAAIoH,GAAE3W,EAAEyQ,MAAMlB,EAAER,EAAEQ,SAAS,GAAG,MAAMA,EAAE,IAAI,MAAMA,EAAE,GAAGV,EAAEU,KAAKA,EAAEA,EAAED,QAAQ,WAAW,KAAKC,EAAEA,EAAE0B,gBAAgBjR,EAAEuP,EAAE0B,cAAc7Q,MAAM,GAAGmP,EAAEnP,MAAM,GAAGJ,EAAEuP,IAAIvP,EAAEuP,EAAE,IAAIvP,EAAEuP,EAAEA,EAAEV,GAAGE,EAAEA,EAAExS,GAAGyD,EAAEkR,iBAAiB3B,EAAEV,EAAEiI,GAAEC,GAAElI,GAAG7O,EAAEmR,oBAAoB5B,EAAEV,EAAEiI,GAAEC,GAAElI,QAAQ,GAAG,4BAA4BU,EAAE,CAAC,GAAGZ,EAAEY,EAAEA,EAAED,QAAQ,aAAa,KAAKA,QAAQ,SAAS,UAAU,GAAG,SAASC,GAAG,SAASA,GAAG,SAASA,GAAG,aAAaA,GAAG,aAAaA,GAAGA,KAAKvP,EAAE,IAAIA,EAAEuP,GAAG,MAAMR,EAAE,GAAGA,EAAE,MAAM/O,EAAE,MAAMA,IAAI,mBAAmB+O,IAAI,MAAMA,KAAI,IAAKA,GAAG,MAAMQ,EAAE,IAAI,MAAMA,EAAE,IAAIvP,EAAE2P,aAAaJ,EAAER,GAAG/O,EAAEoR,gBAAgB7B,KAAK,SAASwH,GAAE/W,GAAGoP,KAAKG,EAAEvP,EAAElB,MAAK,GAAIyQ,GAAEpL,MAAMoL,GAAEpL,MAAMnE,GAAGA,GAAG,SAAS8W,GAAE9W,GAAGoP,KAAKG,EAAEvP,EAAElB,MAAK,GAAIyQ,GAAEpL,MAAMoL,GAAEpL,MAAMnE,GAAGA,GAAG,SAASgW,GAAEhW,EAAE+O,EAAExS,EAAEoS,EAAEE,EAAE/O,EAAE4U,EAAE5F,EAAEwF,GAAG,IAAI1F,EAAEI,EAAEyF,EAAEG,EAAE3F,EAAEuG,EAAEle,EAAEoe,EAAEC,EAAE1R,EAAEoS,EAAEC,EAAEvH,EAAEjQ,KAAK,QAAG,IAASiQ,EAAE1O,YAAY,OAAO,KAAK,MAAM9D,EAAE6Y,MAAMd,EAAE/X,EAAE6Y,IAAItG,EAAEC,EAAEkG,IAAI1Y,EAAE0Y,IAAIlG,EAAEqG,IAAI,KAAKtV,EAAE,CAACgP,KAAKF,EAAEW,GAAEyF,MAAMpG,EAAEG,GAAG,IAAI/O,EAAE,GAAG,mBAAmBsW,EAAE,CAAC,GAAGZ,EAAE3G,EAAEzQ,MAAMqX,GAAG/G,EAAE0H,EAAEU,cAAcrI,EAAEC,EAAEuG,KAAKlR,EAAE2K,EAAE+G,EAAEA,EAAErX,MAAMtD,MAAM4T,EAAEmG,GAAGpG,EAAEpS,EAAE4Y,IAAI7d,GAAG0X,EAAED,EAAEoG,IAAI5Y,EAAE4Y,KAAKJ,GAAG/F,EAAEiI,KAAK,cAAcX,GAAGA,EAAErW,UAAUiX,OAAOnI,EAAEoG,IAAInG,EAAE,IAAIsH,EAAEZ,EAAEzR,IAAI8K,EAAEoG,IAAInG,EAAE,IAAIjE,GAAE2K,EAAEzR,GAAG+K,EAAE3O,YAAYiW,EAAEtH,EAAEkI,OAAOC,IAAGxB,GAAGA,EAAEyB,IAAIpI,GAAGA,EAAE1Q,MAAMoX,EAAE1G,EAAEjX,QAAQiX,EAAEjX,MAAM,IAAIiX,EAAEjD,QAAQ9H,EAAE+K,EAAEiH,IAAItH,EAAE8F,EAAEzF,EAAEkG,KAAI,EAAGlG,EAAEoG,IAAI,IAAI,MAAMpG,EAAEqI,MAAMrI,EAAEqI,IAAIrI,EAAEjX,OAAO,MAAMue,EAAEgB,2BAA2BtI,EAAEqI,KAAKrI,EAAEjX,QAAQiX,EAAEqI,IAAIhgB,GAAE,GAAG2X,EAAEqI,MAAMhgB,GAAE2X,EAAEqI,IAAIf,EAAEgB,yBAAyB5B,EAAE1G,EAAEqI,OAAOzC,EAAE5F,EAAE1Q,MAAM2Q,EAAED,EAAEjX,MAAM0c,EAAE,MAAM6B,EAAEgB,0BAA0B,MAAMtI,EAAEuI,oBAAoBvI,EAAEuI,qBAAqB,MAAMvI,EAAEwI,mBAAmBxI,EAAEoG,IAAIjc,KAAK6V,EAAEwI,uBAAuB,CAAC,GAAG,MAAMlB,EAAEgB,0BAA0B5B,IAAId,GAAG,MAAM5F,EAAEyI,2BAA2BzI,EAAEyI,0BAA0B/B,EAAEzR,IAAI+K,EAAEiG,KAAK,MAAMjG,EAAE0I,wBAAuB,IAAK1I,EAAE0I,sBAAsBhC,EAAE1G,EAAEqI,IAAIpT,IAAI8K,EAAEsG,MAAM9Y,EAAE8Y,IAAI,CAACrG,EAAE1Q,MAAMoX,EAAE1G,EAAEjX,MAAMiX,EAAEqI,IAAItI,EAAEsG,MAAM9Y,EAAE8Y,MAAMrG,EAAEkG,KAAI,GAAIlG,EAAEqG,IAAItG,EAAEA,EAAEkG,IAAI1Y,EAAE0Y,IAAIlG,EAAE+F,IAAIvY,EAAEuY,IAAI/F,EAAE+F,IAAIvb,SAAQ,SAASyG,GAAGA,IAAIA,EAAE+U,GAAGhG,MAAKC,EAAEoG,IAAIze,QAAQ+d,EAAEvb,KAAK6V,GAAG,MAAMhP,EAAE,MAAMgP,EAAE2I,qBAAqB3I,EAAE2I,oBAAoBjC,EAAE1G,EAAEqI,IAAIpT,GAAG,MAAM+K,EAAE4I,oBAAoB5I,EAAEoG,IAAIjc,MAAK,WAAW6V,EAAE4I,mBAAmBhD,EAAE3F,EAAEuG,MAAKxG,EAAEjD,QAAQ9H,EAAE+K,EAAE1Q,MAAMoX,EAAE1G,EAAEjX,MAAMiX,EAAEqI,KAAKzI,EAAEW,GAAEqG,MAAMhH,EAAEG,GAAGC,EAAEkG,KAAI,EAAGlG,EAAEqG,IAAItG,EAAEC,EAAE+G,IAAI/V,EAAE4O,EAAEI,EAAEkI,OAAOlI,EAAE1Q,MAAM0Q,EAAEjX,MAAMiX,EAAEjD,SAASiD,EAAEjX,MAAMiX,EAAEqI,IAAI,MAAMrI,EAAE6I,kBAAkBlJ,EAAEtX,GAAEA,GAAE,GAAGsX,GAAGK,EAAE6I,oBAAoBpD,GAAG,MAAMzF,EAAE8I,0BAA0BtC,EAAExG,EAAE8I,wBAAwBlD,EAAE3F,IAAIoH,EAAE,MAAMzH,GAAGA,EAAE9P,OAAOyW,IAAG,MAAM3G,EAAE/W,IAAI+W,EAAEtQ,MAAMoT,SAAS9C,EAAEwH,GAAEpW,EAAEnJ,MAAMyI,QAAQ+W,GAAGA,EAAE,CAACA,GAAGtH,EAAExS,EAAEoS,EAAEE,EAAE/O,EAAE4U,EAAE5F,EAAEwF,GAAGtF,EAAEyG,KAAK1G,EAAEkG,IAAIlG,EAAEqG,IAAI,KAAKpG,EAAEoG,IAAIze,QAAQ+d,EAAEvb,KAAK6V,GAAG1X,IAAI0X,EAAEiI,IAAIjI,EAAE+F,GAAG,MAAM/F,EAAEiG,KAAI,OAAQ,MAAMnV,GAAGiP,EAAEsG,MAAM9Y,EAAE8Y,KAAKtG,EAAE+F,IAAIvY,EAAEuY,IAAI/F,EAAEkG,IAAI1Y,EAAE0Y,KAAKlG,EAAEkG,IAAI8C,GAAExb,EAAE0Y,IAAIlG,EAAExS,EAAEoS,EAAEE,EAAE/O,EAAE4U,EAAEJ,IAAI1F,EAAEW,GAAEyI,SAASpJ,EAAEG,GAAG,MAAM/O,GAAG+O,EAAEsG,IAAI,MAAMf,GAAG,MAAMxU,KAAKiP,EAAEkG,IAAInG,EAAEC,EAAEqG,MAAMd,EAAExU,EAAEA,EAAEyD,QAAQuL,IAAI,MAAMS,GAAE0F,IAAIjV,EAAE+O,EAAExS,IAAI,SAAS4Z,GAAEnW,EAAE+O,GAAGQ,GAAE4F,KAAK5F,GAAE4F,IAAIpG,EAAE/O,GAAGA,EAAEqG,MAAK,SAAS0I,GAAG,IAAI/O,EAAE+O,EAAEqG,IAAIrG,EAAEqG,IAAI,GAAGpV,EAAEqG,MAAK,SAASrG,GAAGA,EAAEG,KAAK4O,MAAK,MAAM/O,GAAGuP,GAAE0F,IAAIjV,EAAE+O,EAAEsG,SAAQ,SAAS0C,GAAExI,EAAER,EAAExS,EAAEoS,EAAEE,EAAE/O,EAAE4U,EAAEJ,GAAG,IAAI1F,EAAEvX,EAAEod,EAAEG,EAAErY,EAAE+B,MAAM2Q,EAAEF,EAAEzQ,MAAMiX,EAAExG,EAAEjQ,KAAKiM,EAAE,EAAE,GAAG,QAAQwK,IAAI1G,GAAE,GAAI,MAAM/O,EAAE,KAAKiL,EAAEjL,EAAEnJ,OAAOoU,IAAI,IAAI6D,EAAE9O,EAAEiL,KAAK,iBAAiB6D,KAAK2G,IAAIA,EAAE3G,EAAEqJ,YAAY1C,EAAE,IAAI3G,EAAEsJ,UAAU,CAAC3I,EAAEX,EAAE9O,EAAEiL,GAAG,KAAK,MAAM,GAAG,MAAMwE,EAAE,CAAC,GAAG,OAAOgG,EAAE,OAAOzO,SAASqR,eAAelJ,GAAGM,EAAEV,EAAE/H,SAAS4I,gBAAgB,6BAA6B6F,GAAGzO,SAASuH,cAAckH,EAAEtG,EAAEmJ,IAAInJ,GAAGnP,EAAE,KAAKwU,GAAE,EAAG,GAAG,OAAOiB,EAAEX,IAAI3F,GAAGqF,GAAG/E,EAAE8I,OAAOpJ,IAAIM,EAAE8I,KAAKpJ,OAAO,CAAC,GAAGnP,EAAEA,GAAGE,GAAEG,KAAKoP,EAAE+I,YAAYjhB,GAAGud,EAAErY,EAAE+B,OAAOwQ,IAAGyJ,wBAAwB9D,EAAExF,EAAEsJ,yBAAyBjE,EAAE,CAAC,GAAG,MAAMxU,EAAE,IAAI8U,EAAE,GAAG7J,EAAE,EAAEA,EAAEwE,EAAEiJ,WAAW7hB,OAAOoU,IAAI6J,EAAErF,EAAEiJ,WAAWzN,GAAGzK,MAAMiP,EAAEiJ,WAAWzN,GAAG/P,OAAOyZ,GAAGpd,KAAKod,IAAIpd,GAAGod,EAAEgE,QAAQphB,EAAEohB,QAAQhE,EAAEgE,SAASlJ,EAAEsC,aAAatC,EAAEsC,UAAU4C,GAAGA,EAAEgE,QAAQ,KAAK,GAA15H,SAAWzY,EAAEuP,EAAER,EAAExS,EAAEoS,GAAG,IAAIE,EAAE,IAAIA,KAAKE,EAAE,aAAaF,GAAG,QAAQA,GAAGA,KAAKU,GAAGqH,GAAE5W,EAAE6O,EAAE,KAAKE,EAAEF,GAAGtS,GAAG,IAAIsS,KAAKU,EAAEZ,GAAG,mBAAmBY,EAAEV,IAAI,aAAaA,GAAG,QAAQA,GAAG,UAAUA,GAAG,YAAYA,GAAGE,EAAEF,KAAKU,EAAEV,IAAI+H,GAAE5W,EAAE6O,EAAEU,EAAEV,GAAGE,EAAEF,GAAGtS,GAAqsHmc,CAAEnJ,EAAEN,EAAE2F,EAAE/F,EAAEyF,GAAGG,EAAE1F,EAAE+F,IAAI,QAAQ,GAAG/J,EAAEgE,EAAEzQ,MAAMoT,SAAS0E,GAAE7G,EAAE1Y,MAAMyI,QAAQyL,GAAGA,EAAE,CAACA,GAAGgE,EAAExS,EAAEoS,EAAEE,GAAG,kBAAkB0G,EAAEzV,EAAE4U,EAAE5U,EAAEA,EAAE,GAAGvD,EAAEuY,KAAKU,GAAEjZ,EAAE,GAAG+X,GAAG,MAAMxU,EAAE,IAAIiL,EAAEjL,EAAEnJ,OAAOoU,KAAK,MAAMjL,EAAEiL,IAAIiE,GAAElP,EAAEiL,IAAIuJ,IAAI,UAAUrF,QAAG,KAAUlE,EAAEkE,EAAEjU,SAAS+P,IAAI6J,EAAE5Z,OAAO+P,IAAIwE,EAAEvU,OAAO,aAAaua,IAAIxK,IAAI6L,GAAErH,EAAE,QAAQxE,EAAE6J,EAAE5Z,OAAM,GAAI,YAAYiU,QAAG,KAAUlE,EAAEkE,EAAE0J,UAAU5N,IAAIwE,EAAEoJ,SAAS/B,GAAErH,EAAE,UAAUxE,EAAE6J,EAAE+D,SAAQ,IAAK,OAAOpJ,EAAE,SAASiH,GAAExW,EAAE+O,EAAExS,GAAG,IAAI,mBAAmByD,EAAEA,EAAE+O,GAAG/O,EAAE7J,QAAQ4Y,EAAE,MAAM/O,GAAGuP,GAAE0F,IAAIjV,EAAEzD,IAAI,SAASga,GAAEvW,EAAE+O,EAAExS,GAAG,IAAIoS,EAAEE,EAAE,GAAGU,GAAEqJ,SAASrJ,GAAEqJ,QAAQ5Y,IAAI2O,EAAE3O,EAAE6U,OAAOlG,EAAExY,SAASwY,EAAExY,UAAU6J,EAAEiV,KAAKuB,GAAE7H,EAAE,KAAKI,IAAI,OAAOJ,EAAE3O,EAAEmV,KAAK,CAAC,GAAGxG,EAAEkK,qBAAqB,IAAIlK,EAAEkK,uBAAuB,MAAM7Y,GAAGuP,GAAE0F,IAAIjV,EAAE+O,GAAGJ,EAAE8G,KAAK9G,EAAEoH,IAAI,KAAK,GAAGpH,EAAE3O,EAAE8U,IAAI,IAAIjG,EAAE,EAAEA,EAAEF,EAAEhY,OAAOkY,IAAIF,EAAEE,IAAI0H,GAAE5H,EAAEE,GAAGE,EAAE,mBAAmB/O,EAAElB,MAAMvC,GAAG,MAAMyD,EAAEiV,KAAKjG,GAAEhP,EAAEiV,KAAKjV,EAAEiV,IAAIjV,EAAEkV,SAAI,EAAO,SAASiC,GAAEnX,EAAEuP,EAAER,GAAG,OAAOK,KAAK/O,YAAYL,EAAE+O,GAA29B/O,GAAEsU,GAAElU,MAAMmP,GAAE,CAAC0F,IAAI,SAASjV,EAAEuP,GAAG,IAAI,IAAIR,EAAExS,EAAEoS,EAAEY,EAAEA,EAAEwF,IAAI,IAAIhG,EAAEQ,EAAE4F,OAAOpG,EAAEgG,GAAG,IAAI,IAAIxY,EAAEwS,EAAE1O,cAAc,MAAM9D,EAAEuc,2BAA2B/J,EAAEgK,SAASxc,EAAEuc,yBAAyB9Y,IAAI2O,EAAEI,EAAEmG,KAAK,MAAMnG,EAAEiK,oBAAoBjK,EAAEiK,kBAAkBhZ,GAAG2O,EAAEI,EAAEmG,KAAKvG,EAAE,OAAOI,EAAEkI,IAAIlI,EAAE,MAAMQ,GAAGvP,EAAEuP,EAAE,MAAMvP,IAAI+O,GAAE,EAAwDhE,GAAE9K,UAAU8Y,SAAS,SAAS/Y,EAAEuP,GAAG,IAAIR,EAAEA,EAAE,MAAMK,KAAKiI,KAAKjI,KAAKiI,MAAMjI,KAAKrX,MAAMqX,KAAKiI,IAAIjI,KAAKiI,IAAIhgB,GAAE,GAAG+X,KAAKrX,OAAO,mBAAmBiI,IAAIA,EAAEA,EAAE3I,GAAE,GAAG0X,GAAGK,KAAK9Q,QAAQ0B,GAAG3I,GAAE0X,EAAE/O,GAAG,MAAMA,GAAGoP,KAAKiG,MAAM9F,GAAGH,KAAKgG,IAAIjc,KAAKoW,GAAGmG,GAAEtG,QAAQrE,GAAE9K,UAAUgZ,YAAY,SAASjZ,GAAGoP,KAAKiG,MAAMjG,KAAK6F,KAAI,EAAGjV,GAAGoP,KAAKgG,IAAIjc,KAAK6G,GAAG0V,GAAEtG,QAAQrE,GAAE9K,UAAUiX,OAAO3B,GAAE5G,GAAE,GAAGE,GAAE,mBAAmBrT,QAAQA,QAAQyE,UAAUtH,KAAKugB,KAAK1d,QAAQC,WAAWzE,WAAW2e,GAAEC,IAAI,ECA/hT,IAAIuD,GAAoB,mBACpBC,GAAqB,oBC2BzB,SAASC,GAAezc,OAEzB0c,EADmB1c,EAAK2c,iBACOC,MAAML,IACrCM,EAAaH,EAAYI,QACzBC,EA1BN,eAEM3e,EADetE,UAAUC,OAAS,QAAsBH,IAAjBE,UAAU,GAAmBA,UAAU,GAAK,SAEhF,CACLyY,IAAK,kBACInU,GAETgE,IAAK,SAAa4a,OACZC,EAAW7e,EAAMA,EAAMrE,OAAS,IAE/BkjB,MAAAA,OAA2C,EAASA,EAASC,iBAAmBF,EAAKE,cACxF9e,EAAMA,EAAMrE,OAAS,GAAK,CACxBqE,MAAO6e,EAAS7e,MAAQ4e,EAAK5e,MAC7B8e,cAAeD,EAASC,eAG1B9e,EAAM7B,KAAKygB,KAULG,CAAmBN,EAAa,CAAC,CAC3Cze,MAAOye,EACPK,eAAe,IACZ,WACLR,EAAY/f,SAAQ,SAAUqgB,OACxBI,EAAeJ,EAAKJ,MAAMJ,IAC9BO,EAAM3a,IAAI,CACRhE,MAAOgf,EAAa,GACpBF,eAAe,IAGO,KAApBE,EAAa,IACfL,EAAM3a,IAAI,CACRhE,MAAOgf,EAAa,GACpBF,eAAe,OAIdH,EAAMxK,MClDf,SAAS/P,GAAmBC,UAQ5B,SAA4BA,MAAWxI,MAAMyI,QAAQD,GAAM,OAAOE,GAAkBF,GAR1CG,CAAmBH,IAM7D,SAA0BI,MAA8B,oBAAXC,QAAmD,MAAzBD,EAAKC,OAAOC,WAA2C,MAAtBF,EAAK,cAAuB,OAAO5I,MAAM+I,KAAKH,GANjFI,CAAiBR,IAItF,SAAqCS,EAAGC,OAAeD,EAAG,UAAyB,iBAANA,EAAgB,OAAOP,GAAkBO,EAAGC,OAAaC,EAAIzF,OAAO0F,UAAUC,SAASC,KAAKL,GAAGM,MAAM,GAAI,GAAc,WAANJ,GAAkBF,EAAEO,cAAaL,EAAIF,EAAEO,YAAYC,SAAgB,QAANN,GAAqB,QAANA,EAAa,OAAOnJ,MAAM+I,KAAKE,MAAc,cAANE,GAAqB,2CAA2CO,KAAKP,GAAI,OAAOT,GAAkBO,EAAGC,GAJxTS,CAA4BnB,IAE1H,iBAAsC,IAAIoB,UAAU,wIAF8EC,GAUlI,SAASnB,GAAkBF,EAAKsB,IAAkB,MAAPA,GAAeA,EAAMtB,EAAI1I,UAAQgK,EAAMtB,EAAI1I,YAAa,IAAI4F,EAAI,EAAGqE,EAAO,IAAI/J,MAAM8J,GAAMpE,EAAIoE,EAAKpE,IAAOqE,EAAKrE,GAAK8C,EAAI9C,UAAaqE,EAIzK,SAASqZ,GAAyBrd,OACnC0F,EAAM1F,EAAK0F,IACX4X,EAAYtd,EAAKsd,UACjBtiB,EAAOf,MAAMyI,QAAQ4a,GAAaA,EAAY,CAACA,GAC/CX,EAAmB7hB,EAAwB4K,EAAK,CAAC,oBAAoB/K,OAAO6H,GAAmBxH,GAAO,CAAC,iBAE3E,iBAArB2hB,IAETA,EAAmB7hB,EAAwB4K,EAAK1K,IAAS,IAGpDyhB,GAAe,CACpBE,iBAAkBA,IC1BtB,IAAIY,GAAc,SACP,WACD,WACA,aACE,YACD,KAEPC,GAAkB,IAAIC,OAAO,OAC7BC,GAAmB,0BACnBC,GAAsBF,OAAOC,GAAiBve,QAQ3C,SAASye,GAAkBb,EAAOpd,OACnCke,EAAQC,EAPI1f,EASZ7E,EAAUwjB,EAAMpd,GAChBoe,GAAiD,QAA3BF,EAASd,EAAMpd,EAAI,UAA2B,IAAXke,OAAoB,EAASA,EAAOX,iBAAkB,EAC/Gc,GAAsD,QAA5BF,EAAUf,EAAMpd,EAAI,UAA4B,IAAZme,OAAqB,EAASA,EAAQZ,iBAAkB,SAErHM,GAAgB7Z,MAbLvF,EAamB7E,EAAQ6E,QAZ3Buf,GAAoBha,KAAKvF,GAASA,EAAMsU,QAAQgL,IAAkB,SAAUO,UACnFV,GAAYU,MAChB7f,IAUiD4f,IAA0BD,EAIzExkB,EAAQ2jB,cAHNc,ECzBX,SAASzgB,GAAQC,EAAQC,OAAsBC,EAAOC,OAAOD,KAAKF,MAAaG,OAAOC,sBAAuB,KAAMC,EAAUF,OAAOC,sBAAsBJ,GAASC,IAAmBI,EAAUA,EAAQC,QAAO,SAAUC,UAAcJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAiBP,EAAKnB,KAAKlC,MAAMqD,EAAMG,UAAmBH,EAE9U,SAASoC,GAAcJ,OAAe,IAAIC,EAAI,EAAGA,EAAI7F,UAAUC,OAAQ4F,IAAK,KAAMR,EAAS,MAAQrF,UAAU6F,GAAK7F,UAAU6F,GAAK,GAAIA,EAAI,EAAIpC,GAAQI,OAAOwB,IAAS,GAAIxC,SAAQ,SAAU1B,GAAOiD,GAAgBwB,EAAQzE,EAAKkE,EAAOlE,OAAY0C,OAAOiC,0BAA4BjC,OAAOkC,iBAAiBH,EAAQ/B,OAAOiC,0BAA0BT,IAAW5B,GAAQI,OAAOwB,IAASxC,SAAQ,SAAU1B,GAAO0C,OAAOU,eAAeqB,EAAQzE,EAAK0C,OAAOK,yBAAyBmB,EAAQlE,cAAoByE,EAEjf,SAASxB,GAAgBC,EAAKlD,EAAKmD,UAAanD,KAAOkD,EAAOR,OAAOU,eAAeF,EAAKlD,EAAK,CAAEmD,MAAOA,EAAOH,YAAY,EAAMK,cAAc,EAAMC,UAAU,IAAkBJ,EAAIlD,GAAOmD,EAAgBD,EAGpM,SAAS+f,GAAwBnB,UAEjCA,EAAMtT,MAAK,SAAUuT,UACjBA,EAAKE,iBASPH,EAAM7d,KAAI,SAAU8d,EAAMrd,UACxBG,GAAcA,GAAc,GAAIkd,GAAO,GAAI,CAChDE,eAAgBU,GAAkBb,EAAOpd,QATpCod,EAAM7d,KAAI,SAAU8d,UAClBld,GAAcA,GAAc,GAAIkd,GAAO,GAAI,CAChDE,eAAe,OCdvB,SAAS1a,GAAmBC,UAQ5B,SAA4BA,MAAWxI,MAAMyI,QAAQD,GAAM,OAAOE,GAAkBF,GAR1CG,CAAmBH,IAM7D,SAA0BI,MAA8B,oBAAXC,QAAmD,MAAzBD,EAAKC,OAAOC,WAA2C,MAAtBF,EAAK,cAAuB,OAAO5I,MAAM+I,KAAKH,GANjFI,CAAiBR,IAItF,SAAqCS,EAAGC,OAAeD,EAAG,UAAyB,iBAANA,EAAgB,OAAOP,GAAkBO,EAAGC,OAAaC,EAAIzF,OAAO0F,UAAUC,SAASC,KAAKL,GAAGM,MAAM,GAAI,GAAc,WAANJ,GAAkBF,EAAEO,cAAaL,EAAIF,EAAEO,YAAYC,SAAgB,QAANN,GAAqB,QAANA,EAAa,OAAOnJ,MAAM+I,KAAKE,MAAc,cAANE,GAAqB,2CAA2CO,KAAKP,GAAI,OAAOT,GAAkBO,EAAGC,GAJxTS,CAA4BnB,IAE1H,iBAAsC,IAAIoB,UAAU,wIAF8EC,GAUlI,SAASnB,GAAkBF,EAAKsB,IAAkB,MAAPA,GAAeA,EAAMtB,EAAI1I,UAAQgK,EAAMtB,EAAI1I,YAAa,IAAI4F,EAAI,EAAGqE,EAAO,IAAI/J,MAAM8J,GAAMpE,EAAIoE,EAAKpE,IAAOqE,EAAKrE,GAAK8C,EAAI9C,UAAaqE,EAIzK,SAASma,GAAuBne,OACjC0F,EAAM1F,EAAK0F,IACX4X,EAAYtd,EAAKsd,UACjBtiB,EAAOf,MAAMyI,QAAQ4a,GAAaA,EAAY,CAACA,GAC/CX,EAAmB7hB,EAAwB4K,EAAK,CAAC,kBAAkB/K,OAAO6H,GAAmBxH,GAAO,CAAC,iBAEzE,iBAArB2hB,IAETA,EAAmB7hB,EAAwB4K,EAAK1K,IAAS,IAGpDyhB,GAAe,CACpBE,iBAAkBA,IC1BtB,SAASpf,GAAQC,EAAQC,OAAsBC,EAAOC,OAAOD,KAAKF,MAAaG,OAAOC,sBAAuB,KAAMC,EAAUF,OAAOC,sBAAsBJ,GAASC,IAAmBI,EAAUA,EAAQC,QAAO,SAAUC,UAAcJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAiBP,EAAKnB,KAAKlC,MAAMqD,EAAMG,UAAmBH,EAE9U,SAASoC,GAAcJ,OAAe,IAAIC,EAAI,EAAGA,EAAI7F,UAAUC,OAAQ4F,IAAK,KAAMR,EAAS,MAAQrF,UAAU6F,GAAK7F,UAAU6F,GAAK,GAAIA,EAAI,EAAIpC,GAAQI,OAAOwB,IAAS,GAAIxC,SAAQ,SAAU1B,GAAOiD,GAAgBwB,EAAQzE,EAAKkE,EAAOlE,OAAY0C,OAAOiC,0BAA4BjC,OAAOkC,iBAAiBH,EAAQ/B,OAAOiC,0BAA0BT,IAAW5B,GAAQI,OAAOwB,IAASxC,SAAQ,SAAU1B,GAAO0C,OAAOU,eAAeqB,EAAQzE,EAAK0C,OAAOK,yBAAyBmB,EAAQlE,cAAoByE,EAEjf,SAASxB,GAAgBC,EAAKlD,EAAKmD,UAAanD,KAAOkD,EAAOR,OAAOU,eAAeF,EAAKlD,EAAK,CAAEmD,MAAOA,EAAOH,YAAY,EAAMK,cAAc,EAAMC,UAAU,IAAkBJ,EAAIlD,GAAOmD,EAAgBD,ECJ3M,IAAIoI,GAAY,CAAC,UAEjB,SAAShJ,GAAQC,EAAQC,OAAsBC,EAAOC,OAAOD,KAAKF,MAAaG,OAAOC,sBAAuB,KAAMC,EAAUF,OAAOC,sBAAsBJ,GAASC,IAAmBI,EAAUA,EAAQC,QAAO,SAAUC,UAAcJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAiBP,EAAKnB,KAAKlC,MAAMqD,EAAMG,UAAmBH,EAE9U,SAASoC,GAAcJ,OAAe,IAAIC,EAAI,EAAGA,EAAI7F,UAAUC,OAAQ4F,IAAK,KAAMR,EAAS,MAAQrF,UAAU6F,GAAK7F,UAAU6F,GAAK,GAAIA,EAAI,EAAIpC,GAAQI,OAAOwB,IAAS,GAAIxC,SAAQ,SAAU1B,GAAOiD,GAAgBwB,EAAQzE,EAAKkE,EAAOlE,OAAY0C,OAAOiC,0BAA4BjC,OAAOkC,iBAAiBH,EAAQ/B,OAAOiC,0BAA0BT,IAAW5B,GAAQI,OAAOwB,IAASxC,SAAQ,SAAU1B,GAAO0C,OAAOU,eAAeqB,EAAQzE,EAAK0C,OAAOK,yBAAyBmB,EAAQlE,cAAoByE,EAEjf,SAASxB,GAAgBC,EAAKlD,EAAKmD,UAAanD,KAAOkD,EAAOR,OAAOU,eAAeF,EAAKlD,EAAK,CAAEmD,MAAOA,EAAOH,YAAY,EAAMK,cAAc,EAAMC,UAAU,IAAkBJ,EAAIlD,GAAOmD,EAAgBD,EAE3M,SAASqI,GAAyBrH,EAAQsH,MAA0B,MAAVtH,EAAgB,MAAO,OAAsElE,EAAK0E,EAAnED,EAEzF,SAAuCP,EAAQsH,MAA0B,MAAVtH,EAAgB,MAAO,OAA+DlE,EAAK0E,EAA5DD,EAAS,GAAQgH,EAAa/I,OAAOD,KAAKyB,OAA0BQ,EAAI,EAAGA,EAAI+G,EAAW3M,OAAQ4F,IAAO1E,EAAMyL,EAAW/G,GAAQ8G,EAASE,QAAQ1L,IAAQ,IAAayE,EAAOzE,GAAOkE,EAAOlE,WAAeyE,EAFxMkH,CAA8BzH,EAAQsH,MAA2B9I,OAAOC,sBAAuB,KAAMiJ,EAAmBlJ,OAAOC,sBAAsBuB,OAAcQ,EAAI,EAAGA,EAAIkH,EAAiB9M,OAAQ4F,IAAO1E,EAAM4L,EAAiBlH,GAAQ8G,EAASE,QAAQ1L,IAAQ,GAAkB0C,OAAO0F,UAAUyD,qBAAqBvD,KAAKpE,EAAQlE,KAAgByE,EAAOzE,GAAOkE,EAAOlE,WAAiByE,EAIne,SAAS8C,GAAmBC,UAQ5B,SAA4BA,MAAWxI,MAAMyI,QAAQD,GAAM,OAAOE,GAAkBF,GAR1CG,CAAmBH,IAM7D,SAA0BI,MAA8B,oBAAXC,QAAmD,MAAzBD,EAAKC,OAAOC,WAA2C,MAAtBF,EAAK,cAAuB,OAAO5I,MAAM+I,KAAKH,GANjFI,CAAiBR,IAItF,SAAqCS,EAAGC,OAAeD,EAAG,UAAyB,iBAANA,EAAgB,OAAOP,GAAkBO,EAAGC,OAAaC,EAAIzF,OAAO0F,UAAUC,SAASC,KAAKL,GAAGM,MAAM,GAAI,GAAc,WAANJ,GAAkBF,EAAEO,cAAaL,EAAIF,EAAEO,YAAYC,SAAgB,QAANN,GAAqB,QAANA,EAAa,OAAOnJ,MAAM+I,KAAKE,MAAc,cAANE,GAAqB,2CAA2CO,KAAKP,GAAI,OAAOT,GAAkBO,EAAGC,GAJxTS,CAA4BnB,IAE1H,iBAAsC,IAAIoB,UAAU,wIAF8EC,GAUlI,SAASnB,GAAkBF,EAAKsB,IAAkB,MAAPA,GAAeA,EAAMtB,EAAI1I,UAAQgK,EAAMtB,EAAI1I,YAAa,IAAI4F,EAAI,EAAGqE,EAAO,IAAI/J,MAAM8J,GAAMpE,EAAIoE,EAAKpE,IAAOqE,EAAKrE,GAAK8C,EAAI9C,UAAaqE,EClBzK,SAASoa,UACd3M,IAAAA,cACA4M,IAAAA,kBAESC,SACP5Y,IAAAA,IACA4X,IAAAA,cACAzI,QAAAA,aAAU,gBAEHpD,EACL4M,EACA,GACAhB,GAA+B,CAAE3X,IAAAA,EAAK4X,UAAAA,IAAape,KAAI,SAACmI,EAAG1G,UACzD0G,EAAE6V,cACEzL,EAAcoD,EAAS,CAAE5Z,IAAK0F,GAAS0G,EAAEjJ,OACzCiJ,EAAEjJ,iBAKZkgB,EAAUC,6BAA+B,YAElCD,ECtBF,SAASE,UACd/M,IAAAA,cACA4M,IAAAA,kBAESI,SCNqC/c,EDO5CgE,IAAAA,IACA4X,IAAAA,cACAzI,QAAAA,aAAU,gBAEHpD,EACL4M,EACA,ICb0C3c,EDcJ,CACpCgE,IAAAA,EACA4X,UAAAA,GCfCY,GAAwBb,GAAyB3b,KDgBjDxC,KAAI,SAACmI,EAAG1G,UACT0G,EAAE6V,cACEzL,EAAcoD,EAAS,CAAE5Z,IAAK0F,GAAS0G,EAAEjJ,OACzCiJ,EAAEjJ,iBAKZqgB,EAAiBF,6BAA+B,mBAEzCE,EEzBF,SAASC,UACdjN,IAAAA,cACA4M,IAAAA,kBAESM,SCNmCjd,EDO1CgE,IAAAA,IACA4X,IAAAA,cACAzI,QAAAA,aAAU,gBAEHpD,EACL4M,EACA,ICbwC3c,EDcJ,CAClCgE,IAAAA,EACA4X,UAAAA,GCfCY,GAAwBC,GAAuBzc,KDgB/CxC,KAAI,SAACmI,EAAG1G,UACT0G,EAAE6V,cACEzL,EAAcoD,EAAS,CAAE5Z,IAAK0F,GAAS0G,EAAEjJ,OACzCiJ,EAAEjJ,iBAKZugB,EAAeJ,6BAA+B,iBAEvCI,EEzBF,SAASC,UACdnN,IAAAA,cACA4M,IAAAA,kBAESQ,SACPnZ,IAAAA,IACA4X,IAAAA,cACAzI,QAAAA,aAAU,gBAEHpD,EACL4M,EACA,GACAF,GAA6B,CAAEzY,IAAAA,EAAK4X,UAAAA,IAAape,KAAI,SAACmI,EAAG1G,UACvD0G,EAAE6V,cACEzL,EAAcoD,EAAS,CAAE5Z,IAAK0F,GAAS0G,EAAEjJ,OACzCiJ,EAAEjJ,iBAKZygB,EAAQN,6BAA+B,UAEhCM,+RCEHC,GAA4C,CAChDzI,YAAa,iBACbkB,qBAAsB,0BACtBzB,kBAAmB,uBACnB2B,sBAAuB,2BACvBzB,gBAAiB,qBACjBsB,qBAAsB,0BACtBH,yBAA0B,8BAC1BC,gCAAiC,qCACjCJ,KAAM,UACNR,MAAO,WACPM,aAAc,kBACdF,mBAAoB,wBACpBC,mBAAoB,wBACpB9V,KAAM,UACNkF,MAAO,WACPrE,KAAM,UACN2U,iBAAkB,sBAClBW,MAAO,WACP6H,YAAa,sCACbnJ,KAAM,kBACNzW,OAAQ,YACR6f,aAAc,kBACdC,aAAc,kBACdC,gBAAiB,qBACjBhJ,aAAc,mBAGViJ,GAAyC,WAAuBvJ,OAApBd,IAAAA,UAChDwF,IAD0DA,QACnDxF,EAAUc,IAGbwJ,GAAkD,CACtD3N,cAAe4N,GACfhB,SAAUiB,GACVhF,Of/Dq0P,SAAWnI,EAAExS,EAAEoS,GAAG,IAAIE,EAAE/O,EAAE4U,EAAEnF,GAAEwF,IAAIxF,GAAEwF,GAAGhG,EAAExS,GAAGuD,GAAG+O,EAAE,mBAAmBF,GAAG,KAAKA,GAAGA,EAAEmG,KAAKvY,EAAEuY,IAAIJ,EAAE,GAAGsB,GAAEzZ,EAAEwS,IAAIF,GAAGF,GAAGpS,GAAGuY,IAAIL,GAAEc,GAAE,KAAK,CAACxG,IAAIjP,GAAGgP,GAAEA,QAAE,IAASvS,EAAE2Z,iBAAiBrH,GAAGF,EAAE,CAACA,GAAG7O,EAAE,KAAKvD,EAAE4f,WAAWnc,GAAEG,KAAK5D,EAAE+b,YAAY,KAAK5D,GAAG7F,GAAGF,EAAEA,EAAE7O,EAAEA,EAAEmV,IAAI1Y,EAAE4f,WAAWtN,GAAGsH,GAAEzB,EAAE3F,KgBUpkQ,SAASqN,UACdC,IAAAA,eACA9a,IAAAA,UACAqS,IAAAA,KACAnP,IAAAA,YAEM6X,EAAgB/a,EAAUgb,wBAQ1BC,GAJH/X,EAAYgY,aACbhY,EAAYqC,SAAS4V,gBAAgBC,WACrClY,EAAYqC,SAAS8V,KAAKD,WAC1B,GACsBL,EAAcE,IAAMF,EAAcO,cAElDR,OACD,cACI,CACLG,IAAAA,EACAM,KAAMR,EAAcQ,UAInB,YACI,CACLN,IAAAA,EACAO,MACEtY,EAAYqC,SAAS4V,gBAAgBM,aACpCV,EAAcQ,KAAOR,EAAcW,YAIrC,mBACI,CACLT,IAAAA,EACAM,KAAM,EACNC,MAAO,EACPE,MAAO,QACPC,SAAU,aAIT,0BACGC,EAAWvJ,EAAK2I,8BAEf,CACLC,IAAAA,EACAM,KAAMK,EAASL,KACfC,MACEtY,EAAYqC,SAAS4V,gBAAgBM,aACpCG,EAASL,KAAOK,EAASF,OAC5BA,MAAO,QACPC,SAAU,uBAKN,IAAIhhB,0DACuCC,KAAKC,UAClDigB,uBCpEH,IAAM/jB,GAAa,CAAC,CAAEC,QAAS,kBAAmBF,QAAAA,sBCKlD,IAAM+kB,GXDN,SAAyBC,EAAS/b,YAC9BR,EAAQwc,UACRD,EAAQ,CACbhc,aAAcic,EAAcjc,aAC5BF,QAASmc,EAAcpc,SAASpF,KAAI,SAAUmI,UACrCA,EAAEpH,WAEVlE,MAAK,SAAUiJ,UACTA,EAAU9F,KAAI,SAAUiG,EAAUxE,OACnCggB,EAAwBD,EAAcpc,SAAS3D,SAG5C,CACLpF,MAAO4J,EACP/F,SAJauhB,EAAsBvhB,SAKnCoF,kBAJsBmc,EAAsBnc,gCAU7C,SAAkCoc,UAChC,SAAmBC,UACjB/gB,GAAcA,GAAc,CACjC4E,YAAaA,EACbR,QAASA,GACR0c,GAAkBC,KWzBWC,EACpC,SAACpiB,UVkBI,SAA6BsB,OAC9ByE,EAAezE,EAAKyE,aACpBF,EAAUvE,EAAKuE,QACfwc,EAAkB/gB,EAAKtE,WACvBA,OAAiC,IAApBqlB,EAA6B,GAAKA,QAEP,mBAAjCtc,EAAauc,iBACF,GAAGrmB,OAAO6H,GAAmBye,GAAiBze,GAAmB9G,IACvEiB,SAAQ,SAAUyD,OAC1BzE,EAAUyE,EAAMzE,QAChBF,EAAU2E,EAAM3E,QACpBgJ,EAAauc,gBAAgBrlB,EAASF,MAInCgJ,EAAayc,OAAO3c,EAAQrF,KAAI,SAAUiiB,OAC3CziB,EAASyiB,EAAiBziB,cAGvBoB,GAAcA,GAAc,GAFrB0G,GAAyB2a,EAAkB5a,KAER,GAAI,CACnD7H,OAAQoB,GAAc,CACpBshB,YAAa,EACbC,gBAAiB9E,GACjB+E,iBAAkB9E,IACjB9d,SAEH3C,MAAK,SAAUoJ,UACVA,EAASC,WU5ChBmc,QACK7iB,OACHhD,WAAAA,QAEJ,eCRW8lB,GAAoBhB,GAAuB,CACtDhc,kBAAmB,SAACW,UAAaA,EAASM,uBCuBrC,SACL+I,OCdMiT,ICPD,eACDC,EAAsB,GACtBC,EAAwB,YAEnBC,EAAUnoB,GACjBioB,EAAQnlB,KAAK9C,OACPooB,EAAgBpoB,IACtBkoB,EAASplB,KAAKslB,SAGT,CACLD,UAAAA,EACAE,8BACQC,EAAkBJ,EACxBA,EAAW,GACXI,EAAgBplB,SAAQ,SAACqlB,GACvBA,QAGJC,0BACQC,EAAiBR,EACvBA,EAAU,GACVQ,EAAevlB,SAAQ,SAACwlB,GACtBP,EAAUO,QFAkCC,GAA1CR,IAAAA,UAAWE,IAAAA,eAAgBG,IAAAA,cChB7BR,EAAkC,GAEjC,CACLY,kBAAiBjkB,OACT7E,EAAU6E,IACVikB,EAA6B,CACjCC,IAAKlkB,EACL4B,KAAM,CAAEzG,QAAAA,GACJ6E,mBACKoU,KAAKxS,KAAKzG,SAEf6E,UAAMA,QACH4B,KAAKzG,QAAU6E,WAIxBqjB,EAAUllB,KAAK8lB,GAERA,GAETE,wBACEd,EAAU9kB,SAAQ,SAACyB,GACjBA,EAAM4B,KAAKzG,QAAU6E,EAAMkkB,YDLzBD,IAAAA,SAAUE,IAAAA,aAEZC,EAAgCnpB,GAAU,GAC1CopB,EAAappB,EAAUmV,GACvBkU,EAAmBrpB,OAEvBO,GACI8H,EAAQ2gB,GAAS,kBL0BlB,SACL7T,SAGE8G,EAmBE9G,EAnBF8G,WACA3Q,EAkBE6J,EAlBF7J,UACAwE,EAiBEqF,EAjBFrF,oBACAsB,EAgBE+D,EAhBF/D,aACAU,EAeEqD,EAfFrD,cACA0C,EAcEW,EAdFX,aACA5C,EAaEuD,EAbFvD,cACA2C,EAYEY,EAZFZ,aACAF,EAWEc,EAXFd,cACArD,EAUEmE,EAVFnE,aACAsY,EASEnU,EATFmU,eACAlD,EAQEjR,EARFiR,eACAnF,EAOE9L,EAPF8L,OACAsI,EAMEpU,EANFoU,gBACAC,EAKErU,EALFqU,SACAC,EAIEtU,EAJFsU,mBACAC,EAGEvU,EAHFuU,WACAtN,EAEEjH,EAFFiH,aACGuN,IACDxU,MAGE3G,EAA0D,oBAAX6H,OACjDA,OACA,GAEEuT,EAAmBjQ,GAAenL,EAAalD,GAGnDse,EAAiBpO,YA4BbqO,SAAyB9D,IAAoByD,GAE7CM,EAA4C,CAChD7E,UAAWF,GAAyB8E,GACpCzE,iBAAkBD,GAAgC0E,GAClDvE,eAAgBD,GAA8BwE,GAC9CrE,QAASD,GAAuBsE,UAS3B,CACLL,SAAU,CACRvN,WAAYrC,GACV6L,GACAxJ,MAAAA,EAAAA,EAAc,IAEhB3Q,UAAWse,EACX9Z,oBAAqBA,MAAAA,EAAAA,EAAwB,qBAAGzH,OAChD+I,aAAcA,MAAAA,EAAAA,EAAiB,qBAAG/I,OAClCyJ,cAAeA,MAAAA,EAAAA,EAAkB,qBAAGzJ,OACpCmM,aAAcA,MAAAA,EAAAA,EAAiB,qBAAGnM,OAClCuJ,cAAeA,MAAAA,EAAAA,EAAkB,qBAAGvJ,OACpCkM,aAAcA,MAAAA,EAAAA,EAAiB,qBAAGlM,OAClCgM,cAAeA,MAAAA,EAAAA,EAAkB,qBAAGhM,OACpC2I,aAAcA,MAAAA,EAAAA,EAAiB,qBAAG3I,OAClCihB,eAAgBA,EACZ3P,GAAenL,EAAa8a,GAC5B9a,EAAYqC,SAAS8V,KACzBP,eAAgBA,MAAAA,EAAAA,EAAkB,sBAClCnF,OAAQA,MAAAA,EAAAA,EAAU6E,GAClByD,gBAAAA,EACAC,SAAUK,EACVJ,mBACEA,MAAAA,EAAAA,EACAM,iBAAiBvb,EAAYqC,SAAS4V,iBAAiBuD,iBACrD,6BAEJN,kBAIKI,GACAJ,GAELtN,oBAxCkD,CACpDa,iBAAkB,QAClBkB,yBAA0B,SAC1BpB,kBAAmB,WAuCZX,IAGPuN,YACKA,OACHxY,aAAIwY,EAAKxY,kBAAM3P,IACfgN,YAAAA,KKhJyByb,CAAkBb,EAAWlpB,YACpDgc,EAAa8M,GACjB,kBACE3gB,EAAMtD,MAAM4kB,KAAKnb,YAAY0b,WAC3B7hB,EAAMtD,MAAMykB,SAASC,oBACrB5d,WAGAkQ,EAAeiN,GAAS,kBAC5B/S,UACK5N,EAAMtD,MAAM4kB,UACfrT,uBAAcjR,aACZ8jB,EAA8BjpB,QAAUmF,EAAOvD,MAAMC,YAAYqO,MAC/D,SAACnO,UACEA,EAAW6D,OAAqCqkB,UAAUC,uBAE/Df,EAAiBnpB,6BAAjBmpB,EAA2BhkB,gBAC3BgD,EAAMtD,MAAM4kB,MAAKrT,qCAAgBjR,IAEnC2J,gBACEoa,EAAWlpB,QAAQ8O,iBAClB,gBAAGlN,IAAAA,SACEoa,EAAWnX,aACN,MAGHslB,EAAWxoB,EAAcC,GAAS,MAEnCuG,EAAMtD,MAAM4kB,KAAK9a,cAAgB/M,EAAM8E,aACnCyjB,MAGHC,EAAuB1kB,QAC3BujB,EAA8BjpB,SAC5BmI,EAAMtD,MAAMykB,SAASD,wBAGhBc,GAAYC,GAAyBD,GAElDhV,wBAAyB,CACvBhT,WAAAA,GACA8S,QAAAA,SAIAoV,EAAevqB,KACnB+B,YAAa,GACbkQ,WAAY,KACZ6D,QAAS,GACT/G,QAAQ,EACRnI,MAAO,GACPY,aAAc,KACdqO,OAAQ,QACLxN,EAAMtD,MAAM4kB,KAAKlnB,eAGhBmV,EAA8C,CAClD9H,oBAAqBzH,EAAMtD,MAAMykB,SAAS1Z,oBAC1CsB,aAAc/I,EAAMtD,MAAMykB,SAASpY,aACnCU,cAAezJ,EAAMtD,MAAMykB,SAAS1X,cACpC0C,aAAcnM,EAAMtD,MAAMykB,SAAShV,aACnC5C,cAAevJ,EAAMtD,MAAMykB,SAAS5X,cACpC2C,aAAclM,EAAMtD,MAAMykB,SAASjV,aACnCF,cAAehM,EAAMtD,MAAMykB,SAASnV,cACpCrD,aAAc3I,EAAMtD,MAAMykB,SAASxY,cAE/BgL,EAAoD,CACxDrN,gBAAiBoN,EAAahX,MAAM4J,gBACpCD,SAAUqN,EAAahX,MAAM2J,SAC7BD,eAAgBsN,EAAahX,MAAM0J,eACnCzH,UAAW+U,EAAahX,MAAMiC,UAC9B4H,UAAWmN,EAAahX,MAAM6J,UAC9B8I,WAAYqE,EAAahX,MAAM2S,WAC/BrJ,QAAS0N,EAAahX,MAAMsJ,SAGxBmc,EAAOxB,GAAS,kBACpByB,GAAIxH,KAAY5a,EAAMtD,MAAMykB,SAASA,SAASpR,kBAG1CwC,EAAMoO,GAAS,kBACnBlN,GAAsB,CACpBC,aAAcA,EAAahX,MAC3BiX,qBAAAA,EACAC,WAAY5T,EAAMtD,MAAMykB,SAASvN,WACjCzN,YAAanG,EAAMtD,MAAM4kB,KAAKnb,YAC9B0N,WAAYA,EAAWnX,MACvBiO,YAAa3K,EAAMtD,MAAM4kB,KAAK3W,YAC9B4E,YAAAA,EACAuE,eAAAA,EACAra,MAAOyoB,EAAarqB,QACpBkc,aAAc/T,EAAMtD,MAAMykB,SAASpN,2BAI9BsO,IACPrP,GAAcT,EAAI7V,MAAM8Y,MAAO,CAC7BrD,MAAO0B,EAAWnX,MACd,GACAohB,GAAuB,CACrBC,eAAgB/d,EAAMtD,MAAMykB,SAASpD,eACrC9a,UAAWsP,EAAI7V,MAAMwX,KACrBoB,KAAM/C,EAAI7V,MAAM4Y,KAChBnP,YAAanG,EAAMtD,MAAM4kB,KAAKnb,yBAK/Bmc,EAAe7oB,GACtByoB,EAAarqB,QAAU4B,MAEjB8oB,EAAc,CAClB7O,aAAcA,EAAahX,MAC3BiX,qBAAAA,EACAC,WAAY5T,EAAMtD,MAAMykB,SAASvN,WACjCyN,WAAYrhB,EAAMtD,MAAMykB,SAASE,WACjCpe,UAAWjD,EAAMtD,MAAMykB,SAASle,UAChCkf,KAAMA,EAAKzlB,MACX6V,IAAKA,EAAI7V,MACTukB,eAAgBpN,EAAWnX,MACvB6V,EAAI7V,MAAM0X,kBACVpU,EAAMtD,MAAMykB,SAASF,eACzB1R,YAAAA,EACA9V,MAAOyoB,EAAarqB,QACpBspB,SAAUnhB,EAAMtD,MAAMykB,SAASA,UAG3BvI,GACFpf,EAAcC,KACbqnB,EAA8BjpB,SAC/BmI,EAAMtD,MAAMykB,SAASD,iBACvBlhB,EAAMtD,MAAMykB,SAASvI,QG3IpB,gBACLlF,IAAAA,aACAC,IAAAA,qBACApB,IAAAA,IACAhD,IAAAA,YACA9V,IAAAA,MAEAwZ,GACEV,EAAI2B,KACJ3E,EAAY5G,gBACVlP,MAAAA,EACAuG,MAAO0T,EAAa/K,aAAa,KAC9BgL,KAGPV,GACEV,EAAIuC,MACJvF,EAAY9F,iBACVhQ,MAAAA,EACAuG,MAAO0T,EAAajK,cAAc,CAAE9B,aAAc4K,EAAIuC,QACtDnN,aAAc4K,EAAIuC,OACfnB,KAGPX,GAAcT,EAAIhO,MAAO,CAAEie,OAAyB,YAAjB/oB,EAAM+T,SACzCwF,GAAcT,EAAIsC,iBAAkB,CAAE2N,OAAyB,YAAjB/oB,EAAM+T,SACpDwF,GAAcT,EAAIoC,YAAa,CAAE6N,QAAS/oB,EAAM8E,QHmH9CkkB,CAAgBF,GGhHb,SACL3J,SAEElF,IAAAA,aACAC,IAAAA,qBACAC,IAAAA,WACAuO,IAAAA,KACA5P,IAAAA,IACA0O,IAAAA,eACA1R,IAAAA,YACA9V,IAAAA,MACA4nB,IAAAA,WACAF,IAAAA,YAGG1nB,EAAMiN,QAUNua,EAAe9Y,SAASoK,EAAIiD,QAA2B,YAAjB/b,EAAM+T,QAC/CyT,EAAe9Q,YAAYoC,EAAIiD,OAGjCjD,EAAIiD,MAAMkN,UAAUC,OAAO,oBAAsC,YAAjBlpB,EAAM+T,YAEhDoV,EAAWnpB,EAAMC,YACpB0C,QACC,gBAAGqB,IAAAA,OAAQ5D,IAAAA,aAAY4D,EAAOqkB,UAAUC,WAAaloB,EAAMxB,OAAS,KAErEmF,KAAI,WAAoBqlB,OAAjBplB,IAAAA,OAAQ5D,IAAAA,aACdsnB,2BACE5nB,IAAKspB,EACLC,UAAWlP,EAAWnW,qCACOA,EAAOC,UAEnCD,EAAOqkB,UAAUiB,QAChB5B,uBAAK2B,UAAWlP,EAAW2J,cACxB9f,EAAOqkB,UAAUiB,OAAO,CACvB1B,WAAAA,EACAtR,cAAeoR,EAASpR,cACxB4M,SAAUwE,EAASxE,SACnB9iB,MAAAA,EACA4D,OAAAA,EACAhE,MAAAA,EACA0oB,KAAAA,KAKL1kB,EAAOqkB,UAAUC,WAA8B,IAAjBloB,EAAMxB,OACnC8oB,uBAAK2B,UAAWlP,EAAW4J,iBACxB/f,EAAOqkB,UAAUC,UAAU,CAC1BV,WAAAA,EACAtR,cAAeoR,EAASpR,cACxB4M,SAAUwE,EAASxE,SACnBlf,OAAAA,EACAhE,MAAAA,EACA0oB,KAAAA,KAIJhB,wBACE2B,UAAWlP,EAAW1T,MAClBqP,EAAYrD,gBACdzS,MAAAA,EACAuG,MAAO0T,EAAaxH,aAAa,KAC9ByH,KAGJ9Z,EAAM2D,KAAI,SAAC6B,OACJ2jB,EAAYtP,EAAavH,aAAa,CAC1C9M,KAAAA,EACA5B,OAAAA,WAIA0jB,wBACE5nB,IAAKypB,EAAUla,GACfga,UAAWlP,EAAWvU,MAClBkQ,EAAYpD,gBACd1S,MAAAA,EACAuG,MAAOgjB,GACJrP,KAGJlW,EAAOqkB,UAAUziB,KAAK,CACrBgiB,WAAAA,EACAtR,cAAeoR,EAASpR,cACxB4M,SAAUwE,EAASxE,SACnBtd,KAAAA,EACA5F,MAAAA,EACA0oB,KAAAA,SAQX1kB,EAAOqkB,UAAUmB,QAChB9B,uBAAK2B,UAAWlP,EAAW0J,cACxB7f,EAAOqkB,UAAUmB,OAAO,CACvB5B,WAAAA,EACAtR,cAAeoR,EAASpR,cACxB4M,SAAUwE,EAASxE,SACnB9iB,MAAAA,EACA4D,OAAAA,EACAhE,MAAAA,EACA0oB,KAAAA,SAON/O,EACJ+N,gBAACA,EAASxE,cACRwE,uBAAK2B,UAAWlP,EAAWyJ,aAAcuF,GACzCzB,uBAAK2B,UAAU,uBAGbI,EAAWN,EAAS9pB,QAAO,SAACiG,EAAKlH,UACrCkH,EAAIlH,EAAQmI,MAAM,gCAAkCnI,EAC7CkH,IACN,IAEH6Z,OAEIxF,SAAAA,EACA3Z,MAAAA,EACAmpB,SAAAA,EACAM,SAAAA,GACG/B,OACHE,WAAAA,EACAc,KAAAA,GACGxO,GAELpB,EAAIiD,YA/HAyL,EAAe9Y,SAASoK,EAAIiD,QAC9ByL,EAAe/K,YAAY3D,EAAIiD,OHgGjC2N,CAAYvK,EAAQ2J,YAsKba,QAAOC,yDAAsD,GACpEjD,UAEyCpgB,EAAMtD,MAAMykB,SAA7CE,IAAAA,WAAeiC,UAEvBvC,EAAWlpB,QAAUga,GACnByR,EACAtjB,EAAMtD,MAAM4kB,KACZ,CAMED,WAAYvP,GACVuP,GACA,qBAAG3kB,MAAmBgR,eAAe,mCAEvCtT,aAAc8nB,EAAarqB,SAE7BwrB,GAGFxC,IACAN,IAEA7M,EAAahX,MAAMsJ,UAAU3L,MAAK,WAChCioB,EAAeJ,EAAarqB,qBAIvBic,EAAepX,GACtB6mB,uBAAsB,eACdC,EAAYxjB,EAAMtD,MAAM4kB,KAAKnb,YAAYqC,SAAS8V,KAAKnW,SAC3DoK,EAAI7V,MAAM4X,iBAGR5X,IAAU8mB,IAIV9mB,GACFsD,EAAMtD,MAAM4kB,KAAKnb,YAAYqC,SAAS8V,KAAKnO,YACzCoC,EAAI7V,MAAM4X,iBAEZtU,EAAMtD,MAAM4kB,KAAKnb,YAAYqC,SAAS8V,KAAKoE,UAAUhiB,IAAI,eACzD6R,EAAI7V,MAAMoY,MAAMxL,UAEhBtJ,EAAMtD,MAAM4kB,KAAKnb,YAAYqC,SAAS8V,KAAKpI,YACzC3D,EAAI7V,MAAM4X,iBAEZtU,EAAMtD,MAAM4kB,KAAKnb,YAAYqC,SAAS8V,KAAKoE,UAAUe,OACnD,eAEF/P,EAAahX,MAAM2J,SAAS,IAC5BqN,EAAahX,MAAMsJ,sBA1NzBka,GAAU,eACFwD,EAAmBhQ,EAAahX,MAAM+K,oBAAoB,CAC9DG,YAAa2K,EAAI7V,MAAM4Y,KACvBzN,aAAc0K,EAAI7V,MAAM8Y,MACxB7N,aAAc4K,EAAI7V,MAAMoY,eAG1B9B,GAAchT,EAAMtD,MAAM4kB,KAAKnb,YAAoBud,GAE5C,WACL1Q,GACEhT,EAAMtD,MAAM4kB,KAAKnb,YACjBlK,OAAOD,KAAK0nB,GAAkB5qB,QAAO,SAACiG,EAAKxF,iBAEpCwF,WACFxF,OAAMrB,MAER,SAKTgoB,GAAU,eACFyD,EAAwB9P,EAAWnX,MACrCsD,EAAMtD,MAAM4kB,KAAKnb,YAAYqC,SAAS8V,KACtCte,EAAMtD,MAAMykB,SAASF,eACnBpZ,EAAegM,EAAWnX,MAC5B6V,EAAI7V,MAAM4X,gBACV/B,EAAI7V,MAAM8Y,aAEV3B,EAAWnX,OAASwlB,EAAarqB,QAAQ6O,QAC3CoN,GAAe,GAGjBwO,EAAeJ,EAAarqB,SAErB,WACD8rB,EAAsBxb,SAASN,IACjC8b,EAAsBzN,YAAYrO,OAKxCqY,GAAU,eACFqB,EAAmBvhB,EAAMtD,MAAMykB,SAASle,iBAC9Cse,EAAiBpR,YAAYoC,EAAI7V,MAAMwX,MAEhC,WACLqN,EAAiBrL,YAAY3D,EAAI7V,MAAMwX,UAI3CgM,GAAU,eACF0D,EAAkB9rB,GAErB,YACDwqB,IADI7oB,SAEH,UAEHunB,EAAiBnpB,QAAU,gBAAG4B,IAAAA,MAAO8G,IAAAA,WAC/BsT,EAAWnX,OAAS6D,EAAUmG,SAAWjN,EAAMiN,QACjDoN,EAAera,EAAMiN,QAOlBmN,EAAWnX,QAASjD,EAAMiN,QAAWnG,EAAUmG,QAClD2b,IAKE5oB,EAAM8E,QAAUgC,EAAUhC,QACHyB,EAAMtD,MAAM4kB,KAAKnb,YAAYqC,SAASqb,iBAC7D,yBAEe5oB,SAAQ,SAAC6oB,GACU,IAA9BA,EAAgBzF,YAClByF,EAAgBzF,UAAY,MAKlCuF,EAAgB,CAAEnqB,MAAAA,KAGb,WACLunB,EAAiBnpB,aAAUK,MAI/BgoB,GAAU,eACF6D,EAAWjsB,GAAgB,eACzBksB,EAAqBnQ,EAAWnX,MACtCmX,EAAWnX,MAAQsD,EAAMtD,MAAM4kB,KAAKnb,YAAY0b,WAC9C7hB,EAAMtD,MAAMykB,SAASC,oBACrB5d,QAEEwgB,IAAuBnQ,EAAWnX,MACpC0mB,EAAO,IAEPG,sBAAsBlB,KAEvB,WACHriB,EAAMtD,MAAM4kB,KAAKnb,YAAYyM,iBAAiB,SAAUmR,GAEjD,WACL/jB,EAAMtD,MAAM4kB,KAAKnb,YAAY0M,oBAAoB,SAAUkR,OAI/D7D,GAAU,eACHrM,EAAWnX,aACP,sBAGAunB,EAAqBC,GAC5B3R,EAAI7V,MAAM0X,kBAAkBsO,UAAUC,OACpC,8BACAuB,YAIKtZ,EAAS/E,GAChBoe,EAAqBpe,EAAMrC,aAGvB2gB,EAAqBnkB,EAAMtD,MAAM4kB,KAAKnb,YAAY0b,WACtDH,iBACE1hB,EAAMtD,MAAM4kB,KAAKnb,YAAYqC,SAAS4V,iBACtCuD,iBAAiB,oCAGrBsC,EAAqBE,EAAmB3gB,aAKlC4gB,EAAyB7mB,QAAQ4mB,EAAmBvR,yBAE1DwR,EACID,EAAmBvR,iBAAiB,SAAUhI,GAC9CuZ,EAAmBE,YAAYzZ,GAE5B,WACLwZ,EACID,EAAmBtR,oBAAoB,SAAUjI,GACjDuZ,EAAmBG,eAAe1Z,OAI1CsV,GAAU,kBACRqD,sBAAsBlB,GAEf,uBAoEJ1O,OACHyP,OAAAA,EACAmB,mBAlEAnE,2BIzUG,SAAiCjB,OAChCqF,EAAY1F,GAAuB,CACvChc,kBAAmB,SAACW,UAAaA,EAASW,aAGtCvB,EAAUsc,EAActc,QAAQrF,KAAI,SAACe,iBACtCA,OACHiC,KAAM,oBAGDgkB,SACFrF,OACHtc,QAAAA"} \ No newline at end of file diff --git a/assets/instantsearch.js/CHANGELOG.md b/assets/instantsearch.js/CHANGELOG.md new file mode 100644 index 00000000..e2b3b533 --- /dev/null +++ b/assets/instantsearch.js/CHANGELOG.md @@ -0,0 +1,3693 @@ +## [4.49.1](https://github.com/algolia/instantsearch.js/compare/v4.49.0...v4.49.1) (2022-11-01) + + +### Bug Fixes + +* **insights:** check before usage of `document` ([#5149](https://github.com/algolia/instantsearch.js/issues/5149)) ([6733dea](https://github.com/algolia/instantsearch.js/commit/6733dea1091a3a6c8ec9049eba652a7f06e9c501)) + + + +# [4.49.0](https://github.com/algolia/instantsearch.js/compare/v4.48.1...v4.49.0) (2022-10-25) + + +### Features + +* **poweredBy:** update component logo ([#5145](https://github.com/algolia/instantsearch.js/issues/5145)) ([7df7816](https://github.com/algolia/instantsearch.js/commit/7df7816eac1bb3d2eafee5da7b6f4f59611468b2)) + + + +## [4.48.1](https://github.com/algolia/instantsearch.js/compare/v4.48.0...v4.48.1) (2022-10-18) + + +### Bug Fixes + +* **bundlesize:** consolidate usage of "classnames" helper ([#5138](https://github.com/algolia/instantsearch.js/issues/5138)) ([f1ec288](https://github.com/algolia/instantsearch.js/commit/f1ec28889be5c2f906dd398f37d072587e29cf3a)) +* **currentRefinements:** reset page number on refine ([#5136](https://github.com/algolia/instantsearch.js/issues/5136)) ([407b576](https://github.com/algolia/instantsearch.js/commit/407b5767b51c26d5f471071a92f2e32762898f24)) +* **events:** prevent warning on low number of listeners ([#5143](https://github.com/algolia/instantsearch.js/issues/5143)) ([432aa70](https://github.com/algolia/instantsearch.js/commit/432aa7006e7d8eefd1c8c382f59ea2d2974a19da)) + + + +# [4.48.0](https://github.com/algolia/instantsearch.js/compare/v4.47.0...v4.48.0) (2022-10-10) + + +### Bug Fixes + +* **insightsMiddleware:** infer type of insightsClient for onEvent ([#5130](https://github.com/algolia/instantsearch.js/issues/5130)) ([dd5fca4](https://github.com/algolia/instantsearch.js/commit/dd5fca4c185c66f1e31ebe9c0568bcad48e062f3)), closes [#5129](https://github.com/algolia/instantsearch.js/issues/5129) + + +### Features + +* **routing:** include repeated indexId in URL correctly ([#5134](https://github.com/algolia/instantsearch.js/issues/5134)) ([679f5da](https://github.com/algolia/instantsearch.js/commit/679f5dad839536def6ae9c3a18416296d40ed49a)) + + + +# [4.47.0](https://github.com/algolia/instantsearch.js/compare/v4.46.3...v4.47.0) (2022-10-03) + + +### Bug Fixes + +* **hierarchicalMenu:** pass correct attribute name to Insights ([#5124](https://github.com/algolia/instantsearch.js/issues/5124)) ([fe18a16](https://github.com/algolia/instantsearch.js/commit/fe18a168b1b195d067298770b55fd29a7fdb6edb)) + + +### Features + +* **status:** introduce status in InstantSearch class ([#5115](https://github.com/algolia/instantsearch.js/issues/5115)) ([21f3147](https://github.com/algolia/instantsearch.js/commit/21f31476e75e162b38b002d5439f231f3990e785)) +* **hierarchicalMenu**: introduce `ais-HierarchicalMenu-item--selected` class ([#5125](https://github.com/algolia/instantsearch.js/issues/5125)) ([4ebb828](https://github.com/algolia/instantsearch.js/commit/4ebb828c93afabfd8083246dfe7edfd33932d5fd)) + + +## [4.46.3](https://github.com/algolia/instantsearch.js/compare/v4.46.2...v4.46.3) (2022-09-27) + + +### Bug Fixes + +* **currentRefinements:** implement noRefinementRoot modifier class ([#5114](https://github.com/algolia/instantsearch.js/issues/5114)) ([cb66830](https://github.com/algolia/instantsearch.js/commit/cb668305af26bf919841c25bd4cc8493fcdf8cf9)) + + + +## [4.46.2](https://github.com/algolia/instantsearch.js/compare/v4.46.1...v4.46.2) (2022-09-22) + + +### Bug Fixes + +* **build:** remove jsx pragma comments from build output ([#5112](https://github.com/algolia/instantsearch.js/issues/5112)) ([6582083](https://github.com/algolia/instantsearch.js/commit/65820831b7d7e14867f13a2947795491730b8442)) +* **imports:** split out templating from ./utils ([#5111](https://github.com/algolia/instantsearch.js/issues/5111)) ([fc765f3](https://github.com/algolia/instantsearch.js/commit/fc765f35ddd85068237edc81c66932b098e3b55a)), closes [#5109](https://github.com/algolia/instantsearch.js/issues/5109) + + + +## [4.46.1](https://github.com/algolia/instantsearch.js/compare/v4.46.0...v4.46.1) (2022-09-15) + + +### Bug Fixes + +* **hierarchicalMenu:** use existing facet filters in multi queries for parent facet values ([#5105](https://github.com/algolia/instantsearch.js/issues/5105)) ([10a83f1](https://github.com/algolia/instantsearch.js/commit/10a83f146f714d9f97bb8edca2499f16df4ca22d)) +* **insights:** make sure change in userToken can't reset the search parameters ([#5101](https://github.com/algolia/instantsearch.js/issues/5101)) ([b20c8dc](https://github.com/algolia/instantsearch.js/commit/b20c8dc70e34c1f234dc10eb7fc69296f30986a4)) +* **setUiState**: call onStateChange handler ([#5104](https://github.com/algolia/instantsearch.js/issues/5104)) ([231853d](https://github.com/algolia/instantsearch.js/commit/231853dab731189a33ee480cdb196789c7336fda))) + + + +## [4.46.0](https://github.com/algolia/instantsearch.js/compare/v4.45.1...v4.46.0) (2022-09-12) + + +### Features + +* **html:** deprecate Hogan.js and string-based templates ([#5095](https://github.com/algolia/instantsearch.js/issues/5095)) ([a06ddf5](https://github.com/algolia/instantsearch.js/commit/a06ddf55f1ffd1a93cddab2fcf95d2be3220a423)) +* **html:** introduce `html` templating ([#5081](https://github.com/algolia/instantsearch.js/issues/5081)) ([e55e224](https://github.com/algolia/instantsearch.js/commit/e55e2245256193d27f2c85f24b8aab7c9048c554)) + + + +## [4.45.1](https://github.com/algolia/instantsearch.js/compare/v4.45.0...v4.45.1) (2022-09-06) + + +### Bug Fixes + +* **ratingMenu:** fix `undefined` facet values error when `disjunctiveFacets` is empty ([#5096](https://github.com/algolia/instantsearch.js/issues/5096)) ([dd870d5](https://github.com/algolia/instantsearch.js/commit/dd870d5a658ce42b068eadf34f9b69772291aa20)) + + + +# [4.45.0](https://github.com/algolia/instantsearch.js/compare/v4.44.1...v4.45.0) (2022-08-29) + + +### Features + +* **connectors:** deprecate `hasNoResults` in favor of `canRefine` ([#5091](https://github.com/algolia/instantsearch.js/issues/5091)) ([1749a4e](https://github.com/algolia/instantsearch.js/commit/1749a4eb9a2f28fa4a8d442163e3b10acbde7c22)) + + + +## [4.44.1](https://github.com/algolia/instantsearch.js/compare/v4.44.0...v4.44.1) (2022-08-25) + + +### Bug Fixes + +* **connectNumericMenu + connectRange:** stop sending invalid clickedFilters event ([#5085](https://github.com/algolia/instantsearch.js/issues/5085)) ([20996c7](https://github.com/algolia/instantsearch.js/commit/20996c7a159988c58e00ff24d2d2dc98af8b980f)) + + + +# [4.44.0](https://github.com/algolia/instantsearch.js/compare/v4.43.1...v4.44.0) (2022-08-08) + + +### Features + +* **geo-search:** make `GeoHit` type generic ([#5083](https://github.com/algolia/instantsearch.js/issues/5083)) ([3d3c7b2](https://github.com/algolia/instantsearch.js/commit/3d3c7b298b74effe9bb722a04fbb47dc39a4bd95)) + + + +## [4.43.1](https://github.com/algolia/instantsearch.js/compare/v4.43.0...v4.43.1) (2022-07-11) + + +### Bug Fixes + +* **errors:** rethrow error as error if it's an object ([#5075](https://github.com/algolia/instantsearch.js/issues/5075)) ([34132bb](https://github.com/algolia/instantsearch.js/commit/34132bba38c05fa2f5e4e54c6889e9335e62e4f4)) +* **ratingMenu:** don't warn if results are artificial ([#5073](https://github.com/algolia/instantsearch.js/issues/5073)) ([d747d23](https://github.com/algolia/instantsearch.js/commit/d747d23b28c380fe82a40eeab06c57359af8004a)) +* **types:** use correct case for _geoloc property ([#5074](https://github.com/algolia/instantsearch.js/issues/5074)) ([6fed7d8](https://github.com/algolia/instantsearch.js/commit/6fed7d870c3607980776d33a3697f8e2789aa08b)) + + + +# [4.43.0](https://github.com/algolia/instantsearch.js/compare/v4.42.0...v4.43.0) (2022-06-28) + + +### Features + +* **types:** support algoliasearch v5 ([#5066](https://github.com/algolia/instantsearch.js/issues/5066)) ([3eb4dc7](https://github.com/algolia/instantsearch.js/commit/3eb4dc75a5935f2ee4fead8787f39af0150b24c4)) + + + +# [4.42.0](https://github.com/algolia/instantsearch.js/compare/v4.41.2...v4.42.0) (2022-06-21) + + +### Bug Fixes + +* **es:** update import path for `infiniteHitsCache` in depreciation message ([#5068](https://github.com/algolia/instantsearch.js/issues/5068)) ([545cbaf](https://github.com/algolia/instantsearch.js/commit/545cbafd748bb8be32bff66ac60b5f3f9133a5b4)) + + +### Features + +* **core:** sort parameters & support client.search for sffv ([#5069](https://github.com/algolia/instantsearch.js/issues/5069)) ([34e2b00](https://github.com/algolia/instantsearch.js/commit/34e2b00cbc93f1bc86ee0abaec6b6e132bd18354)) + + + +## [4.41.2](https://github.com/algolia/instantsearch.js/compare/v4.41.1...v4.41.2) (2022-06-15) + + +### Bug Fixes + +* **hierarchicalMenu:** show full hierarchical parent values ([#5063](https://github.com/algolia/instantsearch.js/issues/5063)) ([cd1db34](https://github.com/algolia/instantsearch.js/commit/cd1db34815f92acb3d2d0cec6c1ae7865d14fb13)) + + + +## [4.41.1](https://github.com/algolia/instantsearch.js/compare/v4.41.0...v4.41.1) (2022-06-14) + + +### Bug Fixes + +* **insights:** don't send view event if search is stalled ([#5058](https://github.com/algolia/instantsearch.js/issues/5058)) ([1686dfb](https://github.com/algolia/instantsearch.js/commit/1686dfb096cfce062e268feda7956e3b160bf2da)), closes [/github.com/algolia/instantsearch.js/blob/99f6fe1dc51e4815e5b9efcfb30e3e2f3127e763/src/lib/utils/createSendEventForHits.ts#L168](https://github.com//github.com/algolia/instantsearch.js/blob/99f6fe1dc51e4815e5b9efcfb30e3e2f3127e763/src/lib/utils/createSendEventForHits.ts/issues/L168) [/github.com/algolia/instantsearch.js/blob/55313e4ea4105b777f3f102e9f48a7e440496d25/src/middlewares/createInsightsMiddleware.ts#L144](https://github.com//github.com/algolia/instantsearch.js/blob/55313e4ea4105b777f3f102e9f48a7e440496d25/src/middlewares/createInsightsMiddleware.ts/issues/L144) +* **types:** avoid inferring UiState type from initialUiState ([#5061](https://github.com/algolia/instantsearch.js/issues/5061)) ([80ca07e](https://github.com/algolia/instantsearch.js/commit/80ca07e29064357343ee997be94ef10beadba637)), closes [/github.com/Microsoft/TypeScript/issues/14829#issuecomment-504042546](https://github.com//github.com/Microsoft/TypeScript/issues/14829/issues/issuecomment-504042546) [#5060](https://github.com/algolia/instantsearch.js/issues/5060) +* **types:** make all usages of UiState in InstantSearch generic ([#5060](https://github.com/algolia/instantsearch.js/issues/5060)) ([2b9e76b](https://github.com/algolia/instantsearch.js/commit/2b9e76b568fb4d4cc5bd49c384ee583d84d6f39a)) + + + +# [4.41.0](https://github.com/algolia/instantsearch.js/compare/v4.40.6...v4.41.0) (2022-06-01) + + +### Features + +* **core:** don't schedule search without widgets ([#5056](https://github.com/algolia/instantsearch.js/issues/5056)) ([ea3d6d9](https://github.com/algolia/instantsearch.js/commit/ea3d6d9c6ae1fe2f90bf5643d4bdcbb89507e9bc)) + + + +## [4.40.6](https://github.com/algolia/instantsearch.js/compare/v4.40.5...v4.40.6) (2022-05-24) + + +### Bug Fixes + +* **types:** only allow `null` for parent in `getWidgetRenderState` if widget is an index ([#5052](https://github.com/algolia/instantsearch.js/issues/5052)) ([fe0fce0](https://github.com/algolia/instantsearch.js/commit/fe0fce0641ffff9af1d1303b7ee71d77ba08f8bd)) + + + +## [4.40.5](https://github.com/algolia/instantsearch.js/compare/v4.40.4...v4.40.5) (2022-04-26) + + +### Bug Fixes + +* **routing:** prevent writing the same URL twice ([#5045](https://github.com/algolia/instantsearch.js/issues/5045)) ([5d79d92](https://github.com/algolia/instantsearch.js/commit/5d79d92b30e188e5206dcb5fe86fcac058c3f09b)) + + + +## [4.40.4](https://github.com/algolia/instantsearch.js/compare/v4.40.3...v4.40.4) (2022-04-13) + + +### Bug Fixes + +* **currentRefinements:** correctly show and allow for refining escaped values ([#5041](https://github.com/algolia/instantsearch.js/issues/5041)) ([277f4df](https://github.com/algolia/instantsearch.js/commit/277f4dff21fb7eeaeb41a8c49aaaf707f880ee58)) + + + +## [4.40.3](https://github.com/algolia/instantsearch.js/compare/v4.40.2...v4.40.3) (2022-04-04) + + +### Bug Fixes + +* **refinements:** escape facet values starting with "-" ([#5039](https://github.com/algolia/instantsearch.js/issues/5039)) ([6b6f4e8](https://github.com/algolia/instantsearch.js/commit/6b6f4e86550a3c9dd02f3a8400d832cef64cb45d)) + + + +## [4.40.2](https://github.com/algolia/instantsearch.js/compare/v4.40.1...v4.40.2) (2022-03-29) + + +### Bug Fixes + +* **currentRefinements:** more detailed type for item.type ([#5034](https://github.com/algolia/instantsearch.js/issues/5034)) ([773e2c6](https://github.com/algolia/instantsearch.js/commit/773e2c65840f86881eb3dd8825c8c4ad9c73aec9)) + + + +## [4.40.1](https://github.com/algolia/instantsearch.js/compare/v4.40.0...v4.40.1) (2022-03-21) + + +### Bug Fixes + +* **types:** update to latest algoliasearch-helper ([6bbe790](https://github.com/algolia/instantsearch.js/commit/6bbe790a99320b4237b81614472c048ffe4426d8)) + + + +# [4.40.0](https://github.com/algolia/instantsearch.js/compare/v4.39.2...v4.40.0) (2022-03-21) + + +### Features + +* **infiniteHits:** avoid caching artificial results ([#5023](https://github.com/algolia/instantsearch.js/issues/5023)) ([e8c0145](https://github.com/algolia/instantsearch.js/commit/e8c01452ebe77b82b8a107c5d4fc026abf5645d8)) + + + +## [4.39.2](https://github.com/algolia/instantsearch.js/compare/v4.39.1...v4.39.2) (2022-03-14) + + +### Bug Fixes + +* fix types of `sortBy` option ([#5024](https://github.com/algolia/instantsearch.js/issues/5024)) ([3f7ea32](https://github.com/algolia/instantsearch.js/commit/3f7ea32374e0e409ebf27b07d28cf3871a5b33b3)) + + + +## [4.39.1](https://github.com/algolia/instantsearch.js/compare/v4.39.0...v4.39.1) (2022-03-01) + + +### Bug Fixes + +* **insights:** send view events after rendering ([#5014](https://github.com/algolia/instantsearch.js/issues/5014)) ([e952abc](https://github.com/algolia/instantsearch.js/commit/e952abc64043a55e06c9c46a656bc98ad45d1502)) + + + +# [4.39.0](https://github.com/algolia/instantsearch.js/compare/v4.38.1...v4.39.0) (2022-02-23) + + +### Features + +* **ts:** allow Hits related connectors to be generic ([#5019](https://github.com/algolia/instantsearch.js/issues/5019)) ([e986f7e](https://github.com/algolia/instantsearch.js/commit/e986f7e46d57173da4d3d6c3c23fbdf3f9c0f78c)) + + + +## [4.38.1](https://github.com/algolia/instantsearch.js/compare/v4.38.0...v4.38.1) (2022-02-08) + + +### Bug Fixes + +* **routing:** fix history router based on history length ([#5004](https://github.com/algolia/instantsearch.js/issues/5004)) ([40541af](https://github.com/algolia/instantsearch.js/commit/40541af5c8face0e32a1ec3a4665a8387d89c626)) +* **metadata:** ensure safe user agent detection ([#5009](https://github.com/algolia/instantsearch.js/pull/5009) [15a6a9d](https://github.com/algolia/instantsearch.js/commit/15a6a9d10ee512fab6884696bc59bedea13bd1b3)) + + +# [4.38.0](https://github.com/algolia/instantsearch.js/compare/v4.37.3...v4.38.0) (2022-01-28) + + +### Bug Fixes + +* **typescript:** remove non-existing UMD type definition ([#5001](https://github.com/algolia/instantsearch.js/issues/5001)) ([c234374](https://github.com/algolia/instantsearch.js/commit/c234374a1f5333f6625980c45fa0833a8c130257)) + + +### Features + +* **connectors:** expose search results to `transformItems` when available ([#5000](https://github.com/algolia/instantsearch.js/issues/5000)) ([58c2651](https://github.com/algolia/instantsearch.js/commit/58c26517aad916ce49b474458e3411ff7ef5497a)) + + + +## [4.37.3](https://github.com/algolia/instantsearch.js/compare/v4.37.2...v4.37.3) (2022-01-25) + + +### Bug Fixes + +* **helpers:** display warning if attribute cannot be highlighted/snippeted ([#4996](https://github.com/algolia/instantsearch.js/issues/4996)) ([e81bf59](https://github.com/algolia/instantsearch.js/commit/e81bf59f0f28eb7b9f54f7d4424c60546b9a4d8c)) + + + +## [4.37.2](https://github.com/algolia/instantsearch.js/compare/v4.37.1...v4.37.2) (2022-01-10) + + +### Bug Fixes + +* **searchbox:** make sure setting query to the initial doesn't cause a stale state ([#4990](https://github.com/algolia/instantsearch.js/issues/4990)) ([3faca01](https://github.com/algolia/instantsearch.js/commit/3faca014aad08145c3b4cc66a5e841da3a0f64b8)) + + + +## [4.37.1](https://github.com/algolia/instantsearch.js/compare/v4.37.0...v4.37.1) (2022-01-05) + + +### Bug Fixes + +* **connectBreadcrumb:** returns an empty array if no hierarchicalFacets exist ([#4980](https://github.com/algolia/instantsearch.js/issues/4980)) ([3ea9b91](https://github.com/algolia/instantsearch.js/commit/3ea9b918f85c686a07b06cfc12b8c59b80181f28)) +* **es:** mark inner package.json as side-effect free ([#4984](https://github.com/algolia/instantsearch.js/issues/4984)) ([74f56f3](https://github.com/algolia/instantsearch.js/commit/74f56f35b7ccc78904592edfc40e782e40847986)), closes [#4971](https://github.com/algolia/instantsearch.js/issues/4971) +* **events:** emit error as typeof Error ([#4983](https://github.com/algolia/instantsearch.js/issues/4983)) ([4adfaf2](https://github.com/algolia/instantsearch.js/commit/4adfaf2eba40fffa7f4800664dc89e0edf2d819e)) + + + +# [4.37.0](https://github.com/algolia/instantsearch.js/compare/v4.36.0...v4.37.0) (2022-01-04) + + +### Features + +* **build:** expose `/es` as a real ES module ([#4971](https://github.com/algolia/instantsearch.js/issues/4971)) ([e5b3434](https://github.com/algolia/instantsearch.js/commit/e5b343490921f70736e11a7758bdc7a3aeed6d69)) + + + +# [4.36.0](https://github.com/algolia/instantsearch.js/compare/v4.35.0...v4.36.0) (2021-12-16) + + +### Features + +* **dynamicWidgets:** send facets * and maxValuesPerFacet by default ([#4968](https://github.com/algolia/instantsearch.js/issues/4968)) ([969ae89](https://github.com/algolia/instantsearch.js/commit/969ae8980f7c8a055bb4c6c5967d04744644f555)) +* **DynamicWidgets:** throw when transformItems returns anything that isn't an array ([#4975](https://github.com/algolia/instantsearch.js/issues/4975)) ([5c328c8](https://github.com/algolia/instantsearch.js/commit/5c328c85428eb9a5c1450fd01154751f4e0ea2fa)) + + + +# [4.35.0](https://github.com/algolia/instantsearch.js/compare/v4.34.0...v4.35.0) (2021-12-13) + + +### Features + +* **events:** move to @algolia/events ([#4961](https://github.com/algolia/instantsearch.js/issues/4961)) ([1c56726](https://github.com/algolia/instantsearch.js/commit/1c5672640c65d7ed6f6e381a3162e508bdda44f3)) + +### Bug Fixes + +* **deps:** Add missing peer dependency ([#4950](https://github.com/algolia/instantsearch.js/issues/4950)) ([468578da9](https://github.com/algolia/instantsearch.js/commit/468578da948a12224c892fd12cba4c880aa7b25f)) + + + +# [4.34.0](https://github.com/algolia/instantsearch.js/compare/v4.33.2...v4.34.0) (2021-12-07) + + +### Features + +* rely on `state` in `getWidgetRenderState` ([#4960](https://github.com/algolia/instantsearch.js/issues/4960)) ([5006841](https://github.com/algolia/instantsearch.js/commit/50068417e5e7211802bc717b582946f6e630d7ac)) +* support initial results (experimental) ([#4967](https://github.com/algolia/instantsearch.js/issues/4967)) ([db11c13](https://github.com/algolia/instantsearch.js/commit/db11c13ea55433491f5e924633bff12a303c1bc6)) + + + +## [4.33.2](https://github.com/algolia/instantsearch.js/compare/v4.33.1...v4.33.2) (2021-11-16) + + +### Bug Fixes + +* **connectNumericMenu:** allow option for same start/end values ([#4951](https://github.com/algolia/instantsearch.js/issues/4951)) ([18da714](https://github.com/algolia/instantsearch.js/commit/18da714574fa98957d29014add3123e9c377551f)) + + + +## [4.33.1](https://github.com/algolia/instantsearch.js/compare/v4.33.0...v4.33.1) (2021-11-02) + + +### Bug Fixes + +* **getUiState:** support `initialUiState` ([#4948](https://github.com/algolia/instantsearch.js/issues/4948)) ([532474d](https://github.com/algolia/instantsearch.js/commit/532474dfaf49446ab59a2a27424ca220947dd5bd)) + + + +# [4.33.0](https://github.com/algolia/instantsearch.js/compare/v4.32.0...v4.33.0) (2021-10-26) + + +### Bug Fixes + +* **router:** skip history push on browser back and forward actions ([#4933](https://github.com/algolia/instantsearch.js/issues/4933)) ([7909da4](https://github.com/algolia/instantsearch.js/commit/7909da4903eb1aee885811e280b909a3bda488be)) +* **setUiState:** reset UI state with empty object ([#4944](https://github.com/algolia/instantsearch.js/issues/4944)) ([5faae4a](https://github.com/algolia/instantsearch.js/commit/5faae4ac44ac5ad2f8086ad2a306bcfaa14bc754)) + + +### Features + +* **router:** support server environments ([#4940](https://github.com/algolia/instantsearch.js/issues/4940)) ([a002962](https://github.com/algolia/instantsearch.js/commit/a002962df0e7683b29bef8bfaaddb494fa551a14)) + + + +# [4.32.0](https://github.com/algolia/instantsearch.js/compare/v4.31.1...v4.32.0) (2021-10-20) + + +### Features + +* **dependencies:** update algoliasearch-helper ([#4936](https://github.com/algolia/instantsearch.js/issues/4936)) ([014a413](https://github.com/algolia/instantsearch.js/commit/014a413f14dded3861a9c288ea618f1602bcd66d)) + + + +## [4.31.1](https://github.com/algolia/instantsearch.js/compare/v4.31.0...v4.31.1) (2021-10-19) + + +### Bug Fixes + +* **types:** export correct types from search-insights ([#4930](https://github.com/algolia/instantsearch.js/issues/4930)) ([5ae7a5b](https://github.com/algolia/instantsearch.js/commit/5ae7a5b86ad9c042bfbdc60e505c159eebdb404f)) + + + +# [4.31.0](https://github.com/algolia/instantsearch.js/compare/v4.30.3...v4.31.0) (2021-10-14) + + +### Features + +* **InstantSearch:** defer initial search ([#4925](https://github.com/algolia/instantsearch.js/issues/4925)) ([9a88115](https://github.com/algolia/instantsearch.js/commit/9a8811534af1288e316cdfb6f6fc49df1597290e)) + + + +## [4.30.3](https://github.com/algolia/instantsearch.js/compare/v4.30.2...v4.30.3) (2021-10-12) + + +### Bug Fixes + +* **toggleRefinement:** don't set off value in getWidgetRenderState ([#4912](https://github.com/algolia/instantsearch.js/issues/4912)) ([69525bf](https://github.com/algolia/instantsearch.js/commit/69525bf2a3087aeb75c4f1e5ab8452012436f61f)) + + + +## [4.30.2](https://github.com/algolia/instantsearch.js/compare/v4.30.1...v4.30.2) (2021-09-21) + + +### Bug Fixes + +* **es:** add warning to typescript declaration of keys to be imported from helpers ([#4908](https://github.com/algolia/instantsearch.js/issues/4908)) ([8cbd5fb](https://github.com/algolia/instantsearch.js/commit/8cbd5fb3f02427f2c7de6e818f1ff4c81485b3e1)) +* **infinite/hits:** stop saving the transformed results in cache ([#4907](https://github.com/algolia/instantsearch.js/issues/4907)) ([82dc0ae](https://github.com/algolia/instantsearch.js/commit/82dc0ae966fda37582d5324ea6ca3e0f33ef56d5)), closes [#4819](https://github.com/algolia/instantsearch.js/issues/4819) + + + +## [4.30.1](https://github.com/algolia/instantsearch.js/compare/v4.30.0...v4.30.1) (2021-09-14) + + +### Bug Fixes + +* **insightsMiddleware:** throw an error when credentials can't be extracted ([#4901](https://github.com/algolia/instantsearch.js/issues/4901)) ([55313e4](https://github.com/algolia/instantsearch.js/commit/55313e4ea4105b777f3f102e9f48a7e440496d25)) + + + +# [4.30.0](https://github.com/algolia/instantsearch.js/compare/v4.29.1...v4.30.0) (2021-09-07) + + +### Bug Fixes + +* **insights:** handle multiple setUserToken call before search.start() ([#4897](https://github.com/algolia/instantsearch.js/issues/4897)) ([51a6f2b](https://github.com/algolia/instantsearch.js/commit/51a6f2bcd2ea312e7038e6f3208a2e9b3fed494a)) + + +### Features + +* **dynamicWidgets:** add fallbackWidget ([#4847](https://github.com/algolia/instantsearch.js/issues/4847)) ([7d99ab9](https://github.com/algolia/instantsearch.js/commit/7d99ab95972d5886cdc82abb5794a41d38381a50)) +* **dynamicWidgets:** mark as stable ([#4899](https://github.com/algolia/instantsearch.js/issues/4899)) ([f97468f](https://github.com/algolia/instantsearch.js/commit/f97468f134d92c198433a7dad16a3b19b3779a94)) + + + +## [4.29.1](https://github.com/algolia/instantsearch.js/compare/v4.29.0...v4.29.1) (2021-09-02) + + +### Bug Fixes + +* **middleware:** subscribe middleware before initializing main index ([#4849](https://github.com/algolia/instantsearch.js/issues/4849)) ([0fc8f73](https://github.com/algolia/instantsearch.js/commit/0fc8f7322f8521f934ed871e8125707ba2ec0bfd)) + + + +# [4.29.0](https://github.com/algolia/instantsearch.js/compare/v4.28.0...v4.29.0) (2021-08-31) + + +### Features + +* **panel:** render templates on init with render state ([#4845](https://github.com/algolia/instantsearch.js/issues/4845)) ([0e151a9](https://github.com/algolia/instantsearch.js/commit/0e151a9552092807ecbc6993f3f6193fef621f44)) + + + +# [4.28.0](https://github.com/algolia/instantsearch.js/compare/v4.27.2...v4.28.0) (2021-08-24) + + +### Bug Fixes + +* **sendEvent:** split > 20 objects in multiple calls ([#4841](https://github.com/algolia/instantsearch.js/issues/4841)) ([44574bc](https://github.com/algolia/instantsearch.js/commit/44574bcf03ac05e22274099622e6a1839599ca7e)) +* **svg:** remove xmlns ([#4839](https://github.com/algolia/instantsearch.js/issues/4839)) ([932ae3a](https://github.com/algolia/instantsearch.js/commit/932ae3a868340a32ccaacb276c862921fee41a93)) + + +### Features + +* **ts:** expose built files in umd ([#4844](https://github.com/algolia/instantsearch.js/issues/4844)) ([8578ae3](https://github.com/algolia/instantsearch.js/commit/8578ae30a915db49acaa0292faba2ec6ccd52b73)) + + + +## [4.27.2](https://github.com/algolia/instantsearch.js/compare/v4.27.1...v4.27.2) (2021-08-18) + + +### Bug Fixes + +* **types:** export all types as "type" to avoid exporting in .js ([#4837](https://github.com/algolia/instantsearch.js/issues/4837)) ([dcbbd88](https://github.com/algolia/instantsearch.js/commit/dcbbd8804b4b6471d24820b42826b57388974c27)) + + + +## [4.27.1](https://github.com/algolia/instantsearch.js/compare/v4.27.0...v4.27.1) (2021-08-17) + + +### Bug Fixes + +* **ts:** export types from entry point ([#4834](https://github.com/algolia/instantsearch.js/issues/4834)) ([3014e84](https://github.com/algolia/instantsearch.js/commit/3014e8481e401db62fff41d6867580c04adeaf6b)) + + + +# [4.27.0](https://github.com/algolia/instantsearch.js/compare/v4.26.0...v4.27.0) (2021-08-17) + + +### Bug Fixes + +* **ts:** correct entry point ([#4829](https://github.com/algolia/instantsearch.js/issues/4829)) ([24a45f9](https://github.com/algolia/instantsearch.js/commit/24a45f9a9fb3c8f62003d2aa37b3456c11af2985)) +* **ts:** export PaginationConnector ([d201322](https://github.com/algolia/instantsearch.js/commit/d201322de0d09a664b762422fdc0a51e2bd566bc)) + + +### Features + +* **typescript:** expose types at regular build ([#4832](https://github.com/algolia/instantsearch.js/issues/4832)) ([4bea07b](https://github.com/algolia/instantsearch.js/commit/4bea07b99f492441eb94e483378e0778f90c5b43)) + +If you were using typescript via the `experimental-typescript` tag, you can now use regular InstantSearch.js. + +# [4.26.0](https://github.com/algolia/instantsearch.js/compare/v4.25.3...v4.26.0) (2021-08-10) + + +### Features + +* **ts:** allow custom ui state and route state in routing ([#4816](https://github.com/algolia/instantsearch.js/issues/4816)) ([5f8ba5d](https://github.com/algolia/instantsearch.js/commit/5f8ba5ddcf5e32fd3cecf39ea667d8266dab35f8)) +* **types:** allow typed access to properties added to entry ([#4814](https://github.com/algolia/instantsearch.js/issues/4814)) ([9000f16](https://github.com/algolia/instantsearch.js/commit/9000f16c3e0ff53eda4ca21281a87d8ff9b9154d)) + + + +## [4.25.3](https://github.com/algolia/instantsearch.js/compare/v4.25.2...v4.25.3) (2021-08-03) + + +### Bug Fixes + +* **types:** fix hits and results types in connectHits and connectInfiniteHits ([#4820](https://github.com/algolia/instantsearch.js/issues/4820)) ([2bf987e](https://github.com/algolia/instantsearch.js/commit/2bf987e8b2728a8e65a88a49d46eadf6c0172660)) + + + +## [4.25.2](https://github.com/algolia/instantsearch.js/compare/v4.25.1...v4.25.2) (2021-07-20) + + +### Bug Fixes + +* **build:** ensure build fails when types building fails ([#4812](https://github.com/algolia/instantsearch.js/issues/4812)) ([b37e23b](https://github.com/algolia/instantsearch.js/commit/b37e23b5819abbc03049124bc3a29120f91aeb8c)) +* **types:** export widget's types ([#4813](https://github.com/algolia/instantsearch.js/issues/4813)) ([e9764e9](https://github.com/algolia/instantsearch.js/commit/e9764e9273e5b7bacd86f8d1cb751e87bd75eb75)) + + + +## [4.25.1](https://github.com/algolia/instantsearch.js/compare/v4.25.0...v4.25.1) (2021-07-13) + + +### Bug Fixes + +* **deps:** force a lower version of qs ([#4805](https://github.com/algolia/instantsearch.js/issues/4805)) ([07b7e08](https://github.com/algolia/instantsearch.js/commit/07b7e086282f8cc6a17aee822902d97204c1d2da)) + + + +# [4.25.0](https://github.com/algolia/instantsearch.js/compare/v4.24.3...v4.25.0) (2021-07-06) + + +### Features + +* **facets:** apply result from facet ordering ([#4784](https://github.com/algolia/instantsearch.js/issues/4784)) ([9e9d839](https://github.com/algolia/instantsearch.js/commit/9e9d8394067bec35425b7d66f94fcce504faee7f)) + + + +## [4.24.3](https://github.com/algolia/instantsearch.js/compare/v4.24.2...v4.24.3) (2021-07-05) + + +### Bug Fixes + +* **dynamicWidgets:** read from facetOrdering.facets ([42d6c6c](https://github.com/algolia/instantsearch.js/commit/42d6c6cefc5f009a3cfc63ab3d628ed2811f1700)) +* **ts:** make template types consistent ([#4785](https://github.com/algolia/instantsearch.js/issues/4785)) ([e0fbd55](https://github.com/algolia/instantsearch.js/commit/e0fbd55b6b98dd64301f113fd394dce57552d94c)) + + + +## [4.24.2](https://github.com/algolia/instantsearch.js/compare/v4.24.1...v4.24.2) (2021-06-29) + + +### Bug Fixes + +* **index:** export `IndexWidgetParams` type ([#4793](https://github.com/algolia/instantsearch.js/issues/4793)) ([91bdea1](https://github.com/algolia/instantsearch.js/commit/91bdea18f3768265937e2d3aca4acaa05c24e426)) +* **onStateChange:** propagate change to middleware ([#4796](https://github.com/algolia/instantsearch.js/issues/4796)) ([57c32c0](https://github.com/algolia/instantsearch.js/commit/57c32c0a43bd2c6cbdd3f8ea7eac8109e3024f2a)) +* **relevantSort:** export `RelevantSortWidgetParams` type ([#4794](https://github.com/algolia/instantsearch.js/issues/4794)) ([1a10b59](https://github.com/algolia/instantsearch.js/commit/1a10b59938c6121f58510726b67ee6dfa1aa1b7c)) +* **sortBy:** do not write the default state ([#4798](https://github.com/algolia/instantsearch.js/issues/4798)) ([1d8a40e](https://github.com/algolia/instantsearch.js/commit/1d8a40ecc8e6e48746113ec3ec0d975e14bec1ea)) + + + +## [4.24.1](https://github.com/algolia/instantsearch.js/compare/v4.24.0...v4.24.1) (2021-06-23) + + +### Bug Fixes + +* **mainHelper:** allow a mainHelper to be set before start ([#4790](https://github.com/algolia/instantsearch.js/issues/4790)) ([e8329ae](https://github.com/algolia/instantsearch.js/commit/e8329aecb386755a039cf10850e394d0d71f29f4)) + + + +# [4.24.0](https://github.com/algolia/instantsearch.js/compare/v4.23.0...v4.24.0) (2021-06-15) + + +### Bug Fixes + +* **clearRefinements:** do not throw when widgetParams is not given ([#4778](https://github.com/algolia/instantsearch.js/issues/4778)) ([6b1a375](https://github.com/algolia/instantsearch.js/commit/6b1a375ed7139c0b98993c0cb7ab40838e1f2288)) +* **ts:** make `CSSClasses` types consistent ([#4774](https://github.com/algolia/instantsearch.js/issues/4774)) ([99008a9](https://github.com/algolia/instantsearch.js/commit/99008a985ddc61ce197200df51fdcf385914064d)) + + +### Features + +* **dynamicWidgets:** add default attributesToRender & transformItems ([#4776](https://github.com/algolia/instantsearch.js/issues/4776)) ([44dab44](https://github.com/algolia/instantsearch.js/commit/44dab44282da58b36a707ad80aff4c18477abccd)) +* **ts:** convert pagination widget and component ([#4765](https://github.com/algolia/instantsearch.js/issues/4765)) ([34eb950](https://github.com/algolia/instantsearch.js/commit/34eb9500a2d7072814fd715e1c2217ed22de30d1)) +* **ts:** convert rangeInput widget and component ([#4766](https://github.com/algolia/instantsearch.js/issues/4766)) ([40b1a82](https://github.com/algolia/instantsearch.js/commit/40b1a82f9df4b16708fceefbba77a8fb49c7dc41)) + + + +# [4.23.0](https://github.com/algolia/instantsearch.js/compare/v4.22.0...v4.23.0) (2021-05-25) + + +### Bug Fixes + +* **range:** reset the page on refine ([#4760](https://github.com/algolia/instantsearch.js/issues/4760)) ([24e3b34](https://github.com/algolia/instantsearch.js/commit/24e3b34c944ec32b414e845550e9c6c02b39cb92)), closes [#4759](https://github.com/algolia/instantsearch.js/issues/4759) + + +### Features + +* **ts:** convert poweredBy widget ([#4756](https://github.com/algolia/instantsearch.js/issues/4756)) ([142660a](https://github.com/algolia/instantsearch.js/commit/142660a2bc0ab7212265a9ff6dadf7a7f1081c69)) + + + +# [4.22.0](https://github.com/algolia/instantsearch.js/compare/v4.21.0...v4.22.0) (2021-05-05) + + +### Bug Fixes + +* **insights:** do not throw when userToken is not given ([#4724](https://github.com/algolia/instantsearch.js/issues/4724)) ([8241b29](https://github.com/algolia/instantsearch.js/commit/8241b2909c981a6bb52e9f4f9b6bacb7bc60263b)) +* **insights:** use getUserToken method instead of _get ([#4744](https://github.com/algolia/instantsearch.js/issues/4744)) ([05d05a9](https://github.com/algolia/instantsearch.js/commit/05d05a9a8ad79e4ec8b183a3d17c2360430c302e)) +* **relevantSort:** remove "relevantSort" nesting, since there's only one property ([#4735](https://github.com/algolia/instantsearch.js/issues/4735)) ([f742083](https://github.com/algolia/instantsearch.js/commit/f74208396159524086341be4acf84d2af2b44135)) +* **connectToggleRefinement:** nest getRenderState per attribute ([#4743](https://github.com/algolia/instantsearch.js/issues/4743)) ([b9c884d](https://github.com/algolia/instantsearch.js/commit/b9c884daa406e1be63482ed198674b2ba22e66f2)) +* **connectToggleRefinement:** remove search parameters from render state ([#4743](https://github.com/algolia/instantsearch.js/issues/4743)) ([b9c884d](https://github.com/algolia/instantsearch.js/commit/b9c884daa406e1be63482ed198674b2ba22e66f2)) + + +### Features + +* **core:** add getUiState function ([#4750](https://github.com/algolia/instantsearch.js/issues/4750)) ([adce212](https://github.com/algolia/instantsearch.js/commit/adce2127de6c652ee6364e889a525d9d0ff6efdd)) +* **dynamicWidgets:** implementation ([#4687](https://github.com/algolia/instantsearch.js/issues/4687)) ([2e7ccc9](https://github.com/algolia/instantsearch.js/commit/2e7ccc91c8d2e4aa50c82a186cce057907042ed4)) +* **ts:** migrate toggleRefinement & connectToggleRefinement ([#4743](https://github.com/algolia/instantsearch.js/issues/4743)) ([b9c884d](https://github.com/algolia/instantsearch.js/commit/b9c884daa406e1be63482ed198674b2ba22e66f2)) +* **widget:** add access to "parent" in dispose ([#4745](https://github.com/algolia/instantsearch.js/issues/4745)) ([3fca986](https://github.com/algolia/instantsearch.js/commit/3fca986542e8b18312a6c6be810bf5fb986804a4)) + + + +# [4.21.0](https://github.com/algolia/instantsearch.js/compare/v4.20.0...v4.21.0) (2021-04-12) + + +### Bug Fixes + +* **infiniteHits:** fix wrong behavior of showPrevious regarding cachedHits ([#4725](https://github.com/algolia/instantsearch.js/issues/4725)) ([40b27b6](https://github.com/algolia/instantsearch.js/commit/40b27b668ec1dcb8608b299c941e0003b43911d3)) +* **ratingMenu:** use url in default template ([#4728](https://github.com/algolia/instantsearch.js/issues/4728)) ([31d9c50](https://github.com/algolia/instantsearch.js/commit/31d9c50344818cd4f4e62993a981ec3616d8b88e)) + + +### Features + +* **middleware:** accept partial methods ([#4673](https://github.com/algolia/instantsearch.js/issues/4673)) ([8f2aad2](https://github.com/algolia/instantsearch.js/commit/8f2aad2f0465cc883681143f350a11c24ce694e2)) +* **ts:** convert hierarchical-menu to TypeScript ([#4711](https://github.com/algolia/instantsearch.js/issues/4711)) ([870e2f7](https://github.com/algolia/instantsearch.js/commit/870e2f7285d58c48196356cd88fb4aca66feb7aa)) +* **ts:** convert RefinementList component to TypeScript ([#4702](https://github.com/algolia/instantsearch.js/issues/4702)) ([fd562de](https://github.com/algolia/instantsearch.js/commit/fd562de5e50e3889abaa9ef8151faa1b5179d7f6)) +* **ts:** convert search-box to TypeScript ([#4710](https://github.com/algolia/instantsearch.js/issues/4710)) ([e73257a](https://github.com/algolia/instantsearch.js/commit/e73257a466082207c0289f22bad523334d101aae)) + + + +# [4.20.0](https://github.com/algolia/instantsearch.js/compare/v4.19.0...v4.20.0) (2021-04-06) + + +### Features + +* **clearRefinements:** implement canRefine ([#4684](https://github.com/algolia/instantsearch.js/issues/4684)) ([a898f09](https://github.com/algolia/instantsearch.js/commit/a898f09bddca5db1f6782104375df3873d49c688)) +* **currentRefinements:** implement canRefine ([#4697](https://github.com/algolia/instantsearch.js/issues/4697)) ([4db75ba](https://github.com/algolia/instantsearch.js/commit/4db75baa9ff2e18f871547511d8f1234eea9d41b)) +* **hierarchicalMenu:** implement canRefine ([#4685](https://github.com/algolia/instantsearch.js/issues/4685)) ([0d2e450](https://github.com/algolia/instantsearch.js/commit/0d2e450aed2aaac72ae7ff7f1bb322ce6992c8ba)) +* **middleware:** add unuse method ([#4708](https://github.com/algolia/instantsearch.js/issues/4708)) ([8e3c406](https://github.com/algolia/instantsearch.js/commit/8e3c406c8f29bcae56d2f82f07cbd087043346fe)) +* **pagination:** implement canRefine ([#4683](https://github.com/algolia/instantsearch.js/issues/4683)) ([3ae51e6](https://github.com/algolia/instantsearch.js/commit/3ae51e60543984463a13b25e64aa2f879c91313e)) +* **range:** implement canRefine ([#4686](https://github.com/algolia/instantsearch.js/issues/4686)) ([a99ab6f](https://github.com/algolia/instantsearch.js/commit/a99ab6f968b791ffa31cd17dda598c293e73b88e)) +* **ratingMenu:** implement canRefine ([#4691](https://github.com/algolia/instantsearch.js/issues/4691)) ([42191a0](https://github.com/algolia/instantsearch.js/commit/42191a097a048a325234dd3f40f7799145628cd6)) +* **toggleRefinement:** implement canRefine ([#4689](https://github.com/algolia/instantsearch.js/issues/4689)) ([48dc7f8](https://github.com/algolia/instantsearch.js/commit/48dc7f8423c92b21bcd59856bf2fc685ae4aba69)) +* **ts:** convert rating-menu to TypeScript ([#4701](https://github.com/algolia/instantsearch.js/issues/4701)) ([f14ca08](https://github.com/algolia/instantsearch.js/commit/f14ca0891237a7a49b09d881cddedb93efc3a266)) +* **ts:** convert Template component to TypeScript ([#4703](https://github.com/algolia/instantsearch.js/issues/4703)) ([0688571](https://github.com/algolia/instantsearch.js/commit/068857137b85d1065bc5997514461d72fe595130)) + + + +# [4.19.0](https://github.com/algolia/instantsearch.js/compare/v4.18.0...v4.19.0) (2021-03-30) + + +### Bug Fixes + +* **setUiState:** make sure previous ui state is stored ([#4699](https://github.com/algolia/instantsearch.js/issues/4699)) ([0f5d688](https://github.com/algolia/instantsearch.js/commit/0f5d6888c5e77c750d264ed19be3418d920266af)) + + +### Features + +* **relevantSort:** implement canRefine ([#4693](https://github.com/algolia/instantsearch.js/issues/4693)) ([24d9ded](https://github.com/algolia/instantsearch.js/commit/24d9ded0c0e3246b91fe16ab1d1d579c17d68731)) +* **currentRefinements:** implement canRefine ([#4690](https://github.com/algolia/instantsearch.js/issues/4690)) ([f02416c](https://github.com/algolia/instantsearch.js/commit/f02416cf226ec3f7c2238b3e0902ec6f78381515)) +* **ts:** convert sortBy, connectSortBy ([#4700](https://github.com/algolia/instantsearch.js/issues/4700)) ([86de1e0](https://github.com/algolia/instantsearch.js/commit/86de1e0a675c91b75e72463e6b11df62739d69b5)) + + + +# [4.18.0](https://github.com/algolia/instantsearch.js/compare/v4.17.0...v4.18.0) (2021-03-24) + + +### Bug Fixes + +* **createURL:** correctly remove page in state ([#4679](https://github.com/algolia/instantsearch.js/issues/4679)) ([48c080e](https://github.com/algolia/instantsearch.js/commit/48c080ef85b974e68e1c80ceffea7a0138407a1e)) +* **utils:** circular dependency in createSendEventForHits ([#4680](https://github.com/algolia/instantsearch.js/issues/4680)) ([045f33b](https://github.com/algolia/instantsearch.js/commit/045f33bc6184fb04501e39a5a97e1e969095389a)) + + +### Features + +* **metadata:** expose client's algolia agent ([#4694](https://github.com/algolia/instantsearch.js/issues/4694)) ([3d0cb5b](https://github.com/algolia/instantsearch.js/commit/3d0cb5b69056674246efb1acf33e143ac7ae4915)) +* **ts:** convert connectRefinementList, refinementList ([#4658](https://github.com/algolia/instantsearch.js/issues/4658)) ([794b2d3](https://github.com/algolia/instantsearch.js/commit/794b2d3316ae7ee79cfa0643565b65e5bec5c7c1)) +* **ts:** convert stats, connectStats ([#4681](https://github.com/algolia/instantsearch.js/issues/4681)) ([37bbd01](https://github.com/algolia/instantsearch.js/commit/37bbd016a83d5cb66d1f78c0865f7677fa7098fb)) +* **ts:** update to typescript 4 ([#4654](https://github.com/algolia/instantsearch.js/issues/4654)) ([638e437](https://github.com/algolia/instantsearch.js/commit/638e437fdd80af0cfd38818f9da37a50f8f4343f)) + + + +# [4.17.0](https://github.com/algolia/instantsearch.js/compare/v4.16.1...v4.17.0) (2021-03-09) + + +### Bug Fixes + +* **bindEvent:** escape payload correctly ([#4670](https://github.com/algolia/instantsearch.js/issues/4670)) ([c1cbaf4](https://github.com/algolia/instantsearch.js/commit/c1cbaf49f6af9784535df80d024cdad56f3ddb84)) + + +### Features + +* **insights:** add hits and attributes to InsightsEvent ([#4667](https://github.com/algolia/instantsearch.js/issues/4667)) ([17ef71c](https://github.com/algolia/instantsearch.js/commit/17ef71c32586d0a93bb3905696b6ff7c7be1f3f9)) + + + +## [4.16.1](https://github.com/algolia/instantsearch.js/compare/v4.16.0...v4.16.1) (2021-03-03) + + +### Bug Fixes + +* **relevantSort:** rename smartSort to relevantSort ([#4668](https://github.com/algolia/instantsearch.js/issues/4668)) ([579eee8](https://github.com/algolia/instantsearch.js/commit/579eee8d38effe067407a269e493400c460eb842)) + + + +# [4.16.0](https://github.com/algolia/instantsearch.js/compare/v4.15.0...v4.16.0) (2021-03-01) + + +### Bug Fixes + +* **relevantSort:** export the widget and the connector ([#4663](https://github.com/algolia/instantsearch.js/issues/4663)) ([e7aaa8c](https://github.com/algolia/instantsearch.js/commit/e7aaa8ceb47b8cafc3a3a323ebe47f45f3841ba4)) + + +### Features + +* **answers:** add `EXPERIMENTAL_answers` widget ([#4581](https://github.com/algolia/instantsearch.js/issues/4581)) ([e4c9070](https://github.com/algolia/instantsearch.js/commit/e4c9070250779d7d3afabe7f9a19644717bc12c8)), closes [#4635](https://github.com/algolia/instantsearch.js/issues/4635) + + + +# [4.15.0](https://github.com/algolia/instantsearch.js/compare/v4.14.2...v4.15.0) (2021-02-23) + + +### Features + +* **relevantSort:** add widget ([#4648](https://github.com/algolia/instantsearch.js/issues/4648)) ([89c6e86](https://github.com/algolia/instantsearch.js/commit/89c6e868f490e9b6e507dd70c215e962f4c69ccb)) +* **stats:** apply nbSortedHits ([#4649](https://github.com/algolia/instantsearch.js/issues/4649)) ([34478c1](https://github.com/algolia/instantsearch.js/commit/34478c198dcafbd45fd101db0cd2fbe6328272b8)) +* **ts:** convert menu ([#4652](https://github.com/algolia/instantsearch.js/issues/4652)) ([2271b43](https://github.com/algolia/instantsearch.js/commit/2271b4379918e865a1b0cea09c139e517df97bc5)) + + + +## [4.14.2](https://github.com/algolia/instantsearch.js/compare/v4.14.1...v4.14.2) (2021-02-17) + + +### Bug Fixes + +* **insights:** don't reset page ([#4655](https://github.com/algolia/instantsearch.js/issues/4655)) ([2b31250](https://github.com/algolia/instantsearch.js/commit/2b312508e8be59284180e7f490ce0aac80f9c2b6)) + + + +## [4.14.1](https://github.com/algolia/instantsearch.js/compare/v4.14.0...v4.14.1) (2021-02-16) + + +### Bug Fixes + +* **compat:** remove references to window ([#4651](https://github.com/algolia/instantsearch.js/issues/4651)) ([1ede1ae](https://github.com/algolia/instantsearch.js/commit/1ede1ae392d3a12f5b0fe29075ffeb05e572a874)), closes [#4650](https://github.com/algolia/instantsearch.js/issues/4650) + + + +# [4.14.0](https://github.com/algolia/instantsearch.js/compare/v4.13.2...v4.14.0) (2021-02-09) + + +### Features + +* **queryRuleContext:** allow to make refinements based on query ([#4638](https://github.com/algolia/instantsearch.js/issues/4638)) ([dd033fc](https://github.com/algolia/instantsearch.js/commit/dd033fc58ff11027e4f4b6157aedf0aea0326af3)) + + + +## [4.13.2](https://github.com/algolia/instantsearch.js/compare/v4.13.1...v4.13.2) (2021-02-03) + + +### Bug Fixes + +* **range:** don't go out of bounds with min or max given ([#4627](https://github.com/algolia/instantsearch.js/issues/4627)) ([8327ec0](https://github.com/algolia/instantsearch.js/commit/8327ec01c3940dfc20f5f1c8e3e0fc85f29af690)) + + + +## [4.13.1](https://github.com/algolia/instantsearch.js/compare/v4.13.0...v4.13.1) (2021-01-26) + + +### Bug Fixes + +* **index:** only set listeners on init once ([#4634](https://github.com/algolia/instantsearch.js/issues/4634)) ([730b49d](https://github.com/algolia/instantsearch.js/commit/730b49d43782b98c5119a5d3dbfec09073bde1d0)) + + + +# [4.13.0](https://github.com/algolia/instantsearch.js/compare/v4.12.0...v4.13.0) (2021-01-26) + + +### Features + +* **ratingMenu:** Add support for floats in values ([#4611](https://github.com/algolia/instantsearch.js/issues/4611)) ([3f52784](https://github.com/algolia/instantsearch.js/commit/3f52784862b72ef59acfc0735fe482cbfa6ad1f5)) + + + +# [4.12.0](https://github.com/algolia/instantsearch.js/compare/v4.11.0...v4.12.0) (2021-01-20) + + +### Code Refactoring + +* rename all references to widgetOptions as widgetParams ([#4612](https://github.com/algolia/instantsearch.js/issues/4612)) ([ff9a18d](https://github.com/algolia/instantsearch.js/commit/ff9a18d31635013ee4bc242291f121c8e5827f38)) + + +### Features + +* **core:** expose metadata of widgets ([#4604](https://github.com/algolia/instantsearch.js/issues/4604)) ([1fcf716](https://github.com/algolia/instantsearch.js/commit/1fcf71657b176b14067df36765a38e32d2a6dd9b)) +* **widgets:** annotate widget instances with $$widgetType ([#4624](https://github.com/algolia/instantsearch.js/issues/4624)) ([df3f478](https://github.com/algolia/instantsearch.js/commit/df3f47867e65a2e56c6da968d7a154471172adce)) + + +### BREAKING CHANGES + +* if you're using experimental-typescript and importing a type of the form `...WidgetOptions`, this now becomes `...WidgetParams` (eg. replace `HitsWidgetOptions` with `HitsWidgetParams`) + + + +# [4.11.0](https://github.com/algolia/instantsearch.js/compare/v4.10.0...v4.11.0) (2021-01-14) + + +### Bug Fixes + +* **index:** do not warn for nested index widget ([#4620](https://github.com/algolia/instantsearch.js/issues/4620)) ([7502744](https://github.com/algolia/instantsearch.js/commit/7502744cd546181ec4429cd6b8144200ba2a8f82)) +* **insights:** don't quote values ([#4619](https://github.com/algolia/instantsearch.js/issues/4619)) ([ac2444c](https://github.com/algolia/instantsearch.js/commit/ac2444c36c6f41e35ed6d1a6d045479b35416576)) + + +### Features + +* **insights:** accept initParams for insightsClient ([#4608](https://github.com/algolia/instantsearch.js/issues/4608)) ([0a0ae2b](https://github.com/algolia/instantsearch.js/commit/0a0ae2bf10a4e210373b8fde635949a56c86e52e)) + + + +# [4.10.0](https://github.com/algolia/instantsearch.js/compare/v4.9.2...v4.10.0) (2021-01-05) + + +### Features + +* **index:** expose createURL ([#4603](https://github.com/algolia/instantsearch.js/issues/4603)) ([f57e9c5](https://github.com/algolia/instantsearch.js/commit/f57e9c5a46e927b8dd38f167ee5c467151334a08)) +* **index:** expose scoped results getter ([#4609](https://github.com/algolia/instantsearch.js/issues/4609)) ([a41b1e4](https://github.com/algolia/instantsearch.js/commit/a41b1e46bb195e6ef1f9bdbdde64d9300246c22f)) +* **reverseHighlight/reverseSnippet:** Implements reverseHighlight and reverseSnippet ([#4592](https://github.com/algolia/instantsearch.js/issues/4592)) ([718bf45](https://github.com/algolia/instantsearch.js/commit/718bf458152bb55bab1efb542adb8e31298c0c3c)) + + + +## [4.9.2](https://github.com/algolia/instantsearch.js/compare/v4.9.1...v4.9.2) (2020-12-15) + + +### Bug Fixes + +* warn about invalid userToken ([#4605](https://github.com/algolia/instantsearch.js/issues/4605)) ([5fce769](https://github.com/algolia/instantsearch.js/commit/5fce769f42fe5b44f73eb68f3858a6ea1ec2d854)) +* **types:** correct type for queryHook return ([#4602](https://github.com/algolia/instantsearch.js/issues/4602)) ([acff8db](https://github.com/algolia/instantsearch.js/commit/acff8db3a2238edf40da1ee6b44e93a94e090698)) + + + +## [4.9.1](https://github.com/algolia/instantsearch.js/compare/v4.9.0...v4.9.1) (2020-12-08) + + +### Bug Fixes + +* **range:** consistently convert min & max to numbers ([#4587](https://github.com/algolia/instantsearch.js/issues/4587)) ([ccf159e](https://github.com/algolia/instantsearch.js/commit/ccf159efcb94e9c8c04c558fcb69e2e3d8d79729)) + + + +# [4.9.0](https://github.com/algolia/instantsearch.js/compare/v4.8.7...v4.9.0) (2020-12-01) + + +### Bug Fixes + +* remove a warning about insights that is not relevant anymore ([#4593](https://github.com/algolia/instantsearch.js/issues/4593)) ([b5f6a47](https://github.com/algolia/instantsearch.js/commit/b5f6a479ff1b9b692c733f51e39eade724ff3413)) + + +### Features + +* **autocomplete:** implement `getWidgetRenderState` ([#4466](https://github.com/algolia/instantsearch.js/issues/4466)) ([c215836](https://github.com/algolia/instantsearch.js/commit/c2158364a63d0f05bb820f802871a2f093e041ec)) +* **breadcrumb:** implement `getWidgetRenderState` ([#4467](https://github.com/algolia/instantsearch.js/issues/4467)) ([80b348e](https://github.com/algolia/instantsearch.js/commit/80b348ef1a6a29b1897f5ee1d680dcbaba5fa4fe)) +* **clearRefinements:** implement `getWidgetRenderState` ([#4468](https://github.com/algolia/instantsearch.js/issues/4468)) ([2b3117c](https://github.com/algolia/instantsearch.js/commit/2b3117c34207514967ff453b6f5d8275a6b0b0ec)) +* **configure:** getRenderState for multiple configure widgets ([#4582](https://github.com/algolia/instantsearch.js/issues/4582)) ([5432af1](https://github.com/algolia/instantsearch.js/commit/5432af1df3c1ee4e62b87ede76acda7b749f38dd)) +* **configure:** implement `getWidgetRenderState` ([#4469](https://github.com/algolia/instantsearch.js/issues/4469)) ([3a1b325](https://github.com/algolia/instantsearch.js/commit/3a1b32556f3d5a6a3330b404688e06d5815a2390)) +* **connectPagination:** add getWidgetRenderState & refactor to TS ([#4574](https://github.com/algolia/instantsearch.js/issues/4574)) ([1553aa3](https://github.com/algolia/instantsearch.js/commit/1553aa36c8bb8664b5e74fd2378ea2ef45a52acf)) +* **core:** introduce `getWidgetRenderState` (2/n) ([#4457](https://github.com/algolia/instantsearch.js/issues/4457)) ([4839bb6](https://github.com/algolia/instantsearch.js/commit/4839bb61e4c8ee6083710195d5db5684c7b0889f)) +* **core:** introduce `getWidgetUiState` lifecycle hook (1/n) ([#4454](https://github.com/algolia/instantsearch.js/issues/4454)) ([cf21ea4](https://github.com/algolia/instantsearch.js/commit/cf21ea4cb580ed523828c926b7ba724c46eed8a4)) +* **currentRefinements:** implement `getWidgetRenderState` ([#4470](https://github.com/algolia/instantsearch.js/issues/4470)) ([b8df824](https://github.com/algolia/instantsearch.js/commit/b8df824e26a164280d9da9b3c3ce41ad56962439)) +* **connectQueryRules:** getWidgetRenderState ([#4572](https://github.com/algolia/instantsearch.js/issues/4572)) ([edcc4a4](https://github.com/algolia/instantsearch.js/commit/edcc4a463d32af21bb73acbca879d4982ae9006f)) +* **connectGeoSearch:** support getWidgetRenderState ([#4564](https://github.com/algolia/instantsearch.js/issues/4564)) ([8d06fba](https://github.com/algolia/instantsearch.js/commit/8d06fba40be0392daa1b48f235d93d92bb6b5e93)) +* **hierarchicalMenu:** implement `getWidgetRenderState` ([#4471](https://github.com/algolia/instantsearch.js/issues/4471)) ([9fd3cd0](https://github.com/algolia/instantsearch.js/commit/9fd3cd06dfc3b5302c00ee1820ff58be2a37c3b7)) +* **highlight:** accept array for attribute ([#4588](https://github.com/algolia/instantsearch.js/issues/4588)) ([b0c3a3a](https://github.com/algolia/instantsearch.js/commit/b0c3a3a960646bff22b2d28e21aa2675484a354b)) +* **hits:** implement `getWidgetRenderState` ([#4525](https://github.com/algolia/instantsearch.js/issues/4525)) ([3391ff7](https://github.com/algolia/instantsearch.js/commit/3391ff7bac8b406ab474e712408bda2be69934c9)) +* **hitsPerPage:** implement `getRenderState` and `getWidgetRenderState` ([#4532](https://github.com/algolia/instantsearch.js/issues/4532)) ([7ad10ea](https://github.com/algolia/instantsearch.js/commit/7ad10ea648f48766061153994da90920a5194103)) +* **infinite-hits:** implement `getRenderState` and `getWidgetRenderState` ([#4535](https://github.com/algolia/instantsearch.js/issues/4535)) ([98c70d9](https://github.com/algolia/instantsearch.js/commit/98c70d980bc1036057a2dd99dc6aeee8343e4472)) +* **menu:** implement `getRenderState` and `getWidgetRenderState` ([#4540](https://github.com/algolia/instantsearch.js/issues/4540)) ([239906c](https://github.com/algolia/instantsearch.js/commit/239906c7fdb36c691b9a9aca343802a8ccc616c8)) +* **panel:** spread widgetRenderState in the options in panel ([#4527](https://github.com/algolia/instantsearch.js/issues/4527)) ([8f82eaa](https://github.com/algolia/instantsearch.js/commit/8f82eaa34e7abe9070e404a5a45d352af61d940a)), closes [#4558](https://github.com/algolia/instantsearch.js/issues/4558) +* **poweredBy:** getWidgetRenderState ([#4551](https://github.com/algolia/instantsearch.js/issues/4551)) ([cd816a4](https://github.com/algolia/instantsearch.js/commit/cd816a41afe0704eab3cbd1f019fc660ca5d255e)) +* **range:** implement `getRenderState` and `getWidgetRenderState` ([#4536](https://github.com/algolia/instantsearch.js/issues/4536)) ([d67bfcd](https://github.com/algolia/instantsearch.js/commit/d67bfcdb828cc8b35a5c959e54823b6d3c37b087)) +* **rating-menu:** implement `getRenderState` and `getWidgetRenderState` ([#4548](https://github.com/algolia/instantsearch.js/issues/4548)) ([166a96c](https://github.com/algolia/instantsearch.js/commit/166a96c170c137e78b3fe3b9f69f73744f4fcb8b)) +* **refinement-list:** implement `getRenderState` and `getWidgetRenderState` ([#4549](https://github.com/algolia/instantsearch.js/issues/4549)) ([c824bd0](https://github.com/algolia/instantsearch.js/commit/c824bd074d388e44e99b53592167cffcacae3377)) +* **numeric-menu:** add `getRenderState` ([#4550](https://github.com/algolia/instantsearch.js/issues/4550)) ([5385edf](https://github.com/algolia/instantsearch.js/commit/5385edf39d3ac1515845b5e20ce179a2869ab86d)) +* **sortBy:** implement `getRenderState` and `getWidgetRenderState` ([#4568](https://github.com/algolia/instantsearch.js/issues/4568)) ([fd249f7](https://github.com/algolia/instantsearch.js/commit/fd249f700854d1f11e97cb5dac2c1b3964c59e29)) +* **stats:** implement `getRenderState` and `getWidgetRenderState` ([#4565](https://github.com/algolia/instantsearch.js/issues/4565)) ([b8dfd6d](https://github.com/algolia/instantsearch.js/commit/b8dfd6dbb8c462b0d0571e9f0499df6e4dda7745)) +* **toggleRefinement:** implement `getRenderState` and `getWidgetRenderState` ([#4569](https://github.com/algolia/instantsearch.js/issues/4569)) ([f2c9a10](https://github.com/algolia/instantsearch.js/commit/f2c9a102cba9abe21ed08b18e979713156e10901)) +* **voice-search:** implement `getRenderState` and `getWidgetRenderState` ([#4557](https://github.com/algolia/instantsearch.js/issues/4557)) ([d308da1](https://github.com/algolia/instantsearch.js/commit/d308da1ab892cc5185616cd5b8a4a3f488e708c4)) + + + +## [4.8.7](https://github.com/algolia/instantsearch.js/compare/v4.8.6...v4.8.7) (2020-11-19) + + +### Bug Fixes + +* **insights:** use internal `find` util method ([#4580](https://github.com/algolia/instantsearch.js/issues/4580)) ([61b855b](https://github.com/algolia/instantsearch.js/commit/61b855b28282992a55795db88f8bfef2e5825cb3)) + + + +## [4.8.6](https://github.com/algolia/instantsearch.js/compare/v4.8.5...v4.8.6) (2020-11-17) + + +### Bug Fixes + +* **insights:** do not throw when sending event right after creating insights middleware ([#4575](https://github.com/algolia/instantsearch.js/issues/4575)) ([d963f8d](https://github.com/algolia/instantsearch.js/commit/d963f8d6155e6bb56f852e00528ed10dc9bcc461)) + + + +## [4.8.5](https://github.com/algolia/instantsearch.js/compare/v4.8.4...v4.8.5) (2020-11-10) + + +### Bug Fixes + +* **configure:** pass the latest state to onStateChange ([#4555](https://github.com/algolia/instantsearch.js/issues/4555)) ([6ab76e8](https://github.com/algolia/instantsearch.js/commit/6ab76e82f93e8c7bb2bfdde267b6d7f4f9b333ff)) + + + +## [4.8.4](https://github.com/algolia/instantsearch.js/compare/v4.8.3...v4.8.4) (2020-10-27) + + +### Bug Fixes + +* **infiniteHits:** do not cache the cached hits inside the connector ([#4534](https://github.com/algolia/instantsearch.js/issues/4534)) ([c97395e](https://github.com/algolia/instantsearch.js/commit/c97395e2d3443651e628617f0974703a100a988e)) +* **insights:** show deprecation warnings for old insights related properties and functions ([#4524](https://github.com/algolia/instantsearch.js/issues/4524)) ([c93e1cf](https://github.com/algolia/instantsearch.js/commit/c93e1cfcad06b327066078088410eb7d51972790)) + + + +## [4.8.3](https://github.com/algolia/instantsearch.js/compare/v4.8.2...v4.8.3) (2020-09-29) + + +### Bug Fixes + +* **middleware:** rename EXPERIMENTAL_use to use ([#4450](https://github.com/algolia/instantsearch.js/issues/4450)) ([87ecb99](https://github.com/algolia/instantsearch.js/commit/87ecb99f33ab4930d8ec1996ddba9db0a9d07da4)) +* **refinementList:** cap `maxFacetHits` to 100 for SFFV ([#4523](https://github.com/algolia/instantsearch.js/issues/4523)) ([baf1f02](https://github.com/algolia/instantsearch.js/commit/baf1f027fc2436e86536fffbee11a595cfd7dac0)) + + + +## [4.8.2](https://github.com/algolia/instantsearch.js/compare/v4.8.1...v4.8.2) (2020-09-22) + + +### Bug Fixes + +* **insights:** fix the regression that it didn't send events with instantsearch.insights() ([#4519](https://github.com/algolia/instantsearch.js/issues/4519)) ([10e38df](https://github.com/algolia/instantsearch.js/commit/10e38df02608071cd7272e829b6748be41b9c2c0)) + + + +## [4.8.1](https://github.com/algolia/instantsearch.js/compare/v4.8.0...v4.8.1) (2020-09-15) + + +### Bug Fixes + +* **hitsPerPage:** update link to hitsPerPage widget ([#4513](https://github.com/algolia/instantsearch.js/issues/4513)) ([daa4bb9](https://github.com/algolia/instantsearch.js/commit/daa4bb944065dede46d716308325039c3602d9dc)) +* **infiniteHits:** compute `isLastPage` based on cached pages ([#4509](https://github.com/algolia/instantsearch.js/issues/4509)) ([b6fb1ab](https://github.com/algolia/instantsearch.js/commit/b6fb1abcf5ac456dc39adaeb97945665cad8fa11)) + + + +# [4.8.0](https://github.com/algolia/instantsearch.js/compare/v4.7.2...v4.8.0) (2020-09-08) + + +### Features + +* **insights:** introduce `insights` middleware ([#4446](https://github.com/algolia/instantsearch.js/issues/4446)) ([9bc6359](https://github.com/algolia/instantsearch.js/commit/9bc635986097736272aac8c5d3380a255488fdb7)) + + + +## [4.7.2](https://github.com/algolia/instantsearch.js/compare/v4.7.1...v4.7.2) (2020-08-31) + + +### Bug Fixes + +* **bundlesize:** remove prop-type imports ([#4491](https://github.com/algolia/instantsearch.js/issues/4491)) ([8361cd6](https://github.com/algolia/instantsearch.js/commit/8361cd63b3bac15eb6250e9f509fb15c1fc57f48)) +* **router:** skip router write on duplicate entries ([#4487](https://github.com/algolia/instantsearch.js/issues/4487)) ([9296022](https://github.com/algolia/instantsearch.js/commit/9296022fecadfbf82f15e837c215a1356eac4bc5)) +* **searchBox:** pass "spellcheck" property correctly to input ([#4483](https://github.com/algolia/instantsearch.js/issues/4483)) ([3cf43c7](https://github.com/algolia/instantsearch.js/commit/3cf43c7187841cf961a0280307af1a5f7a4e8da7)) + + + +# [4.7.1](https://github.com/algolia/instantsearch.js/compare/v4.7.0...v4.7.1) (2020-08-19) + + +### Bug Fixes + +* **configureRelatedItems:** support nested attributes ([#4480](https://github.com/algolia/instantsearch.js/issues/4480)) ([2266004](https://github.com/algolia/instantsearch.js/commit/2266004f274138b45640f000a5da8aa14e419e6c)) +* **connectToggleRefinement:** fix onFacetValue/offFacetValue on render when using arrays for on/off ([#4449](https://github.com/algolia/instantsearch.js/issues/4449)) ([fd3e83f](https://github.com/algolia/instantsearch.js/commit/fd3e83f2cf2e5b44b7d29eb4c67526e55c18d708)) +* **index:** don't show a development warning for inconsistent UI state in `connectRange` ([#4440](https://github.com/algolia/instantsearch.js/issues/4440)) ([eb8c8b3](https://github.com/algolia/instantsearch.js/commit/eb8c8b3494cb66dbef1d03e7d74374dc49059345)), closes [#4437](https://github.com/algolia/instantsearch.js/issues/4437) +* **infiniteHits:** work with controlled mode ([#4435](https://github.com/algolia/instantsearch.js/issues/4435)) ([68b20f4](https://github.com/algolia/instantsearch.js/commit/68b20f487fcd54fd7dec11b4c494b6aa94a18516)) +* **typescript:** correct dummy v4 client ([#4459](https://github.com/algolia/instantsearch.js/issues/4459)) ([ca0c394](https://github.com/algolia/instantsearch.js/commit/ca0c3946608bb8ec5dcf5378d8d382d809a4d86f)) +* **typescript:** jsDoc comments which conform to Connector definition ([#4458](https://github.com/algolia/instantsearch.js/issues/4458)) ([5209bdb](https://github.com/algolia/instantsearch.js/commit/5209bdb9189e7cbbf9514b62fde55f923b2b3273)) +* **typescript:** export correct types ([#4476](https://github.com/algolia/instantsearch.js/issues/4476)) ([5fb4c5b](https://github.com/algolia/instantsearch.js/commit/5fb4c5b9d6ac75636e94514598ef5d5a86affafd)) + + + +# [4.7.0](https://github.com/algolia/instantsearch.js/compare/v4.6.0...v4.7.0) (2020-06-15) + + +### Bug Fixes + +* **rangeInput:** clear input when refinement is cleared ([#4429](https://github.com/algolia/instantsearch.js/issues/4429)) ([a2c7663](https://github.com/algolia/instantsearch.js/commit/a2c7663424c5cd59e17ed841e12abaa19e524b14)) + + +### Features + +* **infiniteHits:** support cache ([#4431](https://github.com/algolia/instantsearch.js/issues/4431)) ([008c01c](https://github.com/algolia/instantsearch.js/commit/008c01c7cd09e4fcecdf53a4b299960de2b7a026)) + + + +# [4.6.0](https://github.com/algolia/instantsearch.js/compare/v4.5.0...v4.6.0) (2020-06-08) + + +### Bug Fixes + +* **connectPagination:** set `isLastPage` to `true` when no results ([#4422](https://github.com/algolia/instantsearch.js/issues/4422)) ([92bcc02](https://github.com/algolia/instantsearch.js/commit/92bcc0271927f0239083366fff920530977e32cd)) +* **rangeInput:** support typing float numbers ([#4418](https://github.com/algolia/instantsearch.js/issues/4418)) ([61b19b8](https://github.com/algolia/instantsearch.js/commit/61b19b87ae3afdabde8ef355e3b727059ae59911)) + + +### Features + +* **connectToggleRefinement:** add support for array values ([#4420](https://github.com/algolia/instantsearch.js/issues/4420)) ([fe1fbee](https://github.com/algolia/instantsearch.js/commit/fe1fbee4ad59c5f24831ed38a419906bbd7d2c15)) + + + +# [4.5.0](https://github.com/algolia/instantsearch.js/compare/v4.4.1...v4.5.0) (2020-05-13) + + +### Bug Fixes + +* **middleware:** subscribe middleware after `init` ([#4322](https://github.com/algolia/instantsearch.js/issues/4322)) ([f61fc4d](https://github.com/algolia/instantsearch.js/commit/f61fc4d133c118cfe8f2a2ba2e02d037a21cf8e0)) + + +### Features + +* **index:** support adding index widget with initial UI state ([#4359](https://github.com/algolia/instantsearch.js/issues/4359)) ([5ff4c83](https://github.com/algolia/instantsearch.js/commit/5ff4c8307c2be7bde7fb53aa9935a243e6532fe2)) +* **voice:** allow custom voice helper ([#4363](https://github.com/algolia/instantsearch.js/issues/4363)) ([4a00fa6](https://github.com/algolia/instantsearch.js/commit/4a00fa607354aefaae468735b590e237a2d46f9b)) + + + +## [4.4.1](https://github.com/algolia/instantsearch.js/compare/v4.4.0...v4.4.1) (2020-04-29) + + +### Bug Fixes + +* **range:** fix range calculation when step is set ([#4398](https://github.com/algolia/instantsearch.js/issues/4398)) ([a36b4e0](https://github.com/algolia/instantsearch.js/commit/a36b4e0a64afaa9dfa3048c802d010d569c821a9)) +* **router:** don't write an existing URL ([#4392](https://github.com/algolia/instantsearch.js/issues/4392)) ([ee6a9c6](https://github.com/algolia/instantsearch.js/commit/ee6a9c657c97adebba9fb9404eae454c3996b86d)) + + + +# [4.4.0](https://github.com/algolia/instantsearch.js/compare/v4.3.1...v4.4.0) (2020-04-08) + + +### Features + +* introduce controlled mode APIs with `onStateChange` and `setUiState` ([#4362](https://github.com/algolia/instantsearch.js/issues/4362)) ([4953324](https://github.com/algolia/instantsearch.js/commit/4953324ac8a3af4c6a8be411ca9e7cc673ee6561)) + + + +## [4.3.1](https://github.com/algolia/instantsearch.js/compare/v4.3.0...v4.3.1) (2020-03-06) + +This versions fixes a [Cross-Site Scripting](https://en.wikipedia.org/wiki/Cross-site_scripting) (XSS) vulnerability ([#4344](https://github.com/algolia/instantsearch.js/issues/4344)) when using the [`refinementList`](https://www.algolia.com/doc/api-reference/widgets/refinement-list/js/) widget when relying on its default [`item`](https://www.algolia.com/doc/api-reference/widgets/refinement-list/js/#widget-param-item) template and [routing](https://www.algolia.com/doc/api-reference/widgets/instantsearch/js/#widget-param-routing). **We recommend all users to upgrade to this version**. We now escape the `refinementList` `item` template by default, which avoids HTML to be injected. If ever you were relying on this behavior, **which we do not recommend**, you can copy the [previous `item` template](https://github.com/algolia/instantsearch.js/blob/933d9ffb3c0a396a047eeb4b44733b17aa31d081/src/widgets/refinement-list/defaultTemplates.js#L2-L9) into your widget. + +You were not vulnerable to this XSS if: + +- You didn't use [routing](https://www.algolia.com/doc/api-reference/widgets/instantsearch/js/#widget-param-routing) +- You didn't use use the [`refinementList`](https://www.algolia.com/doc/api-reference/widgets/refinement-list/js/) widget ([`connectRefinementList`](https://www.algolia.com/doc/api-reference/widgets/refinement-list/js/#connector) is not subject to this issue) +- You used a custom `item` template for your [`refinementList`](https://www.algolia.com/doc/api-reference/widgets/refinement-list/js/) widget that does not rely on the triple-brace Hogan.js syntax (e.g., `{{{highlighted}}}`) + + +### Bug Fixes + +* **refinementList:** prevent XSS via routing ([#4344](https://github.com/algolia/instantsearch.js/issues/4344)) ([8552221](https://github.com/algolia/instantsearch.js/commit/8552221eff17a4ae5ba9c454054b0eb6e002934d)) + + + +# [4.3.0](https://github.com/algolia/instantsearch.js/compare/v4.2.0...v4.3.0) (2020-02-25) + + +### Bug Fixes + +* **deps:** update dependency algoliasearch-helper to v3.1.1 that fixes a case where refinements for a facet with a name that matches a substring of another facet could be cleared by mistake ([algolia/algoliasearch-helper-js/pull/760](https://github.com/algolia/algoliasearch-helper-js/pull/760)) ([#4335](https://github.com/algolia/instantsearch.js/issues/4335)) ([9bc66cf](https://github.com/algolia/instantsearch.js/commit/381cda05c9c51dc9d3245a6d926e3c919245b723)) + + +### Features + +* **highlight:** add cssClasses to snippet & highlight helper ([#4306](https://github.com/algolia/instantsearch.js/issues/4306)) ([ece0aa6](https://github.com/algolia/instantsearch.js/commit/ece0aa60f05c2c687a23f9219d62ace0d5b866f9)) + + +# [4.2.0](https://github.com/algolia/instantsearch.js/compare/v4.1.1...v4.2.0) (2020-01-23) + + +### Features + +* **algoliasearch:** add support for algoliasearch v4 ([#4294](https://github.com/algolia/instantsearch.js/issues/4294)) ([73f1584](https://github.com/algolia/instantsearch.js/commit/73f158428c7d4de1e3d1bc40bf4342362f275829)) +* **insights:** add getInsightsAnonymousUserToken helper ([#4279](https://github.com/algolia/instantsearch.js/issues/4279)) ([4653f95](https://github.com/algolia/instantsearch.js/commit/4653f95b436a0715ce1489e0b83c00a87e4a02f0)) + + + +## [4.1.1](https://github.com/algolia/instantsearch.js/compare/v4.1.0...v4.1.1) (2019-12-20) + + +### Bug Fixes + +* **configureRelatedItems:** use `facetFilters` to exclude `obje… ([#4264](https://github.com/algolia/instantsearch.js/issues/4264)) ([9bc66cf](https://github.com/algolia/instantsearch.js/commit/9bc66cfb8b13a44840c687a1631696c85e45845f)) +* **index:** fix warning for widgets sharing connectors ([#4260](https://github.com/algolia/instantsearch.js/issues/4260)) ([ec97b4a](https://github.com/algolia/instantsearch.js/commit/ec97b4a07e5d1f9a967f5ee5925ebd3b447e1b02)) +* **insights:** export Insights helper in the ESM build ([#4261](https://github.com/algolia/instantsearch.js/issues/4261)) ([20649af](https://github.com/algolia/instantsearch.js/commit/20649aff54a3150050866038cd3718d6010c353b)) +* **insights:** move 'insightsClient not provided error' to wrapper level ([#4254](https://github.com/algolia/instantsearch.js/issues/4254)) ([15d38dd](https://github.com/algolia/instantsearch.js/commit/15d38ddb87fbd6323f350d42f791c4d7a1505eeb)) + + +### Features + +* **insights:** add hogan helper ([#4253](https://github.com/algolia/instantsearch.js/issues/4253)) ([85739d7](https://github.com/algolia/instantsearch.js/commit/85739d782ae1fad3b87612e4a410eada0ca4fe54)) + + + +# [4.1.0](https://github.com/algolia/instantsearch.js/compare/v4.0.1...v4.1.0) (2019-12-10) + +The [4.0.1](#4.0.1) release contained experimental TypeScript definitions in the ESM build by accident. We rolled this back in 4.1.0 because types will first be released on an experimental tag: `experimental-typescript`. + + +### Bug Fixes + +* **core:** display correct object types in messages ([#4249](https://github.com/algolia/instantsearch.js/issues/4249)) ([fb2c3c9](https://github.com/algolia/instantsearch.js/commit/fb2c3c9c37fd8d28cd4712486c5c637e237fe83b)) +* **insights:** detect clicks on children of `[data-insights]` HTML elements ([#4197](https://github.com/algolia/instantsearch.js/issues/4197)) ([9cac5a3](https://github.com/algolia/instantsearch.js/commit/9cac5a3aa4af616ec7913c17ed7388134c5e7f0a)) +* **insights:** display docs URL when missing ([#4231](https://github.com/algolia/instantsearch.js/issues/4231)) ([9df1e7f](https://github.com/algolia/instantsearch.js/commit/9df1e7f762333bd31b5840b35378d56605fe4844)) +* **widgets:** override connectors' `$$type` ([#4227](https://github.com/algolia/instantsearch.js/issues/4227)) ([50f4af3](https://github.com/algolia/instantsearch.js/commit/50f4af3006a44cd08dd99b3a72bd410340c2e48a)) + + +### Features + +* **middleware:** introduce `EXPERIMENTAL_use` to plug middleware into InstantSearch ([#4224](https://github.com/algolia/instantsearch.js/issues/4224)) ([9d1f7be](https://github.com/algolia/instantsearch.js/commit/9d1f7be9df304a4bc2d07dbd253a73580a0593c3)) +* **router:** plug router as a middleware ([#4224](https://github.com/algolia/instantsearch.js/issues/4224)) ([9d1f7be](https://github.com/algolia/instantsearch.js/commit/9d1f7be9df304a4bc2d07dbd253a73580a0593c3)) +* **insights:** detect window.aa when available on global scope and a function ([#4191](https://github.com/algolia/instantsearch.js/issues/4191)) ([d6df5af](https://github.com/algolia/instantsearch.js/commit/d6df5affc4111aaf2c82f847ffe877793faac86c)) +* **typescript:** add declaration files (experimental) ([#4220](https://github.com/algolia/instantsearch.js/issues/4220)) ([ebacfe5](https://github.com/algolia/instantsearch.js/commit/ebacfe55bc0fddf9ca217eca8c8a207b220ab93d)) +* **widgets:** introduce Related Items widgets as experimental (`EXPERIMENTAL_configureRelatedItems` and `EXPERIMENTAL_connectConfigureRelatedItems`) ([#4233](https://github.com/algolia/instantsearch.js/issues/4233)) ([f811f4e](https://github.com/algolia/instantsearch.js/commit/f811f4efa3e58a2b868d11ec338248715a7596c9)) + + + +## [4.0.1](https://github.com/algolia/instantsearch.js/compare/v4.0.0...v4.0.1) (2019-11-28) + + +### Bug Fixes + +* widget name in documentation link for index ([#4172](https://github.com/algolia/instantsearch.js/issues/4172)) ([fe7e588](https://github.com/algolia/instantsearch.js/commit/fe7e588d252ad6bd7de2f49d52ca022099f3e959)) +* **helper:** rely on stable version of algoliasearch-helper ([#4200](https://github.com/algolia/instantsearch.js/issues/4200)) ([ff11731](https://github.com/algolia/instantsearch.js/commit/ff117314d786c4509edabcb1ddbac73f55930511)) +* **infiniteHits:** correct widget options types ([#4222](https://github.com/algolia/instantsearch.js/issues/4222)) ([bb1b327](https://github.com/algolia/instantsearch.js/commit/bb1b327e26b5faad3358a00d174dc48fd4b73356)) +* **queryHook:** restore behaviour of queryHook ([#4202](https://github.com/algolia/instantsearch.js/issues/4202)) ([7bf96cb](https://github.com/algolia/instantsearch.js/commit/7bf96cb6eafd5349cdf2f32114d5e6ef5dde1328)), closes [/github.com/algolia/instantsearch.js/commit/c073a9acb51fff3c15278fcd563e47fec55c8365#diff-530222e0c4597f2110dc6ba173a306b0L98](https://github.com//github.com/algolia/instantsearch.js/commit/c073a9acb51fff3c15278fcd563e47fec55c8365/issues/diff-530222e0c4597f2110dc6ba173a306b0L98) + + +### Features + +* **transformers:** add tests ([#4153](https://github.com/algolia/instantsearch.js/issues/4153)) ([5a28415](https://github.com/algolia/instantsearch.js/commit/5a28415c39bf5a3a65c61d8f0d444ea6f4e0e17a)) + + + +# [4.0.0](https://github.com/algolia/instantsearch.js/compare/v3.7.0...v4.0.0) (2019-10-23) + +This release is focused on two main features: Federated search, and bundle size reduction. + +Federated search, is the feature where you search through multiple types of content with the same experience, but with separate result lists. In the past we have also called this feature "multi-index search". This feature helps you make more efficient UIs with multiple result lists, autocomplete, nested interfaces and query suggestions. You can read more about the new index widget [in the documentation](https://www.algolia.com/doc/api-reference/widgets/index-widget/js/). + +The second main feature is bundle size reduction. This is a bottom-up process where we started by removing Lodash from our bundle. While the library has many useful features, it was a major part of our compiled code. We have also updated to Preact X, the latest version of Preact internally. This allows us to use more modern (p)react features in the future, which have a more efficient bundling pattern. + +You can read more details on our choices by following [the original posts](https://discourse.algolia.com/t/instantsearch-js-v4-beta-0-is-released/8461) about the beta releases. + +Even though all this internally were major refactors, this should not have a big impact on how you are using InstantSearch. For the few things which did change, a migration guide can be found in [the documentation](https://www.algolia.com/doc/guides/building-search-ui/upgrade-guides/js/#upgrade-from-v3-to-v4). Don't hesitate to reach out if anything is unclear from that guide, so we can fix it for everyone. + +Note, if you are using the [places.js](https://github.com/algolia/places) InstantSearch widget, it is not compatible with InstantSearch v4. However, we took this opportunity to make it a real part of InstantSearch.js, and is now accessible as a widget of InstantSearch. You can use it with a `placesReference`. + +### Bug Fixes + +* **configure:** merge with the previous parameters ([#4085](https://github.com/algolia/instantsearch.js/issues/4085)) ([a215d0c](https://github.com/algolia/instantsearch.js/commit/a215d0c)) +* **configure:** update lifecycle state ([#3994](https://github.com/algolia/instantsearch.js/issues/3994)) ([3d8d967](https://github.com/algolia/instantsearch.js/commit/3d8d967)) +* **connectInfiniteHits:** fix page state when adding or removing widgets ([#4104](https://github.com/algolia/instantsearch.js/issues/4104)) ([1077340](https://github.com/algolia/instantsearch.js/commit/1077340)) +* **connectInfiniteHits:** fix state when navigating or adding/removing widgets ([#4123](https://github.com/algolia/instantsearch.js/issues/4123)) ([9cbd24a](https://github.com/algolia/instantsearch.js/commit/9cbd24a)) +* **createURL:** support multi-index ([#4082](https://github.com/algolia/instantsearch.js/issues/4082)) ([179a6e5](https://github.com/algolia/instantsearch.js/commit/179a6e5)) +* **defer:** recover from error ([#3933](https://github.com/algolia/instantsearch.js/issues/3933)) ([f22b9e2](https://github.com/algolia/instantsearch.js/commit/f22b9e2)) +* **helper:** expose .lastResults to .helper ([#4170](https://github.com/algolia/instantsearch.js/issues/4170)) ([236eb7b](https://github.com/algolia/instantsearch.js/commit/236eb7b)) +* **history:** avoid empty query string ([#4130](https://github.com/algolia/instantsearch.js/issues/4130)) ([18fee7c](https://github.com/algolia/instantsearch.js/commit/18fee7c)) +* **hits:** update lifecycle state ([#3977](https://github.com/algolia/instantsearch.js/issues/3977)) ([6e55ba6](https://github.com/algolia/instantsearch.js/commit/6e55ba6)) +* **hitsPerPage:** avoid sync default value ([#4086](https://github.com/algolia/instantsearch.js/issues/4086)) ([3f8b958](https://github.com/algolia/instantsearch.js/commit/3f8b958)) +* **hitsPerPage:** update lifecycle state ([#3978](https://github.com/algolia/instantsearch.js/issues/3978)) ([d21d620](https://github.com/algolia/instantsearch.js/commit/d21d620)) +* **index:** ensure that we always use the index set by widgets ([#4125](https://github.com/algolia/instantsearch.js/issues/4125)) ([952dc70](https://github.com/algolia/instantsearch.js/commit/952dc70)), closes [/github.com/algolia/algoliasearch-helper-js/blob/5a0352aa233c5ea932df6b054a16989c8d302404/src/algoliasearch.helper.js#L124](https://github.com//github.com/algolia/algoliasearch-helper-js/blob/5a0352aa233c5ea932df6b054a16989c8d302404/src/algoliasearch.helper.js/issues/L124) +* **index:** prevent render without results ([#3932](https://github.com/algolia/instantsearch.js/issues/3932)) ([1b9b5f4](https://github.com/algolia/instantsearch.js/commit/1b9b5f4)) +* **index:** subscribe to state change only after init for uiState ([#4003](https://github.com/algolia/instantsearch.js/issues/4003)) ([9490ca9](https://github.com/algolia/instantsearch.js/commit/9490ca9)) +* **index:** support custom UI params in UI state warning ([#4165](https://github.com/algolia/instantsearch.js/issues/4165)) ([80d32fc](https://github.com/algolia/instantsearch.js/commit/80d32fc)) +* **index:** warn for inconsistent UI state in development mode ([#4140](https://github.com/algolia/instantsearch.js/issues/4140)) ([7e277dc](https://github.com/algolia/instantsearch.js/commit/7e277dc)) +* **infiniteHits:** update lifecycle state ([#3983](https://github.com/algolia/instantsearch.js/issues/3983)) ([4b8bee5](https://github.com/algolia/instantsearch.js/commit/4b8bee5)) +* **instantsearch:** return instance in widgets methods ([#4143](https://github.com/algolia/instantsearch.js/issues/4143)) ([77ffb93](https://github.com/algolia/instantsearch.js/commit/77ffb93)) +* **InstantSearch:** cancel scheduled operations ([#3930](https://github.com/algolia/instantsearch.js/issues/3930)) ([3aafbad](https://github.com/algolia/instantsearch.js/commit/3aafbad)) +* **InstantSearch:** fix initialUIState when refinements are already present in the route ([#4103](https://github.com/algolia/instantsearch.js/issues/4103)) ([079db57](https://github.com/algolia/instantsearch.js/commit/079db57)) +* **InstantSearch:** remove useless walk/duplicate request ([#4127](https://github.com/algolia/instantsearch.js/issues/4127)) ([70163a8](https://github.com/algolia/instantsearch.js/commit/70163a8)) +* **menu:** apply & remove refinement ([#4027](https://github.com/algolia/instantsearch.js/issues/4027)) ([85de2cf](https://github.com/algolia/instantsearch.js/commit/85de2cf)) +* **menu:** prevent error on stale search ([#3934](https://github.com/algolia/instantsearch.js/issues/3934)) ([5f9e138](https://github.com/algolia/instantsearch.js/commit/5f9e138)) +* **numericMenu:** take array into account for empty state ([#4084](https://github.com/algolia/instantsearch.js/issues/4084)) ([2c05a01](https://github.com/algolia/instantsearch.js/commit/2c05a01)) +* **pagination:** update lifecycle state ([#3979](https://github.com/algolia/instantsearch.js/issues/3979)) ([2b08344](https://github.com/algolia/instantsearch.js/commit/2b08344)) +* **pagination:** update no refinement behavior ([#4124](https://github.com/algolia/instantsearch.js/issues/4124)) ([8d222ad](https://github.com/algolia/instantsearch.js/commit/8d222ad)) +* **range:** clear widget state on empty refinements ([#4157](https://github.com/algolia/instantsearch.js/issues/4157)) ([23cd112](https://github.com/algolia/instantsearch.js/commit/23cd112)) +* **ratingMenu:** update lifecycle state ([#3987](https://github.com/algolia/instantsearch.js/issues/3987)) ([ffadf64](https://github.com/algolia/instantsearch.js/commit/ffadf64)) +* **RefinementList:** remove root css class on sublists ([#4117](https://github.com/algolia/instantsearch.js/issues/4117)) ([ceddd42](https://github.com/algolia/instantsearch.js/commit/ceddd42)), closes [/github.com/algolia/instantsearch.js/blob/v2/src/decorators/headerFooter.js#L22](https://github.com//github.com/algolia/instantsearch.js/blob/v2/src/decorators/headerFooter.js/issues/L22) +* **searchBox:** update lifecycle state ([#3981](https://github.com/algolia/instantsearch.js/issues/3981)) ([0ea4950](https://github.com/algolia/instantsearch.js/commit/0ea4950)) +* **sortBy:** ensure a return value for getWidgetSearchParameters ([#4126](https://github.com/algolia/instantsearch.js/issues/4126)) ([569d573](https://github.com/algolia/instantsearch.js/commit/569d573)) +* **sortBy:** read initial index name from parent index ([#4079](https://github.com/algolia/instantsearch.js/issues/4079)) ([fe23c55](https://github.com/algolia/instantsearch.js/commit/fe23c55)) +* display warnings only in development ([#4150](https://github.com/algolia/instantsearch.js/issues/4150)) ([44f69a0](https://github.com/algolia/instantsearch.js/commit/44f69a0)) +* remove useless types ([#3958](https://github.com/algolia/instantsearch.js/issues/3958)) ([ddebf53](https://github.com/algolia/instantsearch.js/commit/ddebf53)) +* **stories:** hide Places ([#4152](https://github.com/algolia/instantsearch.js/issues/4152)) ([7ff843f](https://github.com/algolia/instantsearch.js/commit/7ff843f)) +* **toggleRefinement:** update lifecycle state ([#3993](https://github.com/algolia/instantsearch.js/issues/3993)) ([f1beff6](https://github.com/algolia/instantsearch.js/commit/f1beff6)) +* **voiceSearch:** update lifecycle state ([#3982](https://github.com/algolia/instantsearch.js/issues/3982)) ([798e3c1](https://github.com/algolia/instantsearch.js/commit/798e3c1)) +* **warnings:** remove v3 warnings ([#4134](https://github.com/algolia/instantsearch.js/issues/4134)) ([7eb6810](https://github.com/algolia/instantsearch.js/commit/7eb6810)) + + +### Features + +* **autocomplete:** leverage scoped results ([#3975](https://github.com/algolia/instantsearch.js/issues/3975)) ([8f05968](https://github.com/algolia/instantsearch.js/commit/8f05968)) +* **autocomplete:** participate in routing ([#4029](https://github.com/algolia/instantsearch.js/issues/4029)) ([a9ca0c5](https://github.com/algolia/instantsearch.js/commit/a9ca0c5)) +* **autocomplete:** provide indexId ([#4142](https://github.com/algolia/instantsearch.js/issues/4142)) ([b641e23](https://github.com/algolia/instantsearch.js/commit/b641e23)) +* **clearRefinements:** support multiple indices ([#4036](https://github.com/algolia/instantsearch.js/issues/4036)) ([3611b11](https://github.com/algolia/instantsearch.js/commit/3611b11)) +* **connectAutocomplete:** add default value on getConfiguration ([#3836](https://github.com/algolia/instantsearch.js/issues/3836)) ([724b83f](https://github.com/algolia/instantsearch.js/commit/724b83f)) +* **connectAutocomplete:** clear the state on dispose ([#3815](https://github.com/algolia/instantsearch.js/issues/3815)) ([8ae87d8](https://github.com/algolia/instantsearch.js/commit/8ae87d8)) +* **connectHierarchicalMenu:** update getWidgetSearchParameters ([#4053](https://github.com/algolia/instantsearch.js/issues/4053)) ([c99f822](https://github.com/algolia/instantsearch.js/commit/c99f822)) +* **connectHits:** clear the state on dispose ([#3816](https://github.com/algolia/instantsearch.js/issues/3816)) ([c4de730](https://github.com/algolia/instantsearch.js/commit/c4de730)) +* **connectHits:** implement getWidgetSearchParameters ([#4001](https://github.com/algolia/instantsearch.js/issues/4001)) ([c77cf66](https://github.com/algolia/instantsearch.js/commit/c77cf66)) +* **connectHitsPerPage:** clear the state on dispose ([#3818](https://github.com/algolia/instantsearch.js/issues/3818)) ([d7a5c89](https://github.com/algolia/instantsearch.js/commit/d7a5c89)) +* **connectInfiniteHits:** add default value on getConfiguration ([#3837](https://github.com/algolia/instantsearch.js/issues/3837)) ([8c65249](https://github.com/algolia/instantsearch.js/commit/8c65249)) +* **connectInfiniteHits:** clear the state on dispose ([#3819](https://github.com/algolia/instantsearch.js/issues/3819)) ([60ce151](https://github.com/algolia/instantsearch.js/commit/60ce151)) +* **connectMenu:** update getWidgetSearchParameters ([#4054](https://github.com/algolia/instantsearch.js/issues/4054)) ([7d001e7](https://github.com/algolia/instantsearch.js/commit/7d001e7)) +* **connectNumericMenu:** update state lifecycle ([#4013](https://github.com/algolia/instantsearch.js/issues/4013)) ([2620c90](https://github.com/algolia/instantsearch.js/commit/2620c90)) +* **connectPagination:** add default value on getConfiguration ([#3838](https://github.com/algolia/instantsearch.js/issues/3838)) ([aa4602c](https://github.com/algolia/instantsearch.js/commit/aa4602c)) +* **connectPagination:** clear the state on dispose ([#3821](https://github.com/algolia/instantsearch.js/issues/3821)) ([5b8ef49](https://github.com/algolia/instantsearch.js/commit/5b8ef49)) +* **connectPagination:** update getWidgetSearchParameters ([#4004](https://github.com/algolia/instantsearch.js/issues/4004)) ([eed7e77](https://github.com/algolia/instantsearch.js/commit/eed7e77)) +* **connectRange:** default `precision` to 0 ([#3953](https://github.com/algolia/instantsearch.js/issues/3953)) ([632e06b](https://github.com/algolia/instantsearch.js/commit/632e06b)) +* **connectRatingMenu:** update getWidgetSearchParameters ([#4008](https://github.com/algolia/instantsearch.js/issues/4008)) ([d3c96bf](https://github.com/algolia/instantsearch.js/commit/d3c96bf)) +* **connectRefinementList:** update getWidgetSearchParameters ([#4010](https://github.com/algolia/instantsearch.js/issues/4010)) ([ddc8fc4](https://github.com/algolia/instantsearch.js/commit/ddc8fc4)) +* **connectSearchBox:** clear the state on dispose ([#3822](https://github.com/algolia/instantsearch.js/issues/3822)) ([940522c](https://github.com/algolia/instantsearch.js/commit/940522c)) +* **connectSearchBox:** mount with a default query ([#3840](https://github.com/algolia/instantsearch.js/issues/3840)) ([c3a7d69](https://github.com/algolia/instantsearch.js/commit/c3a7d69)) +* **connectSearchBox:** update getWidgetSearchParameters ([#4002](https://github.com/algolia/instantsearch.js/issues/4002)) ([5c6fcd8](https://github.com/algolia/instantsearch.js/commit/5c6fcd8)) +* **connectVoiceSearch:** add default value on getConfiguration ([#3841](https://github.com/algolia/instantsearch.js/issues/3841)) ([fb70363](https://github.com/algolia/instantsearch.js/commit/fb70363)) +* **connectVoiceSearch:** clear the state on dispose ([#3823](https://github.com/algolia/instantsearch.js/issues/3823)) ([705b3e6](https://github.com/algolia/instantsearch.js/commit/705b3e6)) +* **connectVoiceSearch:** update getWidgetSearchParameters ([#4055](https://github.com/algolia/instantsearch.js/issues/4055)) ([b8c669f](https://github.com/algolia/instantsearch.js/commit/b8c669f)) +* **core:** deprecate addWidget & removeWidget ([#4131](https://github.com/algolia/instantsearch.js/issues/4131)) ([e5dafef](https://github.com/algolia/instantsearch.js/commit/e5dafef)) +* **currentRefinements:** support multiple indices ([#4012](https://github.com/algolia/instantsearch.js/issues/4012)) ([e997728](https://github.com/algolia/instantsearch.js/commit/e997728)) +* **defer:** implement cancellable callback ([#3916](https://github.com/algolia/instantsearch.js/issues/3916)) ([43a0bf8](https://github.com/algolia/instantsearch.js/commit/43a0bf8)) +* **federated:** keep a consistent state in the RefinementList life cycle ([#3976](https://github.com/algolia/instantsearch.js/issues/3976)) ([31d0fd6](https://github.com/algolia/instantsearch.js/commit/31d0fd6)) +* **hitsPerPage:** support new routing system ([#4038](https://github.com/algolia/instantsearch.js/issues/4038)) ([02502cb](https://github.com/algolia/instantsearch.js/commit/02502cb)), closes [#4069](https://github.com/algolia/instantsearch.js/issues/4069) +* **index:** accept indexId ([#4070](https://github.com/algolia/instantsearch.js/issues/4070)) ([b74f8e3](https://github.com/algolia/instantsearch.js/commit/b74f8e3)) +* **index:** add mergeSearchParameters function ([#3917](https://github.com/algolia/instantsearch.js/issues/3917)) ([c0fe7bb](https://github.com/algolia/instantsearch.js/commit/c0fe7bb)) +* **index:** add widget ([dbbda0f](https://github.com/algolia/instantsearch.js/commit/dbbda0f)), closes [#3892](https://github.com/algolia/instantsearch.js/issues/3892) [#3893](https://github.com/algolia/instantsearch.js/issues/3893) [#3914](https://github.com/algolia/instantsearch.js/issues/3914) +* **index:** compute local uiState ([#3997](https://github.com/algolia/instantsearch.js/issues/3997)) ([997c0f4](https://github.com/algolia/instantsearch.js/commit/997c0f4)) +* **index:** merge `ruleContexts` search parameter ([#3944](https://github.com/algolia/instantsearch.js/issues/3944)) ([e94752d](https://github.com/algolia/instantsearch.js/commit/e94752d)) +* **index:** provide scoped results to render hook ([#3964](https://github.com/algolia/instantsearch.js/issues/3964)) ([37c6aad](https://github.com/algolia/instantsearch.js/commit/37c6aad)) +* **index:** replicate searchFunction hack ([#4078](https://github.com/algolia/instantsearch.js/issues/4078)) ([1d2a816](https://github.com/algolia/instantsearch.js/commit/1d2a816)), closes [/github.com/algolia/instantsearch.js/blob/509513c0feafaad522f6f18d87a441559f4aa050/src/lib/RoutingManager.ts#L113-L130](https://github.com//github.com/algolia/instantsearch.js/blob/509513c0feafaad522f6f18d87a441559f4aa050/src/lib/RoutingManager.ts/issues/L113-L130) +* **index:** reset page of child indexes ([#3962](https://github.com/algolia/instantsearch.js/issues/3962)) ([131b1ce](https://github.com/algolia/instantsearch.js/commit/131b1ce)) +* **index:** resolve parent SearchParameters ([#3937](https://github.com/algolia/instantsearch.js/issues/3937)) ([2611da5](https://github.com/algolia/instantsearch.js/commit/2611da5)) +* **index:** use uiState driven SearchParameters ([#4059](https://github.com/algolia/instantsearch.js/issues/4059)) ([b12bb9f](https://github.com/algolia/instantsearch.js/commit/b12bb9f)) +* **infiniteHits:** support new routing system ([#4040](https://github.com/algolia/instantsearch.js/issues/4040)) ([49315cf](https://github.com/algolia/instantsearch.js/commit/49315cf)) +* **instantsearch:** add onStateChange method ([#4080](https://github.com/algolia/instantsearch.js/issues/4080)) ([9f68da5](https://github.com/algolia/instantsearch.js/commit/9f68da5)) +* **InstantSearch:** switch to DerivedHelper only ([#3885](https://github.com/algolia/instantsearch.js/issues/3885)) ([d6fc317](https://github.com/algolia/instantsearch.js/commit/d6fc317)) +* **places:** add Places widget ([#4167](https://github.com/algolia/instantsearch.js/issues/4167)) ([1d754d1](https://github.com/algolia/instantsearch.js/commit/1d754d1)) +* drop support of searchParameters for initialUiState ([#4081](https://github.com/algolia/instantsearch.js/issues/4081)) ([571efeb](https://github.com/algolia/instantsearch.js/commit/571efeb)) +* **range:** support new routing system ([#4039](https://github.com/algolia/instantsearch.js/issues/4039)) ([8cba05a](https://github.com/algolia/instantsearch.js/commit/8cba05a)) +* **routing:** add a "single index" compatibility mode ([#4087](https://github.com/algolia/instantsearch.js/issues/4087)) ([842eb0f](https://github.com/algolia/instantsearch.js/commit/842eb0f)) +* **RoutingManager:** update state on route update ([#4100](https://github.com/algolia/instantsearch.js/issues/4100)) ([88f2615](https://github.com/algolia/instantsearch.js/commit/88f2615)) +* **toggleRefinement:** support new routing system ([#4037](https://github.com/algolia/instantsearch.js/issues/4037)) ([6a9d99f](https://github.com/algolia/instantsearch.js/commit/6a9d99f)) +* **types:** DerivedHelper ([#3887](https://github.com/algolia/instantsearch.js/issues/3887)) ([0f38b4a](https://github.com/algolia/instantsearch.js/commit/0f38b4a)) +* **types:** rename RenderOptions -> RendererOptions ([#3867](https://github.com/algolia/instantsearch.js/issues/3867)) ([05c6f72](https://github.com/algolia/instantsearch.js/commit/05c6f72)) +* **utils:** implement defer ([#3882](https://github.com/algolia/instantsearch.js/issues/3882)) ([8af470e](https://github.com/algolia/instantsearch.js/commit/8af470e)) +* **voice:** add additional query parameters ([#3738](https://github.com/algolia/instantsearch.js/issues/3738)) ([c555255](https://github.com/algolia/instantsearch.js/commit/c555255)) +* drop suppot for onHistoryChange ([#3941](https://github.com/algolia/instantsearch.js/issues/3941)) ([697f609](https://github.com/algolia/instantsearch.js/commit/697f609)) +* introduce initialUiState option ([#4074](https://github.com/algolia/instantsearch.js/issues/4074)) ([de00707](https://github.com/algolia/instantsearch.js/commit/de00707)) +* update UiState definition ([#4075](https://github.com/algolia/instantsearch.js/issues/4075)) ([9e7d3d8](https://github.com/algolia/instantsearch.js/commit/9e7d3d8)) +* **widgets:** add `$$type` to widgets definition ([#3960](https://github.com/algolia/instantsearch.js/issues/3960)) ([344d1b7](https://github.com/algolia/instantsearch.js/commit/344d1b7)) + + + +# [3.7.0](https://github.com/algolia/instantsearch.js/compare/v3.5.4...v3.7.0) (2019-10-08) + + +### Bug Fixes + +* **clearRefinements:** reset page to 0 ([#3936](https://github.com/algolia/instantsearch.js/issues/3936)) ([7378a0a](https://github.com/algolia/instantsearch.js/commit/7378a0a)) +* **connectSortBy:** never update the initial index ([#4015](https://github.com/algolia/instantsearch.js/issues/4015)) ([bc0f9e2](https://github.com/algolia/instantsearch.js/commit/bc0f9e2)) +* **deps:** update dependency instantsearch.js to v3.5.4 ([#3929](https://github.com/algolia/instantsearch.js/issues/3929)) ([eff84c5](https://github.com/algolia/instantsearch.js/commit/eff84c5)) +* **deps:** update dependency instantsearch.js to v3.6.0 ([#4021](https://github.com/algolia/instantsearch.js/issues/4021)) ([7719bba](https://github.com/algolia/instantsearch.js/commit/7719bba)) +* **enhanceConfiguration:** deduplicate the hierarchicalFacets ([#3966](https://github.com/algolia/instantsearch.js/issues/3966)) ([baf8a35](https://github.com/algolia/instantsearch.js/commit/baf8a35)) +* **examples:** fix IE11 compatibility for e-commerce demo ([#4049](https://github.com/algolia/instantsearch.js/issues/4049)) ([dc6f350](https://github.com/algolia/instantsearch.js/commit/dc6f350)) +* **examples:** fix missing polyfill in e-commerce demo ([#4076](https://github.com/algolia/instantsearch.js/issues/4076)) ([4bf3ab3](https://github.com/algolia/instantsearch.js/commit/4bf3ab3)) +* **hierarchicalFacets:** prevent different rootPath on same attribute ([#3965](https://github.com/algolia/instantsearch.js/issues/3965)) ([5ee79fa](https://github.com/algolia/instantsearch.js/commit/5ee79fa)) +* **instantsearch:** warn deprecated usage of `searchParameters` ([#4151](https://github.com/algolia/instantsearch.js/issues/4151)) ([18e1c36](https://github.com/algolia/instantsearch.js/commit/18e1c36)) +* **menuSelect:** unmount component ([#3911](https://github.com/algolia/instantsearch.js/issues/3911)) ([f6debce](https://github.com/algolia/instantsearch.js/commit/f6debce)) +* **rangeInput:** unmount component ([#3910](https://github.com/algolia/instantsearch.js/issues/3910)) ([f6c29e8](https://github.com/algolia/instantsearch.js/commit/f6c29e8)) +* **refinementList:** fix showMore button to work after search ([#3082](https://github.com/algolia/instantsearch.js/issues/3082)) ([23e46b6](https://github.com/algolia/instantsearch.js/commit/23e46b6)) +* pass noop as default value to unmountFn at connectors ([#3955](https://github.com/algolia/instantsearch.js/issues/3955)) ([7c38744](https://github.com/algolia/instantsearch.js/commit/7c38744)) + + + +# [3.6.0](https://github.com/algolia/instantsearch.js/compare/v3.5.4...v3.6.0) (2019-07-30) + + +### Bug Fixes + +* **clearRefinements:** reset page to 0 ([#3936](https://github.com/algolia/instantsearch.js/issues/3936)) ([7378a0a](https://github.com/algolia/instantsearch.js/commit/7378a0a)) +* pass noop as default value to unmountFn at connectors ([#3955](https://github.com/algolia/instantsearch.js/issues/3955)) ([7c38744](https://github.com/algolia/instantsearch.js/commit/7c38744)) +* **enhanceConfiguration:** deduplicate the hierarchicalFacets ([#3966](https://github.com/algolia/instantsearch.js/issues/3966)) ([baf8a35](https://github.com/algolia/instantsearch.js/commit/baf8a35)) +* **hierarchicalFacets:** prevent different rootPath on same attribute ([#3965](https://github.com/algolia/instantsearch.js/issues/3965)) ([5ee79fa](https://github.com/algolia/instantsearch.js/commit/5ee79fa)) +* **menuSelect:** unmount component ([#3911](https://github.com/algolia/instantsearch.js/issues/3911)) ([f6debce](https://github.com/algolia/instantsearch.js/commit/f6debce)) +* **rangeInput:** unmount component ([#3910](https://github.com/algolia/instantsearch.js/issues/3910)) ([f6c29e8](https://github.com/algolia/instantsearch.js/commit/f6c29e8)) +* **refinementList:** fix showMore button to work after search ([#3082](https://github.com/algolia/instantsearch.js/issues/3082)) ([23e46b6](https://github.com/algolia/instantsearch.js/commit/23e46b6)) + + + +## [3.5.4](https://github.com/algolia/instantsearch.js/compare/v3.5.3...v3.5.4) (2019-07-01) + + +### Bug Fixes + +* **connectSortBy:** do not throw with wrong indexes ([#3824](https://github.com/algolia/instantsearch.js/issues/3824)) ([2a84ee2](https://github.com/algolia/instantsearch.js/commit/2a84ee2)) +* **deps:** update dependency instantsearch.js to v3.5.3 ([#3877](https://github.com/algolia/instantsearch.js/issues/3877)) ([463f3bb](https://github.com/algolia/instantsearch.js/commit/463f3bb)) +* **escape:** make sure that __escaped does not get removed ([#3830](https://github.com/algolia/instantsearch.js/issues/3830)) ([fbafd22](https://github.com/algolia/instantsearch.js/commit/fbafd22)) +* **getRefinements:** check for facet before accessing its data ([#3842](https://github.com/algolia/instantsearch.js/issues/3842)) ([aadc769](https://github.com/algolia/instantsearch.js/commit/aadc769)) +* **panel:** return value from dispose ([#3895](https://github.com/algolia/instantsearch.js/issues/3895)) ([bceb78f](https://github.com/algolia/instantsearch.js/commit/bceb78f)) +* **voiceSearch:** remove event listeners on stop ([#3845](https://github.com/algolia/instantsearch.js/issues/3845)) ([688e36a](https://github.com/algolia/instantsearch.js/commit/688e36a)) + + + +## [3.5.3](https://github.com/algolia/instantsearch.js/compare/v3.5.1...v3.5.3) (2019-05-28) + + +### Bug Fixes + +* **voiceSearch:** let the connector handle the default value of searchAsYouSpeak when it's not given ([#3817](https://github.com/algolia/instantsearch.js/issues/3817)) ([9d3e91b](https://github.com/algolia/instantsearch.js/commit/9d3e91b)) +* **getTag:** use object version of toString ([#3820](https://github.com/algolia/instantsearch.js/issues/3820)) ([a7348ea](https://github.com/algolia/instantsearch.js/commit/a7348ea)) +* **types:** fix cssClasses of voiceSearch ([#3783](https://github.com/algolia/instantsearch.js/issues/3783)) ([f016326](https://github.com/algolia/instantsearch.js/commit/f016326)) + + + +# [3.5.1](https://github.com/algolia/instantsearch.js/compare/v3.4.0...v3.5.1) (2019-05-20) + + +### Bug Fixes + +* **types:** improve types for voiceSearch ([#3778](https://github.com/algolia/instantsearch.js/issues/3778)) ([ed2d61a](https://github.com/algolia/instantsearch.js/commit/ed2d61a)) +* **types:** update UiState type ([#3777](https://github.com/algolia/instantsearch.js/issues/3777)) ([36e3a3d](https://github.com/algolia/instantsearch.js/commit/36e3a3d)) +* **voiceSearch:** remove event listeners on dispose ([#3779](https://github.com/algolia/instantsearch.js/issues/3779)) ([0e988cc](https://github.com/algolia/instantsearch.js/commit/0e988cc)) +* **hitsPerPage:** improve warning for missing state value ([#3707](https://github.com/algolia/instantsearch.js/issues/3707)) ([93d8432](https://github.com/algolia/instantsearch.js/commit/93d8432)) +* **numericMenu:** prevent refinement reset on checked radio click ([#3749](https://github.com/algolia/instantsearch.js/issues/3749)) ([e4a6e75](https://github.com/algolia/instantsearch.js/commit/e4a6e75)) +* **rangeSlider:** round the slider pit value ([#3758](https://github.com/algolia/instantsearch.js/issues/3758)) ([6edee3e](https://github.com/algolia/instantsearch.js/commit/6edee3e)), closes [#2904](https://github.com/algolia/instantsearch.js/issues/2904) +* **types:** improve UiState types ([#3763](https://github.com/algolia/instantsearch.js/issues/3763)) ([e8ea57b](https://github.com/algolia/instantsearch.js/commit/e8ea57b)) +* **voice:** import correct noop ([#3766](https://github.com/algolia/instantsearch.js/issues/3766)) ([6a80422](https://github.com/algolia/instantsearch.js/commit/6a80422)) + + +### Features + +* **voiceSearch:** add connector and widget ([#3601](https://github.com/algolia/instantsearch.js/issues/3601)) ([21e4d81](https://github.com/algolia/instantsearch.js/commit/21e4d81)) + + +### Reverts + +* chore(build): remove PropTypes from builds ([#3697](https://github.com/algolia/instantsearch.js/issues/3697)) ([#3776](https://github.com/algolia/instantsearch.js/issues/3776)) ([1e6be79](https://github.com/algolia/instantsearch.js/commit/1e6be79)) + + +# [3.4.0](https://github.com/algolia/instantsearch.js/compare/v3.3.0...v3.4.0) (2019-04-17) + + +### Bug Fixes + +* **storybook:** fix Hierarchical menu separator in Breadcrumb story ([#3695](https://github.com/algolia/instantsearch.js/issues/3695)) ([b3bf8ac](https://github.com/algolia/instantsearch.js/commit/b3bf8ac)) +* **tools:** use commonjs in bump-package-version.js ([#3699](https://github.com/algolia/instantsearch.js/issues/3699)) ([6a6dbe1](https://github.com/algolia/instantsearch.js/commit/6a6dbe1)) +* **types:** fix wrong typing in getWidgetState ([#3693](https://github.com/algolia/instantsearch.js/issues/3693)) ([b3c2154](https://github.com/algolia/instantsearch.js/commit/b3c2154)) +* **types:** remove unused Without type ([#3694](https://github.com/algolia/instantsearch.js/issues/3694)) ([656d000](https://github.com/algolia/instantsearch.js/commit/656d000)) + + +### Features + +* **infiniteHits:** add previous button ([#3675](https://github.com/algolia/instantsearch.js/issues/3675)) ([2e6137b](https://github.com/algolia/instantsearch.js/commit/2e6137b)) +* **Insights:** Insights inside Instantsearch ([#3598](https://github.com/algolia/instantsearch.js/issues/3598)) ([387f41f](https://github.com/algolia/instantsearch.js/commit/387f41f)) + + + +# [3.3.0](https://github.com/algolia/instantsearch.js/compare/v3.2.1...v3.3.0) (2019-04-11) + + +### Bug Fixes + +* **connectQueryRules:** improve tracked refinement type ([#3648](https://github.com/algolia/instantsearch.js/issues/3648)) ([e16ad57](https://github.com/algolia/instantsearch.js/commit/e16ad57)) +* **currentRefinements:** don't rely on `_objectSpread` ([#3672](https://github.com/algolia/instantsearch.js/issues/3672)) ([cd64bcf](https://github.com/algolia/instantsearch.js/commit/cd64bcf)) +* **queryRuleCustomData:** add default template ([#3650](https://github.com/algolia/instantsearch.js/issues/3650)) ([83e9eaa](https://github.com/algolia/instantsearch.js/commit/83e9eaa)) +* **QueryRuleCustomData:** pass data as object to templates ([#3647](https://github.com/algolia/instantsearch.js/issues/3647)) ([b8f8b4e](https://github.com/algolia/instantsearch.js/commit/b8f8b4e)) +* **queryRules:** fix types and stories ([#3670](https://github.com/algolia/instantsearch.js/issues/3670)) ([ba6e2e6](https://github.com/algolia/instantsearch.js/commit/ba6e2e6)) +* **routing:** apply windowTitle on first load ([#3669](https://github.com/algolia/instantsearch.js/issues/3669)) ([d553502](https://github.com/algolia/instantsearch.js/commit/d553502)), closes [#3667](https://github.com/algolia/instantsearch.js/issues/3667) +* **routing:** support parsing URLs with up to 100 refinements ([#3671](https://github.com/algolia/instantsearch.js/issues/3671)) ([6ddcfb6](https://github.com/algolia/instantsearch.js/commit/6ddcfb6)) +* **RoutingManager:** avoid stale uiState ([#3630](https://github.com/algolia/instantsearch.js/issues/3630)) ([e1588aa](https://github.com/algolia/instantsearch.js/commit/e1588aa)) +* **types:** improve InstantSearch types ([#3651](https://github.com/algolia/instantsearch.js/issues/3651)) ([db9b91e](https://github.com/algolia/instantsearch.js/commit/db9b91e)) +* **ua:** Update the User-Agent to use the new format ([#3616](https://github.com/algolia/instantsearch.js/issues/3616)) ([ab84c57](https://github.com/algolia/instantsearch.js/commit/ab84c57)) + + +### Features + +* **infiniteHits:** add previous button ([#3645](https://github.com/algolia/instantsearch.js/issues/3645)) ([2c9e38d](https://github.com/algolia/instantsearch.js/commit/2c9e38d)) +* **queryRules:** add connectQueryRules connector ([#3597](https://github.com/algolia/instantsearch.js/issues/3597)) ([924cd99](https://github.com/algolia/instantsearch.js/commit/924cd99)), closes [#3599](https://github.com/algolia/instantsearch.js/issues/3599) [#3600](https://github.com/algolia/instantsearch.js/issues/3600) +* **queryRules:** add context features to Query Rules ([#3617](https://github.com/algolia/instantsearch.js/issues/3617)) ([922879e](https://github.com/algolia/instantsearch.js/commit/922879e)), closes [#3602](https://github.com/algolia/instantsearch.js/issues/3602) + + +### Reverts + +* feat(infiniteHits): add previous button ([214c0fc](https://github.com/algolia/instantsearch.js/commit/214c0fc)) + + + +## [3.2.1](https://github.com/algolia/instantsearch.js/compare/v3.1.0...v3.2.1) (2019-03-18) + + +### Bug Fixes + +* **connectToggleRefinement:** keep user provided, but falsy values ([#3526](https://github.com/algolia/instantsearch.js/issues/3526)) ([958a151](https://github.com/algolia/instantsearch.js/commit/958a151)) +* **instantsearch:** update usage errors ([#3543](https://github.com/algolia/instantsearch.js/issues/3543)) ([a2a800b](https://github.com/algolia/instantsearch.js/commit/a2a800b)) +* **panel:** append panel body as a child element ([#3561](https://github.com/algolia/instantsearch.js/issues/3561)) ([3de59a3](https://github.com/algolia/instantsearch.js/commit/3de59a3)) +* **poweredBy:** remove TypeScript extension in import ([#3530](https://github.com/algolia/instantsearch.js/issues/3530)) ([99ecc0b](https://github.com/algolia/instantsearch.js/commit/99ecc0b)), closes [#3528](https://github.com/algolia/instantsearch.js/issues/3528) +* **release:** update doctoc script ([e07c654](https://github.com/algolia/instantsearch.js/commit/e07c654)) +* **searchbox:** unmount component on dispose ([#3563](https://github.com/algolia/instantsearch.js/issues/3563)) ([c3f0435](https://github.com/algolia/instantsearch.js/commit/c3f0435)) +* **searchBox:** add reusable SearchBox component ([#3489](https://github.com/algolia/instantsearch.js/issues/3489)) ([c073a9a](https://github.com/algolia/instantsearch.js/commit/c073a9a)) + + +### Features + +* **panel:** implement collapsed feature ([#3575](https://github.com/algolia/instantsearch.js/issues/3575)) ([e84b02b](https://github.com/algolia/instantsearch.js/commit/e84b02b)) + + + +# [3.2.0](https://github.com/algolia/instantsearch.js/compare/v3.1.0...v3.2.0) (2019-03-14) + + +### Bug Fixes + +* **instantsearch:** update usage errors ([#3543](https://github.com/algolia/instantsearch.js/issues/3543)) ([a2a800b](https://github.com/algolia/instantsearch.js/commit/a2a800b)) +* **searchBox:** add reusable SearchBox component ([#3489](https://github.com/algolia/instantsearch.js/issues/3489)) ([c073a9a](https://github.com/algolia/instantsearch.js/commit/c073a9a)) + + +### Features + +* **panel:** implement collapsed feature ([#3575](https://github.com/algolia/instantsearch.js/issues/3575)) ([e84b02b](https://github.com/algolia/instantsearch.js/commit/e84b02b)) + + + + +## [3.1.1](https://github.com/algolia/instantsearch.js/compare/v3.1.0...v3.1.1) (2019-02-14) + + +### Bug Fixes + +* **connectToggleRefinement:** keep user provided, but falsy values ([#3526](https://github.com/algolia/instantsearch.js/issues/3526)) ([958a151](https://github.com/algolia/instantsearch.js/commit/958a151)) +* **poweredBy:** remove TypeScript extension in import ([#3530](https://github.com/algolia/instantsearch.js/issues/3530)) ([99ecc0b](https://github.com/algolia/instantsearch.js/commit/99ecc0b)), closes [#3528](https://github.com/algolia/instantsearch.js/issues/3528) +* **release:** update doctoc script ([e07c654](https://github.com/algolia/instantsearch.js/commit/e07c654)) + + + + +## [3.1.0](https://github.com/algolia/instantsearch.js/compare/v3.0.0...v3.1.0) (2019-02-13) + +### Features + +* **connectCurrentRefinements**: add a root label ([#3515](https://github.com/algolia/instantsearch.js/pull/3515)) ([b8f774f](https://github.com/algolia/instantsearch.js/commit/b8f774f)) +* Update error messages ([#3516](https://github.com/algolia/instantsearch.js/pull/3516)) +* **InstantSearch**: remove event listeners on dispose ([#3420](https://github.com/algolia/instantsearch.js/pull/3420)) +* **InstantSearch**: set helper to `null` on dispose ([#3415](https://github.com/algolia/instantsearch.js/pull/3415)) +* **utils**: warn only in development ([#3367](https://github.com/algolia/instantsearch.js/pull/3367)) + +### Bug Fixes + +* **InstantSearch**: set helper to `null` on dispose ([#3415](https://github.com/algolia/instantsearch.js/pull/3415)) +* **utils**: warn only in development ([#3367](https://github.com/algolia/instantsearch.js/pull/3367)) + + +## [3.0.0](https://github.com/algolia/instantsearch.js/compare/v2.10.3...v3.0.0) (2018-12-20) + +Check the [migration guide](https://github.com/algolia/instantsearch.js/blob/879aa20d3c1e2fe906bc526b05c57f6847c433be/docgen/src/guides/v3-migration.md). + + +## [2.10.4](https://github.com/algolia/instantsearch.js/compare/v2.10.3...v2.10.4) (2018-10-30) + + +### Bug Fixes + +* **getRefinements:** provide attributeName for type: query ([6a58b99](https://github.com/algolia/instantsearch.js/commit/6a58b99)), closes [#3205](https://github.com/algolia/instantsearch.js/issues/3205) + + + +## [2.10.3](https://github.com/algolia/instantsearch.js/compare/v2.10.2...v2.10.3) (2018-10-29) + + +### Bug Fixes + +* **deps:** unpin production dependencies ([257ecb7](https://github.com/algolia/instantsearch.js/commit/257ecb7)) +* **InstantSearch:** avoid useless search on addWidgets ([#3178](https://github.com/algolia/instantsearch.js/issues/3178)) ([961626d](https://github.com/algolia/instantsearch.js/commit/961626d)) +* **numericselector:** default value can be undefined ([#3139](https://github.com/algolia/instantsearch.js/issues/3139)) ([39d22f5](https://github.com/algolia/instantsearch.js/commit/39d22f5)) + + +### Features + +* **utils:** add warn function ([#3147](https://github.com/algolia/instantsearch.js/issues/3147)) ([9de87bb](https://github.com/algolia/instantsearch.js/commit/9de87bb)) + + + + +## [2.10.2](https://github.com/algolia/instantsearch.js/compare/v2.10.1...v2.10.2) (2018-09-10) + + +### Bug Fixes + +* **searchbox:** Add missing color to searchbox input field ([#3086](https://github.com/algolia/instantsearch.js/issues/3086)) ([62b852a](https://github.com/algolia/instantsearch.js/commit/62b852a)), closes [#3075](https://github.com/algolia/instantsearch.js/issues/3075) +* **Stats:** let the widget render on all values ([#3070](https://github.com/algolia/instantsearch.js/issues/3070)) ([cd8f17e](https://github.com/algolia/instantsearch.js/commit/cd8f17e)), closes [#3056](https://github.com/algolia/instantsearch.js/issues/3056) + + + + +## [2.10.1](https://github.com/algolia/instantsearch.js/compare/v2.10.0...v2.10.1) (2018-08-17) + + +### Bug Fixes + +* **connectBreadcrumb:** ensure that data is an array ([#3067](https://github.com/algolia/instantsearch.js/issues/3067)) ([759f709](https://github.com/algolia/instantsearch.js/commit/759f709)) + + + + +# [2.10.0](https://github.com/algolia/instantsearch.js/compare/v2.9.0...v2.10.0) (2018-08-08) + + +### Bug Fixes + +* **release:** provide interactive TTY for npm publish ([#3053](https://github.com/algolia/instantsearch.js/issues/3053)) ([ede9460](https://github.com/algolia/instantsearch.js/commit/ede9460)) + + +### Features + +* Implement `transformItems` API ([#3042](https://github.com/algolia/instantsearch.js/issues/3042)) ([1510a94](https://github.com/algolia/instantsearch.js/commit/1510a94)) + + + + +# [2.9.0](https://github.com/algolia/instantsearch.js/compare/v2.8.1...v2.9.0) (2018-07-18) + + +### Features + +* **infiniteHits:** add showmoreButton to cssClasses ([#3026](https://github.com/algolia/instantsearch.js/issues/3026)) ([8287de0](https://github.com/algolia/instantsearch.js/commit/8287de0)) + + + + +## [2.8.1](https://github.com/algolia/instantsearch.js/compare/v2.8.0...v2.8.1) (2018-07-03) + + +### Bug Fixes + +* **connectHitsPerPage:** default value should not break the API ([#3006](https://github.com/algolia/instantsearch.js/issues/3006)) ([6635304](https://github.com/algolia/instantsearch.js/commit/6635304)), closes [#2732](https://github.com/algolia/instantsearch.js/issues/2732) +* **connectRefinementList:** throw error with usage ([#2962](https://github.com/algolia/instantsearch.js/issues/2962)) ([f60222d](https://github.com/algolia/instantsearch.js/commit/f60222d)) +* **sourcemap:** provide good url ([#3011](https://github.com/algolia/instantsearch.js/issues/3011)) ([9632ade](https://github.com/algolia/instantsearch.js/commit/9632ade)) +* **warning:** make sure suggested import is possible ([#3014](https://github.com/algolia/instantsearch.js/issues/3014)) ([eb27152](https://github.com/algolia/instantsearch.js/commit/eb27152)) + + + + +# [2.8.0](https://github.com/algolia/instantsearch.js/compare/v2.7.6...v2.8.0) (2018-05-30) + + +### Features + +* **connectors:** add connectAutocomplete ([#2841](https://github.com/algolia/instantsearch.js/issues/2841)) ([4bec81e](https://github.com/algolia/instantsearch.js/commit/4bec81e)), closes [/github.com/algolia/instantsearch.js/pull/2841#discussion_r188383882](https://github.com//github.com/algolia/instantsearch.js/pull/2841/issues/discussion_r188383882) [#2313](https://github.com/algolia/instantsearch.js/issues/2313) +* **search-client:** Add support for Universal Search Clients ([#2894](https://github.com/algolia/instantsearch.js/issues/2894)) ([5df3c74](https://github.com/algolia/instantsearch.js/commit/5df3c74)), closes [#2905](https://github.com/algolia/instantsearch.js/issues/2905) + + + + +## [2.7.6](https://github.com/algolia/instantsearch.js/compare/v2.7.5...v2.7.6) (2018-05-29) + + +### Bug Fixes + +* **connectConfigure:** ensure we do not extend `SearchParameters` ([#2945](https://github.com/algolia/instantsearch.js/issues/2945)) ([fdb4a7a](https://github.com/algolia/instantsearch.js/commit/fdb4a7a)) +* **infinite-hits:** fix [#2543](https://github.com/algolia/instantsearch.js/issues/2543) ([#2948](https://github.com/algolia/instantsearch.js/issues/2948)) ([bbf9f8f](https://github.com/algolia/instantsearch.js/commit/bbf9f8f)) + + + + +## [2.7.5](https://github.com/algolia/instantsearch.js/compare/v2.7.4...v2.7.5) (2018-05-28) + + +### Bug Fixes + +* **clear-all:** apply excludeAttribute correctly with clearsQuery ([#2935](https://github.com/algolia/instantsearch.js/issues/2935)) ([e782ab8](https://github.com/algolia/instantsearch.js/commit/e782ab8)) +* **connectInfiniteHits:** fix [#2928](https://github.com/algolia/instantsearch.js/issues/2928) ([#2939](https://github.com/algolia/instantsearch.js/issues/2939)) ([0293a31](https://github.com/algolia/instantsearch.js/commit/0293a31)) + + + + +## [2.7.4](https://github.com/algolia/instantsearch.js/compare/v2.7.3...v2.7.4) (2018-05-03) + + +### Bug Fixes + +* **searchFunction:** Fix unresolved returned Promise ([#2913](https://github.com/algolia/instantsearch.js/issues/2913)) ([5286c7c](https://github.com/algolia/instantsearch.js/commit/5286c7c)) + + + + +## [2.7.3](https://github.com/algolia/instantsearch.js/compare/v2.7.2...v2.7.3) (2018-04-26) + + +### Bug Fixes + +* **index.es6:** avoid use of Object.assign for IE ([#2908](https://github.com/algolia/instantsearch.js/issues/2908)) ([228b02e](https://github.com/algolia/instantsearch.js/commit/228b02e)) + + + + +## [2.7.2](https://github.com/algolia/instantsearch.js/compare/v2.7.1...v2.7.2) (2018-04-18) + +### Bug Fixes + +* **routing:** should apply stateMapping when doing initial write ([#2892](https://github.com/algolia/instantsearch.js/issues/2892)) ([7f62e6dc](https://github.com/algolia/instantsearch.js/commit/7f62e6dc)) +* **ie:** do not rely on Object.assign ([#2885](https://github.com/algolia/instantsearch.js/issues/2885)) ([88497e56](https://github.com/algolia/instantsearch.js/commit/88497e56)) + + + + +## [2.7.1](https://github.com/algolia/instantsearch.js/compare/v2.7.0...v2.7.1) (2018-04-11) + + +### Bug Fixes + +* **history:** provide location and use named parameters ([#2877](https://github.com/algolia/instantsearch.js/issues/2877)) ([761ffa4](https://github.com/algolia/instantsearch.js/commit/761ffa4)) + + + + +# [2.7.0](https://github.com/algolia/instantsearch.js/compare/v2.6.3...v2.7.0) (2018-04-09) + + +### Bug Fixes + +* pagination padding ([#2866](https://github.com/algolia/instantsearch.js/issues/2866)) ([e8c58cc](https://github.com/algolia/instantsearch.js/commit/e8c58cc)) +* **geosearch:** avoid reset map when it already moved ([#2870](https://github.com/algolia/instantsearch.js/issues/2870)) ([f171b8a](https://github.com/algolia/instantsearch.js/commit/f171b8a)) +* **removeWidget:** check for widgets.length on next tick ([#2831](https://github.com/algolia/instantsearch.js/issues/2831)) ([7e639d6](https://github.com/algolia/instantsearch.js/commit/7e639d6)) + + +### Features + +* **connetConfigure:** add a connector to create a connector widget ([8fdf752](https://github.com/algolia/instantsearch.js/commit/8fdf752)) +* **routing:** provide a mechanism to synchronize the search ([#2829](https://github.com/algolia/instantsearch.js/issues/2829)) ([75b2ca3](https://github.com/algolia/instantsearch.js/commit/75b2ca3)), closes [#2849](https://github.com/algolia/instantsearch.js/issues/2849) [#2849](https://github.com/algolia/instantsearch.js/issues/2849) +* **size:** add sideEffects false to package.json ([#2861](https://github.com/algolia/instantsearch.js/issues/2861)) ([f5d1ab1](https://github.com/algolia/instantsearch.js/commit/f5d1ab1)), closes [#2859](https://github.com/algolia/instantsearch.js/issues/2859) + + + + +## [2.6.3](https://github.com/algolia/instantsearch.js/compare/v2.6.2...v2.6.3) (2018-03-30) + + +### Bug Fixes + +* **rangeSlider:** handles were blocked ([#2849](https://github.com/algolia/instantsearch.js/issues/2849)) ([a2af4f0](https://github.com/algolia/instantsearch.js/commit/a2af4f0)) + + + + +## [2.6.2](https://github.com/algolia/instantsearch.js/compare/v2.6.1...v2.6.2) (2018-03-29) + + +### Bug Fixes + +* **connectGeoSearch:** correctly dispose the connector ([#2845](https://github.com/algolia/instantsearch.js/issues/2845)) ([a4eafd2](https://github.com/algolia/instantsearch.js/commit/a4eafd2)) +* **GeoSearch:** correctly unmount the widget ([#2846](https://github.com/algolia/instantsearch.js/issues/2846)) ([f31ef3c](https://github.com/algolia/instantsearch.js/commit/f31ef3c)) + + + + +## [2.6.1](https://github.com/algolia/instantsearch.js/compare/v2.6.0...v2.6.1) (2018-03-28) + + +### Bug Fixes + +* **connectBreadcrumb:** allow unmounting ([#2815](https://github.com/algolia/instantsearch.js/issues/2815)) ([c6c353a](https://github.com/algolia/instantsearch.js/commit/c6c353a)) +* **connectBreadcrumb:** update typo in property type items ([#2782](https://github.com/algolia/instantsearch.js/issues/2782)) ([79ebd66](https://github.com/algolia/instantsearch.js/commit/79ebd66)) +* **docgen:** pass the relatedTypes to the struct mixin in connectors layout ([#2780](https://github.com/algolia/instantsearch.js/issues/2780)) ([f7f8b05](https://github.com/algolia/instantsearch.js/commit/f7f8b05)) +* **GeoSearch:** update typo in property type cssClasses ([#2781](https://github.com/algolia/instantsearch.js/issues/2781)) ([419c2ab](https://github.com/algolia/instantsearch.js/commit/419c2ab)) +* **main:** correctly import EventEmitter ([#2814](https://github.com/algolia/instantsearch.js/issues/2814)) ([8fa3649](https://github.com/algolia/instantsearch.js/commit/8fa3649)), closes [#2730](https://github.com/algolia/instantsearch.js/issues/2730) + + + + +# [2.6.0](https://github.com/algolia/instantsearch.js/compare/v2.5.2...v2.6.0) (2018-03-06) + + +### Bug Fixes + +* **GeoSearch:** add apiKey for Google Maps ([#2773](https://github.com/algolia/instantsearch.js/issues/2773)) ([6c1846f](https://github.com/algolia/instantsearch.js/commit/6c1846f)) +* **GeoSearch:** override button style ([#2772](https://github.com/algolia/instantsearch.js/issues/2772)) ([4d69b50](https://github.com/algolia/instantsearch.js/commit/4d69b50)) + + +### Features + +* **configure:** add the Configure widget ([#2698](https://github.com/algolia/instantsearch.js/issues/2698)) ([94daabc](https://github.com/algolia/instantsearch.js/commit/94daabc)) +* add GeoSearch widget & connector ([#2743](https://github.com/algolia/instantsearch.js/issues/2743)) ([7fa17ff](https://github.com/algolia/instantsearch.js/commit/7fa17ff)) + + + + +## [2.5.2](https://github.com/algolia/instantsearch.js/compare/v2.5.1...v2.5.2) (2018-02-26) + + +### Bug Fixes + +* **Template:** harden Symbol checks ([#2749](https://github.com/algolia/instantsearch.js/issues/2749)) ([fab66bc](https://github.com/algolia/instantsearch.js/commit/fab66bc)) +* **yarnrc:** use empty string for save-prefix ([#2739](https://github.com/algolia/instantsearch.js/issues/2739)) ([979e0cd](https://github.com/algolia/instantsearch.js/commit/979e0cd)) + + + + +## [2.5.1](https://github.com/algolia/instantsearch.js/compare/v2.5.0...v2.5.1) (2018-02-13) + + +### Bug Fixes + +* **perf:** only compute snappoints when step is provided ([#2699](https://github.com/algolia/instantsearch.js/issues/2699)) ([ce9ca19](https://github.com/algolia/instantsearch.js/commit/ce9ca19)), closes [#2662](https://github.com/algolia/instantsearch.js/issues/2662) + + + + +# [2.5.0](https://github.com/algolia/instantsearch.js/compare/v2.4.1...v2.5.0) (2018-02-06) + + +### Bug Fixes + +* **doc:** add maximum width to images (fix [#2685](https://github.com/algolia/instantsearch.js/issues/2685)) ([#2686](https://github.com/algolia/instantsearch.js/issues/2686)) ([f4b5377](https://github.com/algolia/instantsearch.js/commit/f4b5377)) + + +### Features + +* support for algolia insights ([#2689](https://github.com/algolia/instantsearch.js/issues/2689)) ([96b8d61](https://github.com/algolia/instantsearch.js/commit/96b8d61)) + + + + +## [2.4.1](https://github.com/algolia/instantsearch.js/compare/v2.4.0...v2.4.1) (2018-01-04) + + +### Bug Fixes + +* **core:** correct escape highlight for arrays and nested objects ([#2646](https://github.com/algolia/instantsearch.js/issues/2646)) ([ed0ee73](https://github.com/algolia/instantsearch.js/commit/ed0ee73)) + + + + +# [2.4.0](https://github.com/algolia/instantsearch.js/compare/v2.3.3...v2.4.0) (2018-01-02) + + +### Bug Fixes + +* **pagination:** disable buttons if not results ([#2643](https://github.com/algolia/instantsearch.js/issues/2643)) ([9017b72](https://github.com/algolia/instantsearch.js/commit/9017b72)), closes [#2014](https://github.com/algolia/instantsearch.js/issues/2014) +* **theme:** fix height of pagination ([#2641](https://github.com/algolia/instantsearch.js/issues/2641)) ([b3185e5](https://github.com/algolia/instantsearch.js/commit/b3185e5)) + + +### Features + +* **core:** add a reload method on the InstantSearch component ([#2637](https://github.com/algolia/instantsearch.js/issues/2637)) ([e73ff13](https://github.com/algolia/instantsearch.js/commit/e73ff13)) +* **core:** add an error event to monitor error from Algolia ([#2642](https://github.com/algolia/instantsearch.js/issues/2642)) ([71c2d68](https://github.com/algolia/instantsearch.js/commit/71c2d68)), closes [#1585](https://github.com/algolia/instantsearch.js/issues/1585) +* **core:** rename `reload` to `refresh` ([#2645](https://github.com/algolia/instantsearch.js/issues/2645)) ([9b8ac65](https://github.com/algolia/instantsearch.js/commit/9b8ac65)) +* **wrapWithHits:** enable async init ([#2635](https://github.com/algolia/instantsearch.js/issues/2635)) ([08a8747](https://github.com/algolia/instantsearch.js/commit/08a8747)) + + + + +## [2.3.3](https://github.com/algolia/instantsearch.js/compare/v2.3.2...v2.3.3) (2017-12-11) + + +### Bug Fixes + +* **core:** search is stalled at init ([#2623](https://github.com/algolia/instantsearch.js/issues/2623)) ([e3dd577](https://github.com/algolia/instantsearch.js/commit/e3dd577)), closes [#2616](https://github.com/algolia/instantsearch.js/issues/2616) + + + + +## [2.3.2](https://github.com/algolia/instantsearch.js/compare/v2.3.1...v2.3.2) (2017-12-06) + + +### Bug Fixes + +* React reference: Breadcrumb & RangeInput components ([#2618](https://github.com/algolia/instantsearch.js/issues/2618)) ([7f32161](https://github.com/algolia/instantsearch.js/commit/7f32161)) + + + + +## [2.3.1](https://github.com/algolia/instantsearch.js/compare/v2.3.0...v2.3.1) (2017-12-04) + + +### Bug Fixes + +* **connectors:** check facet is refined before removing it. hierarchicalMenu / menu ([67ae035](https://github.com/algolia/instantsearch.js/commit/67ae035)) +* **poweredBy:** minify slightly and make into correct URL ([#2615](https://github.com/algolia/instantsearch.js/issues/2615)) ([2b7d747](https://github.com/algolia/instantsearch.js/commit/2b7d747)), closes [#2613](https://github.com/algolia/instantsearch.js/issues/2613) + + + + +# [2.3.0](https://github.com/algolia/instantsearch.js/compare/v2.3.0-beta.7...v2.3.0) (2017-11-30) + + +### Bug Fixes + +* **InstantSearch.dispose:** dont call `getConfiguration` of URLSync widget ([#2604](https://github.com/algolia/instantsearch.js/issues/2604)) ([3234b12](https://github.com/algolia/instantsearch.js/commit/3234b12)) +* **connectors:** prefer wrappers over bind ([#2575](https://github.com/algolia/instantsearch.js/issues/2575)) ([f8e0e00](https://github.com/algolia/instantsearch.js/commit/f8e0e00)) +* **connectHierarchicalMenu:** do not return if facet not set ([#2521](https://github.com/algolia/instantsearch.js/issues/2521)) ([26e99fb](https://github.com/algolia/instantsearch.js/commit/26e99fb)) + + + +### Features + +* **core:** provide information about stalled search to widgets ([#2569](https://github.com/algolia/instantsearch.js/issues/2569)) ([d104be1](https://github.com/algolia/instantsearch.js/commit/d104be1)) +* **core:** InstantSearch hot remove/add widgets ([#2384](https://github.com/algolia/instantsearch.js/issues/2384)) ([cfc1710](https://github.com/algolia/instantsearch.js/commit/cfc1710)) +* **refinementList:** add escapeFacetHits parameter ([#2507](https://github.com/algolia/instantsearch.js/issues/2507)) ([9b1b7ee](https://github.com/algolia/instantsearch.js/commit/9b1b7ee)) +* **breadcrumb:** Add the breadcrumb widget ([#2451](https://github.com/algolia/instantsearch.js/issues/2451)) ([11d78f0](https://github.com/algolia/instantsearch.js/commit/11d78f0)), closes [#2299](https://github.com/algolia/instantsearch.js/issues/2299) +* **connectRange:** round the range based on precision ([#2498](https://github.com/algolia/instantsearch.js/issues/2498)) ([d4df45d](https://github.com/algolia/instantsearch.js/commit/d4df45d)) +* **rangeInput:** add rangeInput widget ([#2440](https://github.com/algolia/instantsearch.js/issues/2440)) ([7916d16](https://github.com/algolia/instantsearch.js/commit/7916d16)) + + + + +## [2.2.5](https://github.com/algolia/instantsearch.js/compare/v2.2.4...v2.2.5) (2017-11-20) + + +### Bug Fixes + +* **searchbox:** fix usage of custom reset template ([#2585](https://github.com/algolia/instantsearch.js/issues/2585)) ([aad92b9](https://github.com/algolia/instantsearch.js/commit/aad92b9)), closes [#2528](https://github.com/algolia/instantsearch.js/issues/2528) + + + + +## [2.2.4](https://github.com/algolia/instantsearch.js/compare/v2.2.3...v2.2.4) (2017-11-13) + + +### Bug Fixes + +* **numericSelector:** make default value possible ([#2565](https://github.com/algolia/instantsearch.js/issues/2565)) ([5664f98](https://github.com/algolia/instantsearch.js/commit/5664f98)) + + + + +## [2.2.3](https://github.com/algolia/instantsearch.js/compare/v2.2.2...v2.2.3) (2017-11-07) + + +### Bug Fixes + +* **connectRefinementList:** add label to searched items ([#2553](https://github.com/algolia/instantsearch.js/issues/2553)) ([ec810fa](https://github.com/algolia/instantsearch.js/commit/ec810fa)) +* **refinementList:** fix facet exhaustivity check ([#2554](https://github.com/algolia/instantsearch.js/issues/2554)) ([0f1bf08](https://github.com/algolia/instantsearch.js/commit/0f1bf08)), closes [#2552](https://github.com/algolia/instantsearch.js/issues/2552) +* **theme:** searchbar should have normal size input ([#2545](https://github.com/algolia/instantsearch.js/issues/2545)) ([50d99f0](https://github.com/algolia/instantsearch.js/commit/50d99f0)) + + + + +## [2.2.2](https://github.com/algolia/instantsearch.js/compare/v2.2.1...v2.2.2) (2017-10-30) + + +### Bug Fixes + +* **connectRefinementList:** set default value for limit ([#2517](https://github.com/algolia/instantsearch.js/issues/2517)) ([32918c9](https://github.com/algolia/instantsearch.js/commit/32918c9)) +* **MenuSelect:** switch from react to preact-compat ([#2513](https://github.com/algolia/instantsearch.js/issues/2513)) ([06aa626](https://github.com/algolia/instantsearch.js/commit/06aa626)) +* **range-slider:** add option `collapsible` ([#2502](https://github.com/algolia/instantsearch.js/issues/2502)) ([e78399d](https://github.com/algolia/instantsearch.js/commit/e78399d)), closes [#2501](https://github.com/algolia/instantsearch.js/issues/2501) +* **url-sync:** make URLSync consistent even if search is tampered ([392927e](https://github.com/algolia/instantsearch.js/commit/392927e)), closes [#2523](https://github.com/algolia/instantsearch.js/issues/2523) + + + + +## [2.2.1](https://github.com/algolia/instantsearch.js/compare/v2.2.0...v2.2.1) (2017-10-16) + + +### Bug Fixes + +* **connectRangeSlider:** only clear the refinement on the current attribute ([#2459](https://github.com/algolia/instantsearch.js/issues/2459)) ([7cebf58](https://github.com/algolia/instantsearch.js/commit/7cebf58)) +* **menuSelect:** select in userCssClasses ([#2455](https://github.com/algolia/instantsearch.js/issues/2455)) ([0eb3dc8](https://github.com/algolia/instantsearch.js/commit/0eb3dc8)) +* **menuSelect:** use preact instead of React ([#2460](https://github.com/algolia/instantsearch.js/issues/2460)) ([35ccae8](https://github.com/algolia/instantsearch.js/commit/35ccae8)) +* **test:** correctly reset the wired dependency ([#2461](https://github.com/algolia/instantsearch.js/issues/2461)) ([1f7f4ed](https://github.com/algolia/instantsearch.js/commit/1f7f4ed)) + + + + +# [2.2.0](https://github.com/algolia/instantsearch.js/compare/v2.1.6...v2.2.0) (2017-10-03) + + +### Bug Fixes + +* **build:** minify css with `csso` instead of unminify css ([#2419](https://github.com/algolia/instantsearch.js/issues/2419)) ([12f96b8](https://github.com/algolia/instantsearch.js/commit/12f96b8)), closes [#2375](https://github.com/algolia/instantsearch.js/issues/2375) +* **clear-all:** display the query when clearsQuery is true ([#2414](https://github.com/algolia/instantsearch.js/issues/2414)) ([6921895](https://github.com/algolia/instantsearch.js/commit/6921895)) +* **range-slider:** Fix slider boundaries ([#2408](https://github.com/algolia/instantsearch.js/issues/2408)) ([bea43db](https://github.com/algolia/instantsearch.js/commit/bea43db)), closes [#2386](https://github.com/algolia/instantsearch.js/issues/2386) +* **selector:** root classname is applied twice ([#2423](https://github.com/algolia/instantsearch.js/issues/2423)) ([44dca11](https://github.com/algolia/instantsearch.js/commit/44dca11)), closes [#2396](https://github.com/algolia/instantsearch.js/issues/2396) [#2397](https://github.com/algolia/instantsearch.js/issues/2397) +* **webpack.dev:** sourcemaps in dev ([#2422](https://github.com/algolia/instantsearch.js/issues/2422)) ([ba6ca0a](https://github.com/algolia/instantsearch.js/commit/ba6ca0a)) + + +### Features + +* **menu-select:** add menu select widget ([#2316](https://github.com/algolia/instantsearch.js/issues/2316)) ([680f9bd](https://github.com/algolia/instantsearch.js/commit/680f9bd)) + + + + +# [2.2.0-beta.1](https://github.com/algolia/instantsearch.js/compare/v2.1.4...v2.2.0-beta.1) (2017-09-18) + + +### Features + +* **analytics:** Push pagination ([#2337](https://github.com/algolia/instantsearch.js/issues/2337)) ([94ce086](https://github.com/algolia/instantsearch.js/commit/94ce086)) +* **hitsPerPageSelector:** default hits per page setting ([4efd43e](https://github.com/algolia/instantsearch.js/commit/4efd43e)) +* **hitsPerPageSelector:** default hits per page setting ([355f080](https://github.com/algolia/instantsearch.js/commit/355f080)) + + + + +## [2.1.6](https://github.com/algolia/instantsearch.js/compare/v2.1.5...v2.1.6) (2017-09-26) + + +### Bug Fixes + +* **deps:** update dependency documentation to v^5.0.0 ([#2355](https://github.com/algolia/instantsearch.js/issues/2355)) ([489647a](https://github.com/algolia/instantsearch.js/commit/489647a)) +* **searchbox:** use initial input value if provided in the dom ([#2342](https://github.com/algolia/instantsearch.js/issues/2342)) ([180902a](https://github.com/algolia/instantsearch.js/commit/180902a)), closes [#2289](https://github.com/algolia/instantsearch.js/issues/2289) + + + + +## [2.1.5](https://github.com/algolia/instantsearch.js/compare/v2.1.4...v2.1.5) (2017-09-25) + + +### Bug Fixes + +* **deps:** update dependency algolia-frontend-components to v^0.0.33 ([#2341](https://github.com/algolia/instantsearch.js/issues/2341)) ([16994d8](https://github.com/algolia/instantsearch.js/commit/16994d8)) +* **price-ranges:** update call to refine ([#2377](https://github.com/algolia/instantsearch.js/issues/2377)) ([34915d7](https://github.com/algolia/instantsearch.js/commit/34915d7)) +* **slider:** Fix range slider pips and value 0 ([#2350](https://github.com/algolia/instantsearch.js/issues/2350)) ([fa0dc09](https://github.com/algolia/instantsearch.js/commit/fa0dc09)), closes [#2343](https://github.com/algolia/instantsearch.js/issues/2343) + + + + +## [2.1.4](https://github.com/algolia/instantsearch.js/compare/v2.1.3...v2.1.4) (2017-09-14) + + +### Bug Fixes + +* **release-script:** Add the generation of changelog for the release ([#2333](https://github.com/algolia/instantsearch.js/issues/2333)) ([9a2f70b](https://github.com/algolia/instantsearch.js/commit/9a2f70b)) +* **slider:** edge case when min > max ([#2336](https://github.com/algolia/instantsearch.js/issues/2336)) ([8830ab0](https://github.com/algolia/instantsearch.js/commit/8830ab0)) +* **slider:** Fix range slider dev env ([#2320](https://github.com/algolia/instantsearch.js/issues/2320)) ([e78de70](https://github.com/algolia/instantsearch.js/commit/e78de70)) +* **slider:** use algolia fork of rheostat ([#2335](https://github.com/algolia/instantsearch.js/issues/2335)) ([9eae009](https://github.com/algolia/instantsearch.js/commit/9eae009)) + + + + +## [2.1.3](https://github.com/algolia/instantsearch.js/compare/v2.1.2...v2.1.3) (2017-09-05) + + +### Bug Fixes + +* **Pagination:** add `autohideContainerHOC` to ([#2296](https://github.com/algolia/instantsearch.js/issues/2296)) ([545f076](https://github.com/algolia/instantsearch.js/commit/545f076)) +* **sffv:** no error when not providing noResults and no results ([#2310](https://github.com/algolia/instantsearch.js/issues/2310)) ([cc02b71](https://github.com/algolia/instantsearch.js/commit/cc02b71)), closes [#2087](https://github.com/algolia/instantsearch.js/issues/2087) + + + + +## [2.1.2](https://github.com/algolia/instantsearch.js/compare/v2.1.1...v2.1.2) (2017-08-24) + + +### Bug Fixes + +* **es:** wrong path to files ([#2295](https://github.com/algolia/instantsearch.js/issues/2295)) ([a437e19](https://github.com/algolia/instantsearch.js/commit/a437e19)) + + + + +## [2.1.1](https://github.com/algolia/instantsearch.js/compare/v2.1.0...v2.1.1) (2017-08-23) + + +### Bug Fixes + +* **build:** provide unminified css as well ([#2292](https://github.com/algolia/instantsearch.js/issues/2292)) ([a79e067](https://github.com/algolia/instantsearch.js/commit/a79e067)) + + + + +# [2.1.0](https://github.com/algolia/instantsearch.js/compare/v2.1.0-beta.4...v2.1.0) (2017-08-21) + + +### Bug Fixes + +* **nvmrc:** upgrade nodejs version ([#2291](https://github.com/algolia/instantsearch.js/issues/2291)) ([94529d4](https://github.com/algolia/instantsearch.js/commit/94529d4)) + + + + +## [2.0.2](https://github.com/algolia/instantsearch.js/compare/v2.0.1...v2.0.2) (2017-07-24) + + +### Bug Fixes + +* **doc:** Cosmetic change ([48bb128](https://github.com/algolia/instantsearch.js/commit/48bb128)) +* **search-box:** fix magnifier and reset customization ([4adfade](https://github.com/algolia/instantsearch.js/commit/4adfade)) +* **theme:** enforce box-sizing: border-box ([e26e50d](https://github.com/algolia/instantsearch.js/commit/e26e50d)) +* **url-sync:** remove is_v from url ([f19a1d5](https://github.com/algolia/instantsearch.js/commit/f19a1d5)), closes [#2233](https://github.com/algolia/instantsearch.js/issues/2233) + + + + +## [2.0.1](https://github.com/algolia/instantsearch.js/compare/v2.0.0...v2.0.1) (2017-07-12) + + + + +# [2.0.0](https://github.com/algolia/instantsearch.js/compare/v1.11.15...v2.0.0) (2017-07-01) + + +### Bug Fixes + +* **argos-ci:** blur the active element ([66d0551](https://github.com/algolia/instantsearch.js/commit/66d0551)) +* **connectNumericRefinementList:** reset page on refine ([22ec08d](https://github.com/algolia/instantsearch.js/commit/22ec08d)) +* **doc.build:** watch & rebuild `.pug` ([16d8542](https://github.com/algolia/instantsearch.js/commit/16d8542)) +* **doc.build/autoprefixer:** update mtime for onlyChanged plugin ([3b83e58](https://github.com/algolia/instantsearch.js/commit/3b83e58)) +* **escapeHits:** dont apply configuration if not requested ([c89f99d](https://github.com/algolia/instantsearch.js/commit/c89f99d)) + + +### Features + +* **searchFunction:** make search function provide a better API ([8fc0831](https://github.com/algolia/instantsearch.js/commit/8fc0831)) + + + + +# [2.0.0-beta.5](https://github.com/algolia/instantsearch.js/compare/v1.11.12...v2.0.0-beta.5) (2017-06-01) + + +### Bug Fixes + +* **Slider:** dont call `refine()` when it's disabled ([f1eabc9](https://github.com/algolia/instantsearch.js/commit/f1eabc9)) + + +### Features + +* **hits:** opt-in xss filtering for hits and infinite hits. FIX #2138 ([4f67b48](https://github.com/algolia/instantsearch.js/commit/4f67b48)), closes [#2138](https://github.com/algolia/instantsearch.js/issues/2138) + + + + +# [2.0.0-beta.4](https://github.com/algolia/instantsearch.js/compare/v1.11.11...v2.0.0-beta.4) (2017-05-24) + + +### Bug Fixes + +* **misc:** IE 11 support ([072edfe](https://github.com/algolia/instantsearch.js/commit/072edfe)) +* **misc:** IE11 support without using transpiler ([324f062](https://github.com/algolia/instantsearch.js/commit/324f062)) +* **show-more:** should hide button when show more is not available (#2161) ([fbca3e6](https://github.com/algolia/instantsearch.js/commit/fbca3e6)), closes [#2160](https://github.com/algolia/instantsearch.js/issues/2160) +* **Slider:** handle edge case where `min === max` ([22a5614](https://github.com/algolia/instantsearch.js/commit/22a5614)) +* **Slider:** restore `slider--handle-lower` && `slider--handle-upper` ([64d7ad2](https://github.com/algolia/instantsearch.js/commit/64d7ad2)) + + + + +# [2.0.0-beta.2](https://github.com/algolia/instantsearch.js/compare/v1.11.9...v2.0.0-beta.2) (2017-05-17) + + +### Bug Fixes + +* **autoHideContainer:** dont prevent render with `shouldComponentUpdate` ([8c4b13f](https://github.com/algolia/instantsearch.js/commit/8c4b13f)) +* **clearsQuery:** not applied when only the query was not empty ([e7976ad](https://github.com/algolia/instantsearch.js/commit/e7976ad)) +* **connectors:** ensure `widgetParams` is at least an `{}` ([0c0e98f](https://github.com/algolia/instantsearch.js/commit/0c0e98f)) +* **connectRefinementList:** currentRefinements: return an array instead of first item ([a53223a](https://github.com/algolia/instantsearch.js/commit/a53223a)), closes [#2102](https://github.com/algolia/instantsearch.js/issues/2102) +* **dev:docs:** dont watch `/docgen/rootFiles` ([ab1a7f5](https://github.com/algolia/instantsearch.js/commit/ab1a7f5)) +* **doc:** add doc for isFirstRendering ([cea6739](https://github.com/algolia/instantsearch.js/commit/cea6739)) +* **docs:** dont filter out `p.type.type` ([881659a](https://github.com/algolia/instantsearch.js/commit/881659a)) +* **documentation.js:** Support for record types ([219ecd9](https://github.com/algolia/instantsearch.js/commit/219ecd9)) +* **documentationjs:** add support litteral string types in type format ([2a08e7d](https://github.com/algolia/instantsearch.js/commit/2a08e7d)) +* **documentationjs:** deeper related types ([6e3121e](https://github.com/algolia/instantsearch.js/commit/6e3121e)) +* **documentationjs:** find related type in TypeApplication ([e0487ee](https://github.com/algolia/instantsearch.js/commit/e0487ee)) +* **documentationjs:** fix 2+ depth structs ([4c8b7ec](https://github.com/algolia/instantsearch.js/commit/4c8b7ec)) +* **documentationjs:** fixed default value parameter ([b62cbc7](https://github.com/algolia/instantsearch.js/commit/b62cbc7)) +* **documentationjs:** records display with , ([8a968f2](https://github.com/algolia/instantsearch.js/commit/8a968f2)) +* **documentationjs:** Updgrade to RC + fixes ([e9f0361](https://github.com/algolia/instantsearch.js/commit/e9f0361)) +* **infinite-hits:** Remove hitsPerPage option (#2128) ([c13e377](https://github.com/algolia/instantsearch.js/commit/c13e377)) +* **live-example:** adapt regex for matching connectors ([774254c](https://github.com/algolia/instantsearch.js/commit/774254c)) +* **pagination:** fix zealous find/replace ([e269d87](https://github.com/algolia/instantsearch.js/commit/e269d87)) +* **price-ranges:** fix test ([fd65cb3](https://github.com/algolia/instantsearch.js/commit/fd65cb3)) +* **price-ranges:** New API uses ranges ([a5a6916](https://github.com/algolia/instantsearch.js/commit/a5a6916)) +* **refinementList:** reimplement show more on refinement list ([72655ab](https://github.com/algolia/instantsearch.js/commit/72655ab)) +* **refinementList:** sffv fix thanks [@julienpa](https://github.com/julienpa) ([30e0e9a](https://github.com/algolia/instantsearch.js/commit/30e0e9a)) +* **sffv:** Fix exhaustive facets ([0cadcc3](https://github.com/algolia/instantsearch.js/commit/0cadcc3)) +* **sortby:** Consistent across widget / connectors + migration ([8e366cc](https://github.com/algolia/instantsearch.js/commit/8e366cc)) +* **widgets/price-ranges:** wrong compute of `templateProps` ([be5e063](https://github.com/algolia/instantsearch.js/commit/be5e063)) + + +### Features + +* **connectHierarchicalMenu:** remove `currentRefinement` ([3912aaf](https://github.com/algolia/instantsearch.js/commit/3912aaf)) +* **connectHits:** typo `widgetOptions` -> `widgetParams` ([4420231](https://github.com/algolia/instantsearch.js/commit/4420231)) +* **connector:** Add hierarchical menu connector ([f727949](https://github.com/algolia/instantsearch.js/commit/f727949)) +* **connector:** add infinite hits connector ([cdf8675](https://github.com/algolia/instantsearch.js/commit/cdf8675)) +* **connector:** add instantsearchInstance to pagination render ([4fa96dc](https://github.com/algolia/instantsearch.js/commit/4fa96dc)) +* **connector:** add missing jsDoc descriptions ([e26e8e2](https://github.com/algolia/instantsearch.js/commit/e26e8e2)) +* **connector:** add range-slider ([1a02798](https://github.com/algolia/instantsearch.js/commit/1a02798)) +* **connector:** add tests for connectClearAll and connectHierarchicalMenu ([0eb29ec](https://github.com/algolia/instantsearch.js/commit/0eb29ec)) +* **connector:** Adds hits and menu connectors ([77083b7](https://github.com/algolia/instantsearch.js/commit/77083b7)) +* **connector:** Clear and CurrentRefinedValues ([02f7d3e](https://github.com/algolia/instantsearch.js/commit/02f7d3e)) +* **connector:** clearAll connector (iteration 2) ([90aa02e](https://github.com/algolia/instantsearch.js/commit/90aa02e)) +* **connector:** clearAll jsDoc + eslint fixes ([430a420](https://github.com/algolia/instantsearch.js/commit/430a420)) +* **connector:** complete jsdoc + pass instantsearch to view ([e125931](https://github.com/algolia/instantsearch.js/commit/e125931)) +* **connector:** connectClearAll documentation ([9b153aa](https://github.com/algolia/instantsearch.js/commit/9b153aa)) +* **connector:** connectClearAll iteration 2 (fix) ([03653f1](https://github.com/algolia/instantsearch.js/commit/03653f1)) +* **connector:** connectClearAll test ([5409157](https://github.com/algolia/instantsearch.js/commit/5409157)) +* **connector:** connectCurrentRefinedValues (iteration 2) ([68408de](https://github.com/algolia/instantsearch.js/commit/68408de)) +* **connector:** connectHierarchicalMenu (iteration 2) ([589454c](https://github.com/algolia/instantsearch.js/commit/589454c)) +* **connector:** connectHierarchicalMenu jsDoc ([e166090](https://github.com/algolia/instantsearch.js/commit/e166090)) +* **connector:** connectHits (iteration 2) ([bca09af](https://github.com/algolia/instantsearch.js/commit/bca09af)) +* **connector:** connectHitsPerPageSelector (iteration 2) ([26bb273](https://github.com/algolia/instantsearch.js/commit/26bb273)) +* **connector:** connectInfiniteHits (iteration 2) ([410459c](https://github.com/algolia/instantsearch.js/commit/410459c)) +* **connector:** connectNumericRefinementList (iteration 2) ([bfcf860](https://github.com/algolia/instantsearch.js/commit/bfcf860)) +* **connector:** connectNumericSelector (iteration 2) ([1eda8a2](https://github.com/algolia/instantsearch.js/commit/1eda8a2)) +* **connector:** connectNumericSelector jsDoc ([760fcea](https://github.com/algolia/instantsearch.js/commit/760fcea)) +* **connector:** connectRefinementList jsdoc + start document bool isFirstRendering ([52d13de](https://github.com/algolia/instantsearch.js/commit/52d13de)) +* **connector:** connectStats second iteration ([82b1cb3](https://github.com/algolia/instantsearch.js/commit/82b1cb3)) +* **connector:** connectToggle second iteration ([73b0878](https://github.com/algolia/instantsearch.js/commit/73b0878)) +* **connector:** fix createURL usage to generate correct urls ([fdf59d7](https://github.com/algolia/instantsearch.js/commit/fdf59d7)) +* **connector:** fix no param usage on custom infiniteHits ([961348a](https://github.com/algolia/instantsearch.js/commit/961348a)) +* **connector:** fix parameter consistency in connectClearAll ([9ddffd8](https://github.com/algolia/instantsearch.js/commit/9ddffd8)) +* **connector:** Fix parameters for toggle connector ([f96671c](https://github.com/algolia/instantsearch.js/commit/f96671c)) +* **connector:** hits-per-page-selector connector refactoring ([dd794e0](https://github.com/algolia/instantsearch.js/commit/dd794e0)) +* **connector:** jsDoc + check rendering function ([86f9739](https://github.com/algolia/instantsearch.js/commit/86f9739)) +* **connector:** jsDoc connectPagination ([3b284de](https://github.com/algolia/instantsearch.js/commit/3b284de)) +* **connector:** jsDoc for connectMenu ([626d5f1](https://github.com/algolia/instantsearch.js/commit/626d5f1)) +* **connector:** jsDoc updates ([c924043](https://github.com/algolia/instantsearch.js/commit/c924043)) +* **connector:** move clearAll as a rendering option ([ce41cde](https://github.com/algolia/instantsearch.js/commit/ce41cde)) +* **connector:** Numeric selector ([0dc42d2](https://github.com/algolia/instantsearch.js/commit/0dc42d2)) +* **connector:** numericRefinementList connector ([918d971](https://github.com/algolia/instantsearch.js/commit/918d971)) +* **connector:** pagination connector ([7a876f3](https://github.com/algolia/instantsearch.js/commit/7a876f3)) +* **connector:** price ranges connector ([d8bed96](https://github.com/algolia/instantsearch.js/commit/d8bed96)) +* **connector:** provide consistent interface for searchbox renderer ([17d8301](https://github.com/algolia/instantsearch.js/commit/17d8301)) +* **connector:** provide instantsearch instance at render ([12a7935](https://github.com/algolia/instantsearch.js/commit/12a7935)) +* **connector:** refactor search function ([618dca2](https://github.com/algolia/instantsearch.js/commit/618dca2)) +* **connector:** refinement list connector ([c8fcf4e](https://github.com/algolia/instantsearch.js/commit/c8fcf4e)) +* **connector:** remove legacy implementation of toggle ([04437b0](https://github.com/algolia/instantsearch.js/commit/04437b0)) +* **connector:** remove non relevant instantsearch API from test ([c5dce5c](https://github.com/algolia/instantsearch.js/commit/c5dce5c)) +* **connector:** remove unused parameter to searchbox connector ([e639f65](https://github.com/algolia/instantsearch.js/commit/e639f65)) +* **connector:** searchbox connector ([70f8e1f](https://github.com/algolia/instantsearch.js/commit/70f8e1f)) +* **connector:** small internal refactoring for SFFV ([cb5c1fa](https://github.com/algolia/instantsearch.js/commit/cb5c1fa)) +* **connector:** sort by selector connector ([b9847cf](https://github.com/algolia/instantsearch.js/commit/b9847cf)) +* **connector:** star rating connector ([9996b4d](https://github.com/algolia/instantsearch.js/commit/9996b4d)) +* **connector:** stats connector ([680743b](https://github.com/algolia/instantsearch.js/commit/680743b)) +* **connector:** test connectHits ([89c86a5](https://github.com/algolia/instantsearch.js/commit/89c86a5)) +* **connector:** test connectHitsPerPageSelector ([9caab02](https://github.com/algolia/instantsearch.js/commit/9caab02)) +* **connector:** test connectInfiniteHits ([e67e75e](https://github.com/algolia/instantsearch.js/commit/e67e75e)) +* **connector:** test connectMenu ([03c6f11](https://github.com/algolia/instantsearch.js/commit/03c6f11)) +* **connector:** test connectNumericRefinementList ([2f26251](https://github.com/algolia/instantsearch.js/commit/2f26251)) +* **connector:** test connectNumericSelector ([182779b](https://github.com/algolia/instantsearch.js/commit/182779b)) +* **connector:** test connectPagination ([6f125b7](https://github.com/algolia/instantsearch.js/commit/6f125b7)) +* **connector:** test connectPriceRanges ([f5dfba7](https://github.com/algolia/instantsearch.js/commit/f5dfba7)) +* **connector:** test connectRangeSlider ([4f6c180](https://github.com/algolia/instantsearch.js/commit/4f6c180)) +* **connector:** test connectSearchBox ([b4d7e1b](https://github.com/algolia/instantsearch.js/commit/b4d7e1b)) +* **connector:** test connectSortBySelector ([e8825df](https://github.com/algolia/instantsearch.js/commit/e8825df)) +* **connector:** test connectStarRating ([0c16f15](https://github.com/algolia/instantsearch.js/commit/0c16f15)), closes [#2002](https://github.com/algolia/instantsearch.js/issues/2002) +* **connector:** test connectStats ([c992288](https://github.com/algolia/instantsearch.js/commit/c992288)) +* **connector:** test connectToggle ([441293d](https://github.com/algolia/instantsearch.js/commit/441293d)) +* **connector:** toggle connector ([bf9a9c0](https://github.com/algolia/instantsearch.js/commit/bf9a9c0)) +* **connector:** update doc, move setValue to refine in SortBySelector ([2486f36](https://github.com/algolia/instantsearch.js/commit/2486f36)) +* **connector:** update jsDoc descriptions ([f83022a](https://github.com/algolia/instantsearch.js/commit/f83022a)) +* **connectors:** `refinement-list` widget (iteration2) ([1c6c3a5](https://github.com/algolia/instantsearch.js/commit/1c6c3a5)) +* **connectors:** `setValue()` -> `refine()` / `currentValue` -> `currentRefinement` ([ec7806c](https://github.com/algolia/instantsearch.js/commit/ec7806c)) +* **connectors:** `sortBy` to `['isRefined', 'count:desc']` ([01219f1](https://github.com/algolia/instantsearch.js/commit/01219f1)) +* **connectors:** add `currentRefinement` on `hierarchical-menu` ([154cdb5](https://github.com/algolia/instantsearch.js/commit/154cdb5)) +* **connectors:** connectPagination (iteration2) ([8a615f6](https://github.com/algolia/instantsearch.js/commit/8a615f6)) +* **connectors:** connectPriceRanges (iteration2) ([e34968e](https://github.com/algolia/instantsearch.js/commit/e34968e)) +* **connectors:** connectRangeSlider (iteration2) ([6073d94](https://github.com/algolia/instantsearch.js/commit/6073d94)) +* **connectors:** connectSearchBox (iteration2) ([3161c9b](https://github.com/algolia/instantsearch.js/commit/3161c9b)) +* **connectors:** connectSortBySelector (iteration 2) ([dec2d31](https://github.com/algolia/instantsearch.js/commit/dec2d31)) +* **connectors:** connectStarRating (iteration2) ([7ef7b6b](https://github.com/algolia/instantsearch.js/commit/7ef7b6b)) +* **connectors:** connectToggle, forward initial options to render ([704a455](https://github.com/algolia/instantsearch.js/commit/704a455)) +* **connectors:** dissociate logic & view for `menu` widget ([5a02c88](https://github.com/algolia/instantsearch.js/commit/5a02c88)) +* **connectors:** expose connectors on `instantsearch` instance ([ff799d0](https://github.com/algolia/instantsearch.js/commit/ff799d0)) +* **connectors:** forward `widgetParams` to `renderFn` ([54222a3](https://github.com/algolia/instantsearch.js/commit/54222a3)) +* **connectors:** jsDoc connectHitsPerPageSelector ([75243b0](https://github.com/algolia/instantsearch.js/commit/75243b0)) +* **connectors:** provide `currentRefinement` on menu ([fb7bc5e](https://github.com/algolia/instantsearch.js/commit/fb7bc5e)) +* **connectors:** provide `currentRefinement` on numeric refinement list ([91f7928](https://github.com/algolia/instantsearch.js/commit/91f7928)) +* **connectors.numeric-selector:** `currentValue` -> `currentRefinement` / `setValue()` -> `refine()` ([998faf1](https://github.com/algolia/instantsearch.js/commit/998faf1)) +* **connectors.price-ranges:** provides `currentRefiment` value ([39af437](https://github.com/algolia/instantsearch.js/commit/39af437)) +* **connectors.refinement-list:** provide `currentRefinement` to `renderFn` ([7e86be3](https://github.com/algolia/instantsearch.js/commit/7e86be3)) +* **connectors.star-rating:** provide `currentRefinement` value ([c08b3e4](https://github.com/algolia/instantsearch.js/commit/c08b3e4)) +* **connectRefinementList:** first good iteration ([88fd6d5](https://github.com/algolia/instantsearch.js/commit/88fd6d5)) +* **doc:** re-bootstrap doc based on instantsearch-android ([e4e816e](https://github.com/algolia/instantsearch.js/commit/e4e816e)) +* **docs:** bootstrap v2 docs ([0db6caf](https://github.com/algolia/instantsearch.js/commit/0db6caf)) +* **docs:** pages structure ([fe89dcf](https://github.com/algolia/instantsearch.js/commit/fe89dcf)) +* **getting-started:** add `.zip` boilerplate ([7d3769c](https://github.com/algolia/instantsearch.js/commit/7d3769c)) +* **getting-started:** add result example of guide ([78d9017](https://github.com/algolia/instantsearch.js/commit/78d9017)) +* **live-example:** add support of connectors ([e4f3158](https://github.com/algolia/instantsearch.js/commit/e4f3158)) +* **live-example:** include jquery on connectors example pages ([f32936f](https://github.com/algolia/instantsearch.js/commit/f32936f)) +* **main:** export all the widgets at once ([4bc2d21](https://github.com/algolia/instantsearch.js/commit/4bc2d21)) +* **numeric-refinement-list:** `facetValues` -> `items` / `toggleRefinement` -> `refine` ([eb2c993](https://github.com/algolia/instantsearch.js/commit/eb2c993)) +* **pagination:** `setPage()` -> `refine()` / `currentPage` -> `currentRefinement` ([f783fea](https://github.com/algolia/instantsearch.js/commit/f783fea)) +* **range-slider:** use `rheostat` as slider component (#2142) ([910a0a0](https://github.com/algolia/instantsearch.js/commit/910a0a0)) +* **searchFunction:** Update API, fix #1924 ([c7beb1d](https://github.com/algolia/instantsearch.js/commit/c7beb1d)), closes [#1924](https://github.com/algolia/instantsearch.js/issues/1924) +* **sort-by-selector:** `currentValue` -> `currentRefinement` ([e94c8c7](https://github.com/algolia/instantsearch.js/commit/e94c8c7)) +* **Template:** remove support for react element ([ca2ab44](https://github.com/algolia/instantsearch.js/commit/ca2ab44)) + + + + +## [1.11.15](https://github.com/algolia/instantsearch.js/compare/v1.11.14...v1.11.15) (2017-06-20) + + +### Bug Fixes + +* **numeric-refinement-list:** reset page on refine ([ee55ccb](https://github.com/algolia/instantsearch.js/commit/ee55ccb)) + + + + +## [1.11.14](https://github.com/algolia/instantsearch.js/compare/v1.11.13...v1.11.14) (2017-06-19) + + +### Bug Fixes + +* **powered-by:** update logo ([7e68b51](https://github.com/algolia/instantsearch.js/commit/7e68b51)), closes [#2126](https://github.com/algolia/instantsearch.js/issues/2126) + + + + +## [1.11.13](https://github.com/algolia/instantsearch.js/compare/v1.11.12...v1.11.13) (2017-06-07) + + +### Bug Fixes + +* **url-sync:** reverting back to using `change` event (#2183) ([07f4be0](https://github.com/algolia/instantsearch.js/commit/07f4be0)), closes [#2173](https://github.com/algolia/instantsearch.js/issues/2173) [#2171](https://github.com/algolia/instantsearch.js/issues/2171) + + + + +## [1.11.12](https://github.com/algolia/instantsearch.js/compare/v1.11.11...v1.11.12) (2017-05-30) + + +### Bug Fixes + +* **sffv:** when using a large limit, retain the search (#2163) ([3d95d4c](https://github.com/algolia/instantsearch.js/commit/3d95d4c)), closes [#2156](https://github.com/algolia/instantsearch.js/issues/2156) + + + + +## [1.11.10](https://github.com/algolia/instantsearch.js/compare/v1.11.9...v1.11.10) (2017-05-17) + + + + +## [1.11.9](https://github.com/algolia/instantsearch.js/compare/v1.11.8...v1.11.9) (2017-05-17) + + + + +## [1.11.8](https://github.com/algolia/instantsearch.js/compare/v1.11.7...v1.11.8) (2017-05-16) + + +### Bug Fixes + +* **url-sync:** set firstRender to be class attribute ([22dbaeb](https://github.com/algolia/instantsearch.js/commit/22dbaeb)) + + + + +## [1.11.7](https://github.com/algolia/instantsearch.js/compare/v1.11.6...v1.11.7) (2017-04-24) + + +### Bug Fixes + +* **sffv:** add class for disabled state at the form level (#2122) ([029fa5f](https://github.com/algolia/instantsearch.js/commit/029fa5f)) +* **sffv:** fixes typo (: was left) ([26d2845](https://github.com/algolia/instantsearch.js/commit/26d2845)) + + + + +## [1.11.6](https://github.com/algolia/instantsearch.js/compare/v1.11.5...v1.11.6) (2017-04-20) + + +### Bug Fixes + +* **CONTRIBUTING:** remove section about beta releases (#2109) ([5640131](https://github.com/algolia/instantsearch.js/commit/5640131)) +* **sffv:** disable sffv input when few facet values FIX #2111 ([1e33c10](https://github.com/algolia/instantsearch.js/commit/1e33c10)), closes [#2111](https://github.com/algolia/instantsearch.js/issues/2111) + + + + +## [1.11.5](https://github.com/algolia/instantsearch.js/compare/v1.11.4...v1.11.5) (2017-04-12) + + +### Bug Fixes + +* **url-sync:** sync url on search (#2108) ([7f33ffb](https://github.com/algolia/instantsearch.js/commit/7f33ffb)) + + + + +## [1.11.4](https://github.com/algolia/instantsearch.js/compare/v1.11.3...v1.11.4) (2017-03-29) + + +### Bug Fixes + +* **autoHideContainer:** dont prevent render with `shouldComponentUpdate` (#2076) ([b520400](https://github.com/algolia/instantsearch.js/commit/b520400)) +* **star-rating:** make max value inclusive ([f5fc41c](https://github.com/algolia/instantsearch.js/commit/f5fc41c)), closes [#2002](https://github.com/algolia/instantsearch.js/issues/2002) + + + + +## [1.11.3](https://github.com/algolia/instantsearch.js/compare/v1.11.2...v1.11.3) (2017-03-22) + + +### Bug Fixes + +* **Slider:** display disabled slider when `min === max` (#2041) ([511fdfd](https://github.com/algolia/instantsearch.js/commit/511fdfd)), closes [#2037](https://github.com/algolia/instantsearch.js/issues/2037) + + + + +## [1.11.2](https://github.com/algolia/instantsearch.js/compare/v1.11.1...v1.11.2) (2017-02-28) + + +### Bug Fixes + +* **searchBox:** avoid unwanted cursor jumps on hashchange (#2013) ([d0103db](https://github.com/algolia/instantsearch.js/commit/d0103db)), closes [#2012](https://github.com/algolia/instantsearch.js/issues/2012) + + + + +## [1.11.1](https://github.com/algolia/instantsearch.js/compare/v1.11.0...v1.11.1) (2017-02-14) + + +### Bug Fixes + +* **infinite-hits:** disable load more button when no more pages (#1973) ([745ed89](https://github.com/algolia/instantsearch.js/commit/745ed89)), closes [#1971](https://github.com/algolia/instantsearch.js/issues/1971) + + + + +# [1.11.0](https://github.com/algolia/instantsearch.js/compare/v1.10.5...v1.11.0) (2017-02-12) + + +### Features + +* **analytics-widget:** add a new parameter pushInitialSearch (#1963) ([d777997](https://github.com/algolia/instantsearch.js/commit/d777997)) +* **custom client:** allows to provide a custom JS client instance (#1948) ([cce4f2e](https://github.com/algolia/instantsearch.js/commit/cce4f2e)) +* **InfiniteHits:** add new widget ([2d77e4b](https://github.com/algolia/instantsearch.js/commit/2d77e4b)) + + + + +## [1.10.5](https://github.com/algolia/instantsearch.js/compare/v1.10.4...v1.10.5) (2017-02-06) + + +### Bug Fixes + +* **urlSync:** update url only after threshold (#1917) ([b0f0cf1](https://github.com/algolia/instantsearch.js/commit/b0f0cf1)), closes [#1856](https://github.com/algolia/instantsearch.js/issues/1856) + + + + +## [1.10.4](https://github.com/algolia/instantsearch.js/compare/v1.10.3...v1.10.4) (2017-01-25) + + + + +## [1.10.3](https://github.com/algolia/instantsearch.js/compare/v1.10.2...v1.10.3) (2016-12-26) + + +### Bug Fixes + +* **sffv-searchbox:** update classnames to avoid conflicts (#1781) ([f53e8fd](https://github.com/algolia/instantsearch.js/commit/f53e8fd)) + + + + +## [1.10.2](https://github.com/algolia/instantsearch.js/compare/v1.10.1...v1.10.2) (2016-12-23) + + +### Bug Fixes + +* **url:** clear timeout on pop ([41ad9af](https://github.com/algolia/instantsearch.js/commit/41ad9af)) + + + + +## [1.10.1](https://github.com/algolia/instantsearch.js/compare/v1.10.0...v1.10.1) (2016-12-23) + + +### Bug Fixes + +* **url:** default param ([7a18e1c](https://github.com/algolia/instantsearch.js/commit/7a18e1c)) + + +### Features + +* **url:** add a beta updateOnEveryKeystroke option (#1779) ([63f73fe](https://github.com/algolia/instantsearch.js/commit/63f73fe)) + + + + +# [1.10.0](https://github.com/algolia/instantsearch.js/compare/v1.9.0...v1.10.0) (2016-12-22) + + +### Features + +* **widget:** Search for facet values - refinement list (#1753) ([b9e20f3](https://github.com/algolia/instantsearch.js/commit/b9e20f3)) + + + + +# [1.9.0](https://github.com/algolia/instantsearch.js/compare/v1.8.16...v1.9.0) (2016-12-14) + + +### Bug Fixes + +* **currentRefinedValues:** unescape disjunctive facet refinement names (#1574) ([9ab65c4](https://github.com/algolia/instantsearch.js/commit/9ab65c4)), closes [#1569](https://github.com/algolia/instantsearch.js/issues/1569) +* **transformData:** default data is an object when not provided (#1570) ([8eeeeba](https://github.com/algolia/instantsearch.js/commit/8eeeeba)), closes [#1538](https://github.com/algolia/instantsearch.js/issues/1538) + + +### Features + +* **analytics:** new analytics widget to easily plug search to any analytics service ([09d8fda](https://github.com/algolia/instantsearch.js/commit/09d8fda)) +* **retry strategy:** new retry strategy ([afdcc3c](https://github.com/algolia/instantsearch.js/commit/afdcc3c)) + + + + +## [1.8.16](https://github.com/algolia/instantsearch.js/compare/v1.8.15...v1.8.16) (2016-11-16) + + + + +## [1.8.15](https://github.com/algolia/instantsearch.js/compare/v1.8.14...v1.8.15) (2016-11-16) + + +### Bug Fixes + +* **priceRanges:** avoid displaying solo ranges (#1544) ([ff396f0](https://github.com/algolia/instantsearch.js/commit/ff396f0)), closes [#1536](https://github.com/algolia/instantsearch.js/issues/1536) +* **priceRanges:** use formatNumber in defaultTemplate (#1559) ([557a501](https://github.com/algolia/instantsearch.js/commit/557a501)), closes [#1230](https://github.com/algolia/instantsearch.js/issues/1230) +* **toggle:** support negative numeric values for on/off (#1551) ([e4d88e0](https://github.com/algolia/instantsearch.js/commit/e4d88e0)), closes [#1537](https://github.com/algolia/instantsearch.js/issues/1537) +* **transformData:** always call transformData (#1555) ([49bfeca](https://github.com/algolia/instantsearch.js/commit/49bfeca)), closes [#1538](https://github.com/algolia/instantsearch.js/issues/1538) + + + + +## [1.8.14](https://github.com/algolia/instantsearch.js/compare/v1.8.13...v1.8.14) (2016-11-03) + + +### Bug Fixes + +* **slider:** avoid multi touch issues (#1501) ([0b8a242](https://github.com/algolia/instantsearch.js/commit/0b8a242)), closes [#1186](https://github.com/algolia/instantsearch.js/issues/1186) + + + + +## [1.8.13](https://github.com/algolia/instantsearch.js/compare/v1.8.12...v1.8.13) (2016-10-21) + + +### Bug Fixes + +* **searchbox:** poweredBy Algolia logo weren't visible in firefox ([39701f8](https://github.com/algolia/instantsearch.js/commit/39701f8)) + + + + +## [1.8.12](https://github.com/algolia/instantsearch.js/compare/v1.8.11...v1.8.12) (2016-10-19) + + +### Bug Fixes + +* **numericRefinementList:** classes on radio buttons (#1358) (#1432) ([fec6495](https://github.com/algolia/instantsearch.js/commit/fec6495)) + + + + +## [1.8.11](https://github.com/algolia/instantsearch.js/compare/v1.8.10...v1.8.11) (2016-10-07) + + +### Bug Fixes + +* **merge:** merge only plain object from searchParameters ([aab1c87](https://github.com/algolia/instantsearch.js/commit/aab1c87)) + + + + +## [1.8.10](https://github.com/algolia/instantsearch.js/compare/v1.8.9...v1.8.10) (2016-10-07) + + +### Bug Fixes + +* **lodash:** set lodash back to 4.15.0, fixes build, unknown issue for now ([ba4247e](https://github.com/algolia/instantsearch.js/commit/ba4247e)) + + + + +## [1.8.9](https://github.com/algolia/instantsearch.js/compare/v1.8.8...v1.8.9) (2016-10-07) + + +### Bug Fixes + +* **react:** avoid duplicating React ([59010f6](https://github.com/algolia/instantsearch.js/commit/59010f6)), closes [#1386](https://github.com/algolia/instantsearch.js/issues/1386) + + + + +## [1.8.8](https://github.com/algolia/instantsearch.js/compare/v1.8.6...v1.8.8) (2016-09-14) + + +### Bug Fixes + +* **numericSelector:** do not change state on init (#1280) ([cf27db3](https://github.com/algolia/instantsearch.js/commit/cf27db3)), closes [#1253](https://github.com/algolia/instantsearch.js/issues/1253) +* **Slider:** default precision to 2 (#1279) ([552b9ea](https://github.com/algolia/instantsearch.js/commit/552b9ea)) + + + + +## [1.8.6](https://github.com/algolia/instantsearch.js/compare/v1.8.5...v1.8.6) (2016-09-12) + + + + +## [1.8.5](https://github.com/algolia/instantsearch.js/compare/v1.8.4...v1.8.5) (2016-09-06) + + +### Bug Fixes + +* **deps:** upgrade all deps 2016-09-05 (#1261) ([408d597](https://github.com/algolia/instantsearch.js/commit/408d597)) +* **rangeSlider:** round pips numbers when step is integer (#1255) ([b993033](https://github.com/algolia/instantsearch.js/commit/b993033)), closes [#1254](https://github.com/algolia/instantsearch.js/issues/1254) + + + + +## [1.8.4](https://github.com/algolia/instantsearch.js/compare/v1.8.3...v1.8.4) (2016-08-29) + + +### Bug Fixes + +* **bundle:** switch back to React by default, create a preact build (#1228) ([4845868](https://github.com/algolia/instantsearch.js/commit/4845868)) + + + + +## [1.8.3](https://github.com/algolia/instantsearch.js/compare/v1.8.2...v1.8.3) (2016-08-29) + + +### Bug Fixes + +* **numericSelector:** if no currentValue found, use the first option ([ef56dfa](https://github.com/algolia/instantsearch.js/commit/ef56dfa)) +* **poweredBy:** fixed Algolia logo version (#1223) ([aab3fc3](https://github.com/algolia/instantsearch.js/commit/aab3fc3)), closes [#1223](https://github.com/algolia/instantsearch.js/issues/1223) [#1222](https://github.com/algolia/instantsearch.js/issues/1222) +* **Selector:** render a controlled component ([e9f6ff7](https://github.com/algolia/instantsearch.js/commit/e9f6ff7)) + + +### Performance Improvements + +* **filesize:** use preact in production build (#1224) ([5bb38f2](https://github.com/algolia/instantsearch.js/commit/5bb38f2)), closes [#1030](https://github.com/algolia/instantsearch.js/issues/1030) + + + + +## [1.8.2](https://github.com/algolia/instantsearch.js/compare/v1.8.1...v1.8.2) (2016-08-25) + + +### Bug Fixes + +* **lodash:** use lodash v4, reduce build size ([216d1e0](https://github.com/algolia/instantsearch.js/commit/216d1e0)) + + + + +## [1.8.1](https://github.com/algolia/instantsearch.js/compare/v1.8.0...v1.8.1) (2016-08-24) + + +### Bug Fixes + +* **searchBox:** handle BFCache browsers (#1212) ([7deb9c3](https://github.com/algolia/instantsearch.js/commit/7deb9c3)) +* **toggle:** make autoHide check facetValue.count (#1213) ([86872eb](https://github.com/algolia/instantsearch.js/commit/86872eb)) + + + + +# [1.8.0](https://github.com/algolia/instantsearch.js/compare/v1.7.1...v1.8.0) (2016-08-18) + + +### Bug Fixes + +* **documentation:** Change instantsearch.widgets.stats typo data.processingTimMS to data.processingTimeMS ([034703e](https://github.com/algolia/instantsearch.js/commit/034703e)) +* **documentation:** Change responsiveNavigation.js & header.html to fix #1090 ([bf3a808](https://github.com/algolia/instantsearch.js/commit/bf3a808)), closes [#1090](https://github.com/algolia/instantsearch.js/issues/1090) +* **nouislider:** fix the slider for nouislider 8.5.1 ([af8f56b](https://github.com/algolia/instantsearch.js/commit/af8f56b)) + + +### Features + +* **clearAll:** Add optional excludeAttributes to list protected filters ([fe6d19c](https://github.com/algolia/instantsearch.js/commit/fe6d19c)) + + + + +## [1.7.1](https://github.com/algolia/instantsearch.js/compare/v1.7.0...v1.7.1) (2016-07-28) + + +### Bug Fixes + +* **toggle:** add backward compatibility for previous toggle implem (#1154) ([a1973a0](https://github.com/algolia/instantsearch.js/commit/a1973a0)) + + + + +# [1.7.0](https://github.com/algolia/instantsearch.js/compare/v1.6.4...v1.7.0) (2016-07-26) + + +### Bug Fixes + +* **searchParameters:** avoid mutating provided objects (#1148) ([0ea3bef](https://github.com/algolia/instantsearch.js/commit/0ea3bef)), closes [#1130](https://github.com/algolia/instantsearch.js/issues/1130) + + +### Features + +* **toggle:** Provide a better default widget (#1146) ([d54107e](https://github.com/algolia/instantsearch.js/commit/d54107e)), closes [#1096](https://github.com/algolia/instantsearch.js/issues/1096) [#919](https://github.com/algolia/instantsearch.js/issues/919) + + + + +## [1.6.4](https://github.com/algolia/instantsearch.js/compare/v1.6.3...v1.6.4) (2016-07-12) + + + + +## [1.6.3](https://github.com/algolia/instantsearch.js/compare/v1.6.2...v1.6.3) (2016-07-11) + + +### Bug Fixes + +* **Hits:** always render hits ([2e7bf8a](https://github.com/algolia/instantsearch.js/commit/2e7bf8a)), closes [#1100](https://github.com/algolia/instantsearch.js/issues/1100) + + + + +## [1.6.2](https://github.com/algolia/instantsearch.js/compare/v1.6.1...v1.6.2) (2016-07-11) + + +### Bug Fixes + +* **paginationLink:** it's aria-label not ariaLabel (#1125) ([70a190c](https://github.com/algolia/instantsearch.js/commit/70a190c)) +* **pricesRange:** fill the form according to the current refinement (#1126) ([12ebde7](https://github.com/algolia/instantsearch.js/commit/12ebde7)), closes [#1009](https://github.com/algolia/instantsearch.js/issues/1009) +* **rangeSlider:** handles now support stacking (#1129) ([ad394d3](https://github.com/algolia/instantsearch.js/commit/ad394d3)) +* **rangeSlider:** use stats min/max when only user min or max is provided (#1124) ([4348463](https://github.com/algolia/instantsearch.js/commit/4348463)), closes [#1004](https://github.com/algolia/instantsearch.js/issues/1004) +* **searchBox:** force cursor position to be at the end of the query (#1123) ([8a27769](https://github.com/algolia/instantsearch.js/commit/8a27769)), closes [#946](https://github.com/algolia/instantsearch.js/issues/946) +* **searchBox:** IE8, IE9 needs to listen for setQuery ([97c166a](https://github.com/algolia/instantsearch.js/commit/97c166a)) +* **searchBox:** update helper query on every keystroke (#1127) ([997c0c2](https://github.com/algolia/instantsearch.js/commit/997c0c2)), closes [#1015](https://github.com/algolia/instantsearch.js/issues/1015) +* **urlSync:** urls should be safe by default (#1104) ([db833c6](https://github.com/algolia/instantsearch.js/commit/db833c6)), closes [#982](https://github.com/algolia/instantsearch.js/issues/982) + + + + +## [1.6.1](https://github.com/algolia/instantsearch.js/compare/v1.6.0...v1.6.1) (2016-06-20) + + +### Bug Fixes + +* **meteorjs:** lite build must point to the browser lite (#1097) ([265ace3](https://github.com/algolia/instantsearch.js/commit/265ace3)) +* **toggle:** read numerical facet results stats for toggle count (#1098) ([1feb539](https://github.com/algolia/instantsearch.js/commit/1feb539)), closes [#1096](https://github.com/algolia/instantsearch.js/issues/1096) +* **website:** footer wording ([8355460](https://github.com/algolia/instantsearch.js/commit/8355460)) + + + + +# [1.6.0](https://github.com/algolia/instantsearch.js/compare/v1.5.2...v1.6.0) (2016-06-13) + + +### Bug Fixes + +* **hits:** rename __position to hitIndex ([d051a54](https://github.com/algolia/instantsearch.js/commit/d051a54)) +* **refinementList/header:** rename count to refinedFacetCount ([89ad602](https://github.com/algolia/instantsearch.js/commit/89ad602)) + +### Features + +* **header:** Pass count of current refined filters in header ([d9e8582](https://github.com/algolia/instantsearch.js/commit/d9e8582)), closes [#1013](https://github.com/algolia/instantsearch.js/issues/1013) [#1041](https://github.com/algolia/instantsearch.js/issues/1041) +* **hits:** Add a `__position` attribute to data passed to items ([43ce1c7](https://github.com/algolia/instantsearch.js/commit/43ce1c7)), closes [#903](https://github.com/algolia/instantsearch.js/issues/903) + + + + +## [1.5.2](https://github.com/algolia/instantsearch.js/compare/v1.5.1...v1.5.2) (2016-06-10) + + +### Bug Fixes + +* **lite:** use lite algoliasearch build (js client) ([219fa9f](https://github.com/algolia/instantsearch.js/commit/219fa9f)), closes [#1024](https://github.com/algolia/instantsearch.js/issues/1024) +* **poweredBy:** Let users define their own poweredBy template ([f1a96d8](https://github.com/algolia/instantsearch.js/commit/f1a96d8)) + + + + +## [1.5.1](https://github.com/algolia/instantsearch.js/compare/v1.5.0...v1.5.1) (2016-05-17) + + +### Bug Fixes + +* **numericRefinementList:** Correctly apply active class ([7cca9a4](https://github.com/algolia/instantsearch.js/commit/7cca9a4)), closes [#1010](https://github.com/algolia/instantsearch.js/issues/1010) + + + + +# [1.5.0](https://github.com/algolia/instantsearch.js/compare/v1.4.5...v1.5.0) (2016-04-29) + + +### Bug Fixes + +* **base href:** always create absolute URLS in widgets ([ae6dbf6](https://github.com/algolia/instantsearch.js/commit/ae6dbf6)), closes [#970](https://github.com/algolia/instantsearch.js/issues/970) +* **IE11:** classList do not supports .add(class, class) ([ab10347](https://github.com/algolia/instantsearch.js/commit/ab10347)), closes [#989](https://github.com/algolia/instantsearch.js/issues/989) +* **lifecycle:** save configuration done in widget.init ([07d1fea](https://github.com/algolia/instantsearch.js/commit/07d1fea)) +* **RefinementList:** use attributeNameKey when calling createURL ([253ec28](https://github.com/algolia/instantsearch.js/commit/253ec28)) +* **rootpath:** remember rootpath option on 'back' button ([01ecdaa](https://github.com/algolia/instantsearch.js/commit/01ecdaa)) +* **searchBox:** do not trigger a search when input value is the same ([81c2e80](https://github.com/algolia/instantsearch.js/commit/81c2e80)) +* **urlSync:** only start watching for changes at first render ([4a672ae](https://github.com/algolia/instantsearch.js/commit/4a672ae)) + +### Features + +* **urlSync:** allow overriding replaceState(state)/pushState(state) ([989856c](https://github.com/algolia/instantsearch.js/commit/989856c)) + + + + +## [1.4.5](https://github.com/algolia/instantsearch.js/compare/v1.4.4...v1.4.5) (2016-04-18) + + +### Bug Fixes + +* **showMore:** hide "show less" when nothing to hide ([5ac2bb6](https://github.com/algolia/instantsearch.js/commit/5ac2bb6)) + + + + +## [1.4.4](https://github.com/algolia/instantsearch.js/compare/v1.4.3...v1.4.4) (2016-04-15) + + +### Bug Fixes + +* **pagination:** Disabled pagination link can no longer be clicked ([88b567f](https://github.com/algolia/instantsearch.js/commit/88b567f)), closes [#974](https://github.com/algolia/instantsearch.js/issues/974) +* **showMore:** hide showMore when no more facet values to show ([cc31b1a](https://github.com/algolia/instantsearch.js/commit/cc31b1a)) + + + + +## [1.4.3](https://github.com/algolia/instantsearch.js/compare/v1.4.2...v1.4.3) (2016-04-01) + + +### Bug Fixes + +* **rangeSlider:** step accepts a float value ([6ecc925](https://github.com/algolia/instantsearch.js/commit/6ecc925)) + + + + +## [1.4.2](https://github.com/algolia/instantsearch.js/compare/v1.4.1...v1.4.2) (2016-03-24) + + +### Performance Improvements + +* **refinementList:** Stop creating URL for hidden refinements. ([2cdd17d](https://github.com/algolia/instantsearch.js/commit/2cdd17d)) + + + + +## [1.4.1](https://github.com/algolia/instantsearch.js/compare/v1.4.0...v1.4.1) (2016-03-22) + + +### Bug Fixes + +* **searchBox:** do not update the input when focused ([61cf9be](https://github.com/algolia/instantsearch.js/commit/61cf9be)), closes [#944](https://github.com/algolia/instantsearch.js/issues/944) + + + + +# [1.4.0](https://github.com/algolia/instantsearch.js/compare/v1.3.3...v1.4.0) (2016-03-16) + + +### Bug Fixes + +* **url:** allow hierarchical facets in trackedParameters ([36b4011](https://github.com/algolia/instantsearch.js/commit/36b4011)) + +### Features + +* **url-sync:** use the new mapping option ([f869885](https://github.com/algolia/instantsearch.js/commit/f869885)), closes [#838](https://github.com/algolia/instantsearch.js/issues/838) + + + + +## [1.3.3](https://github.com/algolia/instantsearch.js/compare/v1.3.2...v1.3.3) (2016-03-07) + + +### Bug Fixes + +* **headerFooter:** make collapsible click handler work ([add0d50](https://github.com/algolia/instantsearch.js/commit/add0d50)) + +### Performance Improvements + +* **linters:** Greatly improve the `npm run lint` task speed ([1ba53b0](https://github.com/algolia/instantsearch.js/commit/1ba53b0)) + + + + +## [1.3.2](https://github.com/algolia/instantsearch.js/compare/v1.3.1...v1.3.2) (2016-03-07) + + +### Bug Fixes + +* **Template:** stop leaking `data="[object Object]"` attributes in production builds ([7ec0431](https://github.com/algolia/instantsearch.js/commit/7ec0431)), closes [#899](https://github.com/algolia/instantsearch.js/issues/899) + +### Features + +* **validate-pr:** Allow `docs()` commits to be merged in master ([0abc689](https://github.com/algolia/instantsearch.js/commit/0abc689)) + + + + +## [1.3.1](https://github.com/algolia/instantsearch.js/compare/v1.3.0...v1.3.1) (2016-03-07) + + +### Bug Fixes + +* **collapsible:** stop duplicating collapsible styling ([7362901](https://github.com/algolia/instantsearch.js/commit/7362901)) +* **lodash:** stop leaking lodash in the global scope ([91f71dc](https://github.com/algolia/instantsearch.js/commit/91f71dc)), closes [#900](https://github.com/algolia/instantsearch.js/issues/900) + + + + +# [1.3.0](https://github.com/algolia/instantsearch.js/compare/v1.2.5...v1.3.0) (2016-03-04) + + +### Bug Fixes + +* **browser support:** make IE lte 10 work by fixing Object.getPrototypeOf ([bbb264b](https://github.com/algolia/instantsearch.js/commit/bbb264b)) +* **menu,refinementList:** sort by count AND name to avoid reorders on refine ([02fe7bf](https://github.com/algolia/instantsearch.js/commit/02fe7bf)), closes [#65](https://github.com/algolia/instantsearch.js/issues/65) +* **priceRanges:** pass the bound refine to the form ([ce2b956](https://github.com/algolia/instantsearch.js/commit/ce2b956)) +* **searchBox:** handle external updates of the query ([6a0af14](https://github.com/algolia/instantsearch.js/commit/6a0af14)), closes [#803](https://github.com/algolia/instantsearch.js/issues/803) +* **searchBox:** stop setting the query twice ([91270b2](https://github.com/algolia/instantsearch.js/commit/91270b2)) +* **searchBox:** stop updating query at eachkeystroke with searchOnEnterKeyPressOnly ([28dc4d2](https://github.com/algolia/instantsearch.js/commit/28dc4d2)), closes [#875](https://github.com/algolia/instantsearch.js/issues/875) +* **Slider:** do not render Slider when range.min === range.max ([f20274e](https://github.com/algolia/instantsearch.js/commit/f20274e)) +* **Template:** now render() when templateKey changes ([8906224](https://github.com/algolia/instantsearch.js/commit/8906224)) +* **toggle:** pass isRefined to toggleRefinement ([8ac494e](https://github.com/algolia/instantsearch.js/commit/8ac494e)) +* **url-sync:** always decode incoming query string ([bea38e3](https://github.com/algolia/instantsearch.js/commit/bea38e3)), closes [#848](https://github.com/algolia/instantsearch.js/issues/848) +* **url-sync:** handle href pages ([e58aadc](https://github.com/algolia/instantsearch.js/commit/e58aadc)), closes [#790](https://github.com/algolia/instantsearch.js/issues/790) + +### Features + +* **collapsable widgets:** add collapsable and collapsed option ([c4df7c5](https://github.com/algolia/instantsearch.js/commit/c4df7c5)) +* **instantsearch:** allow overriding the helper.search function ([9a930e7](https://github.com/algolia/instantsearch.js/commit/9a930e7)) +* **rangeSlider:** allow passing min and max values ([409295c](https://github.com/algolia/instantsearch.js/commit/409295c)), closes [#858](https://github.com/algolia/instantsearch.js/issues/858) +* **searchBox:** allow to pass a queryHook ([5786a64](https://github.com/algolia/instantsearch.js/commit/5786a64)) +* **Template:** allow template functions to return a React element ([748077d](https://github.com/algolia/instantsearch.js/commit/748077d)) +* **Template:** allow template functions to return a React element ([0f9296d](https://github.com/algolia/instantsearch.js/commit/0f9296d)) + +### Performance Improvements + +* **autoHideContainer:** stop re-creating React components ([8c89862](https://github.com/algolia/instantsearch.js/commit/8c89862)) +* **formatting numbers:** stop using a default locale, use the system one ([b056554](https://github.com/algolia/instantsearch.js/commit/b056554)) +* **nouislider:** upgrade nouislider, shaves some more ms ([fefbe65](https://github.com/algolia/instantsearch.js/commit/fefbe65)) +* **React:** use babel `optimisation` option for React ([95f940c](https://github.com/algolia/instantsearch.js/commit/95f940c)) +* **React, widgets:** implement shouldComponentUpdate, reduce bind ([5efaac1](https://github.com/algolia/instantsearch.js/commit/5efaac1)) + + + + +## [1.2.5](https://github.com/algolia/instantsearch.js/compare/v1.2.4...v1.2.5) (2016-03-02) + + +### Bug Fixes + +* **hierarchicalMenu:** configure maxValuesPerFacet using the limit option ([4868717](https://github.com/algolia/instantsearch.js/commit/4868717)), closes [#66](https://github.com/algolia/instantsearch.js/issues/66) + + + + +## [1.2.4](https://github.com/algolia/instantsearch.js/compare/v1.2.3...v1.2.4) (2016-02-29) + +Upgraded the helper to 2.9.0 to support undocumented parameters from the API. + + + +## [1.2.3](https://github.com/algolia/instantsearch.js/compare/v1.2.2...v1.2.3) (2016-02-18) + + +### Bug Fixes + +* **currentRefinedValues:** clear numeric refinements using original value ([9a0ad45](https://github.com/algolia/instantsearch.js/commit/9a0ad45)), closes [#844](https://github.com/algolia/instantsearch.js/issues/844) + + + + +## [1.2.2](https://github.com/algolia/instantsearch.js/compare/v1.2.1...v1.2.2) (2016-02-03) + + +### Features + +* **menu:** add showMore option ([e7e7677](https://github.com/algolia/instantsearch.js/commit/e7e7677)), closes [#815](https://github.com/algolia/instantsearch.js/issues/815) + + + + +## [1.2.1](https://github.com/algolia/instantsearch.js/compare/v1.2.0...v1.2.1) (2016-02-02) + + +### Bug Fixes + +* **showmore:** now showMore in doc and also show-more BEM ([a020439](https://github.com/algolia/instantsearch.js/commit/a020439)) + + + + +# [1.2.0](https://github.com/algolia/instantsearch.js/compare/v1.1.3...v1.2.0) (2016-02-02) + + +### Bug Fixes + +* **all:** typos ([fa8ba09](https://github.com/algolia/instantsearch.js/commit/fa8ba09)) +* **currentRefinedValues:** allow array of strings for cssClasses.* ([55b3a3f](https://github.com/algolia/instantsearch.js/commit/55b3a3f)) +* **docs:** fixed bad link to scss in custom themes section ([823a859](https://github.com/algolia/instantsearch.js/commit/823a859)) +* **getRefinements:** a name should be a string ([7efd1fd](https://github.com/algolia/instantsearch.js/commit/7efd1fd)) +* **getRefinements:** hierarchical facets ([fe0fc5d](https://github.com/algolia/instantsearch.js/commit/fe0fc5d)) +* **index:** Use module.exports instead of export on index ([81e7eee](https://github.com/algolia/instantsearch.js/commit/81e7eee)) +* **pagination:** remove default value of maxPages. Fixes #761 ([607fe9a](https://github.com/algolia/instantsearch.js/commit/607fe9a)), closes [#761](https://github.com/algolia/instantsearch.js/issues/761) +* **prepareTemplates:** uses templates with keys that are not in defaults ([c4bf8ec](https://github.com/algolia/instantsearch.js/commit/c4bf8ec)) +* **rangeSlider:** prevent slider from extending farther than the last pip ([6e534f5](https://github.com/algolia/instantsearch.js/commit/6e534f5)) +* **search-box:** update value when state changes from the outside ([4550f99](https://github.com/algolia/instantsearch.js/commit/4550f99)) +* **url-sync:** adds indexName in the helper configuration ([e50bafd](https://github.com/algolia/instantsearch.js/commit/e50bafd)) +* **url-sync:** Makes url sync more reliable ([3157abc](https://github.com/algolia/instantsearch.js/commit/3157abc)), closes [#730](https://github.com/algolia/instantsearch.js/issues/730) [#729](https://github.com/algolia/instantsearch.js/issues/729) + +### Features + +* **currentRefinedValues:** new widget ([6c926d0](https://github.com/algolia/instantsearch.js/commit/6c926d0)), closes [#404](https://github.com/algolia/instantsearch.js/issues/404) +* **hits:** adds allItems template as an alternative to item ([1f3f889](https://github.com/algolia/instantsearch.js/commit/1f3f889)) +* **poweredBy:** automatically add utm link to poweredBy ([05d1425](https://github.com/algolia/instantsearch.js/commit/05d1425)), closes [#711](https://github.com/algolia/instantsearch.js/issues/711) +* **priceRanges:** add currency option ([f41484a](https://github.com/algolia/instantsearch.js/commit/f41484a)) +* **refinementlist:** lets configure showmore feature ([3b8688a](https://github.com/algolia/instantsearch.js/commit/3b8688a)) +* **Template:** accepts any parameters and forwards them ([5170f53](https://github.com/algolia/instantsearch.js/commit/5170f53)) + + + + +## [1.1.3](https://github.com/algolia/instantsearch.js/compare/v1.1.2...v1.1.3) (2016-01-12) + + +### Bug Fixes + +* **searchBox:** fixes cssClasses option ([660ee2f](https://github.com/algolia/instantsearch.js/commit/660ee2f)), closes [#775](https://github.com/algolia/instantsearch.js/issues/775) + + + + +## [1.1.2](https://github.com/algolia/instantsearch.js/compare/v1.1.1...v1.1.2) (2016-01-08) + + + + + +## [1.1.1](https://github.com/algolia/instantsearch.js/compare/v1.1.0...v1.1.1) (2016-01-07) + + +### Bug Fixes + +* **style:** keyframes ([40eb0a5](https://github.com/algolia/instantsearch.js/commit/40eb0a5)) +* **url-sync:** adds indexName in the helper configuration ([c2c0bc7](https://github.com/algolia/instantsearch.js/commit/c2c0bc7)) + +### Features + +* **clearRefinements:** Added two utils methods ([49564e1](https://github.com/algolia/instantsearch.js/commit/49564e1)) + + + + +# [1.1.0](https://github.com/algolia/instantsearch.js/compare/v1.0.0...v1.1.0) (2015-11-26) + + +### Bug Fixes + +* **pagination:** fix #668 edge case ([d8f1196](https://github.com/algolia/instantsearch.js/commit/d8f1196)), closes [#668](https://github.com/algolia/instantsearch.js/issues/668) +* **priceRanges:** Remove round from first range ([bf82395](https://github.com/algolia/instantsearch.js/commit/bf82395)) +* **slider:** hide the slider when stats.min=stats.max ([42e4b64](https://github.com/algolia/instantsearch.js/commit/42e4b64)) +* **starRating:** Retrieve the correct count and use numericRefinement ([f00ce38](https://github.com/algolia/instantsearch.js/commit/f00ce38)), closes [#615](https://github.com/algolia/instantsearch.js/issues/615) + +### Features + +* **hierarchical:** expose rootPath and showParentLevel ([6e9bb7c](https://github.com/algolia/instantsearch.js/commit/6e9bb7c)) + + + + +# [1.0.0](https://github.com/algolia/instantsearch.js/compare/v0.14.9...v1.0.0) (2015-11-18) + + + + + +## [0.14.9](https://github.com/algolia/instantsearch.js/compare/v0.14.8...v0.14.9) (2015-11-18) + + + + + +## [0.14.8](https://github.com/algolia/instantsearch.js/compare/v0.14.7...v0.14.8) (2015-11-18) + + + + + +## [0.14.7](https://github.com/algolia/instantsearch.js/compare/v0.14.6...v0.14.7) (2015-11-18) + + + + + +## [0.14.6](https://github.com/algolia/instantsearch.js/compare/v0.14.5...v0.14.6) (2015-11-17) + + + + + +## [0.14.5](https://github.com/algolia/instantsearch.js/compare/v0.14.4...v0.14.5) (2015-11-17) + + + + + +## [0.14.4](https://github.com/algolia/instantsearch.js/compare/v0.14.3...v0.14.4) (2015-11-17) + + +### Bug Fixes + +* **doc:** Expand input on documentation page ([6814a14](https://github.com/algolia/instantsearch.js/commit/6814a14)) + + + + +## [0.14.3](https://github.com/algolia/instantsearch.js/compare/v0.14.2...v0.14.3) (2015-11-17) + + +### Bug Fixes + +* **examples:** media logo ([64f850e](https://github.com/algolia/instantsearch.js/commit/64f850e)) +* **website:** demos link to https ([b69c0f5](https://github.com/algolia/instantsearch.js/commit/b69c0f5)) + + + + +## [0.14.2](https://github.com/algolia/instantsearch.js/compare/v0.14.1...v0.14.2) (2015-11-17) + + +### Bug Fixes + +* **numericSelector:** pass currentValue as the refined value, not the full obj ([9286b4b](https://github.com/algolia/instantsearch.js/commit/9286b4b)) +* **website:** search icon ([623f071](https://github.com/algolia/instantsearch.js/commit/623f071)) + + + + +## [0.14.1](https://github.com/algolia/instantsearch.js/compare/v0.14.0...v0.14.1) (2015-11-16) + + +### Bug Fixes + +* **docs:** minor CSS fixes ([94fa868](https://github.com/algolia/instantsearch.js/commit/94fa868)), closes [#573](https://github.com/algolia/instantsearch.js/issues/573) + + + + +# [0.14.0](https://github.com/algolia/instantsearch.js/compare/v0.13.0...v0.14.0) (2015-11-13) + + +### Bug Fixes + +* **hierarchicalMenu:** handle limit option ([968cf58](https://github.com/algolia/instantsearch.js/commit/968cf58)), closes [#585](https://github.com/algolia/instantsearch.js/issues/585) [#235](https://github.com/algolia/instantsearch.js/issues/235) +* **numeric-selector:** makes init comply with the new API ([068e8d3](https://github.com/algolia/instantsearch.js/commit/068e8d3)) + +### Features + +* **core:** sends a custom User Agent ([2561154](https://github.com/algolia/instantsearch.js/commit/2561154)) +* **lifecycle:** makes init API consistent with the rest ([e7ed81f](https://github.com/algolia/instantsearch.js/commit/e7ed81f)) + +### BREAKING CHANGES + +* all widgets using "facetName" are now using "attributeName" + + +# [0.13.0](https://github.com/algolia/instantsearch.js/compare/v0.12.3...v0.13.0) (2015-11-12) + + +### Features + +* **clearAll:** New widget ([9e61a14](https://github.com/algolia/instantsearch.js/commit/9e61a14)) + + + + +## [0.12.3](https://github.com/algolia/instantsearch.js/compare/v0.12.2...v0.12.3) (2015-11-12) + + + + + +## [0.12.2](https://github.com/algolia/instantsearch.js/compare/v0.12.1...v0.12.2) (2015-11-12) + + +### Bug Fixes + +* **layout:** missing div (did we lost that fix?) ([9a515e4](https://github.com/algolia/instantsearch.js/commit/9a515e4)) + + + + +## [0.12.1](https://github.com/algolia/instantsearch.js/compare/v0.12.0...v0.12.1) (2015-11-12) + + +### Bug Fixes + +* **counts:** missing formatNumber calls ([65e5ba0](https://github.com/algolia/instantsearch.js/commit/65e5ba0)), closes [#560](https://github.com/algolia/instantsearch.js/issues/560) +* **doc:** ensure selector is not conflicting ([6528f2c](https://github.com/algolia/instantsearch.js/commit/6528f2c)), closes [#505](https://github.com/algolia/instantsearch.js/issues/505) +* **docs:** improved label/input hover debug ([58573db](https://github.com/algolia/instantsearch.js/commit/58573db)), closes [#503](https://github.com/algolia/instantsearch.js/issues/503) +* **examples/airbnb:** Use default theme from CDN ([f379c0a](https://github.com/algolia/instantsearch.js/commit/f379c0a)), closes [#522](https://github.com/algolia/instantsearch.js/issues/522) +* **examples/youtube:** use the default theme ([cf9a4b6](https://github.com/algolia/instantsearch.js/commit/cf9a4b6)) +* **rangeSlider:** fixed tooltip CSS & outdated default theme. ([c4be2ef](https://github.com/algolia/instantsearch.js/commit/c4be2ef)) + + + + +# [0.12.0](https://github.com/algolia/instantsearch.js/compare/v0.11.1...v0.12.0) (2015-11-10) + + +### Bug Fixes + +* **pagination:** Fix double BEM classes on elements ([2ede317](https://github.com/algolia/instantsearch.js/commit/2ede317)), closes [#500](https://github.com/algolia/instantsearch.js/issues/500) +* **price-ranges:** fix usage + add test ([89601d7](https://github.com/algolia/instantsearch.js/commit/89601d7)) +* **range-slider:** check usage + display (fixes #395) ([301643a](https://github.com/algolia/instantsearch.js/commit/301643a)), closes [#395](https://github.com/algolia/instantsearch.js/issues/395) +* **rangeSlider:** error when no result ([70e8554](https://github.com/algolia/instantsearch.js/commit/70e8554)) +* **theme:** Revert default spacing into pagination ([d755fd5](https://github.com/algolia/instantsearch.js/commit/d755fd5)) + + +### BREAKING CHANGES + +* pagination: Removes all `__disabled`, `__first`, `__last`, +`__next`, `__previous`, `__active` and `__page` classes added on the links in the +pagination. It only ads them to the parent `li`. Links instead now +have a `.ais-pagination--link` class + +Previously, the same CSS classes where added to both the `item` (`li`) and the +link inside it. I've split them in `--item` and `--link`. + +I've also made the various active/first/disabled/etc modifiers as +actual `__modifier` classes. + +I've updated the tests, the CSS skeleton, the examples and the docs +accordingly. + + + + +## [0.11.1](https://github.com/algolia/instantsearch.js/compare/v0.11.0...v0.11.1) (2015-11-10) + + + + + +# [0.11.0](https://github.com/algolia/instantsearch.js/compare/v0.10.0...v0.11.0) (2015-11-06) + +### Bug Fixes + +* **bem:** Make scss mixins actually follow BEM ([fcfb408](https://github.com/algolia/instantsearch.js/commit/fcfb408)) +* **doc:** bolder font for the navigation ([64f6d56](https://github.com/algolia/instantsearch.js/commit/64f6d56)) +* **InstantSearch:** throw error when init and render are not defined. Fixes #499 ([2830cd3](https://github.com/algolia/instantsearch.js/commit/2830cd3)), closes [#499](https://github.com/algolia/instantsearch.js/issues/499) +* **live-doc:** adds a start at a responsive display ([c83967e](https://github.com/algolia/instantsearch.js/commit/c83967e)) +* **live-doc:** adds navigation menu for smaller screens ([a6bb71e](https://github.com/algolia/instantsearch.js/commit/a6bb71e)) +* **live-doc:** fixes flow for texts ([3855071](https://github.com/algolia/instantsearch.js/commit/3855071)) +* **live-doc:** Momentum scroll for iPhone ([60a36ff](https://github.com/algolia/instantsearch.js/commit/60a36ff)) +* **live-doc:** uses only h4 and fixes style of h4 (mobile) ([0fdd2d0](https://github.com/algolia/instantsearch.js/commit/0fdd2d0)) +* **middle-click:** Allow middle click on links ([a7601c0](https://github.com/algolia/instantsearch.js/commit/a7601c0)) +* **range-slider:** Use lodash find instead of Array.prototype.find ([056153c](https://github.com/algolia/instantsearch.js/commit/056153c)) +* **searchBox:** handling pasting event with contextual menu. ([a172458](https://github.com/algolia/instantsearch.js/commit/a172458)), closes [#467](https://github.com/algolia/instantsearch.js/issues/467) +* **website:** defered doc scripts ([0c1324f](https://github.com/algolia/instantsearch.js/commit/0c1324f)) +* **website:** doc layout responsive ([a4dc894](https://github.com/algolia/instantsearch.js/commit/a4dc894)) +* **website:** fixed space overlay color animation ([200b8a7](https://github.com/algolia/instantsearch.js/commit/200b8a7)) +* **website:** Fixes & responsive stuff for doc ([7a8f920](https://github.com/algolia/instantsearch.js/commit/7a8f920)) +* **website:** footer markup ([95364a1](https://github.com/algolia/instantsearch.js/commit/95364a1)) +* **website:** home.js lint ([b70e06e](https://github.com/algolia/instantsearch.js/commit/b70e06e)) +* **website:** icon-theme didn't like svgo (to fix) ([38d84af](https://github.com/algolia/instantsearch.js/commit/38d84af)) +* **website:** image alt ([30cca29](https://github.com/algolia/instantsearch.js/commit/30cca29)) +* **website:** jsdelivr for every scripts ([06591d4](https://github.com/algolia/instantsearch.js/commit/06591d4)) +* **website:** Nav Icon + logo ([c1f419c](https://github.com/algolia/instantsearch.js/commit/c1f419c)) +* **website:** only load what's needed in bootstrap ([4843474](https://github.com/algolia/instantsearch.js/commit/4843474)) +* **website:** removed animation debug ([01ac079](https://github.com/algolia/instantsearch.js/commit/01ac079)) +* **website:** space bg fadeIn ([5e09844](https://github.com/algolia/instantsearch.js/commit/5e09844)) +* **website:** unclosed content block ([d42dc3e](https://github.com/algolia/instantsearch.js/commit/d42dc3e)) + +### Features + +* **hierarchicalMenu:** Adding indentation with default theme ([34885d2](https://github.com/algolia/instantsearch.js/commit/34885d2)) + + +### BREAKING CHANGES + +* hierarchicalMenu: Hierarchical menu levels 1 and 2 now have +a margin-left added in the default theme. + + + +# [0.10.0](https://github.com/algolia/instantsearch.js/compare/v0.9.0...v0.10.0) (2015-11-06) + + +### Bug Fixes + +* **api:** rename hideContainerWhenNoResults to autoHideContainer ([3f64bef](https://github.com/algolia/instantsearch.js/commit/3f64bef)), closes [#407](https://github.com/algolia/instantsearch.js/issues/407) +* **doc:** ensure the documentation content doesn't overflow ([1e28a4e](https://github.com/algolia/instantsearch.js/commit/1e28a4e)), closes [#444](https://github.com/algolia/instantsearch.js/issues/444) +* **hitsPerPageSelector:** Be more tolerant in options ([e14a344](https://github.com/algolia/instantsearch.js/commit/e14a344)) +* **numeric widgets:** synchronizes rounded value between widgets ([b314160](https://github.com/algolia/instantsearch.js/commit/b314160)) +* **numeric-refinement:** Replace Array.find with lodash find/includes ([b3e815c](https://github.com/algolia/instantsearch.js/commit/b3e815c)) +* **price-ranges:** makes it uses same operator as the slider ([ad6f5c2](https://github.com/algolia/instantsearch.js/commit/ad6f5c2)) +* **range-slider:** fixes bound definition ([e15c9b7](https://github.com/algolia/instantsearch.js/commit/e15c9b7)) +* **selector:** makes component as uncontrolled component ([1dda12a](https://github.com/algolia/instantsearch.js/commit/1dda12a)) +* **slider:** fixed `pip` propTypes constraint ([c77b7f4](https://github.com/algolia/instantsearch.js/commit/c77b7f4)) +* **website:** fix images path ([a3f62eb](https://github.com/algolia/instantsearch.js/commit/a3f62eb)) + +### Features + +* **searchBox:** ability to be non-instant ([b3ef871](https://github.com/algolia/instantsearch.js/commit/b3ef871)), closes [#458](https://github.com/algolia/instantsearch.js/issues/458) +* **toggle:** Allow custom on/off values ([9b6c2bf](https://github.com/algolia/instantsearch.js/commit/9b6c2bf)), closes [#409](https://github.com/algolia/instantsearch.js/issues/409) + +### Performance Improvements + +* **hitsPerPageSelector:** Use the correct lodash function ([be9aea7](https://github.com/algolia/instantsearch.js/commit/be9aea7)) + + +### BREAKING CHANGES + +* api: use autoHideContainer instead of +hideContainerWhenNoResults + + + + +# [0.9.0](https://github.com/algolia/instantsearch.js/compare/v0.8.2...v0.9.0) (2015-11-04) + + +### Features + +* **numericRefinementList:** create numericRefinementList widget using refinementList component ([a29e9c7](https://github.com/algolia/instantsearch.js/commit/a29e9c7)) + + + + +## [0.8.2](https://github.com/algolia/instantsearch.js/compare/v0.8.1...v0.8.2) (2015-11-04) + + +### Bug Fixes + +* **doc:** All wigdets in docs are not anymore linked together #fix #446 ([4361320](https://github.com/algolia/instantsearch.js/commit/4361320)), closes [#446](https://github.com/algolia/instantsearch.js/issues/446) +* **hitsPerPageSelector:** Issue when state did not have a `hitsPerPage` ([dc9371c](https://github.com/algolia/instantsearch.js/commit/dc9371c)) + + + + +## [0.8.1](https://github.com/algolia/instantsearch.js/compare/v0.8.0...v0.8.1) (2015-11-04) + + +### Bug Fixes + +* **hierarchicalMenu:** handle cases where no results after a search ([0a1d0ac](https://github.com/algolia/instantsearch.js/commit/0a1d0ac)), closes [#385](https://github.com/algolia/instantsearch.js/issues/385) + +### Features + +* **build:** allow building React based custom widgets ([cfbbfe4](https://github.com/algolia/instantsearch.js/commit/cfbbfe4)), closes [#373](https://github.com/algolia/instantsearch.js/issues/373) + + + + +# [0.8.0](https://github.com/algolia/instantsearch.js/compare/v0.7.0...v0.8.0) (2015-11-03) + + +### Bug Fixes + +* **cssClasses:** Fixed duplication of classNames ([e193f45](https://github.com/algolia/instantsearch.js/commit/e193f45)), closes [#388](https://github.com/algolia/instantsearch.js/issues/388) +* **doc:** add doctype were missing ([86a18aa](https://github.com/algolia/instantsearch.js/commit/86a18aa)) +* **doc:** new color scheme ([deccc17](https://github.com/algolia/instantsearch.js/commit/deccc17)) +* **doc:** only show a scrollbar when needed ([f2d955b](https://github.com/algolia/instantsearch.js/commit/f2d955b)) +* **hierarchical:** setPage 0 when toggling ([a976539](https://github.com/algolia/instantsearch.js/commit/a976539)), closes [#371](https://github.com/algolia/instantsearch.js/issues/371) +* **jsdoc:** use babel-node ([453dc21](https://github.com/algolia/instantsearch.js/commit/453dc21)) +* **live-doc:** generates missing ul ([b43e6e2](https://github.com/algolia/instantsearch.js/commit/b43e6e2)) +* **live-doc:** move scrollbars, removes useless ones ([548ae5f](https://github.com/algolia/instantsearch.js/commit/548ae5f)) +* **live-doc:** moves octocat link to top. Removes stackOverflow ([8ff6a79](https://github.com/algolia/instantsearch.js/commit/8ff6a79)) +* **live-doc:** Moves version in the main content ([27731c3](https://github.com/algolia/instantsearch.js/commit/27731c3)) +* **live-reload:** integrates the links into the menu flow ([c118051](https://github.com/algolia/instantsearch.js/commit/c118051)) +* **numerical widgets:** s/facetName/attributeName ([f209f5d](https://github.com/algolia/instantsearch.js/commit/f209f5d)), closes [#431](https://github.com/algolia/instantsearch.js/issues/431) +* **refinementList:** ensure the key reflects the underlying state ([b048f0b](https://github.com/algolia/instantsearch.js/commit/b048f0b)), closes [#398](https://github.com/algolia/instantsearch.js/issues/398) + +### Features + +* **examples:** try examples instead of themes ([bedffce](https://github.com/algolia/instantsearch.js/commit/bedffce)) +* **headerFooter:** Only add markup if a template is defined ([7a2d22d](https://github.com/algolia/instantsearch.js/commit/7a2d22d)), closes [#370](https://github.com/algolia/instantsearch.js/issues/370) +* **priceRanges:** Add BEM classes and tests ([ad58d7a](https://github.com/algolia/instantsearch.js/commit/ad58d7a)), closes [#387](https://github.com/algolia/instantsearch.js/issues/387) + + +### BREAKING CHANGES + +* numerical widgets: the priceRanges and rangeSlider widgets are now using `attributeName` instead of `facetName`. +* priceRanges: `ais-price-ranges--range` are now named +`ais-price-ranges--item` and are wrapped in +a `ais-price-ranges--list`. + +I've moved the bottom form into it's own PriceRangesForm component, +along with its own tests. I've fixed a minor typo where the component +was internally named PriceRange (without the final __s__). + +I factorize some logic form the render in individual methods and +manage to individually test them. This was not an easy task. I had to +mock the default `render` (so it does nothing) before instantiating +the component. Then, I was able to call each inner method +individually. This requires to stub prototype methods in beforeEach, +then restore them in afterEach. I've added a few helper methods, this +can surely be simplified again but this gives nice granularity in +testing. + +I've renamed the `range` items to `item` and wrapped them in a `list`. +I've also added classes to all elements we add (`label`, `separator`, +etc). I've removed the empty `span`s. +* headerFooter: The `
` and `
` markup is only added when +a `templates.{header,footer}` is passed. + + + + +# [0.7.0](https://github.com/algolia/instantsearch.js/compare/v0.6.5...v0.7.0) (2015-10-28) + + +### Features + +* **searchBox:** Add `wrapInput` option ([b327dbc](https://github.com/algolia/instantsearch.js/commit/b327dbc)) +* **urls:** ability to create an URL from a set of params ([9ca8369](https://github.com/algolia/instantsearch.js/commit/9ca8369)), closes [#372](https://github.com/algolia/instantsearch.js/issues/372) + + +### BREAKING CHANGES + +* urls: the instantsearch.createURL method is now taking a +simple JS object and not a SearchParameter instance anymore. +* searchBox: The `input` used by the search-box widget is now +wrapped in a `