{"version":3,"file":"autocomplete.cjs","sources":["../node_modules/@nosto/nosto-js/dist/settings-DN0V2st5.js","../node_modules/@nosto/nosto-js/dist/index.es.js","../src/lib/client.ts","../node_modules/@nosto/search-js/dist/index.es-XNBESE3P.js","../node_modules/@nosto/search-js/dist/logger-_fg_Za9y.js","../node_modules/@nosto/search-js/dist/search-mArZ2PXy.js","../src/lib/search.ts","../src/lib/config.ts","../node_modules/@nosto/search-js/dist/disableNativeAutocomplete-Bkta_WR2.js","../src/lib/dropdown.ts","../src/utils/promise.ts","../src/utils/state.ts","../src/utils/dom.ts","../src/utils/ga.ts","../src/utils/debounce.ts","../src/utils/history.ts","../src/lib/autocomplete.ts","../node_modules/@nosto/search-js/dist/currencies/currencies.es.js"],"sourcesContent":["function o() {\n  window.nostojs = window.nostojs ?? function(n) {\n    (window.nostojs.q = window.nostojs.q ?? []).push(n);\n  };\n}\nasync function s(n) {\n  return window.nostojs(n);\n}\nlet t = null;\ntypeof window < \"u\" && (o(), s((n) => {\n  t = n.internal.getSettings();\n}));\nfunction i() {\n  return t;\n}\nfunction e(n) {\n  t = n;\n}\nexport {\n  i as g,\n  o as i,\n  s as n,\n  e as s\n};\n","import { i as g } from \"./settings-DN0V2st5.js\";\nimport { g as x, n as L } from \"./settings-DN0V2st5.js\";\nfunction b() {\n  return typeof window.nosto < \"u\";\n}\nfunction k() {\n  return window.nosto;\n}\nconst f = {\n  production: \"https://connect.nosto.com/\",\n  staging: \"https://connect.staging.nosto.com/\",\n  local: \"https://connect.nosto.com/\"\n};\nfunction u(o) {\n  return f[o ?? \"production\"];\n}\nfunction h({ merchantId: o, env: n, options: e, shopifyInternational: a, scriptLoader: s }) {\n  const t = document.querySelector(\"script[nosto-language], script[nosto-market-id]\"), r = String(a?.marketId || \"\"), i = a?.language || \"\", l = t?.getAttribute(\"nosto-language\") !== i || t?.getAttribute(\"nosto-market-id\") !== r;\n  if (!t || l) {\n    const d = document.querySelector(\"#nosto-sandbox\");\n    t?.parentNode?.removeChild(t), d?.parentNode?.removeChild(d);\n    const c = new URL(\"/script/shopify/market/nosto.js\", u(n));\n    c.searchParams.append(\"merchant\", o), c.searchParams.append(\"market\", r), c.searchParams.append(\"locale\", i.toLowerCase());\n    const m = {\n      ...e?.attributes,\n      \"nosto-language\": i,\n      \"nosto-market-id\": r\n    };\n    return (s ?? p)(c.toString(), { ...e, attributes: m });\n  }\n  return Promise.resolve();\n}\nfunction y(o) {\n  if (o.shopifyInternational)\n    return h(o);\n  const { merchantId: n, env: e, options: a, scriptLoader: s } = o, t = s ?? p, r = new URL(`/include/${n}`, u(e));\n  return t(r.toString(), a);\n}\nfunction p(o, n) {\n  return new Promise((a, s) => {\n    const t = document.createElement(\"script\");\n    t.src = o, t.async = !0, t.type = \"text/javascript\", t.onload = () => a(), t.onerror = () => s(), Object.entries(n?.attributes ?? {}).forEach(([r, i]) => t.setAttribute(r, i)), n?.position === \"head\" ? document.head.appendChild(t) : document.body.appendChild(t);\n  });\n}\nasync function C(o, n, e) {\n  if (!window.Nosto?.addSkuToCart)\n    throw new Error(\"Nosto addSkuToCart function is not available\");\n  await window.Nosto.addSkuToCart(o, n, e);\n}\ntypeof window < \"u\" && g();\nexport {\n  C as addSkuToCart,\n  k as getNostoWindow,\n  x as getSettings,\n  y as init,\n  g as initNostoStub,\n  b as isNostoLoaded,\n  L as nostojs\n};\n","import { nostojs } from \"@nosto/nosto-js\"\nimport { SearchHit } from \"@nosto/nosto-js/client\"\n\nexport function recordSearchClick(hit: SearchHit) {\n  nostojs(api => api.recordSearchClick(\"autocomplete\", hit))\n}\n\nexport function recordSearchSubmit(query: string) {\n  nostojs(api => api.recordSearchSubmit(query))\n}\n","function n() {\n  window.nostojs = window.nostojs ?? function(o) {\n    (window.nostojs.q = window.nostojs.q ?? []).push(o);\n  };\n}\nasync function s(o) {\n  return window.nostojs(o);\n}\nlet t = null;\ntypeof window < \"u\" && (n(), s((o) => {\n  t = o.internal.getSettings();\n}));\nfunction d() {\n  return t;\n}\nasync function u(o, i, w) {\n  if (!window.Nosto?.addSkuToCart)\n    throw new Error(\"Nosto addSkuToCart function is not available\");\n  await window.Nosto.addSkuToCart(o, i, w);\n}\ntypeof window < \"u\" && n();\nexport {\n  u as C,\n  d as i,\n  s\n};\n","import { s as u } from \"./index.es-XNBESE3P.js\";\nconst i = (r) => String(r) === \"[object Object]\";\nfunction s(r) {\n  if (!i(r))\n    return !1;\n  const e = r.constructor;\n  if (e === void 0)\n    return !0;\n  const t = e.prototype;\n  return !(!i(t) || !t.hasOwnProperty(\"isPrototypeOf\"));\n}\nfunction f(r, e) {\n  if (r === e)\n    return !0;\n  if (r instanceof Date && e instanceof Date)\n    return r.getTime() === e.getTime();\n  if (Array.isArray(r) && Array.isArray(e))\n    return r.length !== e.length ? !1 : r.every((t, n) => f(t, e[n]));\n  if (s(r) && s(e)) {\n    const t = Object.entries(r);\n    return t.length !== Object.keys(e).length ? !1 : t.every(([n, c]) => f(c, e[n]));\n  }\n  return !1;\n}\nfunction o(r) {\n  return (...e) => {\n    u((t) => {\n      (t.internal.context.mode.isPreview() ? console[r] : t.internal.logger[r])(...e);\n    });\n  };\n}\nconst a = {\n  debug: o(\"debug\"),\n  info: o(\"info\"),\n  warn: o(\"warn\"),\n  error: o(\"error\")\n};\nexport {\n  s as a,\n  f as i,\n  a as l\n};\n","import { s as y } from \"./index.es-XNBESE3P.js\";\nimport { l as f, i as h } from \"./logger-_fg_Za9y.js\";\nasync function C(t, { hitDecorators: e, ...r }, o) {\n  const n = await o(t, r);\n  if (!n.products?.hits?.length || !e?.length)\n    return n;\n  const c = (s) => e.reduce((i, a) => a(i), s);\n  return {\n    ...n,\n    products: {\n      ...n.products,\n      hits: n.products.hits.map(c)\n    }\n  };\n}\nfunction p(t, e, r) {\n  const o = JSON.stringify(e);\n  try {\n    r.setItem(t, o);\n  } catch (n) {\n    f.warn(n);\n  }\n}\nfunction g(t, e) {\n  try {\n    const r = e.getItem(t);\n    if (r)\n      return JSON.parse(r);\n  } catch (r) {\n    f.warn(r);\n  }\n}\nfunction P(t, e) {\n  p(t, e, localStorage);\n}\nfunction I(t, e) {\n  p(t, e, sessionStorage);\n}\nfunction _(t) {\n  return g(t, localStorage);\n}\nfunction R(t) {\n  return g(t, sessionStorage);\n}\nconst m = \"nosto:search-js:cache\", b = 60 * 1e3;\nfunction N(t, e) {\n  I(m, { query: t, result: e, created: Date.now() });\n}\nfunction T(t) {\n  const e = R(m);\n  if (!e || !z(e))\n    return null;\n  const r = d(e.query);\n  return !h(d(t), r) || Date.now() - e.created > b ? null : e.result;\n}\nfunction d(t) {\n  const e = {\n    ...t,\n    time: void 0,\n    products: {\n      ...t.products,\n      size: void 0\n    }\n  };\n  return JSON.parse(JSON.stringify(e));\n}\nfunction z(t) {\n  return typeof t == \"object\" && t !== null && \"query\" in t && \"result\" in t && \"created\" in t;\n}\nasync function O(t, { usePersistentCache: e, ...r }, o) {\n  if (!e)\n    return o(t, r);\n  const n = await E(t, r, o);\n  return N(t, n), n;\n}\nasync function E(t, e, r) {\n  const { from: o = 0, size: n = 0 } = t.products || {}, c = T(t);\n  if (!c)\n    return await r(t, e);\n  const s = c?.products?.size ?? 0, i = c?.products?.hits ?? [];\n  if (n === s)\n    return c;\n  if (n < s)\n    return {\n      ...c,\n      products: {\n        ...c.products,\n        size: n,\n        hits: i.slice(0, n),\n        total: c.products?.total || 0\n      }\n    };\n  const a = n - i.length, S = o > 0 ? o + 1 : n - a, w = {\n    ...t,\n    products: {\n      ...t.products,\n      from: S,\n      size: a\n    }\n  }, l = await r(w, e);\n  return {\n    ...c,\n    products: {\n      ...c.products,\n      size: n,\n      hits: [...c.products?.hits || [], ...l.products?.hits || []],\n      total: l.products?.total || 0\n    }\n  };\n}\nconst J = 3e4, u = /* @__PURE__ */ new Map();\nfunction k(t, e) {\n  const r = u.get(t);\n  if (!r) return;\n  const o = Date.now() - r.created > J, n = h(e, r.query);\n  if (o || !n) {\n    u.delete(t);\n    return;\n  }\n  return r.result;\n}\nfunction D(t, e, r) {\n  u.set(t, {\n    query: e,\n    result: r,\n    created: Date.now()\n  });\n}\nasync function L(t, e, r) {\n  if (!e.useMemoryCache)\n    return r(t, e);\n  const o = JSON.stringify(t), n = k(o, t);\n  if (n) return n;\n  const c = await r(t, e);\n  return D(o, t, c), c;\n}\nfunction M(t) {\n  return new Promise((e) => setTimeout(e, t));\n}\nasync function V(t, { maxRetries: e = 0, retryInterval: r = 0, ...o }, n) {\n  let c = 0;\n  for (; ; )\n    try {\n      return await n(t, o);\n    } catch (s) {\n      if (c >= e)\n        throw s;\n      if (!W(s))\n        throw f.info(\"Skipping retry logic for\", s), s;\n      c++, await M(r);\n    }\n}\nfunction W(t) {\n  return !t || typeof t != \"object\" ? !1 : !(\"status\" in t) || j(t.status);\n}\nfunction j(t) {\n  return typeof t == \"number\" && (t < 400 || t >= 500);\n}\nasync function F(t, e = {}) {\n  const r = await new Promise(y);\n  return x(r.search, V, L, O, C)(t, e);\n}\nfunction x(t, ...e) {\n  return e.reduce((r, o) => (n, c) => o(n, c, r), t);\n}\nexport {\n  P as a,\n  _ as g,\n  F as s\n};\n","import type { SearchQuery } from \"@nosto/nosto-js/client\"\nimport { search as searchFn, SearchOptions } from \"@nosto/search-js\"\n\nconst defaultProductFields = [\n  \"productId\",\n  \"url\",\n  \"name\",\n  \"imageUrl\",\n  \"imageHash\",\n  \"thumbUrl\",\n  \"description\",\n  \"brand\",\n  \"variantId\",\n  \"availability\",\n  \"price\",\n  \"priceText\",\n  \"categoryIds\",\n  \"categories\",\n  \"customFields.key\",\n  \"customFields.value\",\n  \"priceCurrencyCode\",\n  \"datePublished\",\n  \"listPrice\",\n  \"unitPricingBaseMeasure\",\n  \"unitPricingUnit\",\n  \"unitPricingMeasure\",\n  \"googleCategory\",\n  \"gtin\",\n  \"ageGroup\",\n  \"gender\",\n  \"condition\",\n  \"alternateImageUrls\",\n  \"ratingValue\",\n  \"reviewCount\",\n  \"inventoryLevel\",\n  \"skus.id\",\n  \"skus.name\",\n  \"skus.price\",\n  \"skus.listPrice\",\n  \"skus.priceText\",\n  \"skus.url\",\n  \"skus.imageUrl\",\n  \"skus.inventoryLevel\",\n  \"skus.customFields.key\",\n  \"skus.customFields.value\",\n  \"skus.availability\",\n  \"pid\",\n  \"onDiscount\",\n  \"extra.key\",\n  \"extra.value\",\n  \"saleable\",\n  \"available\",\n  \"tags1\",\n  \"tags2\",\n  \"tags3\"\n]\n\n/**\n *\n * @param query Query object.\n * @param options Options object.\n * @returns Promise of search response.\n * @group Autocomplete\n * @category Core\n * @example\n * ```js\n * import { search } from \"@nosto/autocomplete\"\n *\n * search({\n *     query: \"shoes\",\n *     products: {\n *       fields: [\"name\", \"price\"],\n *       facets: [\"brand\", \"category\"],\n *       size: 10,\n *       from: 0,\n *     }\n * }).then((state) => {\n *    console.log(state.response)\n * })\n * ```\n */\nexport async function search(query: SearchQuery, options: SearchOptions = {}) {\n  const fields = query.products?.fields ?? defaultProductFields\n  const facets = query.products?.facets ?? [\"*\"]\n  const size = query.products?.size ?? 20\n  const from = query.products?.from ?? 0\n\n  const response = await searchFn(\n    {\n      ...query,\n      products: {\n        ...query.products,\n        fields,\n        facets,\n        size,\n        from\n      }\n    },\n    options\n  )\n\n  return { query, response }\n}\n","import type { SearchQuery } from \"@nosto/nosto-js/client\"\nimport { SearchAutocompleteOptions } from \"./autocomplete\"\nimport { search } from \"./search\"\nimport { HitDecorator } from \"@nosto/search-js\"\n\n/**\n * @group Autocomplete\n * @category Core\n */\nexport interface GoogleAnalyticsConfig {\n  /**\n   * Path of search page\n   * @default \"/search\"\n   */\n  serpPath?: string\n  /**\n   * Search query url parameter name\n   * @default \"query\"\n   */\n  queryParamName?: string\n  /**\n   * Enable Google Analytics\n   * @default true\n   */\n  enabled?: boolean\n}\n\nexport type Selector = string | Element\n\n/**\n * @group Autocomplete\n * @category Core\n */\nexport interface AutocompleteConfig<State> {\n  /**\n   * The input element to attach the autocomplete to\n   */\n  inputSelector: Selector\n  /**\n   * The dropdown element to attach the autocomplete to\n   */\n  dropdownSelector: Selector | ((input: HTMLInputElement) => Selector)\n  /**\n   * The function to use to render the dropdown\n   */\n  render: (container: HTMLElement, state: State) => void | PromiseLike<void>\n  /**\n   * Minimum length of the query before searching\n   */\n  minQueryLength?: number\n  /**\n   * The function to use to fetch the search state\n   */\n  fetch: SearchQuery | ((input: string) => PromiseLike<State>)\n  /**\n   * The function to use to submit the search\n   */\n  submit?: (query: string, config: AutocompleteConfig<State>, options?: SearchAutocompleteOptions) => void\n  /**\n   * Enable history\n   */\n  historyEnabled?: boolean\n  /**\n   * Max number of history items to show\n   */\n  historySize?: number\n  /**\n   * Enable Nosto Analytics\n   */\n  nostoAnalytics?: boolean\n  /**\n   * Google Analytics configuration. Set to `false` to disable.\n   */\n  googleAnalytics?: GoogleAnalyticsConfig | boolean\n  /**\n   * Decorate each search hit before rendering\n   *\n   * @example\n   * ```ts\n   * import { priceDecorator } from \"@nosto/autocomplete\"\n   *\n   * autocomplete({\n   *   hitDecorators: [\n   *     priceDecorator({ defaultCurrency: \"USD\" })\n   *   ]\n   * })\n   * ```\n   */\n  hitDecorators?: HitDecorator[]\n  /**\n   * Whether to submit the form natively or not\n   */\n  nativeSubmit?: boolean\n  /**\n   * A function to call when the user clicks on a search hit to use custom routing\n   * @example\n   * ```ts\n   * autocomplete({\n   *  routingHandler: (url) => {\n   *    location.href = url\n   *  }\n   * })\n   * ```\n   */\n  routingHandler?: (url: string) => void\n}\n\nexport const defaultGaConfig = {\n  serpPath: \"/search\",\n  queryParamName: \"query\",\n  enabled: true\n}\n\nexport function getDefaultConfig<State>() {\n  return {\n    minQueryLength: 2,\n    historyEnabled: true,\n    historySize: 5,\n    hitDecorators: [],\n    nostoAnalytics: true,\n    googleAnalytics: defaultGaConfig,\n    routingHandler: url => {\n      location.href = url\n    },\n    nativeSubmit: false,\n    submit: (query, config, options) => {\n      if (query.length >= (config.minQueryLength ?? getDefaultConfig<State>().minQueryLength)) {\n        search(\n          {\n            query\n          },\n          {\n            redirect: true,\n            track: config.nostoAnalytics ? \"serp\" : undefined,\n            hitDecorators: config.hitDecorators,\n            ...options\n          }\n        )\n      }\n    }\n  } satisfies Partial<AutocompleteConfig<State>>\n}\n","function y(f, { onClick: d, onFocus: r, onInput: v, onKeyDown: u, onSubmit: l }, { form: c = f.form ?? void 0, nativeSubmit: p } = {}) {\n  const o = [];\n  function i(e, s, a) {\n    e.addEventListener(s, a), o.push(() => e.removeEventListener(s, a));\n  }\n  return (u || l) && i(f, \"keydown\", (e) => {\n    const s = u?.(f.value, e.key);\n    u && (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") ? e.preventDefault() : l && e.key === \"Enter\" && (f.value !== \"\" && !e.repeat && !s && l(f.value), p || e.preventDefault());\n  }), l && c && (i(c, \"submit\", (e) => {\n    p || e.preventDefault(), l(f.value);\n  }), c.querySelectorAll(\"[type=submit]\").forEach((e) => {\n    i(e, \"click\", (s) => {\n      p || s.preventDefault(), l(f.value);\n    });\n  })), d && i(f, \"click\", () => d(f.value)), r && i(f, \"focus\", () => r(f.value)), v && i(f, \"input\", () => v(f.value)), {\n    destroy() {\n      o.forEach((e) => e());\n    }\n  };\n}\nfunction k(f) {\n  f.setAttribute(\"autocomplete\", \"off\");\n}\nexport {\n  y as b,\n  k as d\n};\n","import { logger } from \"@nosto/search-js/utils\"\nimport { SearchAutocompleteOptions } from \"./autocomplete\"\n\ntype OnClickBindings<State> = {\n  [key: string]: (obj: { data: string | undefined; el: HTMLElement; update: (state: State) => void }) => unknown\n}\n\nexport function createDropdown<State>(\n  container: HTMLElement,\n  initialState: PromiseLike<State>,\n  render: (container: HTMLElement, state: State) => void | PromiseLike<void>,\n  submit: (inputValue: string, options?: SearchAutocompleteOptions) => unknown,\n  updateInput: (inputValue: string) => void,\n  routingHandler: (url: string) => void,\n  onClickBindings?: OnClickBindings<State>\n) {\n  let elements: HTMLElement[] = []\n  let unbindCallbacks: Array<() => void> = []\n\n  let isEmpty: boolean = true\n  let selectedIndex: number = -1\n\n  function handleElementSubmit(el: HTMLElement): void {\n    const hit = el?.dataset?.nsHit\n\n    if (hit) {\n      const parsedHit = parseHit(hit)\n      hide()\n\n      if (parsedHit?.item) {\n        submit(parsedHit.item)\n        return\n      }\n\n      if (parsedHit?.keyword) {\n        submit(parsedHit.keyword, {\n          redirect: !!parsedHit?._redirect,\n          isKeyword: true\n        })\n\n        if (parsedHit?._redirect) {\n          routingHandler(parsedHit._redirect)\n        }\n        return\n      }\n\n      if (parsedHit?.url) {\n        routingHandler(parsedHit.url)\n      }\n    }\n  }\n\n  function loadElements() {\n    isEmpty = !container.innerHTML.trim()\n\n    if (!isEmpty) {\n      elements = Array.from<HTMLElement>(container.querySelectorAll(\"[data-ns-hit]\")).map(el => {\n        bindElementSubmit(el)\n        return el\n      })\n    }\n  }\n\n  function bindDataCallbacks() {\n    Object.entries(onClickBindings ?? {}).map(([key, callback]) => {\n      // Convert camelCase to kebab-case\n      const dataKey = `[data-ns-${key.replace(/([A-Z])/g, \"-$1\").toLowerCase()}]`\n\n      Array.from<HTMLElement>(container.querySelectorAll(dataKey)).map(el => {\n        const data = el?.dataset?.[`ns${key.charAt(0).toUpperCase() + key.slice(1)}`]\n        const onClick = () => {\n          callback({\n            data,\n            el,\n            update\n          })\n        }\n\n        el.addEventListener(\"click\", onClick)\n        unbindCallbacks.push(() => {\n          el.removeEventListener(\"click\", onClick)\n        })\n      })\n    })\n  }\n\n  function bindElementSubmit(el: HTMLElement) {\n    const onSubmit = () => {\n      handleElementSubmit(el)\n    }\n\n    el.addEventListener(\"click\", onSubmit)\n    unbindCallbacks.push(() => {\n      el.removeEventListener(\"click\", onSubmit)\n    })\n  }\n\n  function highlight(index: number, prevIndex?: number) {\n    if (typeof prevIndex === \"number\" && elements[prevIndex]) {\n      elements[prevIndex].classList.remove(\"selected\")\n    }\n\n    if (typeof index === \"number\" && elements[index]) {\n      elements[index]?.classList.add(\"selected\")\n\n      const hit = elements[index]?.dataset?.nsHit\n\n      if (hit) {\n        const parsedHit = parseHit(hit)\n\n        if (parsedHit.item) {\n          updateInput(parsedHit.item)\n          return\n        }\n\n        if (parsedHit.keyword) {\n          updateInput(parsedHit.keyword)\n          return\n        }\n      }\n    }\n  }\n\n  function dispose() {\n    resetHighlight()\n    elements = []\n    unbindCallbacks.forEach(v => v())\n    unbindCallbacks = []\n  }\n\n  async function update(state: State) {\n    dispose()\n    await render(container, state)\n\n    // Without setTimeout React does not have committed DOM changes yet, so we don't have the correct elements.\n    setTimeout(() => {\n      loadElements()\n      bindDataCallbacks()\n      show()\n    }, 0)\n  }\n\n  function hide() {\n    resetHighlight()\n    container.style.display = \"none\"\n  }\n\n  function show() {\n    if (!isEmpty) {\n      container.style.display = \"\"\n    } else {\n      hide()\n    }\n  }\n\n  function clear() {\n    dispose()\n    isEmpty = true\n    hide()\n  }\n\n  function isOpen() {\n    return container.style.display !== \"none\"\n  }\n\n  function goDown() {\n    let prevIndex = selectedIndex\n\n    if (selectedIndex === elements.length - 1) {\n      selectedIndex = 0\n    } else {\n      prevIndex = selectedIndex++\n    }\n\n    highlight(selectedIndex, prevIndex)\n  }\n\n  function goUp() {\n    if (hasHighlight()) {\n      let prevIndex = selectedIndex\n\n      if (selectedIndex === 0) {\n        selectedIndex = elements.length - 1\n      } else {\n        prevIndex = selectedIndex--\n      }\n\n      highlight(selectedIndex, prevIndex)\n    } else {\n      selectedIndex = elements.length - 1\n      highlight(selectedIndex)\n    }\n  }\n\n  function handleSubmit() {\n    if (isOpen() && hasHighlight() && elements[selectedIndex]) {\n      handleElementSubmit(elements[selectedIndex])\n    }\n  }\n\n  function hasHighlight() {\n    return selectedIndex > -1\n  }\n\n  function getHighlight() {\n    return elements[selectedIndex]\n  }\n\n  function resetHighlight() {\n    if (hasHighlight()) {\n      elements[selectedIndex]?.classList.remove(\"selected\")\n      selectedIndex = -1\n    }\n  }\n\n  function destroy() {\n    dispose()\n    isEmpty = true\n    container.innerHTML = \"\"\n  }\n\n  async function init() {\n    const state = await Promise.resolve(initialState)\n    await Promise.resolve(render(container, state))\n\n    // Without setTimeout React does not have committed DOM changes yet, so we don't have the correct elements.\n    setTimeout(() => {\n      loadElements()\n      bindDataCallbacks()\n      hide()\n    }, 0)\n  }\n  init()\n\n  return {\n    update,\n    clear,\n    isOpen,\n    goDown,\n    goUp,\n    handleSubmit,\n    destroy,\n    show,\n    hide,\n    resetHighlight,\n    hasHighlight,\n    getHighlight,\n    container\n  }\n}\n\nexport type Dropdown<T> = ReturnType<typeof createDropdown<T>>\n\ninterface Hit {\n  item?: string\n  keyword?: string\n  url?: string\n  _redirect?: string\n}\n\nexport function parseHit(hit: string): Hit {\n  try {\n    const parsedHit: Hit | undefined | null = JSON.parse(hit)\n    return parsedHit ?? {}\n  } catch (error) {\n    logger.warn(\"Could not parse hit\", error)\n    return {}\n  }\n}\n","export type Cancellable<T> = { promise: PromiseLike<T>; cancel: () => void }\n\nexport class CancellableError extends Error {}\n\nexport function makeCancellable<T>(promise: PromiseLike<T>): Cancellable<T> {\n  let hasCanceled_ = false\n\n  const wrappedPromise = new Promise<T>((resolve, reject) => {\n    // eslint-disable-next-line promise/prefer-await-to-then\n    return promise.then(\n      val => (hasCanceled_ ? reject(new CancellableError(\"cancelled promise\")) : resolve(val)),\n      error => (hasCanceled_ ? reject(new CancellableError(\"cancelled promise\")) : reject(error))\n    )\n  })\n\n  return {\n    promise: wrappedPromise,\n    cancel() {\n      hasCanceled_ = true\n    }\n  }\n}\n","import { AutocompleteConfig } from \"../lib/config\"\nimport { History } from \"./history\"\nimport { Cancellable, makeCancellable } from \"./promise\"\nimport { search } from \"../lib/search\"\nimport { SearchAutocompleteOptions } from \"../lib/autocomplete\"\nimport type { InputSearchQuery, SearchResult } from \"@nosto/nosto-js/client\"\n\n/**\n * @group Autocomplete\n * @category Core\n */\nexport interface DefaultState {\n  /**\n   * The current search query object.\n   */\n  query?: InputSearchQuery\n  /**\n   * The current search response.\n   */\n  response?: SearchResult\n  /**\n   * The history items.\n   */\n  history?: { item: string }[]\n}\n\nexport type StateActions<State> = {\n  updateState(inputValue?: string): PromiseLike<State>\n  addHistoryItem(item: string): PromiseLike<State>\n  removeHistoryItem(item: string): PromiseLike<State>\n  clearHistory(): PromiseLike<State>\n}\n\nexport function getStateActions<State>({\n  config,\n  history,\n  input\n}: {\n  config: Required<AutocompleteConfig<State>>\n  history?: History\n  input: HTMLInputElement\n}): StateActions<State> {\n  let cancellable: Cancellable<State> | undefined\n\n  const fetchState = (\n    value: string,\n    config: AutocompleteConfig<State>,\n    options?: SearchAutocompleteOptions\n  ): PromiseLike<State> => {\n    if (typeof config.fetch === \"function\") {\n      return config.fetch(value)\n    } else {\n      // @ts-expect-error type mismatch\n      return search(\n        {\n          query: value,\n          ...config.fetch\n        },\n        {\n          track: config.nostoAnalytics ? \"autocomplete\" : undefined,\n          redirect: false,\n          hitDecorators: config.hitDecorators,\n          ...options\n        }\n      )\n    }\n  }\n\n  function getHistoryState(query: string): PromiseLike<State> {\n    // @ts-expect-error type mismatch\n    return Promise.resolve({\n      query: {\n        query\n      },\n      history: history?.getItems()\n    })\n  }\n\n  function updateState(inputValue?: string, options?: SearchAutocompleteOptions): PromiseLike<State> {\n    cancellable?.cancel()\n\n    if (inputValue && inputValue.length >= config.minQueryLength) {\n      cancellable = makeCancellable(fetchState(inputValue, config, options))\n      return cancellable.promise\n    } else if (history) {\n      return getHistoryState(inputValue ?? \"\")\n    }\n\n    return (\n      // @ts-expect-error type mismatch\n      cancellable?.promise ?? Promise.resolve<State>({})\n    )\n  }\n\n  function addHistoryItem(item: string): PromiseLike<State> {\n    if (history) {\n      history.add(item)\n    }\n    return getHistoryState(input.value)\n  }\n\n  function removeHistoryItem(item: string): PromiseLike<State> {\n    if (history) {\n      history.remove(item)\n    }\n    return getHistoryState(input.value)\n  }\n\n  function clearHistory(): PromiseLike<State> {\n    if (history) {\n      history.clear()\n    }\n    return getHistoryState(input.value)\n  }\n\n  return {\n    updateState,\n    addHistoryItem,\n    removeHistoryItem,\n    clearHistory\n  }\n}\n","type Selector = string | Element\n\nexport function findAll<T extends Element>(selector: Selector, filterType?: { new (): T }): T[] {\n  const elements = typeof selector === \"string\" ? Array.from(document.querySelectorAll(selector)) : [selector]\n  return elements.filter((v): v is T => (filterType ? v instanceof filterType : true))\n}\n\nexport async function DOMReady(): Promise<void> {\n  return new Promise(resolve => {\n    if (document.readyState !== \"loading\") {\n      resolve()\n    } else {\n      window.addEventListener(\"DOMContentLoaded\", () => {\n        resolve()\n      })\n    }\n  })\n}\n\nexport function parents(target: Selector, selector?: string): Element[] {\n  let parentList: Element[] = []\n  findAll(target).forEach(element => {\n    const parent = element.parentNode\n    if (parent !== document && parent instanceof Element) {\n      parentList.push(parent)\n      parentList = parentList.concat(parents(parent))\n    }\n  })\n  return parentList.filter(element => selector === undefined || matches(element, selector))\n}\n\nexport function matches(target: Selector, selector: string): boolean {\n  const matchesFunc =\n    Element.prototype.matches ||\n    // @ts-expect-error proprietary method\n    Element.prototype.msMatchesSelector ||\n    Element.prototype.webkitMatchesSelector\n  return findAll(target).some(element => matchesFunc.call(element, selector))\n}\n\nexport function bindClickOutside([element, input]: Array<HTMLElement>, callback: () => void) {\n  const onClick = (event: MouseEvent) => {\n    const target = event.target\n\n    if (target instanceof HTMLElement && element) {\n      if (target !== element && target !== input && !parents(target).includes(element)) {\n        callback()\n      }\n    }\n  }\n\n  document.addEventListener(\"click\", onClick)\n\n  return {\n    destroy: () => {\n      document.removeEventListener(\"click\", onClick)\n    }\n  }\n}\n","import { logger } from \"@nosto/search-js/utils\"\nimport { AutocompleteConfig, defaultGaConfig } from \"../lib/config\"\n\nconst localStorageKey = \"nosto:autocomplete:gaEvent\"\n\nexport function trackGaPageView(options?: { delay?: boolean; title?: string; location?: string }) {\n  const { delay = false, title = document.title, location = window.location.href } = options || {}\n\n  if (delay) {\n    saveToLocalStorage(title, location)\n  } else {\n    if (\"gtag\" in window && typeof window.gtag === \"function\") {\n      const accounts =\n        \"google_tag_manager\" in window && typeof window.google_tag_manager === \"object\"\n          ? Object.keys(window.google_tag_manager || []).filter(e => {\n              return e.substring(0, 2) == \"G-\"\n            })\n          : []\n\n      if (accounts.length > 1) {\n        for (let i = 0; i < accounts.length; i++) {\n          window.gtag(\"event\", \"page_view\", {\n            page_title: title,\n            page_location: location,\n            send_to: accounts[i]\n          })\n        }\n      } else {\n        window.gtag(\"event\", \"page_view\", {\n          page_title: title,\n          page_location: location\n        })\n      }\n    }\n    if (\n      \"ga\" in window &&\n      typeof window.ga === \"function\" &&\n      \"getAll\" in window.ga &&\n      typeof window.ga.getAll === \"function\"\n    ) {\n      try {\n        const url = new URL(location)\n        const trackers = window.ga!.getAll()\n        if (trackers?.length > 0) {\n          trackers[0]?.send(\"pageview\", url.pathname + url.search)\n        }\n      } catch (error) {\n        logger.warn(\"Could not send pageview to GA\", error)\n      }\n    }\n  }\n}\n\nexport const isGaEnabled = <State>(config: AutocompleteConfig<State>) =>\n  typeof config.googleAnalytics === \"boolean\"\n    ? config.googleAnalytics\n    : typeof config.googleAnalytics === \"object\" && config.googleAnalytics.enabled\n\nexport const getGaTrackUrl = <State>(value: string | undefined, config: AutocompleteConfig<State>) => {\n  const gaConfig = isGaEnabled(config)\n    ? typeof config.googleAnalytics === \"boolean\"\n      ? defaultGaConfig\n      : {\n          ...defaultGaConfig,\n          ...config.googleAnalytics\n        }\n    : undefined\n\n  if (value && gaConfig) {\n    try {\n      return new URL(\n        `${gaConfig?.serpPath || location.pathname}?${`${encodeURIComponent(\n          gaConfig.queryParamName\n        )}=${encodeURIComponent(value).replace(/%20/g, \"+\")}`}`,\n        window.location.origin\n      ).toString()\n    } catch (error) {\n      logger.warn(\"Could not create track url\", error)\n      return undefined\n    }\n  }\n}\n\nfunction saveToLocalStorage(title: string, location: string): void {\n  localStorage.setItem(localStorageKey, JSON.stringify({ title, location }))\n}\n\ninterface Event {\n  title: string\n  location: string\n}\n\nexport function consumeLocalStorageEvent() {\n  const eventString = localStorage.getItem(localStorageKey)\n  if (typeof eventString === \"string\") {\n    localStorage.removeItem(localStorageKey)\n    try {\n      const event: Event = JSON.parse(eventString)\n      trackGaPageView(event)\n    } catch (e) {\n      logger.warn(\"Could not consume pageView\", e)\n    }\n  }\n}\n","export default function (delay: number) {\n  let timeoutId: ReturnType<typeof setTimeout> | undefined\n  let leadingExecuted = false\n\n  return (callback: () => void) => {\n    if (!leadingExecuted) {\n      callback()\n      leadingExecuted = true\n    } else {\n      if (timeoutId) {\n        clearTimeout(timeoutId)\n      }\n      timeoutId = setTimeout(async () => {\n        await callback()\n        leadingExecuted = false\n      }, delay)\n    }\n  }\n}\n","import { logger } from \"@nosto/search-js/utils\"\nimport { DefaultState } from \"./state\"\n\ntype Items = NonNullable<DefaultState[\"history\"]>\n\nexport function createHistory(size: number) {\n  const localStorageKey = \"nosto:autocomplete:history\"\n  let items = get()\n\n  function get(): Items {\n    try {\n      return JSON.parse(localStorage.getItem(localStorageKey) ?? \"[]\") ?? []\n    } catch (err) {\n      logger.error(\"Could not get history items.\", err)\n      return []\n    }\n  }\n\n  function set(data: Items) {\n    try {\n      localStorage.setItem(localStorageKey, JSON.stringify(data))\n    } catch (err) {\n      logger.error(\"Could not set history items.\", err)\n    }\n  }\n\n  function add(item: string) {\n    set((items = [{ item }, ...(items?.filter(v => v.item !== item) || [])].slice(0, size)))\n  }\n\n  function clear() {\n    set((items = []))\n  }\n\n  function remove(item: string) {\n    set((items = items.filter(v => v.item !== item)))\n  }\n\n  function getItems() {\n    return items\n  }\n\n  return {\n    add,\n    clear,\n    remove,\n    getItems\n  }\n}\n\nexport type History = ReturnType<typeof createHistory>\n","import { recordSearchClick, recordSearchSubmit } from \"./client\"\nimport { AutocompleteConfig, getDefaultConfig } from \"./config\"\nimport { Dropdown, createDropdown, parseHit } from \"./dropdown\"\nimport { DefaultState, StateActions, getStateActions } from \"../utils/state\"\nimport { bindClickOutside, findAll } from \"../utils/dom\"\nimport { consumeLocalStorageEvent, getGaTrackUrl, isGaEnabled, trackGaPageView } from \"../utils/ga\"\nimport createDebouncer from \"../utils/debounce\"\nimport { createHistory } from \"../utils/history\"\nimport { bindInput, disableNativeAutocomplete } from \"@nosto/search-js/utils\"\nimport type { SearchOptions } from \"@nosto/nosto-js/client\"\nimport { logger } from \"@nosto/search-js/utils\"\n\nexport type AutocompleteInstance = {\n  /**\n   * Open the dropdown.\n   */\n  open(): void\n  /**\n   * Close the dropdown.\n   */\n  close(): void\n  /**\n   * Destroy the autocomplete instance.\n   */\n  destroy(): void\n}\n\nexport type SearchAutocompleteOptions = Pick<SearchOptions, \"isKeyword\" | \"redirect\">\n\n/**\n * @param config Autocomplete configuration.\n * @returns Autocomplete instance.\n * @group Autocomplete\n * @category Core\n * @example\n * ```js\n * import { autocomplete } from '@nosto/autocomplete';\n *\n * // Basic usage\n * autocomplete({\n *   inputSelector: '#search',\n *   dropdownSelector: '#dropdown',\n *   render: (container, state) => {\n *     container.innerHTML = `\n *        <div>\n *         <h1>${state.query}</h1>\n *        <ul>\n *        ${state.response.products\n *          .map((product) => `<li>${product.name}</li>`)\n *          .join('')}\n *       </ul>\n *     </div>\n *    `;\n *   },\n *   fetch: {\n *     products: {\n *       fields: ['name', 'url', 'imageUrl', 'price', 'listPrice', 'brand'],\n *       size: 5\n *     },\n *     keywords: {\n *       size: 5,\n *       fields: ['keyword', '_highlight.keyword'],\n *       highlight: {\n *         preTag: `<strong>`,\n *         postTag: '</strong>'\n *       }\n *     }\n *   }\n * });\n *\n * // Liquid template.\n * import { autocomplete, fromRemoteLiquidTemplate, fromLiquidTemplate, defaultLiquidTemplate } from '@nosto/autocomplete/liquid';\n *\n * autocomplete({\n *   inputSelector: '#search',\n *   dropdownSelector: '#dropdown',\n *   render: fromRemoteLiquidTemplate('autocomplete.liquid'),\n *   // Or:\n *   render: window.nostoAutocomplete.fromLiquidTemplate(defaultLiquidTemplate),\n *   ...\n * });\n *\n * // Mustache template.\n * import { autocomplete, fromRemoteMustacheTemplate, fromMustacheTemplate, defaultMustacheTemplate } from '@nosto/autocomplete/mustache';\n *\n * autocomplete({\n *   inputSelector: '#search',\n *   dropdownSelector: '#dropdown',\n *   render: fromRemoteMustacheTemplate('autocomplete.mustache'),\n *   // Or:\n *   render: fromMustacheTemplate(defaultMustacheTemplate),\n *   ...\n * });\n *\n * // React example.\n * import { autocomplete, Autocomplete } from '@nosto/autocomplete/react';\n * import ReactDOM from 'react-dom';\n *\n * let reactRoot;\n *\n * autocomplete({\n *   inputSelector: '#search',\n *   dropdownSelector: '#dropdown',\n *   render: function (container, state) {\n *     if (!reactRoot) {\n *       reactRoot = ReactDOM.createRoot(container);\n *     }\n *     reactRoot.render(<Autocomplete {...state} />);\n *   },\n *   ...\n * });\n * ```\n */\nexport function autocomplete<State = DefaultState>(config: AutocompleteConfig<State>): AutocompleteInstance {\n  const fullConfig = {\n    ...getDefaultConfig<State>(),\n    ...config\n  } satisfies AutocompleteConfig<State>\n\n  const history = fullConfig.historyEnabled ? createHistory(fullConfig.historySize) : undefined\n\n  const debounce = createDebouncer(300)\n\n  if (isGaEnabled(config)) {\n    setTimeout(consumeLocalStorageEvent, 1000)\n  }\n\n  const dropdowns = findAll(config.inputSelector, HTMLInputElement).map(inputElement => {\n    const actions = getStateActions({\n      config: fullConfig,\n      history,\n      input: inputElement\n    })\n\n    const dropdown = createInputDropdown({\n      input: inputElement,\n      config: fullConfig,\n      actions\n    })\n\n    if (!dropdown) {\n      return\n    }\n\n    disableNativeAutocomplete(inputElement)\n\n    const input = bindInput(\n      inputElement,\n      {\n        onInput: async value => {\n          debounce(async () => {\n            const state = await actions.updateState(value)\n            dropdown.update(state)\n          })\n        },\n        onClick() {\n          dropdown.resetHighlight()\n        },\n        onFocus() {\n          dropdown.show()\n        },\n        onSubmit() {\n          if (dropdown.isOpen() && dropdown.hasHighlight()) {\n            const data = dropdown.getHighlight()?.dataset?.nsHit\n            if (data) {\n              trackClick({\n                config: fullConfig,\n                data,\n                query: inputElement.value\n              })\n            }\n            dropdown.handleSubmit()\n          } else {\n            submitWithContext({\n              actions,\n              config: fullConfig\n            })(inputElement.value)\n          }\n        },\n        onKeyDown(_, key) {\n          if (key === \"Escape\") {\n            dropdown.hide()\n          } else if (key === \"ArrowDown\") {\n            if (dropdown.isOpen()) {\n              dropdown.goDown()\n            } else {\n              dropdown.show()\n            }\n          } else if (key === \"ArrowUp\") {\n            if (dropdown.isOpen()) {\n              dropdown.goUp()\n            }\n          }\n        }\n      },\n      {\n        nativeSubmit: fullConfig.nativeSubmit\n      }\n    )\n\n    const clickOutside = bindClickOutside([dropdown.container, inputElement], () => {\n      dropdown.hide()\n    })\n\n    return {\n      open() {\n        dropdown.show()\n      },\n      close() {\n        dropdown.hide()\n      },\n      destroy() {\n        input.destroy()\n        clickOutside.destroy()\n        dropdown.destroy()\n      }\n    }\n  })\n\n  return {\n    destroy() {\n      dropdowns.forEach(dropdown => dropdown?.destroy())\n    },\n    open() {\n      dropdowns.forEach(dropdown => dropdown?.open())\n    },\n    close() {\n      dropdowns.forEach(dropdown => dropdown?.close())\n    }\n  }\n}\n\nfunction createInputDropdown<State>({\n  input,\n  config,\n  actions\n}: {\n  input: HTMLInputElement\n  config: AutocompleteConfig<State>\n  actions: StateActions<State>\n}): Dropdown<State> | undefined {\n  const dropdownElements =\n    typeof config.dropdownSelector === \"function\"\n      ? findAll(config.dropdownSelector(input), HTMLElement)\n      : findAll(config.dropdownSelector, HTMLElement)\n\n  if (dropdownElements.length === 0) {\n    logger.error(`No dropdown element found for input ${input}`)\n    return\n  } else if (dropdownElements.length > 1) {\n    logger.error(`Multiple dropdown elements found for input ${input}, using the first element`)\n  }\n\n  const dropdownElement = dropdownElements[0]\n\n  return createDropdown<State>(\n    dropdownElement,\n    actions.updateState(input.value),\n    config.render,\n    submitWithContext({\n      actions,\n      config\n    }),\n    value => (input.value = value),\n    config.routingHandler!,\n    {\n      removeHistory: async function ({ data, update }) {\n        if (data === \"all\") {\n          const state = await actions.clearHistory()\n          return update(state)\n        } else if (data) {\n          const state = await actions.removeHistoryItem(data)\n          return update(state)\n        }\n      },\n      hit: function ({ data }) {\n        if (data) {\n          trackClick({ config, data, query: input.value })\n        }\n      }\n    }\n  )\n}\n\nasync function trackClick<State>({\n  config,\n  data,\n  query\n}: {\n  config: AutocompleteConfig<State>\n  data: string\n  query: string\n}) {\n  if (!config.googleAnalytics && !config.nostoAnalytics) {\n    return\n  }\n\n  const parsedHit = parseHit(data)\n\n  if (config.nostoAnalytics) {\n    if (parsedHit) {\n      // @ts-expect-error type mismatch\n      recordSearchClick(parsedHit)\n    }\n  }\n\n  if (isGaEnabled(config)) {\n    if (parsedHit._redirect) {\n      trackGaPageView({\n        delay: true,\n        location: getGaTrackUrl(parsedHit.keyword, config)\n      })\n    }\n\n    if (parsedHit.url) {\n      trackGaPageView({\n        delay: true,\n        location: getGaTrackUrl(query, config)\n      })\n    }\n  }\n}\n\nfunction submitWithContext<State>(context: { config: AutocompleteConfig<State>; actions: StateActions<State> }) {\n  return async (value: string, options?: SearchAutocompleteOptions) => {\n    const { config, actions } = context\n    const { redirect = false } = options ?? {}\n\n    if (value.length > 0) {\n      if (config.historyEnabled) {\n        actions.addHistoryItem(value)\n      }\n\n      if (config.nostoAnalytics) {\n        recordSearchSubmit(value)\n      }\n\n      if (isGaEnabled(config)) {\n        trackGaPageView({\n          delay: true,\n          location: getGaTrackUrl(value, config)\n        })\n      }\n\n      if (!redirect && typeof config?.submit === \"function\") {\n        config.submit(value, config, options)\n      }\n    }\n  }\n}\n","import { s as y } from \"../index.es-XNBESE3P.js\";\nconst g = {\n  defaultCurrency: \"EUR\",\n  defaultLocale: \"en-US\",\n  /** @hidden  */\n  currencySettings: {}\n}, p = {\n  EUR: \"de-DE\",\n  GBP: \"en-GB\",\n  USD: \"en-US\",\n  AUD: \"en-AU\",\n  CAD: \"en-CA\",\n  //India, Afghanistan, Bangladesh, Bhutan, Myanmar, Nepal, and Pakistan uses lakhs and crores notation\n  INR: \"en-IN\",\n  AFN: \"en-IN\",\n  BDT: \"en-IN\",\n  BTN: \"en-IN\",\n  MMK: \"en-IN\",\n  NPR: \"en-IN\",\n  PKR: \"en-IN\"\n};\nfunction d(u = {}) {\n  const i = {\n    ...g,\n    ...u\n  };\n  u.currencySettings || y((t) => {\n    i.currencySettings = t.internal.getSettings().currencySettings ?? {};\n  });\n  function s(t, e) {\n    const { defaultCurrency: n, currencySettings: r, defaultLocale: o } = i, a = e ?? n, f = p[a] ?? o;\n    if (a in r) {\n      const c = r[a], l = new Intl.NumberFormat(f, {\n        useGrouping: !!c.groupingSeparator,\n        minimumFractionDigits: c.decimalPlaces,\n        maximumFractionDigits: c.decimalPlaces\n      }).formatToParts(t).map((m) => m.type === \"group\" ? c.groupingSeparator : m.type === \"decimal\" ? c.decimalCharacter : m.value).join(\"\");\n      return c?.currencyBeforeAmount ? `${c.currencyToken}${l}` : `${l}${c?.currencyToken}`;\n    }\n    return new Intl.NumberFormat(f, {\n      style: \"currency\",\n      currency: a\n    }).format(t);\n  }\n  return {\n    formatCurrency: s\n  };\n}\nfunction S(u) {\n  const { formatCurrency: i } = d(u);\n  function s(e, n) {\n    const r = {};\n    return e.price !== void 0 && (r.priceText = i(e.price, n)), e.listPrice !== void 0 && (r.listPriceText = i(e.listPrice, n)), Object.assign({}, e, r);\n  }\n  function t(e) {\n    return e.price !== void 0 || e.listPrice !== void 0;\n  }\n  return function(n) {\n    if (!t(n))\n      return n;\n    const r = s(n, n.priceCurrencyCode);\n    return r.skus && r.skus.some(t) && (r.skus = r.skus.map((o) => t(o) ? s(o, n.priceCurrencyCode) : o)), r;\n  };\n}\nexport {\n  d as getCurrencyFormatting,\n  S as priceDecorator\n};\n"],"names":["o","n","s","g","recordSearchClick","hit","nostojs","api","recordSearchSubmit","query","i","r","t","f","c","u","a","C","p","I","R","m","b","N","T","z","d","h","O","E","S","w","J","k","D","L","M","V","W","j","F","y","x","defaultProductFields","search","options","fields","facets","size","from","response","searchFn","defaultGaConfig","getDefaultConfig","url","config","v","l","e","createDropdown","container","initialState","render","submit","updateInput","routingHandler","onClickBindings","elements","unbindCallbacks","isEmpty","selectedIndex","handleElementSubmit","el","parsedHit","parseHit","hide","loadElements","bindElementSubmit","bindDataCallbacks","key","callback","dataKey","data","onClick","update","onSubmit","highlight","index","prevIndex","dispose","resetHighlight","state","show","clear","isOpen","goDown","goUp","hasHighlight","handleSubmit","getHighlight","destroy","init","error","logger","CancellableError","makeCancellable","promise","hasCanceled_","resolve","reject","val","getStateActions","history","input","cancellable","fetchState","value","getHistoryState","updateState","inputValue","addHistoryItem","item","removeHistoryItem","clearHistory","findAll","selector","filterType","parents","target","parentList","element","parent","bindClickOutside","event","localStorageKey","trackGaPageView","delay","title","location","saveToLocalStorage","accounts","trackers","isGaEnabled","getGaTrackUrl","gaConfig","consumeLocalStorageEvent","eventString","timeoutId","leadingExecuted","createHistory","items","get","err","set","add","remove","getItems","autocomplete","fullConfig","debounce","createDebouncer","dropdowns","inputElement","actions","dropdown","createInputDropdown","disableNativeAutocomplete","bindInput","trackClick","submitWithContext","_","clickOutside","dropdownElements","dropdownElement","context","redirect"],"mappings":"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","x_google_ignoreList":[0,1,3,4,5,8,17]}