{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/LV9trClbmNwd5PVj9l8y/L4rFqMGNzGSwRZpGTGF3/Icons.js", "ssg:https://framerusercontent.com/modules/3Xi2AslpcDRhfyCVPmx3/d0Oobr5BHnVqZJQyMdGn/storage.js", "ssg:https://framer.com/m/cache-YMiL.js@b9aplVZjN51x28yfNK16", "ssg:https://framerusercontent.com/modules/uU1mtMKXsrVAg8N5hW7w/PCK1x1QLNluYNoEoapwx/cachedIndex.js", "ssg:https://framerusercontent.com/modules/K9JZRwJcE6slDAf8rUmh/mJ54py1Ecnn1RoC4N1m4/fakeResults.js", "ssg:https://framerusercontent.com/modules/TwRgbWuhHeB95MPifel4/YW8Hlm59FG3PajbrVsaR/fuzzySearch.js", "ssg:https://framerusercontent.com/modules/MWsEnYfRnoOQq31DN4ql/UyHGCSLuZlZBvIaCnOlc/utils.js", "ssg:https://framerusercontent.com/modules/MyBp84Z0p9nUcMimVMnY/aWhJiXNIMoaQYpujUXUs/useSearch.js", "ssg:https://framerusercontent.com/modules/PJVBcBLmDteTEAZh3J9Z/keXJyjyE9VnzUcDMayjg/browser.js", "ssg:https://framerusercontent.com/modules/Gzef0nFihI9m9vZG45th/lIUxbZcreiDm2GzUkt3y/useCallbackOnMouseMove.js", "ssg:https://framerusercontent.com/modules/eAnjm75CdfYT1Zz4BIaz/7KDSfnnyD1T3Ap75L4m8/scrollIntoView.js", "ssg:https://framerusercontent.com/modules/tV9haTHllpHHc9Fjue2H/QejHL5hPQ9rrl5Yt1GTZ/SearchModal.js", "ssg:https://framerusercontent.com/modules/hqEf5wXaAewP8VPuaZ98/5A0QGVeEr2cwheQpIuEG/useViewportSizeState.js", "ssg:https://framerusercontent.com/modules/6wAE2eMb2Tl3zrU7u4UL/1IvEaemyvBf5Jspg76L8/Search.js", "ssg:https://framerusercontent.com/modules/oWVHHLIj4Q7woeIlKzbt/Ez7z4Z3hPxkhLfX1FhvN/Input.js"],
  "sourcesContent": ["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { motion } from \"framer-motion\";\nexport function SearchIcon(props) {\n  return /*#__PURE__*/_jsx(\"svg\", {\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 256 256\",\n    width: props.width,\n    height: props.height,\n    style: {\n      ...props.style,\n      color: props.color\n    },\n    children: /*#__PURE__*/_jsx(\"path\", {\n      d: \"M232.49,215.51,185,168a92.12,92.12,0,1,0-17,17l47.53,47.54a12,12,0,0,0,17-17ZM44,112a68,68,0,1,1,68,68A68.07,68.07,0,0,1,44,112Z\",\n      fill: \"currentColor\"\n    })\n  });\n}\nexport function ClearIcon(props) {\n  return /*#__PURE__*/_jsxs(\"svg\", {\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 256 256\",\n    ...props,\n    children: [/*#__PURE__*/_jsx(\"rect\", {\n      width: \"256\",\n      height: \"256\",\n      fill: \"none\"\n    }), /*#__PURE__*/_jsx(\"path\", {\n      d: \"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm37.66,130.34a8,8,0,0,1-11.32,11.32L128,139.31l-26.34,26.35a8,8,0,0,1-11.32-11.32L116.69,128,90.34,101.66a8,8,0,0,1,11.32-11.32L128,116.69l26.34-26.35a8,8,0,0,1,11.32,11.32L139.31,128Z\",\n      fill: \"currentColor\"\n    })]\n  });\n}\nexport function SpinnerIcon(props) {\n  const borderWidth = 3;\n  return /*#__PURE__*/_jsxs(\"div\", {\n    style: {\n      position: \"relative\",\n      ...props.style\n    },\n    children: [/*#__PURE__*/_jsx(motion.div, {\n      animate: {\n        rotate: 360\n      },\n      transition: {\n        ease: \"linear\",\n        duration: 1,\n        repeat: Infinity\n      },\n      style: {\n        borderRadius: 100,\n        backgroundImage: `conic-gradient(from 270deg, transparent 0%, ${props.color} 100%)`,\n        width: \"100%\",\n        height: \"100%\"\n      }\n    }), /*#__PURE__*/_jsx(\"div\", {\n      style: {\n        backgroundColor: props.backgroundColor,\n        borderRadius: 100,\n        position: \"absolute\",\n        top: borderWidth,\n        left: borderWidth,\n        bottom: borderWidth,\n        right: borderWidth\n      }\n    })]\n  });\n}\nexport const __FramerMetadata__ = {\n  \"exports\": {\n    \"ClearIcon\": {\n      \"type\": \"reactComponent\",\n      \"name\": \"ClearIcon\",\n      \"slots\": [],\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SpinnerIcon\": {\n      \"type\": \"reactComponent\",\n      \"name\": \"SpinnerIcon\",\n      \"slots\": [],\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchIcon\": {\n      \"type\": \"reactComponent\",\n      \"name\": \"SearchIcon\",\n      \"slots\": [],\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"__FramerMetadata__\": {\n      \"type\": \"variable\"\n    }\n  }\n};\n//# sourceMappingURL=./Icons.map", "export function Storage(name) {\n  this.ready = new Promise((resolve, reject) => {\n    var request = window.indexedDB.open(location.origin);\n    request.onupgradeneeded = e => {\n      this.db = e.target[\"result\"];\n      this.db.createObjectStore(\"store\");\n    };\n    request.onsuccess = e => {\n      this.db = e.target[\"result\"];\n      resolve();\n    };\n    request.onerror = e => {\n      this.db = e.target[\"result\"];\n      reject(e);\n    };\n  });\n}\nStorage.prototype.get = function (key) {\n  return this.ready.then(() => {\n    return new Promise((resolve, reject) => {\n      var request = this.getStore().get(key);\n      request.onsuccess = e => resolve(e.target.result);\n      request.onerror = reject;\n    });\n  });\n};\nStorage.prototype.getStore = function () {\n  return this.db.transaction([\"store\"], \"readwrite\").objectStore(\"store\");\n};\nStorage.prototype.set = function (key, value) {\n  return this.ready.then(() => {\n    return new Promise((resolve, reject) => {\n      var request = this.getStore().put(value, key);\n      request.onsuccess = resolve;\n      request.onerror = reject;\n    });\n  });\n};\nStorage.prototype.delete = function (key, value) {\n  window.indexedDB.deleteDatabase(location.origin);\n};\nexport const __FramerMetadata__ = {\n  \"exports\": {\n    \"Storage\": {\n      \"type\": \"function\"\n    }\n  }\n};", "// @ts-ignore\nimport{Storage}from\"https://framerusercontent.com/modules/3Xi2AslpcDRhfyCVPmx3/d0Oobr5BHnVqZJQyMdGn/storage.js\";export const hashCode=s=>s.split(\"\").reduce((a,b)=>{a=(a<<5)-a+b.charCodeAt(0);return a&a;},0);export function corsProxy(url){return`https://cors-anywhere.herokuapp.com/${url}`;}export async function cachedResponse(url,cache=new Storage(\"cache\")){const cacheKey=url;const data=await cache.get(cacheKey);if(data){return data;}else{var req=new XMLHttpRequest;req.open(\"GET\",url,true);req.responseType=\"blob\";return new Promise((resolve,reject)=>{req.onload=async function(){if(this.status===200){await cache.set(url,this.response);resolve(this.response);}else{reject(new Error(`Response status ${this.status} ${this.statusText}`));}};req.onerror=function(error){reject(error);};req.send();});}}export async function setCachedData(url,dataToCache,cache=new Storage(\"cache\")){const cacheKey=url;const data=await cache.set(cacheKey,dataToCache);}export async function checkForCachedData(url,cache=new Storage(\"cache\")){const cacheKey=url;const data=await cache.get(cacheKey);if(data){return data;}else{return null;}}\nexport const __FramerMetadata__ = {\"exports\":{\"hashCode\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"setCachedData\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"checkForCachedData\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"corsProxy\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"cachedResponse\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./cache.map", "import { checkForCachedData, setCachedData } from \"https://framer.com/m/cache-YMiL.js@b9aplVZjN51x28yfNK16\";\nconst VERSION = 1;\nconst defaultLocaleId = \"default\";\nexport function isDefaultLocaleId(localeId) {\n  return !localeId || localeId === \"default\";\n}\nconst INDEX_KEY = \"searchIndexCache\";\nfunction getIndexKey(localeId) {\n  if (isDefaultLocaleId(localeId)) return INDEX_KEY;\n  return `${INDEX_KEY}-${localeId}`;\n}\nconst METADATA_KEY = \"searchCacheMetadata\";\nfunction getMetadataKey(localeId) {\n  if (isDefaultLocaleId(localeId)) return METADATA_KEY;\n  return `${METADATA_KEY}-${localeId}`;\n}\nexport async function getCachedIndex(localeId) {\n  // A check here for metadata can be added later if we need to\n  // migrate or expire the index. Though most likely, any version change\n  // should result in deleting the cache and starting again.\n  const indexKey = getIndexKey(localeId);\n  const cachedIndex = await checkForCachedData(indexKey);\n  if (cachedIndex) {\n    return cachedIndex;\n  }\n}\nexport function setCachedIndex(localeId, index) {\n  const indexKey = getIndexKey(localeId);\n  setCachedData(indexKey, index);\n  const metadata = {\n    version: VERSION,\n    timestamp: Date.now()\n  };\n  const metadataKey = getMetadataKey(localeId);\n  setCachedData(metadataKey, metadata);\n}\nexport const __FramerMetadata__ = {\n  \"exports\": {\n    \"getCachedIndex\": {\n      \"type\": \"function\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"setCachedIndex\": {\n      \"type\": \"function\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"isDefaultLocaleId\": {\n      \"type\": \"function\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"__FramerMetadata__\": {\n      \"type\": \"variable\"\n    }\n  }\n};\n//# sourceMappingURL=./cachedIndex.map", "// Fake example data used for when the search component is in preview mode.\n// Note that the `url` value is used as a key in React, so it needs to be unique.\nexport const fakeResults = {\n  \"/\": {\n    version: 1,\n    title: \"Example Search Result\",\n    description: \"Description of search result.\",\n    keywords: \"\",\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    p: [],\n    url: \"/example-url/\",\n    codeblock: []\n  },\n  \"/example-1\": {\n    version: 1,\n    title: \"Publish your Site to Search\",\n    description: \"Try Site Search to instantly search your Framer site content.\",\n    keywords: \"\",\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    p: [],\n    url: \"/example-url/1/\",\n    codeblock: []\n  },\n  \"/example-2\": {\n    version: 1,\n    title: \"Customise your Site Search\",\n    description: \"Personalize everything from corner radius, to icon weight.\",\n    keywords: \"\",\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    p: [],\n    url: \"/example-url/2/\",\n    codeblock: []\n  }\n};\nexport const __FramerMetadata__ = {\n  \"exports\": {\n    \"fakeResults\": {\n      \"type\": \"variable\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"__FramerMetadata__\": {\n      \"type\": \"variable\"\n    }\n  }\n};\n//# sourceMappingURL=./fakeResults.map", "// This file is based on the Levenshtein algorithm. Originally from Koen but maybe he\n// got it from somewhere else.\nconst peq = new Uint32Array(65536);\nconst myers_32 = (a, b) => {\n  const n = a.length;\n  const m = b.length;\n  const lst = 1 << n - 1;\n  let pv = -1;\n  let mv = 0;\n  let sc = n;\n  let i = n;\n  while (i--) {\n    peq[a.charCodeAt(i)] |= 1 << i;\n  }\n  for (i = 0; i < m; i++) {\n    let eq = peq[b.charCodeAt(i)];\n    const xv = eq | mv;\n    eq |= (eq & pv) + pv ^ pv;\n    mv |= ~(eq | pv);\n    pv &= eq;\n    if (mv & lst) {\n      sc++;\n    }\n    if (pv & lst) {\n      sc--;\n    }\n    mv = mv << 1 | 1;\n    pv = pv << 1 | ~(xv | mv);\n    mv &= xv;\n  }\n  i = n;\n  while (i--) {\n    peq[a.charCodeAt(i)] = 0;\n  }\n  return sc;\n};\nconst myers_x = (b, a) => {\n  const n = a.length;\n  const m = b.length;\n  const mhc = [];\n  const phc = [];\n  const hsize = Math.ceil(n / 32);\n  const vsize = Math.ceil(m / 32);\n  for (let i = 0; i < hsize; i++) {\n    phc[i] = -1;\n    mhc[i] = 0;\n  }\n  let j = 0;\n  for (; j < vsize - 1; j++) {\n    let mv = 0;\n    let pv = -1;\n    const start = j * 32;\n    const vlen = Math.min(32, m) + start;\n    for (let k = start; k < vlen; k++) {\n      peq[b.charCodeAt(k)] |= 1 << k;\n    }\n    for (let i1 = 0; i1 < n; i1++) {\n      const eq = peq[a.charCodeAt(i1)];\n      const pb = phc[i1 / 32 | 0] >>> i1 & 1;\n      const mb = mhc[i1 / 32 | 0] >>> i1 & 1;\n      const xv = eq | mv;\n      const xh = ((eq | mb) & pv) + pv ^ pv | eq | mb;\n      let ph = mv | ~(xh | pv);\n      let mh = pv & xh;\n      if (ph >>> 31 ^ pb) {\n        phc[i1 / 32 | 0] ^= 1 << i1;\n      }\n      if (mh >>> 31 ^ mb) {\n        mhc[i1 / 32 | 0] ^= 1 << i1;\n      }\n      ph = ph << 1 | pb;\n      mh = mh << 1 | mb;\n      pv = mh | ~(xv | ph);\n      mv = ph & xv;\n    }\n    for (let k1 = start; k1 < vlen; k1++) {\n      peq[b.charCodeAt(k1)] = 0;\n    }\n  }\n  let mv1 = 0;\n  let pv1 = -1;\n  const start1 = j * 32;\n  const vlen1 = Math.min(32, m - start1) + start1;\n  for (let k2 = start1; k2 < vlen1; k2++) {\n    peq[b.charCodeAt(k2)] |= 1 << k2;\n  }\n  let score = m;\n  for (let i2 = 0; i2 < n; i2++) {\n    const eq1 = peq[a.charCodeAt(i2)];\n    const pb1 = phc[i2 / 32 | 0] >>> i2 & 1;\n    const mb1 = mhc[i2 / 32 | 0] >>> i2 & 1;\n    const xv1 = eq1 | mv1;\n    const xh1 = ((eq1 | mb1) & pv1) + pv1 ^ pv1 | eq1 | mb1;\n    let ph1 = mv1 | ~(xh1 | pv1);\n    let mh1 = pv1 & xh1;\n    score += ph1 >>> m - 1 & 1;\n    score -= mh1 >>> m - 1 & 1;\n    if (ph1 >>> 31 ^ pb1) {\n      phc[i2 / 32 | 0] ^= 1 << i2;\n    }\n    if (mh1 >>> 31 ^ mb1) {\n      mhc[i2 / 32 | 0] ^= 1 << i2;\n    }\n    ph1 = ph1 << 1 | pb1;\n    mh1 = mh1 << 1 | mb1;\n    pv1 = mh1 | ~(xv1 | ph1);\n    mv1 = ph1 & xv1;\n  }\n  for (let k3 = start1; k3 < vlen1; k3++) {\n    peq[b.charCodeAt(k3)] = 0;\n  }\n  return score;\n};\nconst distance = (a, b) => {\n  if (a.length < b.length) {\n    const tmp = b;\n    b = a;\n    a = tmp;\n  }\n  if (b.length === 0) {\n    return a.length;\n  }\n  if (a.length <= 32) {\n    return myers_32(a, b);\n  }\n  return myers_x(a, b);\n};\nconst closest = (str, arr) => {\n  let min_distance = Infinity;\n  let min_index = 0;\n  for (let i = 0; i < arr.length; i++) {\n    const dist = distance(str, arr[i]);\n    if (dist < min_distance) {\n      min_distance = dist;\n      min_index = i;\n    }\n  }\n  return arr[min_index];\n};\nexport { closest, distance };\nexport const __FramerMetadata__ = {\n  \"exports\": {\n    \"closest\": {\n      \"type\": \"variable\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"distance\": {\n      \"type\": \"variable\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"__FramerMetadata__\": {\n      \"type\": \"variable\"\n    }\n  }\n};\n//# sourceMappingURL=./fuzzySearch.map", "export const localStorageDebugFlag = \"undefined\" != typeof window && \"true\" === window.localStorage.getItem(\"__framerDebugSearch\");\nlet e = /[A-Z]{2,}|[A-Z][a-z]+|[a-z]+|[A-Z]\\d*|\\d+/gu;\nfunction t(e) {\n  return e.charAt(0).toUpperCase() + e.slice(1);\n}\nexport function titleCase(o) {\n  let n = o.match(e) || [];\n  return n.map(t).join(\" \");\n}\nexport function clampText(e, t) {\n  let o = e.length;\n  if (o <= t) return e;\n  let n = e.slice(0, t);\n  return o > t ? n + \"\u2026\" : n;\n}\nexport function isEmptyObject(e) {\n  return 0 === Object.keys(e).length;\n}\nexport function createLogger(e) {\n  function t() {}\n  return e ? {\n    log: function (...e) {\n      console.log(Date.now(), ...e);\n    },\n    time: function (e) {\n      console.time(e);\n    },\n    timeEnd: function (e) {\n      console.timeEnd(e);\n    }\n  } : {\n    log: t,\n    time: t,\n    timeEnd: t\n  };\n}\nexport const DEFAULT_FONT_FAMILY = '\"Inter\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"';\nexport function getFontFamily(e) {\n  var t, o, n;\n  return (null === (t = e.inputFont) || void 0 === t ? void 0 : t.fontFamily) ? e.inputFont.fontFamily : (null === (o = e.titleFont) || void 0 === o ? void 0 : o.fontFamily) ? e.titleFont.fontFamily : (null === (n = e.subtitleFont) || void 0 === n ? void 0 : n.fontFamily) ? e.subtitleFont.fontFamily : '\"Inter\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"';\n}\nexport function animationKeyFromLayout(e) {\n  return `${e}Animation`;\n}\nexport const safeDocument = \"undefined\" != typeof document ? document : null;\nexport const safeWindow = \"undefined\" != typeof window ? window : null;\nlet o = 'meta[name=\"framer-search-index\"]';\nexport function getMetaTagContent() {\n  let e = null == safeDocument ? void 0 : safeDocument.querySelector('meta[name=\"framer-search-index\"]');\n  if (!e) return;\n  let t = e.getAttribute(\"content\");\n  return t;\n}\nexport const checkIfOverLimit = () => \"limit-reached\" === getMetaTagContent();\nexport const __FramerMetadata__ = {\n  \"exports\": {\n    \"localStorageDebugFlag\": {\n      \"type\": \"variable\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"safeWindow\": {\n      \"type\": \"variable\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"getMetaTagContent\": {\n      \"type\": \"function\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"clampText\": {\n      \"type\": \"function\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"safeDocument\": {\n      \"type\": \"variable\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"checkIfOverLimit\": {\n      \"type\": \"variable\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"titleCase\": {\n      \"type\": \"function\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"DEFAULT_FONT_FAMILY\": {\n      \"type\": \"variable\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"animationKeyFromLayout\": {\n      \"type\": \"function\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"isEmptyObject\": {\n      \"type\": \"function\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"createLogger\": {\n      \"type\": \"function\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"getFontFamily\": {\n      \"type\": \"function\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"__FramerMetadata__\": {\n      \"type\": \"variable\"\n    }\n  }\n};\n//# sourceMappingURL=./utils.map", "import { clamp } from \"framer-motion\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { SearchResultTitleType } from \"https://framerusercontent.com/modules/tV9haTHllpHHc9Fjue2H/QejHL5hPQ9rrl5Yt1GTZ/SearchModal.js\";\nimport { getCachedIndex, setCachedIndex, isDefaultLocaleId } from \"https://framerusercontent.com/modules/uU1mtMKXsrVAg8N5hW7w/PCK1x1QLNluYNoEoapwx/cachedIndex.js\";\nimport { fakeResults } from \"https://framerusercontent.com/modules/K9JZRwJcE6slDAf8rUmh/mJ54py1Ecnn1RoC4N1m4/fakeResults.js\";\nimport { distance } from \"https://framerusercontent.com/modules/TwRgbWuhHeB95MPifel4/YW8Hlm59FG3PajbrVsaR/fuzzySearch.js\";\nimport { createLogger, localStorageDebugFlag, safeDocument, safeWindow } from \"https://framerusercontent.com/modules/MWsEnYfRnoOQq31DN4ql/UyHGCSLuZlZBvIaCnOlc/utils.js\";\nconst {\n  log,\n  time,\n  timeEnd\n} = createLogger(localStorageDebugFlag);\nfunction isValidUrl(url) {\n  try {\n    new URL(url);\n    return true;\n  } catch (_error) {\n    return false;\n  }\n}\nfunction splitWords(text) {\n  try {\n    // Regex lookbehind is used to ignore ampersands when splitting\n    // words. For example \"H&M\" will not be split and is considered as\n    // one word, but \"H & M\" will be split.\n    // However, some browsers (like Safari iOS 15) don't support\n    // lookbehind and will crash. When it's not supported, fallback to\n    // a safer regex that always splits ampersands.\n    return text.split(RegExp(\"[\\\\s.,;!?\\\\p{P}\\\\p{Z}]+(?<!\\\\p{L}&)(?!&\\\\p{L})\", \"u\"));\n  } catch {\n    log(\"Falling back to regex without lookbehind\");\n    return text.split(RegExp(\"[\\\\s.,;!?\\\\p{P}\\\\p{Z}]+\", \"u\"));\n  }\n}\nfunction getUniqueWords(str) {\n  const words = splitWords(str).filter(word => word.trim() && word.length > 0);\n  return new Set(words);\n} /**\n  * Replace accented characters with equivilant non-accented versions and\n  * make everything lowercase.\n  */\nfunction getNormalizedString(text) {\n  if (Array.isArray(text)) {\n    return text.map(getNormalizedString);\n  }\n  return text.normalize(\"NFD\") // From: https://stackoverflow.com/a/37511463\n  .replace(/[\\u0300-\\u036f]/g, \"\").toLowerCase();\n}\nfunction getNormalizedItem(item) {\n  const normalizedItem = {};\n  for (const [key, value] of Object.entries(item)) {\n    if (typeof value === \"string\") {\n      normalizedItem[key] = getNormalizedString(value);\n      continue;\n    }\n    if (Array.isArray(value)) {\n      normalizedItem[key] = getNormalizedString(value);\n      continue;\n    }\n    normalizedItem[key] = value;\n  }\n  return normalizedItem;\n}\nfunction getMatchRange(currentRange, start, end) {\n  const result = {\n    ...currentRange\n  };\n  if (start < result.start) {\n    result.start = start;\n  }\n  if (end > result.end) {\n    result.end = end;\n  }\n  return result;\n} /**\n  * Score index item based on the contents of it's fields such as title, description, headings etc.\n  *\n  * Note that this does not normalize the item or query. Normalization is expected to happen\n  * before passing the data into this.\n  */\nfunction getScoreForSearchIndexItem(item, query, words, fullQuery) {\n  let score = 0;\n  const match = {\n    title: {\n      start: Infinity,\n      end: 0\n    },\n    description: {\n      start: Infinity,\n      end: 0\n    }\n  };\n  const urlWords = getUniqueWords(item.url); // Match query based on words in the URL so that random strings inside\n  // other strings are not matched.\n  if (urlWords.has(query)) {\n    score += 10;\n  } // Really boost single word queries that match single word URLs.\n  if (words.size === 1 && urlWords.size === 1 && urlWords.values().next().value === query) {\n    score += score * 5;\n  } // Score shorter URLs higher so `/pricing` is before `/lala/pricing`.\n  if (score > 0) {\n    const splitLength = item.url.split(\"/\").length;\n    score += clamp(10 - splitLength, 0, splitLength);\n  }\n  const titleWords = getUniqueWords(item.title); // Prefer full word matches in the title.\n  if (titleWords.has(query)) {\n    score += 10;\n  }\n  const titleIndex = item.title.indexOf(query);\n  if (titleIndex !== -1) {\n    score += 10; // TODO: Matches are currently not used, but they can be used in the\n    // future to add text highlighting.\n    match.title = getMatchRange(match.title, titleIndex, titleIndex + query.length);\n  } // If the full query is close to being the heading, score this highly as\n  // the user is most likely looking for that exact title.\n  if (distance(item.title, fullQuery) <= 2) {\n    score += score * 10;\n  } // Fuzzy match full words in the title.\n  for (const titleWord of titleWords) {\n    const distanceScore = distance(query, titleWord); // Small distance score helps with small typos.\n    if (distanceScore <= 2) {\n      score += 10;\n    }\n  }\n  const headings = [...item.h1, ...item.h2, ...item.h3, ...item.h4, ...item.h5, ...item.h6];\n  for (const heading of headings) {\n    const headingWords = getUniqueWords(heading); // If the full query is close to being the heading, score this highly as\n    // the user is most likely looking for that exact title.\n    if (distance(heading, fullQuery) <= 2) {\n      score += score * 10;\n    } // Bias headings that start with the query as this helps when\n    // you know the title you are searching for.\n    if (heading.startsWith(query)) {\n      score += 10;\n    }\n    if (headingWords.has(query)) {\n      score += 10;\n    }\n    if (heading.includes(query)) {\n      score += 1;\n    } // Fuzzy match full words in headings.\n    for (const headingWord of headingWords) {\n      const distanceScore = distance(query, headingWord);\n      if (distanceScore <= 2) {\n        score += 1;\n      }\n    }\n  }\n  const descriptionIndex = item.description.indexOf(query);\n  if (descriptionIndex !== -1) {\n    score += 10;\n    match.description = getMatchRange(match.description, descriptionIndex, descriptionIndex + query.length);\n  }\n  for (const p of item.p) {\n    if (p.includes(query)) {\n      score += .5;\n    }\n  }\n  for (const codeblock of item.codeblock) {\n    // If the full query is close to being the codeblock, score this highly as\n    // the user is most likely looking for that exact code.\n    if (distance(codeblock, fullQuery) <= 2) {\n      score *= 10;\n    }\n    if (codeblock.includes(fullQuery)) {\n      score += 10;\n    }\n    if (codeblock.includes(query)) {\n      score += .5;\n    }\n  }\n  return {\n    score,\n    match\n  };\n}\nfunction getSearchIndexItemScore(item, query) {\n  const normalizedItem = getNormalizedItem(item);\n  const normalizedQuery = getNormalizedString(query);\n  const queryWords = getUniqueWords(normalizedQuery);\n  let total = 0;\n  for (const queryWord of queryWords) {\n    const {\n      score\n    } = getScoreForSearchIndexItem(normalizedItem, queryWord, queryWords, normalizedQuery);\n    total += score;\n  }\n  return total;\n}\nfunction useRawSearch(index, query, settings) {\n  const results = useMemo(() => {\n    if (!query || !index) {\n      return [];\n    }\n    const path = safeWindow === null || safeWindow === void 0 ? void 0 : safeWindow.location.pathname;\n    time(\"query\"); // Filter the results.\n    const results = Object.values(index).map(item => {\n      const score = getSearchIndexItemScore(item, query);\n      const heading = item.h1.length && item.h1[0];\n      const title = (settings === null || settings === void 0 ? void 0 : settings.titleType) === SearchResultTitleType.Title ? item.title : heading ? heading : item.title; // Convert index item to result item.\n      const result = {\n        url: item.url,\n        title,\n        description: item.description,\n        body: [...item.p, item.codeblock].join(\" \"),\n        score\n      };\n      return result;\n    }).filter(item => item.score > settings.minimumScore || 0).filter(item => {\n      if (!path) return true;\n      return item.url !== path;\n    }).sort((itemA, itemB) => itemB.score - itemA.score);\n    timeEnd(\"query\");\n    return results;\n  }, [index, query]);\n  return results;\n}\nfunction getIndexedScopedToUrl(index, rawUrlScope) {\n  const scopedIndex = {};\n  const baseScopeUrlHasVariable = rawUrlScope.includes(\":\");\n  const urlUpToPathVariable = rawUrlScope.split(\":\")[0];\n  const urlScope = urlUpToPathVariable.length > 1 ? urlUpToPathVariable : \"\";\n  for (const url in index) {\n    if (!url.startsWith(urlScope)) {\n      continue;\n    }\n    if (baseScopeUrlHasVariable && url.length <= urlScope.length) {\n      continue;\n    }\n    scopedIndex[url] = index[url];\n  }\n  return scopedIndex;\n}\nexport function useSearch(query, localeId, settings) {\n  const [searchIndex, _setSearchIndex] = useState({});\n  const [status, setStatus] = useState(\"loading\");\n  const results = useRawSearch(searchIndex, query, settings); // Seperate setter function so that the URL scope is always applied\n  // to indexes loaded from either the cache or network.\n  function setSearchIndex(index, options = {\n    ignoreScope: false\n  }) {\n    let scopedIndex = index;\n    if (settings.urlScope && !options.ignoreScope) {\n      scopedIndex = getIndexedScopedToUrl(index, settings.urlScope);\n      log(\"Using URL scope\", settings.urlScope);\n    }\n    _setSearchIndex(scopedIndex);\n  }\n  useEffect(() => {\n    async function loadSearchIndex() {\n      setStatus(\"loading\");\n      const metaTag = safeDocument === null || safeDocument === void 0 ? void 0 : safeDocument.querySelector('meta[name=\"framer-search-index\"]');\n      if (!metaTag) {\n        setStatus(\"no-meta-tag-found\");\n        setSearchIndex(fakeResults, {\n          ignoreScope: true\n        });\n        log(\"No meta tag found\");\n        return;\n      }\n      const cachedIndex = await getCachedIndex(localeId);\n      const metaTagContent = metaTag.getAttribute(\"content\");\n      const isOverLimit = metaTagContent === \"limit-reached\";\n      if (isOverLimit) {\n        log(\"Page limit for plan exceeded\");\n      } // If a cached index exists, use the cached version until latest one\n      // from the network loads.\n      if (cachedIndex && !isOverLimit) {\n        setSearchIndex(cachedIndex);\n        setStatus(\"loading-with-cache\");\n        log(\"Using cached index\");\n      } // Return early and do not make a fetch request if the URL is not valid.\n      if (!metaTagContent || !isValidUrl(metaTagContent)) {\n        log(\"Meta tag exists but URL is not valid yet\"); // If there is no cached index, show the pending index message.\n        // Otherwise use the cache to as the index to search.\n        if (!cachedIndex) {\n          setStatus(\"pending-index-generation\");\n          log(\"No cache to use, page reload required to check for meta tag\");\n        } else {\n          log(\"Continue using cache\");\n        }\n        return;\n      }\n      const searchIndexURL = getSearchIndexURL(metaTagContent, localeId);\n      const response = await fetch(searchIndexURL);\n      if (!response.ok) {\n        throw new Error(response.statusText);\n      }\n      const downloadedIndex = await response.json();\n      setSearchIndex(downloadedIndex);\n      setCachedIndex(localeId, downloadedIndex);\n      setStatus(\"success\");\n      log(\"Using downloaded index\");\n    }\n    loadSearchIndex().catch(error => {\n      // TODO: Check for error type here. If it's a network error,\n      // we could do a few retries.\n      setStatus(\"error\");\n      log(\"Failed to load search index\", error);\n    });\n  }, [localeId]);\n  log({\n    status,\n    results\n  });\n  return {\n    results,\n    status\n  };\n}\nfunction getSearchIndexURL(baseURL, localeId) {\n  if (isDefaultLocaleId(localeId)) return baseURL;\n  return baseURL.replace(\".json\", `-${localeId}.json`);\n}\nexport const __FramerMetadata__ = {\n  \"exports\": {\n    \"useSearch\": {\n      \"type\": \"function\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchIndex\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"__FramerMetadata__\": {\n      \"type\": \"variable\"\n    }\n  }\n};", "export var Browser;\n(function (Browser) {\n  var isTouch = Browser.isTouch = () => \"ontouchstart\" in window || navigator.maxTouchPoints > 0;\n  var isChrome = Browser.isChrome = () => navigator.userAgent.toLowerCase().includes(\"chrome/\");\n  var isWebKit = Browser.isWebKit = () => navigator.userAgent.toLowerCase().includes(\"applewebkit/\");\n  var isSafari = Browser.isSafari = () => isWebKit() && !isChrome();\n  var isSafariDesktop = Browser.isSafariDesktop = () => isSafari() && !isTouch();\n  var isWindows = Browser.isWindows = () => /Win/.test(navigator.platform);\n  var isMacOS = Browser.isMacOS = () => /Mac/.test(navigator.platform);\n})(Browser || (Browser = {}));\nexport const __FramerMetadata__ = {\n  \"exports\": {\n    \"__FramerMetadata__\": {\n      \"type\": \"variable\"\n    }\n  }\n};\n//# sourceMappingURL=./browser.map", "// From: @framerjs/fresco/src/components/utils/useCallbackOnMouseMove.ts\nimport { useRef, useCallback } from \"react\";\nimport { Browser } from \"https://framerusercontent.com/modules/PJVBcBLmDteTEAZh3J9Z/keXJyjyE9VnzUcDMayjg/browser.js\"; /**\n                                                                                                                      * Webkit fires mousemove events if the pointer's coordination changes relative\n                                                                                                                      * to its container (e.g. if the container scrolls), or when a modifier key is\n                                                                                                                      * pressed, mousemove would fire even if the cursor did not actually move.\n                                                                                                                      * This helper compares the cursor position between mouse events, and fire the\n                                                                                                                      * callback only when its position changes.\n                                                                                                                      */\nexport const useCallbackOnMouseMove = (callback, mousePositionRef) => {\n  const prevPositionRef = useRef(null);\n  return useCallback(event => {\n    if (!Browser.isSafari()) return callback(event);\n    const ref = mousePositionRef ? mousePositionRef : prevPositionRef;\n    const {\n      clientX,\n      clientY\n    } = event;\n    const prevCursorPosition = ref.current;\n    ref.current = {\n      x: clientX,\n      y: clientY\n    }; // Ignore mouse moves unless we have a position. Else it might be an\n    // element that appears behind the mouse without the mouse moving.\n    if (!prevCursorPosition) {\n      return;\n    }\n    if (prevCursorPosition.x !== clientX || prevCursorPosition.y !== clientY) {\n      return callback(event);\n    }\n  }, [mousePositionRef, callback]);\n};\nexport const __FramerMetadata__ = {\n  \"exports\": {\n    \"useCallbackOnMouseMove\": {\n      \"type\": \"variable\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"Point\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"__FramerMetadata__\": {\n      \"type\": \"variable\"\n    }\n  }\n};\n//# sourceMappingURL=./useCallbackOnMouseMove.map", "// Safari does not support `element.scrollIntoView({ block: \"nearest\" })`, so this\n// is a workaround for that.\nexport function scrollIntoView(targetElement, scrollElement, /** Additional spacing to add from the top or bottom of the scroll element viewport. */{\n  offsetTop,\n  offsetBottom\n}) {\n  const targetElementBounds = targetElement.getBoundingClientRect();\n  const scrollElementBounds = scrollElement.getBoundingClientRect();\n  if (targetElementBounds.top < scrollElementBounds.top) {\n    const difference = scrollElementBounds.top - targetElementBounds.top;\n    scrollElement.scrollTop = scrollElement.scrollTop - difference - offsetTop;\n  } else if (targetElementBounds.bottom > scrollElementBounds.bottom) {\n    const topAligned = scrollElementBounds.top - targetElementBounds.top;\n    const minOffset = scrollElement.scrollTop - topAligned - offsetTop;\n    const bottomAligned = targetElementBounds.bottom - scrollElementBounds.bottom;\n    const offset = scrollElement.scrollTop + bottomAligned + offsetBottom;\n    scrollElement.scrollTop = Math.min(minOffset, offset);\n  }\n}\nexport const __FramerMetadata__ = {\n  \"exports\": {\n    \"scrollIntoView\": {\n      \"type\": \"function\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"__FramerMetadata__\": {\n      \"type\": \"variable\"\n    }\n  }\n};\n//# sourceMappingURL=./scrollIntoView.map", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useSearch } from \"https://framerusercontent.com/modules/MyBp84Z0p9nUcMimVMnY/aWhJiXNIMoaQYpujUXUs/useSearch.js\";\nimport React, { useEffect, useState, useMemo, forwardRef, useRef, useDeferredValue, useLayoutEffect, useCallback, useImperativeHandle } from \"react\";\nimport { Browser } from \"https://framerusercontent.com/modules/PJVBcBLmDteTEAZh3J9Z/keXJyjyE9VnzUcDMayjg/browser.js\";\nimport { motion, clamp, useAnimate } from \"framer-motion\";\nimport { SearchIcon, ClearIcon, SpinnerIcon } from \"https://framerusercontent.com/modules/LV9trClbmNwd5PVj9l8y/L4rFqMGNzGSwRZpGTGF3/Icons.js\";\nimport { clampText, getFontFamily, localStorageDebugFlag, animationKeyFromLayout } from \"https://framerusercontent.com/modules/MWsEnYfRnoOQq31DN4ql/UyHGCSLuZlZBvIaCnOlc/utils.js\";\nimport { useCallbackOnMouseMove } from \"https://framerusercontent.com/modules/Gzef0nFihI9m9vZG45th/lIUxbZcreiDm2GzUkt3y/useCallbackOnMouseMove.js\";\nimport { scrollIntoView } from \"https://framerusercontent.com/modules/eAnjm75CdfYT1Zz4BIaz/7KDSfnnyD1T3Ap75L4m8/scrollIntoView.js\";\nimport {\n// @ts-expect-error Internal API\nuseLocaleInfo, useRouter, inferInitialRouteFromPath } from \"framer\";\nconst MAX_DESCRIPTION_LENGTH = 120;\nconst MODAL_MAX_HEIGHT = 496;\nconst VERTICAL_SPACING_MULTIPLIER = .6;\nfunction ClearButton({\n  theme,\n  type,\n  onClick,\n  text\n}) {\n  const shouldDisplayIcon = type === \"icon\";\n  const iconOrText = shouldDisplayIcon ? /*#__PURE__*/_jsx(ClearIcon, {\n    style: {\n      color: theme.inputIconColor,\n      width: theme.inputIconSize,\n      height: theme.inputIconSize\n    }\n  }) : text;\n  return /*#__PURE__*/_jsx(\"div\", {\n    style: {\n      flexShrink: 0,\n      fontSize: theme && theme.titleFont && theme.titleFont.fontSize ? theme.titleFont.fontSize : 15\n    },\n    children: /*#__PURE__*/_jsx(\"button\", {\n      className: \"__framer-search-clear-button\",\n      onClick: onClick,\n      style: {\n        fontFamily: \"inherit\",\n        border: \"none\",\n        background: \"none\",\n        cursor: \"pointer\",\n        display: \"flex\",\n        textTransform: \"uppercase\",\n        color: theme.inputIconColor,\n        fontSize: \"0.75em\",\n        padding: 0\n      },\n      children: iconOrText\n    })\n  });\n}\nfunction Divider({\n  theme,\n  type\n}) {\n  const styles = {\n    background: theme.foregroundColor,\n    height: 1,\n    flexShrink: 0,\n    opacity: .05\n  };\n  if (type === \"contained\" && theme) {\n    styles.marginLeft = theme.horizontalSpacing;\n    styles.marginRight = theme.horizontalSpacing;\n  }\n  return /*#__PURE__*/_jsx(\"div\", {\n    style: styles\n  });\n}\nexport const Input = /*#__PURE__*/forwardRef(function Input(props, ref) {\n  const {\n    value = \"\",\n    status,\n    autofocus,\n    theme,\n    placeholder,\n    iconType,\n    clearButtonType,\n    onChange\n  } = props;\n  const [inputValue, setInputValue] = useState(value);\n  const [isFocused, setIsFocused] = useState(false);\n  const inputRef = useRef();\n  useImperativeHandle(ref, () => inputRef.current);\n  React.useLayoutEffect(() => {\n    // Runs on unmount, fixes a bug in Safari that scrolls to the bottom\n    // of the page when the input unmounts.\n    return () => {\n      const inputElement = inputRef.current;\n      if (!inputElement || inputElement !== document.activeElement) return;\n      inputElement.blur();\n    };\n  }, []);\n  const handleInputClick = () => {\n    if (inputRef.current) {\n      inputRef.current.focus();\n    }\n  };\n  const handleClearClick = () => {\n    setInputValue(\"\");\n  };\n  useEffect(() => {\n    onChange(inputValue);\n  }, [inputValue]);\n  const hasInputText = inputValue.length > 0;\n  const showClearButton = inputValue.length > 0 && clearButtonType && clearButtonType !== \"none\";\n  const verticalSpacing = Math.floor(theme ? theme.horizontalSpacing * VERTICAL_SPACING_MULTIPLIER : 0);\n  const searchIcon = iconType === \"custom\" && theme.inputIconImage ? /*#__PURE__*/_jsx(\"img\", {\n    alt: \"icon alongside the Site Search input\",\n    src: theme.inputIconImage.src,\n    width: theme.inputIconSize,\n    height: theme.inputIconSize\n  }) : /*#__PURE__*/_jsx(SearchIcon, {\n    color: theme.inputIconColor,\n    width: theme.inputIconSize,\n    height: theme.inputIconSize\n  });\n  return /*#__PURE__*/_jsxs(\"div\", {\n    role: \"search\",\n    style: {\n      ...inputContainerStyle,\n      fontFamily: getFontFamily(theme),\n      paddingLeft: theme && theme.horizontalSpacing,\n      paddingRight: theme && theme.horizontalSpacing,\n      gap: 12,\n      paddingTop: verticalSpacing,\n      paddingBottom: verticalSpacing,\n      touchAction: \"none\"\n    },\n    onClick: handleInputClick,\n    children: [/*#__PURE__*/_jsx(\"div\", {\n      style: {\n        flexShrink: 0,\n        display: \"flex\"\n      },\n      children: status === \"loading\" && inputValue ? /*#__PURE__*/_jsx(SpinnerIcon, {\n        color: theme.inputIconColor,\n        backgroundColor: theme.backgroundColor,\n        style: {\n          height: theme && theme.inputIconSize,\n          width: theme && theme.inputIconSize\n        }\n      }) : searchIcon\n    }), /*#__PURE__*/_jsx(\"input\", {\n      ref: inputRef,\n      spellCheck: false,\n      autoFocus: autofocus,\n      style: {\n        ...inputStyle,\n        WebkitTapHighlightColor: \"rgba(0,0,0,0)\",\n        color: theme.foregroundColor,\n        lineHeight: \"2em\",\n        verticalAlign: \"baseline\",\n        ...theme.titleFont,\n        ...theme.inputFont,\n        fontSize: theme.inputFontSize,\n        // @ts-ignore\n        \"--framer-search-placeholder-color\": theme.placeholderColor\n      },\n      onFocus: () => {\n        const scrollOffset = document.documentElement.scrollTop;\n        document.documentElement.scrollTop = scrollOffset;\n      },\n      placeholder: placeholder,\n      value: inputValue,\n      onChange: () => setInputValue(inputRef.current.value)\n    }), showClearButton && /*#__PURE__*/_jsx(ClearButton, {\n      theme: theme,\n      type: props.clearButtonType,\n      text: props.clearButtonText,\n      onClick: handleClearClick\n    })]\n  });\n});\nconst inputContainerStyle = {\n  display: \"inline-flex\",\n  alignItems: \"center\",\n  flexShrink: 0\n};\nconst inputStyle = {\n  outline: \"none\",\n  border: \"none\",\n  background: \"transparent\",\n  fontWeight: 500,\n  height: \"2em\",\n  padding: 0,\n  width: \"100%\"\n};\nexport const ResultRow = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(function ResultRow(props, ref) {\n  const {\n    index,\n    result,\n    prevMousePositionRef,\n    type = \"contained\",\n    subtitleType = \"path\",\n    selected = false,\n    theme,\n    localeSlug,\n    style,\n    onMouseMove,\n    onPointerDown,\n    onNavigateTo\n  } = props;\n  const {\n    url,\n    title,\n    score\n  } = result;\n  const urlPath = useMemo(() => {\n    if (!localeSlug) return url;\n    return url.replace(`/${localeSlug}`, \"\");\n  }, [url]);\n  const handleMouseMove = useCallbackOnMouseMove(event => onMouseMove(event, index), prevMousePositionRef);\n  const isContained = type === \"contained\";\n  const borderRadius = isContained ? clamp(0, Infinity, theme.borderRadius - theme.spacing) : 0;\n  const subtitleText = subtitleType === \"path\" ? urlPath : clampText(result.description, MAX_DESCRIPTION_LENGTH);\n  const handleClick = event => {\n    event.preventDefault();\n    onNavigateTo(result.url);\n  };\n  const focusTrap = event => {\n    event.preventDefault();\n  };\n  return /*#__PURE__*/_jsx(\"a\", {\n    ref: ref,\n    style: {\n      textDecoration: \"none\"\n    },\n    href: result.url,\n    onClick: handleClick,\n    onMouseMove: handleMouseMove,\n    onMouseDown: focusTrap,\n    onPointerDown: event => onPointerDown(event, index),\n    children: /*#__PURE__*/_jsxs(\"li\", {\n      style: {\n        ...resultContainer,\n        ...style,\n        paddingTop: isContained ? 12 : 16,\n        paddingBottom: isContained ? 12 : 16,\n        color: theme.foregroundColor,\n        position: \"relative\",\n        paddingLeft: theme && theme.horizontalSpacing,\n        paddingRight: theme && theme.horizontalSpacing\n      },\n      children: [/*#__PURE__*/_jsx(\"div\", {\n        style: {\n          backgroundColor: theme.foregroundColor,\n          position: \"absolute\",\n          opacity: selected ? .06 : 0,\n          borderRadius,\n          left: theme && isContained ? theme.spacing : 0,\n          right: theme && isContained ? theme.spacing : 0,\n          top: 0,\n          bottom: 0\n        }\n      }), /*#__PURE__*/_jsxs(\"div\", {\n        style: {\n          display: \"flex\",\n          flexDirection: \"column\",\n          overflow: \"hidden\",\n          gap: 4\n        },\n        children: [/*#__PURE__*/_jsx(\"h3\", {\n          style: {\n            ...resultTitle,\n            ...theme.titleFont,\n            lineHeight: \"1.4em\"\n          },\n          children: title\n        }), /*#__PURE__*/_jsxs(\"p\", {\n          style: {\n            margin: 0,\n            color: theme.subtitleColor,\n            ...theme.subtitleFont,\n            whiteSpace: \"nowrap\",\n            overflow: \"hidden\",\n            textOverflow: \"ellipsis\",\n            lineHeight: \"1.4em\"\n          },\n          children: [localStorageDebugFlag ? score : \"\", \" \", subtitleText]\n        })]\n      })]\n    }, result.url)\n  });\n})); /**\n     * Flexible gap used inside a flexbox layout to push down the quick menu\n     * by 20% of the screen height, but also allow it to collapse to zero if\n     * there is not enough vertical room.\n     */\nfunction QuickMenuSpacer({\n  onClick\n}) {\n  return /*#__PURE__*/_jsx(\"div\", {\n    style: {\n      width: \"100%\",\n      flexBasis: \"20vh\"\n    },\n    onClick: onClick\n  });\n}\nconst layoutContainerStyle = {\n  display: \"flex\",\n  flexDirection: \"column\",\n  alignItems: \"center\",\n  justifyContent: \"flex-start\",\n  gap: 15,\n  overflow: \"visible\"\n};\nfunction LayoutContainer({\n  layoutType,\n  theme,\n  onKeyDown,\n  onDismiss,\n  children,\n  modalOptions\n}) {\n  const layoutStyles = getLayoutBaseStyles(layoutType, theme);\n  const style = {\n    ...layoutContainerStyle,\n    ...layoutStyles,\n    willChange: \"transform\",\n    marginTop: layoutType === \"FixedTop\" ? theme.offsetTop : 0,\n    height: layoutType === \"Sidebar\" ? \"100%\" : \"auto\",\n    maxHeight: layoutType === \"QuickMenu\" ? \"100%\" : \"none\",\n    justifyContent: layoutType === \"Sidebar\" ? \"flex-end\" : \"flex-start\",\n    flexDirection: layoutType === \"Sidebar\" ? \"column-reverse\" : \"column\"\n  };\n  const innerStyle = {\n    ...layoutContainerStyle,\n    ...layoutStyles,\n    height: layoutType === \"Sidebar\" ? \"100%\" : \"auto\",\n    maxHeight: layoutType === \"QuickMenu\" ? \"100%\" : \"none\",\n    gap: layoutType === \"Sidebar\" ? 0 : theme.gapBetweenStatusAndSearch,\n    backgroundColor: layoutType === \"Sidebar\" ? theme.backgroundColor : \"transparent\",\n    justifyContent: layoutType === \"Sidebar\" ? \"flex-end\" : \"flex-start\",\n    flexDirection: layoutType === \"Sidebar\" ? \"column-reverse\" : \"column\",\n    originX: .5,\n    originY: .5\n  };\n  function getContainerAnimation() {\n    switch (layoutType) {\n      case \"FixedTop\":\n        {\n          const key = animationKeyFromLayout(\"FixedTop\");\n          const prop = modalOptions ? modalOptions[key] : undefined;\n          if (prop) {\n            return prop;\n          } else {\n            return {\n              y: -10,\n              opacity: .2,\n              transition: {\n                duration: Browser.isTouch() ? 0 : .15\n              }\n            };\n          }\n          break;\n        }\n      case \"QuickMenu\":\n        {\n          const key = animationKeyFromLayout(\"QuickMenu\");\n          const prop = modalOptions ? modalOptions[key] : undefined;\n          if (prop) {\n            return prop;\n          } else {\n            return {\n              scale: .95,\n              opacity: 0,\n              y: 0,\n              x: 0,\n              rotate: 0,\n              transition: {\n                type: \"spring\",\n                stiffness: 600,\n                damping: 40\n              }\n            };\n          }\n          break;\n        }\n      case \"Sidebar\":\n        {\n          const key = animationKeyFromLayout(\"Sidebar\");\n          const prop = modalOptions ? modalOptions[key] : undefined;\n          if (prop) {\n            return prop;\n          } else {\n            return {\n              x: -10,\n              opacity: 0,\n              transition: {\n                duration: .15\n              }\n            };\n          }\n          break;\n        }\n    }\n  }\n  const containerAnimation = getContainerAnimation();\n  return /*#__PURE__*/_jsxs(\"div\", {\n    style: style,\n    onKeyDown: onKeyDown,\n    onClick: event => event.stopPropagation(),\n    children: [layoutType === \"QuickMenu\" && /*#__PURE__*/_jsx(QuickMenuSpacer, {\n      onClick: onDismiss\n    }), /*#__PURE__*/_jsx(motion.div, {\n      initial: containerAnimation,\n      animate: {\n        opacity: 1,\n        scale: 1,\n        x: 0,\n        y: 0,\n        rotate: 0\n      },\n      transition: containerAnimation ? containerAnimation.transition : undefined,\n      exit: {\n        opacity: 0,\n        transition: {\n          duration: 0\n        }\n      },\n      style: innerStyle,\n      children: children\n    })]\n  });\n}\nfunction ModalContainer({\n  layoutType,\n  theme,\n  children,\n  heightIsStatic,\n  heightTransition,\n  heightDeps\n}) {\n  const style = {\n    // This `willChange` is required to avoid weird rendering issues where\n    // parts of the search window won't redraw, which we observed in Safari 16.4.\n    willChange: \"transform\",\n    backgroundColor: theme.backgroundColor,\n    color: theme.foregroundColor,\n    borderRadius: layoutType === \"QuickMenu\" ? theme.borderRadius : 0,\n    width: \"100%\",\n    display: \"flex\",\n    flexDirection: \"column\",\n    overflow: \"hidden\",\n    boxShadow: layoutType !== \"Sidebar\" ? theme.shadow : undefined,\n    maxHeight: layoutType === \"QuickMenu\" ? `min(${MODAL_MAX_HEIGHT}px, calc(100vh - 30px))` : undefined\n  }; // Opt-in Height Animations for the Search Quick Actions menu.\n  // These are disabled by default, but can be enabled via props.\n  const [scope, animate] = useAnimate();\n  useLayoutEffect(() => {\n    if (layoutType !== \"QuickMenu\" || heightIsStatic) return;\n    const prevHeight = scope.current.offsetHeight;\n    scope.current.style.height = \"auto\";\n    const height = scope.current.offsetHeight;\n    scope.current.style.height = prevHeight + \"px\";\n    animate(scope.current, {\n      height: [prevHeight, height]\n    }, heightTransition);\n  }, heightDeps);\n  return /*#__PURE__*/_jsx(\"div\", {\n    ref: scope,\n    role: \"dialog\",\n    className: layoutType === \"FixedTop\" ? \"__framer-max-height-80dvh\" : undefined,\n    style: style,\n    children: children\n  });\n}\nconst ScrollView = /*#__PURE__*/React.forwardRef(function ScrollView({\n  theme,\n  children\n}, ref) {\n  const isTouch = Browser.isTouch();\n  const [canScroll, setCanScroll] = React.useState(true);\n  React.useEffect(() => {\n    if (!isTouch) return;\n    const element = ref.current;\n    if (!element) return;\n    setCanScroll(element.scrollHeight > element.clientHeight);\n  });\n  return /*#__PURE__*/_jsx(\"div\", {\n    ref: ref,\n    style: {\n      width: `calc(100% + ${theme.scrollBarWidth}px)`,\n      overflowY: \"scroll\",\n      overflowX: \"hidden\",\n      overscrollBehavior: \"contain\",\n      touchAction: canScroll ? undefined : \"none\",\n      // Make the list appear slightly under the divider\n      // so that the divider is still visible when the first\n      // item is selected.\n      marginTop: -1\n    },\n    children: children\n  });\n});\nconst statusStyle = {\n  backgroundColor: \"#B5B5B5\",\n  color: \"#FFF\",\n  boxShadow: \"0px 20px 40px 0px rgba(0, 0, 0, 0.25)\",\n  fontFamily: \"inherit\",\n  textAlign: \"center\",\n  fontSize: 13,\n  padding: \"8px 0\"\n};\nfunction StatusMessage({\n  status,\n  layoutType,\n  theme\n}) {\n  const verticalSpacing = Math.floor(theme ? theme.horizontalSpacing * VERTICAL_SPACING_MULTIPLIER : 0);\n  const style = {\n    ...statusStyle,\n    userSelect: \"none\",\n    fontFamily: getFontFamily(theme),\n    paddingLeft: theme && theme.horizontalSpacing,\n    paddingRight: theme && theme.horizontalSpacing,\n    fontWeight: 500,\n    lineHeight: `calc(${theme.inputFontSize} * 2)`,\n    paddingTop: verticalSpacing,\n    paddingBottom: verticalSpacing,\n    ...theme.titleFont,\n    zIndex: theme.zIndex + 1,\n    maxWidth: layoutType === \"FixedTop\" ? \"none\" : theme.width,\n    width: layoutType === \"FixedTop\" ? `calc(100% - ${verticalSpacing * 2}px` : \"100%\",\n    boxShadow: layoutType !== \"Sidebar\" && statusStyle.boxShadow,\n    borderRadius: layoutType !== \"Sidebar\" && theme.borderRadius\n  }; // Show less text on fixed text to look nicer on mobile\n  const previewInfoText = layoutType === \"FixedTop\" ? \"Preview Mode\" : \"Preview Mode. Publish your Site to Search.\";\n  if (status === \"no-meta-tag-found\") {\n    return /*#__PURE__*/_jsx(\"div\", {\n      style: style,\n      children: previewInfoText\n    });\n  }\n  if (status === \"pending-index-generation\") {\n    return /*#__PURE__*/_jsx(\"div\", {\n      style: style,\n      children: \"Site is being indexed\"\n    });\n  }\n  return null;\n}\nconst resultTitle = {\n  textOverflow: \"ellipsis\",\n  maxWidth: \"100%\",\n  overflow: \"hidden\",\n  fontWeight: 500,\n  whiteSpace: \"nowrap\",\n  flex: 1,\n  margin: 0\n};\nconst resultContainer = {\n  padding: \"16px 20px\",\n  listStyle: \"none\",\n  fontWeight: 500\n};\nconst sidebarStyles = {\n  left: 0,\n  width: 500\n};\nconst fixedTopStyles = {\n  top: 0,\n  width: \"100%\"\n};\nconst quickMenuStyles = {\n  width: 500\n};\nfunction getLayoutBaseStyles(layoutOption, theme) {\n  switch (layoutOption) {\n    case \"Sidebar\":\n      return {\n        ...sidebarStyles,\n        width: theme.width\n      };\n    case \"FixedTop\":\n      return fixedTopStyles;\n    case \"QuickMenu\":\n      return {\n        ...quickMenuStyles,\n        width: theme.width\n      };\n  }\n}\nexport var SearchInputClearButtonType;\n(function (SearchInputClearButtonType) {\n  SearchInputClearButtonType[\"Icon\"] = \"icon\";\n  SearchInputClearButtonType[\"Text\"] = \"text\";\n  SearchInputClearButtonType[\"None\"] = \"none\";\n})(SearchInputClearButtonType || (SearchInputClearButtonType = {}));\nexport var SearchInputDividerType;\n(function (SearchInputDividerType) {\n  SearchInputDividerType[\"None\"] = \"none\";\n  SearchInputDividerType[\"FullWidth\"] = \"fullWidth\";\n  SearchInputDividerType[\"Contained\"] = \"contained\";\n})(SearchInputDividerType || (SearchInputDividerType = {}));\nexport var SearchResultTitleType;\n(function (SearchResultTitleType) {\n  SearchResultTitleType[\"H1\"] = \"h1\";\n  SearchResultTitleType[\"Title\"] = \"title\";\n})(SearchResultTitleType || (SearchResultTitleType = {}));\nexport var SearchResultSubtitleType;\n(function (SearchResultSubtitleType) {\n  SearchResultSubtitleType[\"Description\"] = \"description\";\n  SearchResultSubtitleType[\"Path\"] = \"path\";\n})(SearchResultSubtitleType || (SearchResultSubtitleType = {}));\nexport var SearchResultItemType;\n(function (SearchResultItemType) {\n  SearchResultItemType[\"FullWidth\"] = \"fullWidth\";\n  SearchResultItemType[\"Contained\"] = \"contained\";\n})(SearchResultItemType || (SearchResultItemType = {}));\nexport var SearchLayoutType;\n(function (SearchLayoutType) {\n  SearchLayoutType[\"Sidebar\"] = \"Sidebar\";\n  SearchLayoutType[\"FixedTop\"] = \"FixedTop\";\n  SearchLayoutType[\"QuickMenu\"] = \"QuickMenu\";\n})(SearchLayoutType || (SearchLayoutType = {}));\nexport var SearchEntryType;\n(function (SearchEntryType) {\n  SearchEntryType[\"Icon\"] = \"icon\";\n  SearchEntryType[\"Text\"] = \"text\";\n})(SearchEntryType || (SearchEntryType = {}));\nexport var SearchIconType;\n(function (SearchIconType) {\n  SearchIconType[\"Default\"] = \"default\";\n  SearchIconType[\"Custom\"] = \"custom\";\n})(SearchIconType || (SearchIconType = {})); /**\n                                             * @framerSupportedLayoutWidth fixed\n                                             * @framerSupportedLayoutHeight fixed\n                                             */\nexport function SearchModal(props) {\n  const {\n    layoutType,\n    theme,\n    urlScope,\n    inputOptions,\n    backdropOptions,\n    modalOptions,\n    resultOptions,\n    onDismiss\n  } = props;\n  const {\n    activeLocale\n  } = useLocaleInfo();\n  const localeId = activeLocale === null || activeLocale === void 0 ? void 0 : activeLocale.id;\n  const localeSlug = activeLocale === null || activeLocale === void 0 ? void 0 : activeLocale.slug;\n  const input = useRef();\n  const selectedResultRow = useRef();\n  const scrollView = useRef();\n  const [selected, setSelected] = useState({\n    index: 0,\n    scroll: true\n  });\n  const prevMousePositionRef = useRef(null);\n  const [isKeyboardNavigationDisabled, setIsKeyboardNavigationDisabled] = useState(Browser.isTouch);\n  const [query, setQuery] = useState(\"\");\n  const deferredQuery = useDeferredValue(query);\n  const {\n    results,\n    status\n  } = useSearch(deferredQuery, localeId, {\n    minimumScore: 0,\n    urlScope,\n    titleType: resultOptions.titleType\n  });\n  const selectedResult = results[selected.index];\n  const verticalSpacing = Math.floor(theme ? theme.horizontalSpacing * VERTICAL_SPACING_MULTIPLIER : 0);\n  useEffect(() => {\n    // Reset the selection to the top if the query changes.\n    setSelected({\n      index: 0,\n      scroll: true\n    });\n  }, [deferredQuery]);\n  const handleResultRowPointerDown = useCallback((event, index) => {\n    if (event.pointerType !== \"touch\") return;\n    setIsKeyboardNavigationDisabled(true);\n    setSelected({\n      index,\n      scroll: false\n    });\n  }, []);\n  const handleResultRowMouseMove = useCallback((event, index) => {\n    setSelected(previousSelected => {\n      if (previousSelected.index === index) {\n        return previousSelected;\n      }\n      return {\n        index,\n        scroll: false\n      };\n    });\n  }, []);\n  const router = useRouter();\n  const navigateTo = useCallback(async url => {\n    if (status === \"no-meta-tag-found\") {\n      return;\n    }\n    try {\n      var _router_getRoute, _route_page_preload, _route_page, _router_navigate; // Ideally, we would directly expose `routeId` in the search index so that\n      // we don't need to infer it from the URL.\n      const {\n        routeId,\n        pathVariables\n      } = inferInitialRouteFromPath(router.routes, url);\n      const route = (_router_getRoute = router.getRoute) === null || _router_getRoute === void 0 ? void 0 : _router_getRoute.call(router, routeId);\n      await (route === null || route === void 0 ? void 0 : (_route_page = route.page) === null || _route_page === void 0 ? void 0 : (_route_page_preload = _route_page.preload) === null || _route_page_preload === void 0 ? void 0 : _route_page_preload.call(_route_page));\n      (_router_navigate = router.navigate) === null || _router_navigate === void 0 ? void 0 : _router_navigate.call(router, routeId, null, pathVariables, false);\n    } catch (error) {\n      window.location.href = url;\n    }\n  }, [status]);\n  const handleKeyDown = event => {\n    const maxIndex = results.length - 1;\n    switch (event.code) {\n      case \"ArrowUp\":\n        event.preventDefault();\n        if (isKeyboardNavigationDisabled) {\n          setIsKeyboardNavigationDisabled(false);\n          break;\n        }\n        setSelected(previousSelected => ({\n          index: clamp(0, maxIndex, previousSelected.index - 1),\n          scroll: true\n        }));\n        break;\n      case \"ArrowDown\":\n        event.preventDefault();\n        if (isKeyboardNavigationDisabled) {\n          setIsKeyboardNavigationDisabled(false);\n          break;\n        }\n        setSelected(previousSelected => ({\n          index: clamp(0, maxIndex, previousSelected.index + 1),\n          scroll: true\n        }));\n        break;\n      case \"Escape\":\n        break;\n      case \"Enter\":\n        if (selectedResult) {\n          navigateTo(selectedResult.url);\n        }\n        break;\n      default:\n        event.stopPropagation();\n    }\n  };\n  const showNoResults = results.length === 0 && deferredQuery.length > 1 && status !== \"loading\";\n  const showDivider = Boolean((deferredQuery.length > 0 && results.length > 0 || showNoResults) && status !== \"loading\" && props.inputOptions && props.inputOptions.dividerType !== \"none\");\n  const isItemContained = Boolean(props.resultOptions && props.resultOptions.itemType === \"contained\");\n  const spacing = isItemContained ? theme.spacing : 10;\n  const listPaddingTop = showDivider && isItemContained ? spacing + theme.gapBetweenResults * 2 : 0;\n  useEffect(() => {\n    if (!selected.scroll) return;\n    const element = selectedResultRow.current;\n    if (!element) return;\n    scrollIntoView(element, scrollView.current, {\n      offsetTop: showDivider && isItemContained ? listPaddingTop : 0,\n      offsetBottom: isItemContained ? spacing : 0\n    }); // `showDivider` and `isItemContained` are not dependencies because\n    // they will be the latest values when `selected` changes. And including\n    // them will cause unnecessary scrolling into view.\n  }, [selected]);\n  return /*#__PURE__*/_jsxs(LayoutContainer, {\n    layoutType: layoutType,\n    modalOptions: modalOptions,\n    theme: theme,\n    onKeyDown: handleKeyDown,\n    onDismiss: onDismiss,\n    children: [/*#__PURE__*/_jsxs(ModalContainer, {\n      layoutType: layoutType,\n      theme: theme,\n      heightIsStatic: modalOptions.heightIsStatic,\n      heightTransition: modalOptions.heightTransition,\n      heightDeps: [results.length, showNoResults],\n      children: [/*#__PURE__*/_jsx(Input, {\n        autofocus: true,\n        ref: input,\n        onChange: setQuery,\n        value: query,\n        theme: theme,\n        status: status,\n        iconType: inputOptions.iconOptions.iconType,\n        placeholder: inputOptions.placeholderOptions.placeholderText,\n        clearButtonType: inputOptions ? inputOptions.clearButtonType : undefined,\n        clearButtonText: inputOptions.clearButtonText\n      }), showDivider && /*#__PURE__*/_jsx(Divider, {\n        theme: theme,\n        type: inputOptions.dividerType\n      }), /*#__PURE__*/_jsx(ScrollView, {\n        ref: scrollView,\n        theme: theme,\n        children: /*#__PURE__*/_jsxs(\"ul\", {\n          \"aria-live\": \"polite\",\n          style: {\n            display: \"flex\",\n            flexDirection: \"column\",\n            width: `calc(100% - ${theme.scrollBarWidth}px)`,\n            padding: 0,\n            paddingTop: listPaddingTop,\n            paddingBottom: results.length && isItemContained ? spacing : 0,\n            gap: theme.gapBetweenResults,\n            margin: 0\n          },\n          children: [results.map((result, index) => {\n            const isSelected = index === selected.index;\n            return /*#__PURE__*/_jsx(ResultRow, {\n              ref: isSelected ? selectedResultRow : null,\n              index: index,\n              result: result,\n              prevMousePositionRef: prevMousePositionRef,\n              selected: !isKeyboardNavigationDisabled && isSelected,\n              type: props.resultOptions.itemType,\n              subtitleType: props.resultOptions.subtitleOptions.subtitleType,\n              theme: theme,\n              localeSlug: localeSlug,\n              onMouseMove: handleResultRowMouseMove,\n              onPointerDown: handleResultRowPointerDown,\n              onNavigateTo: navigateTo\n            }, result.url);\n          }), showNoResults && /*#__PURE__*/_jsx(\"li\", {\n            style: {\n              paddingTop: verticalSpacing - listPaddingTop,\n              paddingBottom: verticalSpacing,\n              lineHeight: \"2em\",\n              paddingLeft: theme && theme.horizontalSpacing,\n              paddingRight: theme && theme.horizontalSpacing,\n              height: \"Sidebar\" ? \"100%\" : \"auto\"\n            },\n            children: /*#__PURE__*/_jsx(\"h3\", {\n              style: {\n                ...resultTitle,\n                textAlign: \"center\",\n                lineHeight: `calc(${theme.inputFontSize} * 2)`,\n                color: theme.subtitleColor,\n                ...theme.titleFont\n              },\n              children: \"No results\"\n            })\n          })]\n        })\n      })]\n    }), /*#__PURE__*/_jsx(StatusMessage, {\n      status: status,\n      layoutType: layoutType,\n      theme: theme\n    })]\n  });\n}\nexport const __FramerMetadata__ = {\n  \"exports\": {\n    \"SearchInputClearButtonType\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchInputDividerType\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchProps\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchTheme\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchLayoutType\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchResultItemType\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchModal\": {\n      \"type\": \"reactComponent\",\n      \"name\": \"SearchModal\",\n      \"slots\": [],\n      \"annotations\": {\n        \"framerSupportedLayoutWidth\": \"fixed\",\n        \"framerSupportedLayoutHeight\": \"fixed\",\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchIconType\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchResultTitleType\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchEntryType\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchResultSubtitleType\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"Input\": {\n      \"type\": \"variable\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"ResultRow\": {\n      \"type\": \"variable\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"__FramerMetadata__\": {\n      \"type\": \"variable\"\n    }\n  }\n};\n//# sourceMappingURL=./SearchModal.map", "import { useEffect, useState } from \"react\";\nfunction getViewportSize() {\n  if (typeof window === \"undefined\") {\n    return {\n      width: 0,\n      height: 0\n    };\n  }\n  return {\n    width: window.innerWidth,\n    height: window.innerHeight\n  };\n}\nexport function useViewportSizeState(getState) {\n  const [state, setState] = useState(() => getState(getViewportSize()));\n  useEffect(() => {\n    const handleWindowResize = () => setState(getState(getViewportSize()));\n    window.addEventListener(\"resize\", handleWindowResize);\n    return () => {\n      window.removeEventListener(\"resize\", handleWindowResize);\n    };\n  }, []);\n  return state;\n}\nexport const __FramerMetadata__ = {\n  \"exports\": {\n    \"useViewportSizeState\": {\n      \"type\": \"function\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"__FramerMetadata__\": {\n      \"type\": \"variable\"\n    }\n  }\n};\n//# sourceMappingURL=./useViewportSizeState.map", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { createPortal } from \"react-dom\";\nimport { useRef, useState, useEffect, forwardRef } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { SearchIcon } from \"https://framerusercontent.com/modules/LV9trClbmNwd5PVj9l8y/L4rFqMGNzGSwRZpGTGF3/Icons.js\";\nimport { addPropertyControls, ControlType, RenderTarget, withCSS } from \"framer\";\nimport { SearchModal, SearchResultItemType, SearchResultTitleType, SearchResultSubtitleType, SearchInputDividerType, SearchInputClearButtonType, SearchLayoutType, SearchIconType } from \"https://framerusercontent.com/modules/tV9haTHllpHHc9Fjue2H/QejHL5hPQ9rrl5Yt1GTZ/SearchModal.js\";\nimport { useViewportSizeState } from \"https://framerusercontent.com/modules/hqEf5wXaAewP8VPuaZ98/5A0QGVeEr2cwheQpIuEG/useViewportSizeState.js\";\nimport { titleCase, DEFAULT_FONT_FAMILY, isEmptyObject, animationKeyFromLayout, checkIfOverLimit } from \"https://framerusercontent.com/modules/MWsEnYfRnoOQq31DN4ql/UyHGCSLuZlZBvIaCnOlc/utils.js\";\nimport { Browser } from \"https://framerusercontent.com/modules/PJVBcBLmDteTEAZh3J9Z/keXJyjyE9VnzUcDMayjg/browser.js\";\nvar EntryPointOptions; // SITE SEARCH\n// By Anthony and Hunter\n(function (EntryPointOptions) {\n  EntryPointOptions[\"icon\"] = \"Icon\";\n  EntryPointOptions[\"input\"] = \"Input\";\n})(EntryPointOptions || (EntryPointOptions = {}));\nfunction buildShadow(shadowProperty, fallback = \"none\") {\n  if (!shadowProperty) return fallback;\n  const {\n    x,\n    y,\n    blur,\n    color,\n    spread\n  } = shadowProperty;\n  return `${x}px ${y}px ${blur}px ${spread}px ${color}`;\n}\nconst Overlay = /*#__PURE__*/forwardRef(function Overlay(props, ref) {\n  const {\n    layoutType,\n    theme,\n    onDismiss\n  } = props;\n  useEffect(() => {\n    const handleKeyDown = event => {\n      if (event.code === \"Escape\") {\n        event.stopPropagation();\n        onDismiss();\n      }\n    };\n    const handlePointerDown = event => {\n      if (event.pointerType !== \"touch\") return;\n      const isWithinSearchHeader = Boolean(event.target instanceof Element && event.target.closest(\"[role=search]\"));\n      if (isWithinSearchHeader) return;\n      if (document.activeElement instanceof HTMLInputElement) {\n        document.activeElement.blur();\n      }\n    }; // Event listener added to window so that pressing escape key to dimiss\n    // can be invoked from anywhere on the page.\n    window.addEventListener(\"keydown\", handleKeyDown);\n    window.addEventListener(\"pointerdown\", handlePointerDown, {\n      capture: true\n    }); // Disable page scrolling when overlay is shown.\n    document.body.classList.add(bodyOverflowHidden);\n    return () => {\n      window.removeEventListener(\"keydown\", handleKeyDown);\n      window.removeEventListener(\"pointerdown\", handlePointerDown, {\n        capture: true\n      });\n      document.body.classList.remove(bodyOverflowHidden);\n    };\n  }, []);\n  return /*#__PURE__*/createPortal( /*#__PURE__*/_jsxs(\"div\", {\n    ref: ref,\n    className: \"__framer-search-modal-container\",\n    role: \"presentation\",\n    style: {\n      ...backdropStyles,\n      zIndex: props.backdropOptions.zIndex,\n      justifyContent: layoutType === SearchLayoutType.Sidebar ? \"flex-start\" : \"center\"\n    },\n    onClick: onDismiss,\n    children: [/*#__PURE__*/_jsx(motion.div, {\n      role: \"presentation\",\n      initial: {\n        opacity: 0\n      },\n      animate: {\n        opacity: 1\n      },\n      exit: {\n        opacity: 0,\n        transition: {\n          duration: 0\n        }\n      },\n      transition: theme.overlayTransition,\n      style: {\n        top: 0,\n        left: 0,\n        right: 0,\n        bottom: 0,\n        width: \"100%\",\n        height: \"100%\",\n        boxSizing: \"border-box\",\n        position: \"absolute\",\n        touchAction: \"none\",\n        backgroundColor: props.backdropOptions.backgroundColor\n      }\n    }), /*#__PURE__*/_jsx(SearchModal, {\n      urlScope: props.urlScope,\n      layoutType: layoutType,\n      inputOptions: props.inputOptions,\n      resultOptions: props.resultOptions,\n      modalOptions: props.modalOptions,\n      backdropOptions: props.backdropOptions,\n      theme: props.theme,\n      onDismiss: onDismiss\n    })]\n  }), document.body);\n});\nconst backdropStyles = {\n  width: \"100%\",\n  boxSizing: \"border-box\",\n  willChange: \"transform\",\n  position: \"fixed\",\n  display: \"flex\",\n  alignItems: \"flex-start\",\n  top: 0,\n  left: 0,\n  right: 0,\n  bottom: 0\n};\nconst containerStyle = {\n  height: \"100%\",\n  display: \"flex\",\n  borderRadius: 10,\n  cursor: \"inherit\",\n  overflow: \"hidden\"\n};\nconst bodyOverflowHidden = \"__framer-overflow-hidden\"; /**\n                                                       *\n                                                       * SEARCH\n                                                       * By Anthony and Hunter\n                                                       *\n                                                       * @framerSupportedLayoutWidth any-prefer-fixed\n                                                       * @framerSupportedLayoutHeight any-prefer-fixed\n                                                       *\n                                                       * @framerDisableUnlink\n                                                       *\n                                                       * @framerIntrinsicWidth 40\n                                                       * @framerIntrinsicHeight 40\n                                                       */\nconst EntryPoint = withCSS(function EntryPoint(props) {\n  var _props_inputOptions_inputFont, _props_inputOptions, _props_resultOptions, _props_resultOptions_subtitleOptions, _props_inputOptions1;\n  const overlay = useRef(null);\n  const [isOpen, setIsOpen] = useState(false);\n  const [isOverLimit, setIsOverLimit] = useState(false);\n  const [isSafariTouchDevice, setIsSafariTouchDevice] = useState(false);\n  const [isOnCanvas] = useState(() => RenderTarget.current() === RenderTarget.canvas);\n  useEffect(() => {\n    setIsOverLimit(checkIfOverLimit());\n    setIsSafariTouchDevice(Browser.isSafari() && Browser.isTouch());\n  }, []);\n  const baseInputFontSize = ((_props_inputOptions = props.inputOptions) === null || _props_inputOptions === void 0 ? void 0 : (_props_inputOptions_inputFont = _props_inputOptions.inputFont) === null || _props_inputOptions_inputFont === void 0 ? void 0 : _props_inputOptions_inputFont.fontSize) ? props.inputOptions.inputFont.fontSize : \"16px\"; // The font size is set to a minimum of `16px` on Safari with touch screens\n  // because otherwise Safari will zoom in slightly if the type size is smaller.\n  const inputFontSize = isSafariTouchDevice ? `max(16px, ${baseInputFontSize})` : baseInputFontSize;\n  const layoutType = useViewportSizeState(size => {\n    if (size.width < props.modalOptions.width + 10) {\n      return SearchLayoutType.FixedTop;\n    } // @ts-ignore \u2013 Fallback\n    return props.modalOptions.layoutType || props.layoutType;\n  });\n  const theme = {\n    subtitleColor: props.resultOptions.subtitleOptions.subtitleColor,\n    backgroundColor: props.modalOptions.backgroundColor,\n    foregroundColor: props.resultOptions.titleColor,\n    placeholderColor: props.inputOptions.placeholderOptions.placeholderColor,\n    titleFont: ((_props_resultOptions = props.resultOptions) === null || _props_resultOptions === void 0 ? void 0 : _props_resultOptions.titleFont) && !isEmptyObject(props.resultOptions.titleFont) ? props.resultOptions.titleFont : {\n      fontSize: 14,\n      fontFamily: DEFAULT_FONT_FAMILY,\n      fontWeight: 500\n    },\n    subtitleFont: ((_props_resultOptions_subtitleOptions = props.resultOptions.subtitleOptions) === null || _props_resultOptions_subtitleOptions === void 0 ? void 0 : _props_resultOptions_subtitleOptions.subtitleFont) && !isEmptyObject(props.resultOptions.subtitleOptions.subtitleFont) ? props.resultOptions.subtitleOptions.subtitleFont : {\n      fontSize: 12,\n      fontFamily: DEFAULT_FONT_FAMILY,\n      fontWeight: 500\n    },\n    inputFont: ((_props_inputOptions1 = props.inputOptions) === null || _props_inputOptions1 === void 0 ? void 0 : _props_inputOptions1.inputFont) && !isEmptyObject(props.inputOptions.inputFont) ? props.inputOptions.inputFont : {\n      fontSize: 16,\n      fontFamily: DEFAULT_FONT_FAMILY,\n      fontWeight: 500\n    },\n    // Keep separate so we can more easily override\n    inputFontSize: inputFontSize,\n    width: props.modalOptions.width,\n    offsetTop: props.modalOptions.top,\n    borderRadius: props.modalOptions.borderRadius,\n    shadow: buildShadow(props.modalOptions.shadow),\n    entryIconColor: props.iconColor,\n    entryIconSize: props.iconSize,\n    entryIconImage: props.iconImage,\n    inputIconSize: props.inputOptions.iconOptions.iconSize,\n    inputIconColor: props.inputOptions.iconOptions.iconColor,\n    inputIconImage: props.inputOptions.iconOptions.iconImage,\n    gapBetweenStatusAndSearch: 16,\n    gapBetweenResults: 1,\n    scrollBarWidth: 20,\n    margin: 10,\n    spacing: 8,\n    zIndex: props.backdropOptions.zIndex,\n    horizontalSpacing: 20,\n    overlayTransition: props.backdropOptions.transition\n  };\n  const handleClick = event => {\n    // Both need to keep `autofocus` working on the search input.\n    event.preventDefault();\n    event.stopPropagation();\n    if (isOverLimit) return;\n    setIsOpen(true);\n  };\n  return /*#__PURE__*/_jsxs(\"div\", {\n    style: {\n      ...containerStyle,\n      ...props.style,\n      pointerEvents: isOverLimit ? \"none\" : \"auto\",\n      opacity: isOverLimit ? .4 : 1\n    },\n    children: [/*#__PURE__*/_jsx(\"button\", {\n      \"aria-label\": \"Search Icon\",\n      style: {\n        width: \"100%\",\n        height: \"100%\",\n        display: \"flex\",\n        alignItems: \"center\",\n        justifyContent: \"center\",\n        background: \"none\",\n        cursor: \"inherit\",\n        color: \"inherit\",\n        border: \"none\",\n        outline: \"inherit\",\n        padding: 0\n      },\n      onClick: handleClick,\n      children: props.iconType === SearchIconType.Custom && theme.entryIconImage ? /*#__PURE__*/_jsx(\"img\", {\n        alt: \"icon entry point for Site Search\",\n        src: theme.entryIconImage.src,\n        width: theme.entryIconSize,\n        height: theme.entryIconSize\n      }) : /*#__PURE__*/_jsx(SearchIcon, {\n        color: theme.entryIconColor,\n        width: theme.entryIconSize,\n        height: theme.entryIconSize\n      })\n    }), /*#__PURE__*/_jsx(AnimatePresence, {\n      children: isOpen && !isOnCanvas && /*#__PURE__*/_jsx(Overlay, {\n        ref: overlay,\n        layoutType: layoutType,\n        urlScope: props.urlScope,\n        inputOptions: props.inputOptions,\n        resultOptions: props.resultOptions,\n        backdropOptions: props.backdropOptions,\n        modalOptions: props.modalOptions,\n        theme: theme,\n        onDismiss: () => setIsOpen(false)\n      })\n    })]\n  });\n}, [\n// Prevent scrolling on iOS Safari when Input is focused.\n// From: https://gist.github.com/kiding/72721a0553fa93198ae2bb6eefaa3299\n`\n        @keyframes __framer-blink-input {\n            0% { opacity: 0; }\n            100% { opacity: 1; }\n        }\n\n        .__framer-search-modal-container input:focus {\n            animation: __framer-blink-input 0.01s;\n        }\n        `,\n// Allow styling of input placeholder\n`\n         .__framer-search-modal-container input::placeholder, \n         .__framer-search-modal-container input::-webkit-input-placeholder { \n            color: var(--framer-search-placeholder-color, #999999);\n            opacity: 1;\n        }\n        `,\n// Allow fallback to 100vh when dvh unit is not supported.\n`\n        .__framer-search-modal-container {\n            height: 100vh;\n            height: 100dvh;\n        }\n        .__framer-search-modal-container .__framer-max-height-80dvh {\n            max-height: 80vh;\n            max-height: 80dvh;\n        }\n        `, `\n        body.${bodyOverflowHidden} {\n            overflow: hidden;\n        }`,\n// Increase hit target\n`\n        button.__framer-search-clear-button {\n            position: relative;\n        }\n        button.__framer-search-clear-button::after {\n            content: \"\";\n            position: absolute;\n            top: -10px;\n            right: -10px;\n            bottom: -10px;\n            left: -10px;\n        }`]);\nexport default EntryPoint;\naddPropertyControls(EntryPoint, {\n  urlScope: {\n    title: \"Scope\",\n    // @ts-ignore - Internal\n    type: ControlType.PageScope\n  },\n  // entryType: {\n  //     title: \"Type\",\n  //     type: ControlType.Enum,\n  //     options: Object.values(SearchEntryType),\n  //     optionTitles: Object.values(SearchEntryType).map(titleCase),\n  //     displaySegmentedControl: true,\n  // },\n  iconType: {\n    title: \"Icon\",\n    type: ControlType.Enum,\n    options: Object.values(SearchIconType),\n    optionTitles: Object.values(SearchIconType).map(titleCase),\n    displaySegmentedControl: true\n  },\n  iconColor: {\n    title: \"Color\",\n    type: ControlType.Color,\n    defaultValue: \"#333\",\n    hidden: props => props.iconType === SearchIconType.Custom\n  },\n  iconImage: {\n    title: \"File\",\n    type: ControlType.ResponsiveImage,\n    allowedFileTypes: [\"jpg\", \"png\", \"svg\"],\n    hidden: props => props.iconType === SearchIconType.Default\n  },\n  iconSize: {\n    title: \"Size\",\n    type: ControlType.Number,\n    displayStepper: true,\n    defaultValue: 24\n  },\n  inputOptions: {\n    title: \"Input\",\n    type: ControlType.Object,\n    buttonTitle: \"Icon, Styles\",\n    controls: {\n      iconOptions: {\n        title: \"Icon\",\n        type: ControlType.Object,\n        buttonTitle: \"Color, Size\",\n        controls: {\n          iconType: {\n            title: \"Icon\",\n            type: ControlType.Enum,\n            options: Object.values(SearchIconType),\n            optionTitles: Object.values(SearchIconType).map(titleCase),\n            displaySegmentedControl: true\n          },\n          iconColor: {\n            title: \"Color\",\n            type: ControlType.Color,\n            defaultValue: \"rgba(0, 0, 0, 0.45)\",\n            hidden: ({\n              iconType\n            }) => {\n              return iconType === SearchIconType.Custom;\n            }\n          },\n          iconImage: {\n            title: \"File\",\n            type: ControlType.ResponsiveImage,\n            allowedFileTypes: [\"jpg\", \"png\", \"svg\"],\n            hidden: ({\n              iconType\n            }) => iconType === SearchIconType.Default\n          },\n          iconSize: {\n            title: \"Icon Size\",\n            type: ControlType.Number,\n            displayStepper: true,\n            defaultValue: 18,\n            min: 0,\n            max: 100\n          }\n        }\n      },\n      inputFont: {\n        title: \"Font\",\n        // @ts-ignore \u2013\u00A0Internal\n        type: ControlType.Font,\n        displayFontSize: true\n      },\n      textColor: {\n        title: \"Color\",\n        type: ControlType.Color,\n        defaultValue: \"#333\"\n      },\n      placeholderOptions: {\n        title: \"Placeholder\",\n        type: ControlType.Object,\n        buttonTitle: \"Color, Text\",\n        controls: {\n          placeholderText: {\n            title: \"Text\",\n            type: ControlType.String,\n            defaultValue: \"Search...\"\n          },\n          placeholderColor: {\n            title: \"Color\",\n            type: ControlType.Color,\n            defaultValue: \"rgba(0,0,0,0.4)\"\n          }\n        }\n      },\n      dividerType: {\n        title: \"Divider\",\n        type: ControlType.Enum,\n        options: Object.values(SearchInputDividerType),\n        optionTitles: Object.keys(SearchInputDividerType).map(titleCase),\n        defaultValue: SearchInputDividerType.FullWidth\n      },\n      clearButtonType: {\n        title: \"Clear Type\",\n        type: ControlType.Enum,\n        options: Object.values(SearchInputClearButtonType),\n        optionTitles: Object.keys(SearchInputClearButtonType).map(titleCase),\n        defaultValue: SearchInputClearButtonType.Icon\n      },\n      clearButtonText: {\n        title: \"Clear Text\",\n        type: ControlType.String,\n        defaultValue: \"Clear\",\n        hidden: props => props.clearButtonType !== SearchInputClearButtonType.Text\n      }\n    }\n  },\n  modalOptions: {\n    title: \"Modal\",\n    buttonTitle: \"Layout, Width\",\n    type: ControlType.Object,\n    controls: {\n      layoutType: {\n        title: \"Layout\",\n        type: ControlType.Enum,\n        options: Object.keys(SearchLayoutType),\n        optionTitles: Object.values(SearchLayoutType).map(titleCase),\n        defaultValue: SearchLayoutType.QuickMenu\n      },\n      width: {\n        title: \"Width\",\n        type: ControlType.Number,\n        defaultValue: 500,\n        min: 200,\n        max: 1e3,\n        displayStepper: true,\n        step: 5,\n        hidden: props => props.layoutType === SearchLayoutType.FixedTop\n      },\n      top: {\n        title: \"Top\",\n        type: ControlType.Number,\n        defaultValue: 0,\n        min: 0,\n        max: 1e3,\n        displayStepper: true,\n        hidden: props => props.layoutType !== SearchLayoutType.FixedTop\n      },\n      heightIsStatic: {\n        title: \"Height\",\n        type: ControlType.Boolean,\n        enabledTitle: \"Instant\",\n        disabledTitle: \"Animate\",\n        hidden: ({\n          layoutType\n        }) => layoutType !== SearchLayoutType.QuickMenu\n      },\n      heightTransition: {\n        title: \"Type\",\n        type: ControlType.Transition,\n        defaultValue: {\n          type: \"spring\",\n          stiffness: 800,\n          damping: 60\n        },\n        hidden: ({\n          heightIsStatic,\n          layoutType\n        }) => layoutType !== SearchLayoutType.QuickMenu || heightIsStatic\n      },\n      borderRadius: {\n        title: \"Radius\",\n        type: ControlType.Number,\n        defaultValue: 16,\n        displayStepper: true,\n        min: 0,\n        hidden: ({\n          layoutType\n        }) => layoutType !== SearchLayoutType.QuickMenu\n      },\n      shadow: {\n        buttonTitle: \"Options\",\n        type: ControlType.Object,\n        defaultValue: {\n          x: 0,\n          y: 20,\n          blur: 40,\n          spread: 0,\n          color: \"rgba(0,0,0,0.2)\"\n        },\n        controls: {\n          color: {\n            type: ControlType.Color,\n            defaultValue: \"rgba(0,0,0,0.2)\"\n          },\n          x: {\n            type: ControlType.Number,\n            defaultValue: 0\n          },\n          y: {\n            type: ControlType.Number,\n            defaultValue: 20\n          },\n          blur: {\n            type: ControlType.Number,\n            defaultValue: 40\n          },\n          spread: {\n            type: ControlType.Number,\n            defaultValue: 0\n          }\n        }\n      },\n      backgroundColor: {\n        title: \"Background\",\n        type: ControlType.Color,\n        defaultValue: \"#FFF\"\n      },\n      [animationKeyFromLayout(SearchLayoutType.QuickMenu)]: {\n        title: \"Animation\",\n        type: ControlType.Object,\n        icon: \"effect\",\n        hidden: ({\n          layoutType\n        }) => layoutType !== SearchLayoutType.QuickMenu,\n        optional: true,\n        buttonTitle: \"Options\",\n        controls: {\n          opacity: {\n            type: ControlType.Number,\n            defaultValue: .5,\n            step: .1,\n            min: 0,\n            max: 1\n          },\n          scale: {\n            type: ControlType.Number,\n            defaultValue: .75,\n            step: .1,\n            min: 0,\n            max: 2\n          },\n          // rotate: {\n          //     type: ControlType.Number,\n          //     defaultValue: 0,\n          //     min: -360,\n          //     max: 360,\n          // },\n          x: {\n            type: ControlType.Number,\n            defaultValue: 0,\n            min: -500,\n            max: 500\n          },\n          y: {\n            type: ControlType.Number,\n            defaultValue: 0,\n            min: -500,\n            max: 500\n          },\n          transition: {\n            type: ControlType.Transition\n          }\n        }\n      },\n      [animationKeyFromLayout(SearchLayoutType.FixedTop)]: {\n        title: \"Animation\",\n        type: ControlType.Object,\n        icon: \"effect\",\n        buttonTitle: \"Options\",\n        hidden: ({\n          layoutType\n        }) => layoutType !== SearchLayoutType.FixedTop,\n        optional: true,\n        controls: {\n          opacity: {\n            type: ControlType.Number,\n            defaultValue: .8,\n            step: .1,\n            min: 0,\n            max: 1\n          },\n          y: {\n            type: ControlType.Number,\n            defaultValue: 0,\n            min: -100,\n            max: 100\n          },\n          transition: {\n            type: ControlType.Transition\n          }\n        }\n      },\n      [animationKeyFromLayout(SearchLayoutType.Sidebar)]: {\n        title: \"Animation\",\n        type: ControlType.Object,\n        icon: \"effect\",\n        buttonTitle: \"Options\",\n        hidden: ({\n          layoutType\n        }) => layoutType !== SearchLayoutType.Sidebar,\n        optional: true,\n        controls: {\n          opacity: {\n            type: ControlType.Number,\n            defaultValue: .8,\n            step: .1,\n            min: 0,\n            max: 1\n          },\n          x: {\n            type: ControlType.Number,\n            defaultValue: 0,\n            min: -1e3,\n            max: 1e3\n          },\n          transition: {\n            type: ControlType.Transition\n          }\n        }\n      }\n    }\n  },\n  resultOptions: {\n    title: \"Results\",\n    buttonTitle: \"Fonts, Style\",\n    type: ControlType.Object,\n    defaultValue: {},\n    // description:\n    //     \"Learn more about how to use Site Search [here](https://framer.com/learn/site-search)\",\n    controls: {\n      itemType: {\n        title: \"Style\",\n        type: ControlType.Enum,\n        options: Object.values(SearchResultItemType),\n        optionTitles: Object.keys(SearchResultItemType).map(titleCase),\n        defaultValue: SearchResultItemType.FullWidth\n      },\n      titleFont: {\n        title: \"Title\",\n        // @ts-ignore - Internal\n        type: ControlType.Font,\n        defaultValue: {\n          fontSize: 15\n        },\n        displayFontSize: true\n      },\n      titleColor: {\n        title: \"Color\",\n        type: ControlType.Color,\n        defaultValue: \"#333\"\n      },\n      titleType: {\n        title: \"Content\",\n        type: ControlType.Enum,\n        options: Object.values(SearchResultTitleType),\n        optionTitles: Object.keys(SearchResultTitleType).map(titleCase),\n        defaultValue: SearchResultTitleType.H1,\n        displaySegmentedControl: true\n      },\n      subtitleOptions: {\n        type: ControlType.Object,\n        title: \"Subtitle\",\n        buttonTitle: \"Font, Content\",\n        controls: {\n          subtitleFont: {\n            title: \"Font\",\n            // @ts-ignore - Internal\n            type: ControlType.Font,\n            defaultValue: {\n              fontSize: 13\n            },\n            displayFontSize: true\n          },\n          subtitleColor: {\n            title: \"Color\",\n            type: ControlType.Color,\n            defaultValue: \"rgba(0, 0, 0, 0.4)\"\n          },\n          subtitleType: {\n            title: \"Content\",\n            type: ControlType.Enum,\n            options: Object.values(SearchResultSubtitleType),\n            optionTitles: Object.keys(SearchResultSubtitleType).map(titleCase),\n            defaultValue: SearchResultSubtitleType.Path\n          }\n        }\n      }\n    }\n  },\n  backdropOptions: {\n    title: \"Backdrop\",\n    type: ControlType.Object,\n    buttonTitle: \"Color, Z Index\",\n    controls: {\n      backgroundColor: {\n        title: \"Color\",\n        type: ControlType.Color,\n        defaultValue: \"rgba(0, 0, 0, 0.8)\"\n      },\n      zIndex: {\n        title: \"Z Index\",\n        type: ControlType.Number,\n        defaultValue: 10,\n        displayStepper: true,\n        min: 0,\n        max: 10\n      },\n      transition: {\n        type: ControlType.Transition\n      }\n    }\n  }\n});\nEntryPoint.displayName = \"Search\";\nexport const __FramerMetadata__ = {\n  \"exports\": {\n    \"ResponsiveImage\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"WindowAnimation\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"EntryPointProps\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"Shadow\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"default\": {\n      \"type\": \"reactComponent\",\n      \"name\": \"EntryPoint\",\n      \"slots\": [],\n      \"annotations\": {\n        \"framerContractVersion\": \"1\",\n        \"framerSupportedLayoutWidth\": \"any-prefer-fixed\",\n        \"framerIntrinsicHeight\": \"40\",\n        \"framerIntrinsicWidth\": \"40\",\n        \"framerDisableUnlink\": \"*\",\n        \"framerSupportedLayoutHeight\": \"any-prefer-fixed\"\n      }\n    },\n    \"__FramerMetadata__\": {\n      \"type\": \"variable\"\n    }\n  }\n};\n//# sourceMappingURL=./Search.map", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useCallback, useState } from \"react\";\nimport { addPropertyControls, ControlType, withCSS, useRouter, inferInitialRouteFromPath } from \"framer\";\nimport { motion, useAnimationControls } from \"framer-motion\";\nconst emailRegex = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nconst mailchimpRegex = /^https?:\\/\\/([^\\/]+)[^\\?]+\\??(.+)$/;\nconst validateEmail = email => {\n  return emailRegex.test(String(email).toLowerCase());\n};\nconst parseMailChimpUrl = url => {\n  var _url_replace_match;\n  const [, domain, parameters] = (_url_replace_match = url.replace(\"&amp;\", \"&\").match(mailchimpRegex)) !== null && _url_replace_match !== void 0 ? _url_replace_match : [null, null, null];\n  return [domain, parameters ? new URLSearchParams(parameters) : null];\n};\nfunction safeURL(url) {\n  console.log(url);\n  try {\n    new URL(url);\n    return url;\n  } catch {\n    try {\n      new URL(`https://${url}`);\n      return `https://${url}`;\n    } catch {}\n  }\n  return undefined;\n}\nfunction isInternalURL(href) {\n  if (href === undefined) return false;\n  if (href.startsWith(\"#\") || href.startsWith(\"/\") || href.startsWith(\".\")) return true;\n  return false;\n} /**\n  * Increment the number whenever shipping a new version to customers.\n  * This will ensure that multiple versions of this component can exist\n  * in the same project without css rules overlapping. Only use valid css class characters.\n  */\nconst VERSION = \"v1\"; /**\n                      * INPUT\n                      * By Benjamin den Boer\n                      *\n                      * @framerDisableUnlink\n                      *\n                      * @framerIntrinsicWidth 300\n                      * @framerIntrinsicHeight 40\n                      *\n                      * @framerSupportedLayoutWidth fixed\n                      * @framerSupportedLayoutHeight any\n                      */\nconst Input = withCSS(function Input({\n  service,\n  redirectAs,\n  mailchimpURL,\n  loopsID,\n  loopsUserGroup,\n  formsparkID,\n  getwaitlistAPI,\n  input,\n  button,\n  font,\n  layout,\n  link,\n  gap,\n  style,\n  onSubmit\n}) {\n  const [email, setEmail] = useState(\"\");\n  const [isError, setError] = useState(false);\n  const [isLoading, setLoading] = useState(false);\n  const [isFocus, setFocus] = useState(false); // Padding\n  const {\n    paddingPerSide,\n    paddingTop,\n    paddingRight,\n    paddingBottom,\n    paddingLeft,\n    padding,\n    borderRadius,\n    borderObject,\n    focusObject,\n    shadowObject,\n    height,\n    fixedHeight\n  } = input;\n  const {\n    buttonPaddingPerSide,\n    buttonPaddingTop,\n    buttonPaddingRight,\n    buttonPaddingBottom,\n    buttonPaddingLeft,\n    buttonPadding\n  } = button;\n  const paddingValue = paddingPerSide ? `${paddingTop}px ${button.isDocked ? paddingRight + button.widthWhenDocked : paddingRight}px ${paddingBottom}px ${paddingLeft}px` : `${padding}px ${button.isDocked ? padding + button.widthWhenDocked : padding}px ${padding}px ${padding}px`;\n  const buttonPaddingValue = buttonPaddingPerSide ? `${button.isDocked ? 0 : buttonPaddingTop}px ${buttonPaddingRight}px ${button.isDocked ? 0 : buttonPaddingBottom}px ${buttonPaddingLeft}px` : `${button.isDocked ? 0 : buttonPadding}px ${buttonPadding}px ${button.isDocked ? 0 : buttonPadding}px ${buttonPadding}px`;\n  const router = useRouter();\n  const onSuccess = () => {\n    /* Reset */setLoading(false);\n    setFocus(false);\n    setEmail(\"\");\n    if (redirectAs === \"link\" && link && !isError) {\n      const [path, hash] = link.split(\"#\");\n      const {\n        routeId,\n        pathVariables\n      } = inferInitialRouteFromPath(router.routes, path);\n      if (routeId) {\n        router.navigate(routeId, hash, pathVariables);\n      }\n      if (!isInternalURL(link)) {\n        const url = safeURL(link);\n        if (url) window.open(url, \"_blank\");\n      }\n    }\n  };\n  const validateForm = useCallback(email => {\n    if (email === \"\" || !validateEmail(email)) {\n      setError(true);\n      formControls.start(\"error\");\n      return false;\n    }\n    return true;\n  }, [validateEmail]);\n  const handleChange = useCallback(event => {\n    setError(false);\n    setEmail(event.target.value);\n  }, []);\n  const handleFocus = useCallback(event => {\n    setFocus(true);\n  }, []);\n  const handleBlur = useCallback(event => {\n    setFocus(false);\n    setError(false);\n  }, []);\n  const handleSubmit = useCallback(event => {\n    event.preventDefault(); // Prevent submitting while submitting\n    if (isLoading) return;\n    setLoading(true);\n    if (service === \"mailchimp\") {\n      const [domain, parameters] = parseMailChimpUrl(mailchimpURL);\n      if (!validateForm(email) || !domain || !parameters) {\n        setLoading(false);\n        return;\n      } // MERGE0 is Mailchimp\u2019s email field name\n      parameters.set(\"MERGE0\", email);\n      fetch(`https://${domain}/subscribe/post`, {\n        method: \"POST\",\n        mode: \"no-cors\",\n        headers: {\n          \"Content-Type\": \"application/x-www-form-urlencoded;charset=UTF-8\"\n        },\n        body: parameters.toString()\n      }).then(response => {\n        onSuccess();\n        if (redirectAs === \"overlay\") onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit();\n      }).catch(error => {\n        console.error(error);\n        setLoading(false);\n        setError(true);\n        formControls.start(\"error\");\n      });\n    }\n    if (service === \"loops\") {\n      if (!validateForm(email)) {\n        setLoading(false);\n        return;\n      }\n      const emailBody = `email=${encodeURIComponent(email)}`;\n      const userGroupBody = `userGroup=${encodeURIComponent(loopsUserGroup)}`;\n      const hasUserGroup = !!loopsUserGroup && loopsUserGroup !== \" \";\n      const formBody = hasUserGroup ? emailBody + \"&\" + userGroupBody : emailBody;\n      fetch(`https://app.loops.so/api/newsletter-form/${loopsID}`, {\n        method: \"POST\",\n        mode: \"no-cors\",\n        headers: {\n          \"Content-Type\": \"application/x-www-form-urlencoded\"\n        },\n        body: formBody\n      }).then(() => {\n        onSuccess();\n        if (redirectAs === \"overlay\") onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit();\n      }).catch(error => {\n        console.error(error);\n        setLoading(false);\n        setError(true);\n        formControls.start(\"error\");\n      });\n    }\n    if (service === \"formspark\") {\n      if (!validateForm(email)) {\n        setLoading(false);\n        return;\n      }\n      const data = new FormData(event.target);\n      const entries = Object.fromEntries(data.entries());\n      fetch(`https://submit-form.com/${formsparkID}`, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Accept: \"application/json\"\n        },\n        body: JSON.stringify(entries)\n      }).then(() => {\n        onSuccess();\n        onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit();\n      }).catch(error => {\n        console.error(error);\n        setLoading(false);\n        setError(true);\n        formControls.start(\"error\");\n      });\n    }\n    if (service === \"getwaitlist\") {\n      if (!validateForm(email)) {\n        setLoading(false);\n        return;\n      }\n      const formData = new FormData(event.target);\n      const data = Object.fromEntries(formData.entries());\n      data.referral_link = document.URL;\n      fetch(`https://api.getwaitlist.com/api/v1\n/waiter/`, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Accept: \"application/json\"\n        },\n        body: JSON.stringify(data)\n      }).then(() => {\n        onSuccess();\n        if (redirectAs === \"overlay\") onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit();\n      }).catch(error => {\n        console.error(error);\n        setLoading(false);\n        setError(true);\n        formControls.start(\"error\");\n      });\n    }\n  }, [mailchimpURL, formsparkID, email, onSubmit, validateForm, isLoading]); // Animation\n  const formControls = useAnimationControls(); // Input Box Shadow Stylees\n  const focusStylesFrom = input.focusObject ? `inset 0 0 0 ${focusObject.focusWidthFrom}px ${focusObject.focusColor}` : null;\n  const focusStylesTo = input.focusObject ? `inset 0 0 0 ${focusObject.focusWidthTo}px ${focusObject.focusColor}` : null;\n  const shadowStyles = input.shadowObject ? `${shadowObject.shadowX}px ${shadowObject.shadowY}px ${shadowObject.shadowBlur}px ${shadowObject.shadowColor}` : null;\n  const borderStyles = input.borderObject ? `inset 0 0 0 ${borderObject.borderWidth}px ${borderObject.borderColor}` : null; // Shake or wiggle as error\n  const formVariants = {\n    default: {\n      x: 0\n    },\n    error: {\n      x: [0, -4, 4, 0],\n      transition: {\n        duration: .2\n      }\n    }\n  };\n  const inputVariants = {\n    default: {\n      boxShadow: dynamicBoxShadow(focusStylesFrom, shadowStyles, borderStyles)\n    },\n    focused: {\n      boxShadow: dynamicBoxShadow(focusStylesTo, shadowStyles, borderStyles)\n    }\n  };\n  return /*#__PURE__*/_jsx(motion.div, {\n    style: {\n      ...style,\n      ...containerStyles,\n      \"--framer-custom-placeholder-color\": input.placeholderColor\n    },\n    variants: formVariants,\n    animate: formControls,\n    children: /*#__PURE__*/_jsxs(\"form\", {\n      style: {\n        width: \"100%\",\n        height: \"auto\",\n        display: \"flex\",\n        position: \"relative\",\n        flexDirection: layout === \"vertical\" ? \"column\" : \"row\",\n        color: button.color,\n        gap: button.isDocked ? 0 : gap\n      },\n      onSubmit: handleSubmit,\n      method: \"POST\",\n      children: [service === \"getwaitlist\" && /*#__PURE__*/_jsx(\"input\", {\n        type: \"hidden\",\n        name: \"api_key\",\n        value: getwaitlistAPI\n      }), /*#__PURE__*/_jsx(motion.input, {\n        type: \"email\",\n        name: \"email\",\n        placeholder: input.placeholder,\n        value: email,\n        className: `${VERSION} framer-custom-input`,\n        onChange: handleChange,\n        onFocus: handleFocus,\n        onBlur: handleBlur,\n        autoComplete: \"off\",\n        autoCapitalize: \"off\",\n        autoCorrect: \"off\",\n        spellCheck: \"false\",\n        style: {\n          ...defaultStyle,\n          padding: paddingValue,\n          borderRadius,\n          fontSize: 16,\n          ...font,\n          background: input.fill,\n          height: height ? \"auto\" : fixedHeight,\n          color: input.color,\n          boxShadow: dynamicBoxShadow(focusStylesFrom, shadowStyles, borderStyles)\n        },\n        variants: inputVariants,\n        initial: false,\n        animate: isFocus ? \"focused\" : \"default\",\n        transition: {\n          duration: .3\n        },\n        \"data-1p-ignore\": true\n      }), !button.shouldAppear && isLoading && /*#__PURE__*/_jsx(Spinner, {\n        shouldAppear: button.shouldAppear,\n        paddingPerSide: paddingPerSide,\n        paddingTop: paddingTop,\n        paddingRight: paddingRight,\n        padding: padding,\n        color: input.color\n      }), button.shouldAppear && /*#__PURE__*/_jsxs(\"div\", {\n        style: {\n          position: button.isDocked ? \"absolute\" : \"relative\",\n          top: button.isDocked ? button.insetWhenDocked : 0,\n          right: button.isDocked ? button.insetWhenDocked : 0,\n          bottom: button.isDocked ? button.insetWhenDocked : 0\n        },\n        children: [/*#__PURE__*/_jsx(motion.input, {\n          type: \"submit\",\n          value: button.label,\n          style: {\n            ...defaultStyle,\n            width: button.isDocked ? button.widthWhenDocked : \"100%\",\n            height: height ? \"100%\" : fixedHeight,\n            cursor: \"pointer\",\n            padding: buttonPaddingValue,\n            borderRadius: button.isDocked ? borderRadius - button.insetWhenDocked : borderRadius,\n            // fontWeight: button.fontWeight,\n            fontSize: 16,\n            ...button.buttonFont,\n            background: button.fill,\n            color: button.color,\n            zIndex: 1,\n            boxShadow: getButtonShadow(button)\n          }\n        }), isLoading && /*#__PURE__*/_jsx(\"div\", {\n          style: {\n            borderRadius: button.isDocked ? borderRadius - button.insetWhenDocked : borderRadius,\n            position: \"absolute\",\n            display: \"flex\",\n            justifyContent: \"center\",\n            alignItems: \"center\",\n            width: \"100%\",\n            height: \"100%\",\n            inset: 0,\n            zIndex: 2,\n            color: button.color,\n            background: button.fill\n          },\n          children: /*#__PURE__*/_jsx(Spinner, {\n            color: button.color\n          })\n        })]\n      })]\n    })\n  });\n}, [`.${VERSION}.framer-custom-input::placeholder { color: var(--framer-custom-placeholder-color) !important; }`]);\nconst Spinner = props => {\n  const noButtonStyles = !props.shouldAppear ? {\n    position: \"absolute\",\n    top: `calc(50% - 8px)`,\n    right: props.paddingPerSide ? props.paddingRight : props.padding\n  } : {};\n  return /*#__PURE__*/_jsx(motion.div, {\n    style: {\n      height: 16,\n      width: 16,\n      ...noButtonStyles\n    },\n    initial: {\n      rotate: 0\n    },\n    animate: {\n      rotate: 360\n    },\n    transition: {\n      duration: 1,\n      repeat: Infinity\n    },\n    children: /*#__PURE__*/_jsx(motion.div, {\n      initial: {\n        scale: 0\n      },\n      animate: {\n        scale: 1\n      },\n      children: /*#__PURE__*/_jsxs(\"svg\", {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        width: \"16\",\n        height: \"16\",\n        style: {\n          fill: \"currentColor\",\n          color: props.color\n        },\n        children: [/*#__PURE__*/_jsx(\"path\", {\n          d: \"M 8 0 C 3.582 0 0 3.582 0 8 C 0 12.419 3.582 16 8 16 C 12.418 16 16 12.419 16 8 C 15.999 3.582 12.418 0 8 0 Z M 8 14 C 4.687 14 2 11.314 2 8 C 2 4.687 4.687 2 8 2 C 11.314 2 14 4.687 14 8 C 14 11.314 11.314 14 8 14 Z\",\n          fill: \"currentColor\",\n          opacity: \"0.2\"\n        }), /*#__PURE__*/_jsx(\"path\", {\n          d: \"M 8 0 C 12.418 0 15.999 3.582 16 8 C 16 8 16 9 15 9 C 14 9 14 8 14 8 C 14 4.687 11.314 2 8 2 C 4.687 2 2 4.687 2 8 C 2 8 2 9 1 9 C 0 9 0 8 0 8 C 0 3.582 3.582 0 8 0 Z\",\n          fill: \"currentColor\"\n        })]\n      })\n    })\n  });\n};\naddPropertyControls(Input, {\n  service: {\n    title: \"Service\",\n    type: ControlType.Enum,\n    options: [\"loops\", \"formspark\", \"mailchimp\", \"getwaitlist\"],\n    optionTitles: [\"Loops\", \"FormSpark\", \"MailChimp\", \"Get Waitlist\"],\n    defaultValue: \"loops\"\n  },\n  mailchimpURL: {\n    title: \"URL\",\n    placeholder: \"https://***.us6.list-manage.com/subscribe/post?u=***\",\n    type: ControlType.String,\n    hidden: props => props.service !== \"mailchimp\"\n  },\n  loopsID: {\n    title: \"ID\",\n    placeholder: \"klm2jxy0i98abzr01pq7defg5\",\n    type: ControlType.String,\n    hidden: props => props.service !== \"loops\"\n  },\n  loopsUserGroup: {\n    title: \"User Group\",\n    type: ControlType.String,\n    placeholder: \"Title\",\n    optional: true,\n    hidden: props => props.service !== \"loops\"\n  },\n  formsparkID: {\n    title: \"ID\",\n    placeholder: \"7PbPpGN3\",\n    type: ControlType.String,\n    hidden: props => props.service !== \"formspark\"\n  },\n  getwaitlistAPI: {\n    title: \"ID\",\n    placeholder: \"9148\",\n    type: ControlType.String,\n    hidden: props => props.service !== \"getwaitlist\"\n  },\n  redirectAs: {\n    title: \"Success\",\n    type: ControlType.Enum,\n    options: [\"link\", \"overlay\"],\n    optionTitles: [\"Open Link\", \"Show Overlay\"],\n    defaultValue: \"link\"\n  },\n  link: {\n    title: \"Redirect\",\n    type: ControlType.Link,\n    hidden: props => props.redirectAs === \"overlay\"\n  },\n  onSubmit: {\n    title: \"Submit\",\n    type: ControlType.EventHandler,\n    hidden: props => props.redirectAs === \"link\"\n  },\n  layout: {\n    title: \"Layout\",\n    type: ControlType.Enum,\n    options: [\"horizontal\", \"vertical\"],\n    displaySegmentedControl: true,\n    hidden: props => props.button.isDocked\n  },\n  font: {\n    type: ControlType.Font,\n    title: \"Font\",\n    controls: \"extended\"\n  },\n  input: {\n    title: \"Input\",\n    type: ControlType.Object,\n    controls: {\n      placeholder: {\n        title: \"Placeholder\",\n        type: ControlType.String,\n        defaultValue: \"name@email.com\"\n      },\n      placeholderColor: {\n        title: \" \",\n        type: ControlType.Color,\n        defaultValue: \"rgba(0, 0, 0, 0.3)\"\n      },\n      fill: {\n        title: \"Fill\",\n        type: ControlType.Color,\n        defaultValue: \"#EBEBEB\"\n      },\n      color: {\n        title: \"Text\",\n        type: ControlType.Color,\n        defaultValue: \"#000\"\n      },\n      height: {\n        title: \"Height\",\n        type: ControlType.Boolean,\n        enabledTitle: \"Auto\",\n        disabledTitle: \"Fixed\"\n      },\n      fixedHeight: {\n        title: \" \",\n        type: ControlType.Number,\n        displayStepper: true,\n        min: 0,\n        defaultValue: 50,\n        hidden: props => props.height\n      },\n      padding: {\n        title: \"Padding\",\n        type: ControlType.FusedNumber,\n        toggleKey: \"paddingPerSide\",\n        toggleTitles: [\"Padding\", \"Padding per side\"],\n        defaultValue: 15,\n        valueKeys: [\"paddingTop\", \"paddingRight\", \"paddingBottom\", \"paddingLeft\"],\n        valueLabels: [\"T\", \"R\", \"B\", \"L\"],\n        min: 0\n      },\n      borderRadius: {\n        title: \"Radius\",\n        type: ControlType.Number,\n        displayStepper: true,\n        min: 0,\n        defaultValue: 8\n      },\n      focusObject: {\n        type: ControlType.Object,\n        title: \"Focus\",\n        optional: true,\n        controls: {\n          focusWidthFrom: {\n            title: \"From\",\n            type: ControlType.Number,\n            displayStepper: true,\n            defaultValue: 0\n          },\n          focusWidthTo: {\n            title: \"To\",\n            type: ControlType.Number,\n            displayStepper: true,\n            defaultValue: 2\n          },\n          focusColor: {\n            title: \"Color\",\n            type: ControlType.Color,\n            defaultValue: \"#09F\"\n          }\n        }\n      },\n      borderObject: {\n        type: ControlType.Object,\n        title: \"Border\",\n        optional: true,\n        controls: {\n          borderWidth: {\n            title: \"Width\",\n            type: ControlType.Number,\n            displayStepper: true,\n            defaultValue: 1\n          },\n          borderColor: {\n            title: \"Color\",\n            type: ControlType.Color,\n            defaultValue: \"rgba(200,200,200,0.5)\"\n          }\n        }\n      },\n      shadowObject: {\n        type: ControlType.Object,\n        title: \"Shadow\",\n        optional: true,\n        controls: {\n          shadowColor: {\n            title: \"Color\",\n            type: ControlType.Color,\n            defaultValue: \"rgba(0,0,0,0.25)\"\n          },\n          shadowX: {\n            title: \"Shadow X\",\n            type: ControlType.Number,\n            min: -100,\n            max: 100,\n            defaultValue: 0\n          },\n          shadowY: {\n            title: \"Shadow Y\",\n            type: ControlType.Number,\n            min: -100,\n            max: 100,\n            defaultValue: 2\n          },\n          shadowBlur: {\n            title: \"Shadow B\",\n            type: ControlType.Number,\n            min: 0,\n            max: 100,\n            defaultValue: 4\n          }\n        }\n      }\n    }\n  },\n  button: {\n    title: \"Button\",\n    type: ControlType.Object,\n    controls: {\n      shouldAppear: {\n        title: \"Show\",\n        type: ControlType.Boolean,\n        defaultValue: true\n      },\n      label: {\n        title: \"Label\",\n        type: ControlType.String,\n        defaultValue: \"Subscribe\"\n      },\n      buttonFont: {\n        type: ControlType.Font,\n        title: \"Font\",\n        controls: \"extended\"\n      },\n      fill: {\n        title: \"Fill\",\n        type: ControlType.Color,\n        defaultValue: \"#333\"\n      },\n      color: {\n        title: \"Text\",\n        type: ControlType.Color,\n        defaultValue: \"#FFF\"\n      },\n      isDocked: {\n        title: \"Docked\",\n        type: ControlType.Boolean,\n        defaultValue: false\n      },\n      widthWhenDocked: {\n        title: \"Width\",\n        type: ControlType.Number,\n        min: 0,\n        defaultValue: 100,\n        displayStepper: true,\n        hidden: props => !props.isDocked\n      },\n      insetWhenDocked: {\n        title: \"Inset\",\n        type: ControlType.Number,\n        min: 0,\n        defaultValue: 5,\n        displayStepper: true,\n        hidden: props => !props.isDocked\n      },\n      buttonPadding: {\n        title: \"Padding\",\n        type: ControlType.FusedNumber,\n        toggleKey: \"buttonPaddingPerSide\",\n        toggleTitles: [\"Padding\", \"Padding per side\"],\n        defaultValue: 15,\n        valueKeys: [\"buttonPaddingTop\", \"buttonPaddingRight\", \"buttonPaddingBottom\", \"buttonPaddingLeft\"],\n        valueLabels: [\"T\", \"R\", \"B\", \"L\"],\n        min: 0\n      },\n      buttonShadow: {\n        type: ControlType.Object,\n        title: \"Shadow\",\n        optional: true,\n        controls: {\n          shadowColor: {\n            title: \"Color\",\n            type: ControlType.Color,\n            defaultValue: \"rgba(0,0,0,0.25)\"\n          },\n          shadowX: {\n            title: \"Shadow X\",\n            type: ControlType.Number,\n            min: -100,\n            max: 100,\n            defaultValue: 0\n          },\n          shadowY: {\n            title: \"Shadow Y\",\n            type: ControlType.Number,\n            min: -100,\n            max: 100,\n            defaultValue: 2\n          },\n          shadowBlur: {\n            title: \"Shadow B\",\n            type: ControlType.Number,\n            min: 0,\n            max: 100,\n            defaultValue: 4\n          }\n        }\n      }\n    }\n  },\n  gap: {\n    title: \"Gap\",\n    type: ControlType.Number,\n    displayStepper: true,\n    min: 0,\n    defaultValue: 10,\n    hidden: props => props.button.isDocked\n  }\n});\nconst defaultStyle = {\n  WebkitAppearance: \"none\",\n  appearance: \"none\",\n  width: \"100%\",\n  height: \"auto\",\n  outline: \"none\",\n  border: \"none\"\n};\nconst containerStyles = {\n  position: \"relative\",\n  width: \"100%\",\n  height: \"100%\",\n  display: \"flex\",\n  justifyContent: \"center\",\n  alignItems: \"center\"\n};\nfunction getButtonShadow(button) {\n  if (button.buttonShadow) {\n    return `${button.buttonShadow.shadowX}px ${button.buttonShadow.shadowY}px ${button.buttonShadow.shadowBlur}px ${button.buttonShadow.shadowColor}`;\n  } else return \"none\";\n}\nfunction dynamicBoxShadow(...shadows) {\n  const output = [];\n  shadows.forEach(shadow => shadow && output.push(shadow));\n  return output.join(\", \");\n}\nexport default Input;\nexport const __FramerMetadata__ = {\n  \"exports\": {\n    \"default\": {\n      \"type\": \"reactComponent\",\n      \"name\": \"Input\",\n      \"slots\": [],\n      \"annotations\": {\n        \"framerSupportedLayoutHeight\": \"any\",\n        \"framerIntrinsicWidth\": \"300\",\n        \"framerDisableUnlink\": \"*\",\n        \"framerSupportedLayoutWidth\": \"fixed\",\n        \"framerIntrinsicHeight\": \"40\",\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"__FramerMetadata__\": {\n      \"type\": \"variable\"\n    }\n  }\n};\n//# sourceMappingURL=./Input.map"],
  "mappings": "qTAEO,SAASA,GAAWC,EAAO,CAChC,OAAoBC,EAAK,MAAO,CAC9B,MAAO,6BACP,QAAS,cACT,MAAOD,EAAM,MACb,OAAQA,EAAM,OACd,MAAO,CACL,GAAGA,EAAM,MACT,MAAOA,EAAM,KACf,EACA,SAAuBC,EAAK,OAAQ,CAClC,EAAG,mIACH,KAAM,cACR,CAAC,CACH,CAAC,CACH,CACO,SAASC,GAAUF,EAAO,CAC/B,OAAoBG,EAAM,MAAO,CAC/B,MAAO,6BACP,QAAS,cACT,GAAGH,EACH,SAAU,CAAcC,EAAK,OAAQ,CACnC,MAAO,MACP,OAAQ,MACR,KAAM,MACR,CAAC,EAAgBA,EAAK,OAAQ,CAC5B,EAAG,oPACH,KAAM,cACR,CAAC,CAAC,CACJ,CAAC,CACH,CACO,SAASG,GAAYJ,EAAO,CAEjC,OAAoBG,EAAM,MAAO,CAC/B,MAAO,CACL,SAAU,WACV,GAAGH,EAAM,KACX,EACA,SAAU,CAAcC,EAAKI,EAAO,IAAK,CACvC,QAAS,CACP,OAAQ,GACV,EACA,WAAY,CACV,KAAM,SACN,SAAU,EACV,OAAQ,GACV,EACA,MAAO,CACL,aAAc,IACd,gBAAiB,+CAA+CL,EAAM,cACtE,MAAO,OACP,OAAQ,MACV,CACF,CAAC,EAAgBC,EAAK,MAAO,CAC3B,MAAO,CACL,gBAAiBD,EAAM,gBACvB,aAAc,IACd,SAAU,WACV,IAAK,EACL,KAAM,EACN,OAAQ,EACR,MAAO,CACT,CACF,CAAC,CAAC,CACJ,CAAC,CACH,CCnEO,SAASM,GAAQC,EAAM,CAC5B,KAAK,MAAQ,IAAI,QAAQ,CAACC,EAASC,IAAW,CAC5C,IAAIC,EAAUC,EAAO,UAAU,KAAK,SAAS,MAAM,EACnDD,EAAQ,gBAAkBE,GAAK,CAC7B,KAAK,GAAKA,EAAE,OAAO,OACnB,KAAK,GAAG,kBAAkB,OAAO,CACnC,EACAF,EAAQ,UAAYE,GAAK,CACvB,KAAK,GAAKA,EAAE,OAAO,OACnBJ,EAAQ,CACV,EACAE,EAAQ,QAAUE,GAAK,CACrB,KAAK,GAAKA,EAAE,OAAO,OACnBH,EAAOG,CAAC,CACV,CACF,CAAC,CACH,CACAN,GAAQ,UAAU,IAAM,SAAUO,EAAK,CACrC,OAAO,KAAK,MAAM,KAAK,IACd,IAAI,QAAQ,CAACL,EAASC,IAAW,CACtC,IAAIC,EAAU,KAAK,SAAS,EAAE,IAAIG,CAAG,EACrCH,EAAQ,UAAYE,GAAKJ,EAAQI,EAAE,OAAO,MAAM,EAChDF,EAAQ,QAAUD,CACpB,CAAC,CACF,CACH,EACAH,GAAQ,UAAU,SAAW,UAAY,CACvC,OAAO,KAAK,GAAG,YAAY,CAAC,OAAO,EAAG,WAAW,EAAE,YAAY,OAAO,CACxE,EACAA,GAAQ,UAAU,IAAM,SAAUO,EAAKC,EAAO,CAC5C,OAAO,KAAK,MAAM,KAAK,IACd,IAAI,QAAQ,CAACN,EAASC,IAAW,CACtC,IAAIC,EAAU,KAAK,SAAS,EAAE,IAAII,EAAOD,CAAG,EAC5CH,EAAQ,UAAYF,EACpBE,EAAQ,QAAUD,CACpB,CAAC,CACF,CACH,EACAH,GAAQ,UAAU,OAAS,SAAUO,EAAKC,EAAO,CAC/CH,EAAO,UAAU,eAAe,SAAS,MAAM,CACjD,ECvCoyB,eAAsBI,GAAcC,EAAIC,EAAYC,EAAM,IAAIC,GAAQ,OAAO,EAAE,CAAC,IAAMC,EAASJ,EAAUK,EAAK,MAAMH,EAAM,IAAIE,EAASH,CAAW,CAAE,CAAC,eAAsBK,GAAmBN,EAAIE,EAAM,IAAIC,GAAQ,OAAO,EAAE,CAAC,IAAMC,EAASJ,EAAUK,EAAK,MAAMH,EAAM,IAAIE,CAAQ,EAAE,OAAGC,GAA+B,IAAM,CCAlmC,IAAME,GAAU,EAET,SAASC,GAAkBC,EAAU,CAC1C,MAAO,CAACA,GAAYA,IAAa,SACnC,CACA,IAAMC,GAAY,mBAClB,SAASC,GAAYF,EAAU,CAC7B,OAAID,GAAkBC,CAAQ,EAAUC,GACjC,GAAGA,MAAaD,GACzB,CACA,IAAMG,GAAe,sBACrB,SAASC,GAAeJ,EAAU,CAChC,OAAID,GAAkBC,CAAQ,EAAUG,GACjC,GAAGA,MAAgBH,GAC5B,CACA,eAAsBK,GAAeL,EAAU,CAI7C,IAAMM,EAAWJ,GAAYF,CAAQ,EAC/BO,EAAc,MAAMC,GAAmBF,CAAQ,EACrD,GAAIC,EACF,OAAOA,CAEX,CACO,SAASE,GAAeT,EAAUU,EAAO,CAC9C,IAAMJ,EAAWJ,GAAYF,CAAQ,EACrCW,GAAcL,EAAUI,CAAK,EAC7B,IAAME,EAAW,CACf,QAASC,GACT,UAAW,KAAK,IAAI,CACtB,EACMC,EAAcV,GAAeJ,CAAQ,EAC3CW,GAAcG,EAAaF,CAAQ,CACrC,CCjCO,IAAMG,GAAc,CACzB,IAAK,CACH,QAAS,EACT,MAAO,wBACP,YAAa,gCACb,SAAU,GACV,GAAI,CAAC,EACL,GAAI,CAAC,EACL,GAAI,CAAC,EACL,GAAI,CAAC,EACL,GAAI,CAAC,EACL,GAAI,CAAC,EACL,EAAG,CAAC,EACJ,IAAK,gBACL,UAAW,CAAC,CACd,EACA,aAAc,CACZ,QAAS,EACT,MAAO,8BACP,YAAa,gEACb,SAAU,GACV,GAAI,CAAC,EACL,GAAI,CAAC,EACL,GAAI,CAAC,EACL,GAAI,CAAC,EACL,GAAI,CAAC,EACL,GAAI,CAAC,EACL,EAAG,CAAC,EACJ,IAAK,kBACL,UAAW,CAAC,CACd,EACA,aAAc,CACZ,QAAS,EACT,MAAO,6BACP,YAAa,6DACb,SAAU,GACV,GAAI,CAAC,EACL,GAAI,CAAC,EACL,GAAI,CAAC,EACL,GAAI,CAAC,EACL,GAAI,CAAC,EACL,GAAI,CAAC,EACL,EAAG,CAAC,EACJ,IAAK,kBACL,UAAW,CAAC,CACd,CACF,EC9CA,IAAMC,EAAM,IAAI,YAAY,KAAK,EAC3BC,GAAW,CAACC,EAAGC,IAAM,CACzB,IAAMC,EAAIF,EAAE,OACNG,EAAIF,EAAE,OACNG,EAAM,GAAKF,EAAI,EACjBG,EAAK,GACLC,EAAK,EACLC,EAAKL,EACLM,EAAIN,EACR,KAAOM,KACLV,EAAIE,EAAE,WAAWQ,CAAC,CAAC,GAAK,GAAKA,EAE/B,IAAKA,EAAI,EAAGA,EAAIL,EAAGK,IAAK,CACtB,IAAIC,EAAKX,EAAIG,EAAE,WAAWO,CAAC,CAAC,EACtBE,EAAKD,EAAKH,EAChBG,IAAOA,EAAKJ,GAAMA,EAAKA,EACvBC,GAAM,EAAEG,EAAKJ,GACbA,GAAMI,EACFH,EAAKF,GACPG,IAEEF,EAAKD,GACPG,IAEFD,EAAKA,GAAM,EAAI,EACfD,EAAKA,GAAM,EAAI,EAAEK,EAAKJ,GACtBA,GAAMI,EAGR,IADAF,EAAIN,EACGM,KACLV,EAAIE,EAAE,WAAWQ,CAAC,CAAC,EAAI,EAEzB,OAAOD,CACT,EACMI,GAAU,CAACV,EAAGD,IAAM,CACxB,IAAME,EAAIF,EAAE,OACNG,EAAIF,EAAE,OACNW,EAAM,CAAC,EACPC,EAAM,CAAC,EACPC,EAAQ,KAAK,KAAKZ,EAAI,EAAE,EACxBa,EAAQ,KAAK,KAAKZ,EAAI,EAAE,EAC9B,QAASK,EAAI,EAAGA,EAAIM,EAAON,IACzBK,EAAIL,CAAC,EAAI,GACTI,EAAIJ,CAAC,EAAI,EAEX,IAAIQ,EAAI,EACR,KAAOA,EAAID,EAAQ,EAAGC,IAAK,CACzB,IAAIV,EAAK,EACLD,EAAK,GACHY,EAAQD,EAAI,GACZE,EAAO,KAAK,IAAI,GAAIf,CAAC,EAAIc,EAC/B,QAASE,EAAIF,EAAOE,EAAID,EAAMC,IAC5BrB,EAAIG,EAAE,WAAWkB,CAAC,CAAC,GAAK,GAAKA,EAE/B,QAASC,EAAK,EAAGA,EAAKlB,EAAGkB,IAAM,CAC7B,IAAMX,EAAKX,EAAIE,EAAE,WAAWoB,CAAE,CAAC,EACzBC,EAAKR,EAAIO,EAAK,GAAK,CAAC,IAAMA,EAAK,EAC/BE,EAAKV,EAAIQ,EAAK,GAAK,CAAC,IAAMA,EAAK,EAC/BV,EAAKD,EAAKH,EACViB,IAAOd,EAAKa,GAAMjB,GAAMA,EAAKA,EAAKI,EAAKa,EACzCE,EAAKlB,EAAK,EAAEiB,EAAKlB,GACjBoB,EAAKpB,EAAKkB,EACVC,IAAO,GAAKH,IACdR,EAAIO,EAAK,GAAK,CAAC,GAAK,GAAKA,GAEvBK,IAAO,GAAKH,IACdV,EAAIQ,EAAK,GAAK,CAAC,GAAK,GAAKA,GAE3BI,EAAKA,GAAM,EAAIH,EACfI,EAAKA,GAAM,EAAIH,EACfjB,EAAKoB,EAAK,EAAEf,EAAKc,GACjBlB,EAAKkB,EAAKd,EAEZ,QAASgB,EAAKT,EAAOS,EAAKR,EAAMQ,IAC9B5B,EAAIG,EAAE,WAAWyB,CAAE,CAAC,EAAI,EAG5B,IAAIC,EAAM,EACNC,EAAM,GACJC,EAASb,EAAI,GACbc,EAAQ,KAAK,IAAI,GAAI3B,EAAI0B,CAAM,EAAIA,EACzC,QAASE,EAAKF,EAAQE,EAAKD,EAAOC,IAChCjC,EAAIG,EAAE,WAAW8B,CAAE,CAAC,GAAK,GAAKA,EAEhC,IAAIC,EAAQ7B,EACZ,QAAS8B,EAAK,EAAGA,EAAK/B,EAAG+B,IAAM,CAC7B,IAAMC,EAAMpC,EAAIE,EAAE,WAAWiC,CAAE,CAAC,EAC1BE,EAAMtB,EAAIoB,EAAK,GAAK,CAAC,IAAMA,EAAK,EAChCG,EAAMxB,EAAIqB,EAAK,GAAK,CAAC,IAAMA,EAAK,EAChCI,EAAMH,EAAMP,EACZW,IAAQJ,EAAME,GAAOR,GAAOA,EAAMA,EAAMM,EAAME,EAChDG,EAAMZ,EAAM,EAAEW,EAAMV,GACpBY,EAAMZ,EAAMU,EAChBN,GAASO,IAAQpC,EAAI,EAAI,EACzB6B,GAASQ,IAAQrC,EAAI,EAAI,EACrBoC,IAAQ,GAAKJ,IACftB,EAAIoB,EAAK,GAAK,CAAC,GAAK,GAAKA,GAEvBO,IAAQ,GAAKJ,IACfxB,EAAIqB,EAAK,GAAK,CAAC,GAAK,GAAKA,GAE3BM,EAAMA,GAAO,EAAIJ,EACjBK,EAAMA,GAAO,EAAIJ,EACjBR,EAAMY,EAAM,EAAEH,EAAME,GACpBZ,EAAMY,EAAMF,EAEd,QAASI,EAAKZ,EAAQY,EAAKX,EAAOW,IAChC3C,EAAIG,EAAE,WAAWwC,CAAE,CAAC,EAAI,EAE1B,OAAOT,CACT,EACMU,GAAW,CAAC1C,EAAGC,IAAM,CACzB,GAAID,EAAE,OAASC,EAAE,OAAQ,CACvB,IAAM0C,EAAM1C,EACZA,EAAID,EACJA,EAAI2C,EAEN,OAAI1C,EAAE,SAAW,EACRD,EAAE,OAEPA,EAAE,QAAU,GACPD,GAASC,EAAGC,CAAC,EAEfU,GAAQX,EAAGC,CAAC,CACrB,EC9HO,IAAM2C,GAAuC,OAAOC,EAAtB,KAA2CA,EAAO,aAAa,QAAQ,qBAAqB,IAA5D,OACjEC,GAAI,8CACR,SAASC,GAAED,EAAG,CACZ,OAAOA,EAAE,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAE,MAAM,CAAC,CAC9C,CACO,SAASE,EAAUC,EAAG,CAE3B,OADQA,EAAE,MAAMH,EAAC,GAAK,CAAC,GACd,IAAIC,EAAC,EAAE,KAAK,GAAG,CAC1B,CACO,SAASG,GAAUJ,EAAGC,EAAG,CAC9B,IAAI,EAAID,EAAE,OACV,GAAI,GAAKC,EAAG,OAAOD,EACnB,IAAIK,EAAIL,EAAE,MAAM,EAAGC,CAAC,EACpB,OAAO,EAAIA,EAAII,EAAI,SAAMA,CAC3B,CACO,SAASC,GAAcN,EAAG,CAC/B,OAAa,OAAO,KAAKA,CAAC,EAAE,SAArB,CACT,CACO,SAASO,GAAaP,EAAG,CAC9B,SAASC,GAAI,CAAC,CACd,OAAOD,EAAI,CACT,IAAK,YAAaA,EAAG,CACnB,QAAQ,IAAI,KAAK,IAAI,EAAG,GAAGA,CAAC,CAC9B,EACA,KAAM,SAAUA,EAAG,CACjB,QAAQ,KAAKA,CAAC,CAChB,EACA,QAAS,SAAUA,EAAG,CACpB,QAAQ,QAAQA,CAAC,CACnB,CACF,EAAI,CACF,IAAKC,EACL,KAAMA,EACN,QAASA,CACX,CACF,CACO,IAAMO,GAAsB,oKAC5B,SAASC,GAAcT,EAAG,CAC/B,IAAIC,EAAG,EAAGI,EACV,MAAQ,GAAUJ,EAAID,EAAE,aAAhB,MAAyCC,IAAX,SAAwBA,EAAE,WAAcD,EAAE,UAAU,WAAc,GAAU,EAAIA,EAAE,aAAhB,MAAyC,IAAX,SAAwB,EAAE,WAAcA,EAAE,UAAU,WAAc,GAAUK,EAAIL,EAAE,gBAAhB,MAA4CK,IAAX,SAAwBA,EAAE,WAAcL,EAAE,aAAa,WAAa,mKAC/S,CACO,SAASU,GAAuBV,EAAG,CACxC,MAAO,GAAGA,YACZ,CACO,IAAMW,GAA8B,OAAO,SAAtB,IAAiC,SAAW,KAC3DC,GAA4B,OAAOb,EAAtB,IAA+BA,EAAS,KAE3D,SAASc,IAAoB,CAClC,IAAIC,EAAoCC,IAAa,cAAc,kCAAkC,EACrG,OAAKD,EACGA,EAAE,aAAa,SAAS,EADxB,MAGV,CACO,IAAME,GAAmB,IAA0BH,GAAkB,IAAtC,gBC9CtC,GAAM,CACJ,IAAAI,EACA,KAAAC,GACA,QAAAC,EACF,EAAIC,GAAaC,EAAqB,EACtC,SAASC,GAAWC,EAAK,CACvB,GAAI,CACF,WAAI,IAAIA,CAAG,EACJ,EACT,MAAE,CACA,MAAO,EACT,CACF,CACA,SAASC,GAAWC,EAAM,CACxB,GAAI,CAOF,OAAOA,EAAK,MAAM,OAAO,iDAAkD,GAAG,CAAC,CACjF,MAAE,CACA,OAAAR,EAAI,0CAA0C,EACvCQ,EAAK,MAAM,OAAO,0BAA2B,GAAG,CAAC,CAC1D,CACF,CACA,SAASC,GAAeC,EAAK,CAC3B,IAAMC,EAAQJ,GAAWG,CAAG,EAAE,OAAOE,GAAQA,EAAK,KAAK,GAAKA,EAAK,OAAS,CAAC,EAC3E,OAAO,IAAI,IAAID,CAAK,CACtB,CAIA,SAASE,GAAoBL,EAAM,CACjC,OAAI,MAAM,QAAQA,CAAI,EACbA,EAAK,IAAIK,EAAmB,EAE9BL,EAAK,UAAU,KAAK,EAC1B,QAAQ,mBAAoB,EAAE,EAAE,YAAY,CAC/C,CACA,SAASM,GAAkBC,EAAM,CAC/B,IAAMC,EAAiB,CAAC,EACxB,OAAW,CAACC,EAAKC,CAAK,IAAK,OAAO,QAAQH,CAAI,EAAG,CAC/C,GAAI,OAAOG,GAAU,SAAU,CAC7BF,EAAeC,CAAG,EAAIJ,GAAoBK,CAAK,EAC/C,SAEF,GAAI,MAAM,QAAQA,CAAK,EAAG,CACxBF,EAAeC,CAAG,EAAIJ,GAAoBK,CAAK,EAC/C,SAEFF,EAAeC,CAAG,EAAIC,EAExB,OAAOF,CACT,CACA,SAASG,GAAcC,EAAcC,EAAOC,EAAK,CAC/C,IAAMC,EAAS,CACb,GAAGH,CACL,EACA,OAAIC,EAAQE,EAAO,QACjBA,EAAO,MAAQF,GAEbC,EAAMC,EAAO,MACfA,EAAO,IAAMD,GAERC,CACT,CAMA,SAASC,GAA2BT,EAAMU,EAAOd,EAAOe,EAAW,CACjE,IAAIC,EAAQ,EACNC,EAAQ,CACZ,MAAO,CACL,MAAO,IACP,IAAK,CACP,EACA,YAAa,CACX,MAAO,IACP,IAAK,CACP,CACF,EACMC,EAAWpB,GAAeM,EAAK,GAAG,EAQxC,GANIc,EAAS,IAAIJ,CAAK,IACpBE,GAAS,IAEPhB,EAAM,OAAS,GAAKkB,EAAS,OAAS,GAAKA,EAAS,OAAO,EAAE,KAAK,EAAE,QAAUJ,IAChFE,GAASA,EAAQ,GAEfA,EAAQ,EAAG,CACb,IAAMG,EAAcf,EAAK,IAAI,MAAM,GAAG,EAAE,OACxCY,GAASI,GAAM,GAAKD,EAAa,EAAGA,CAAW,EAEjD,IAAME,EAAavB,GAAeM,EAAK,KAAK,EACxCiB,EAAW,IAAIP,CAAK,IACtBE,GAAS,IAEX,IAAMM,EAAalB,EAAK,MAAM,QAAQU,CAAK,EACvCQ,IAAe,KACjBN,GAAS,GAETC,EAAM,MAAQT,GAAcS,EAAM,MAAOK,EAAYA,EAAaR,EAAM,MAAM,GAG5ES,GAASnB,EAAK,MAAOW,CAAS,GAAK,IACrCC,GAASA,EAAQ,IAEnB,QAAWQ,KAAaH,EACAE,GAAST,EAAOU,CAAS,GAC1B,IACnBR,GAAS,IAGb,IAAMS,EAAW,CAAC,GAAGrB,EAAK,GAAI,GAAGA,EAAK,GAAI,GAAGA,EAAK,GAAI,GAAGA,EAAK,GAAI,GAAGA,EAAK,GAAI,GAAGA,EAAK,EAAE,EACxF,QAAWsB,KAAWD,EAAU,CAC9B,IAAME,EAAe7B,GAAe4B,CAAO,EAEvCH,GAASG,EAASX,CAAS,GAAK,IAClCC,GAASA,EAAQ,IAGfU,EAAQ,WAAWZ,CAAK,IAC1BE,GAAS,IAEPW,EAAa,IAAIb,CAAK,IACxBE,GAAS,IAEPU,EAAQ,SAASZ,CAAK,IACxBE,GAAS,GAEX,QAAWY,KAAeD,EACFJ,GAAST,EAAOc,CAAW,GAC5B,IACnBZ,GAAS,GAIf,IAAMa,EAAmBzB,EAAK,YAAY,QAAQU,CAAK,EACnDe,IAAqB,KACvBb,GAAS,GACTC,EAAM,YAAcT,GAAcS,EAAM,YAAaY,EAAkBA,EAAmBf,EAAM,MAAM,GAExG,QAAW,KAAKV,EAAK,EACf,EAAE,SAASU,CAAK,IAClBE,GAAS,IAGb,QAAWc,KAAa1B,EAAK,UAGvBmB,GAASO,EAAWf,CAAS,GAAK,IACpCC,GAAS,IAEPc,EAAU,SAASf,CAAS,IAC9BC,GAAS,IAEPc,EAAU,SAAShB,CAAK,IAC1BE,GAAS,IAGb,MAAO,CACL,MAAAA,EACA,MAAAC,CACF,CACF,CACA,SAASc,GAAwB3B,EAAMU,EAAO,CAC5C,IAAMT,EAAiBF,GAAkBC,CAAI,EACvC4B,EAAkB9B,GAAoBY,CAAK,EAC3CmB,EAAanC,GAAekC,CAAe,EAC7CE,EAAQ,EACZ,QAAWC,KAAaF,EAAY,CAClC,GAAM,CACJ,MAAAjB,CACF,EAAIH,GAA2BR,EAAgB8B,EAAWF,EAAYD,CAAe,EACrFE,GAASlB,EAEX,OAAOkB,CACT,CACA,SAASE,GAAaC,EAAOvB,EAAOwB,EAAU,CA0B5C,OAzBgBC,GAAQ,IAAM,CAC5B,GAAI,CAACzB,GAAS,CAACuB,EACb,MAAO,CAAC,EAEV,IAAMG,EAAOC,KAAe,MAAQA,KAAe,OAAS,OAASA,GAAW,SAAS,SACzFnD,GAAK,OAAO,EACZ,IAAMoD,EAAU,OAAO,OAAOL,CAAK,EAAE,IAAIjC,GAAQ,CAC/C,IAAMY,EAAQe,GAAwB3B,EAAMU,CAAK,EAC3CY,EAAUtB,EAAK,GAAG,QAAUA,EAAK,GAAG,CAAC,EACrCuC,EAA6DL,GAAS,YAAeM,GAAsB,MAAQxC,EAAK,MAAQsB,GAAoBtB,EAAK,MAQ/J,MAPe,CACb,IAAKA,EAAK,IACV,MAAAuC,EACA,YAAavC,EAAK,YAClB,KAAM,CAAC,GAAGA,EAAK,EAAGA,EAAK,SAAS,EAAE,KAAK,GAAG,EAC1C,MAAAY,CACF,CAEF,CAAC,EAAE,OAAOZ,GAAQA,EAAK,MAAQkC,EAAS,cAAgB,CAAC,EAAE,OAAOlC,GAC3DoC,EACEpC,EAAK,MAAQoC,EADF,EAEnB,EAAE,KAAK,CAACK,EAAOC,IAAUA,EAAM,MAAQD,EAAM,KAAK,EACnD,OAAAtD,GAAQ,OAAO,EACRmD,CACT,EAAG,CAACL,EAAOvB,CAAK,CAAC,CAEnB,CACA,SAASiC,GAAsBV,EAAOW,EAAa,CACjD,IAAMC,EAAc,CAAC,EACfC,EAA0BF,EAAY,SAAS,GAAG,EAClDG,EAAsBH,EAAY,MAAM,GAAG,EAAE,CAAC,EAC9CI,EAAWD,EAAoB,OAAS,EAAIA,EAAsB,GACxE,QAAWxD,KAAO0C,EACX1C,EAAI,WAAWyD,CAAQ,IAGxBF,GAA2BvD,EAAI,QAAUyD,EAAS,SAGtDH,EAAYtD,CAAG,EAAI0C,EAAM1C,CAAG,IAE9B,OAAOsD,CACT,CACO,SAASI,GAAUvC,EAAOwC,EAAUhB,EAAU,CACnD,GAAM,CAACiB,EAAaC,CAAe,EAAIC,EAAS,CAAC,CAAC,EAC5C,CAACC,EAAQC,CAAS,EAAIF,EAAS,SAAS,EACxCf,EAAUN,GAAamB,EAAazC,EAAOwB,CAAQ,EAEzD,SAASsB,EAAevB,EAAOwB,EAAU,CACvC,YAAa,EACf,EAAG,CACD,IAAIZ,EAAcZ,EACdC,EAAS,UAAY,CAACuB,EAAQ,cAChCZ,EAAcF,GAAsBV,EAAOC,EAAS,QAAQ,EAC5DjD,EAAI,kBAAmBiD,EAAS,QAAQ,GAE1CkB,EAAgBP,CAAW,CAC7B,CACA,OAAAa,EAAU,IAAM,CACd,eAAeC,GAAkB,CAC/BJ,EAAU,SAAS,EACnB,IAAMK,EAAUC,KAAiB,MAAQA,KAAiB,OAAS,OAASA,GAAa,cAAc,kCAAkC,EACzI,GAAI,CAACD,EAAS,CACZL,EAAU,mBAAmB,EAC7BC,EAAeM,GAAa,CAC1B,YAAa,EACf,CAAC,EACD7E,EAAI,mBAAmB,EACvB,OAEF,IAAM8E,EAAc,MAAMC,GAAed,CAAQ,EAC3Ce,EAAiBL,EAAQ,aAAa,SAAS,EAC/CM,EAAcD,IAAmB,gBAUvC,GATIC,GACFjF,EAAI,8BAA8B,EAGhC8E,GAAe,CAACG,IAClBV,EAAeO,CAAW,EAC1BR,EAAU,oBAAoB,EAC9BtE,EAAI,oBAAoB,GAEtB,CAACgF,GAAkB,CAAC3E,GAAW2E,CAAc,EAAG,CAClDhF,EAAI,0CAA0C,EAEzC8E,EAIH9E,EAAI,sBAAsB,GAH1BsE,EAAU,0BAA0B,EACpCtE,EAAI,6DAA6D,GAInE,OAEF,IAAMkF,EAAiBC,GAAkBH,EAAgBf,CAAQ,EAC3DmB,EAAW,MAAM,MAAMF,CAAc,EAC3C,GAAI,CAACE,EAAS,GACZ,MAAM,IAAI,MAAMA,EAAS,UAAU,EAErC,IAAMC,EAAkB,MAAMD,EAAS,KAAK,EAC5Cb,EAAec,CAAe,EAC9BC,GAAerB,EAAUoB,CAAe,EACxCf,EAAU,SAAS,EACnBtE,EAAI,wBAAwB,CAC9B,CACA0E,EAAgB,EAAE,MAAMa,GAAS,CAG/BjB,EAAU,OAAO,EACjBtE,EAAI,8BAA+BuF,CAAK,CAC1C,CAAC,CACH,EAAG,CAACtB,CAAQ,CAAC,EACbjE,EAAI,CACF,OAAAqE,EACA,QAAAhB,CACF,CAAC,EACM,CACL,QAAAA,EACA,OAAAgB,CACF,CACF,CACA,SAASc,GAAkBK,EAASvB,EAAU,CAC5C,OAAIwB,GAAkBxB,CAAQ,EAAUuB,EACjCA,EAAQ,QAAQ,QAAS,IAAIvB,QAAe,CACrD,CCzTO,IAAIyB,GACV,SAAUA,EAAS,CAClB,IAAIC,EAAUD,EAAQ,QAAU,IAAM,iBAAkBE,GAAUC,EAAU,eAAiB,EACzFC,EAAWJ,EAAQ,SAAW,IAAMG,EAAU,UAAU,YAAY,EAAE,SAAS,SAAS,EACxFE,EAAWL,EAAQ,SAAW,IAAMG,EAAU,UAAU,YAAY,EAAE,SAAS,cAAc,EAC7FG,EAAWN,EAAQ,SAAW,IAAMK,EAAS,GAAK,CAACD,EAAS,EAC5DG,EAAkBP,EAAQ,gBAAkB,IAAMM,EAAS,GAAK,CAACL,EAAQ,EACzEO,EAAYR,EAAQ,UAAY,IAAM,MAAM,KAAKG,EAAU,QAAQ,EACnEM,EAAUT,EAAQ,QAAU,IAAM,MAAM,KAAKG,EAAU,QAAQ,CACrE,GAAGH,IAAYA,EAAU,CAAC,EAAE,ECArB,IAAMU,GAAyB,CAACC,EAAUC,IAAqB,CACpE,IAAMC,EAAkBC,EAAO,IAAI,EACnC,OAAOC,EAAYC,GAAS,CAC1B,GAAI,CAACC,EAAQ,SAAS,EAAG,OAAON,EAASK,CAAK,EAC9C,IAAME,EAAMN,GAAsCC,EAC5C,CACJ,QAAAM,EACA,QAAAC,CACF,EAAIJ,EACEK,EAAqBH,EAAI,QAM/B,GALAA,EAAI,QAAU,CACZ,EAAGC,EACH,EAAGC,CACL,EAEI,EAACC,IAGDA,EAAmB,IAAMF,GAAWE,EAAmB,IAAMD,GAC/D,OAAOT,EAASK,CAAK,CAEzB,EAAG,CAACJ,EAAkBD,CAAQ,CAAC,CACjC,EC7BO,SAASW,GAAeC,EAAeC,EAAsG,CAClJ,UAAAC,EACA,aAAAC,CACF,EAAG,CACD,IAAMC,EAAsBJ,EAAc,sBAAsB,EAC1DK,EAAsBJ,EAAc,sBAAsB,EAChE,GAAIG,EAAoB,IAAMC,EAAoB,IAAK,CACrD,IAAMC,EAAaD,EAAoB,IAAMD,EAAoB,IACjEH,EAAc,UAAYA,EAAc,UAAYK,EAAaJ,UACxDE,EAAoB,OAASC,EAAoB,OAAQ,CAClE,IAAME,EAAaF,EAAoB,IAAMD,EAAoB,IAC3DI,EAAYP,EAAc,UAAYM,EAAaL,EACnDO,EAAgBL,EAAoB,OAASC,EAAoB,OACjEK,EAAST,EAAc,UAAYQ,EAAgBN,EACzDF,EAAc,UAAY,KAAK,IAAIO,EAAWE,CAAM,EAExD,CCNA,IAAMC,GAAyB,IACzBC,GAAmB,IACnBC,GAA8B,GACpC,SAASC,GAAY,CACnB,MAAAC,EACA,KAAAC,EACA,QAAAC,EACA,KAAAC,CACF,EAAG,CAED,IAAMC,EADoBH,IAAS,OACiBI,EAAKC,GAAW,CAClE,MAAO,CACL,MAAON,EAAM,eACb,MAAOA,EAAM,cACb,OAAQA,EAAM,aAChB,CACF,CAAC,EAAIG,EACL,OAAoBE,EAAK,MAAO,CAC9B,MAAO,CACL,WAAY,EACZ,SAAUL,GAASA,EAAM,WAAaA,EAAM,UAAU,SAAWA,EAAM,UAAU,SAAW,EAC9F,EACA,SAAuBK,EAAK,SAAU,CACpC,UAAW,+BACX,QAASH,EACT,MAAO,CACL,WAAY,UACZ,OAAQ,OACR,WAAY,OACZ,OAAQ,UACR,QAAS,OACT,cAAe,YACf,MAAOF,EAAM,eACb,SAAU,SACV,QAAS,CACX,EACA,SAAUI,CACZ,CAAC,CACH,CAAC,CACH,CACA,SAASG,GAAQ,CACf,MAAAP,EACA,KAAAC,CACF,EAAG,CACD,IAAMO,EAAS,CACb,WAAYR,EAAM,gBAClB,OAAQ,EACR,WAAY,EACZ,QAAS,GACX,EACA,OAAIC,IAAS,aAAeD,IAC1BQ,EAAO,WAAaR,EAAM,kBAC1BQ,EAAO,YAAcR,EAAM,mBAETK,EAAK,MAAO,CAC9B,MAAOG,CACT,CAAC,CACH,CACO,IAAMC,GAAqBC,GAAW,SAAeC,EAAOC,EAAK,CACtE,GAAM,CACJ,MAAAC,EAAQ,GACR,OAAAC,EACA,UAAAC,EACA,MAAAf,EACA,YAAAgB,EACA,SAAAC,EACA,gBAAAC,EACA,SAAAC,CACF,EAAIR,EACE,CAACS,EAAYC,CAAa,EAAIC,EAAST,CAAK,EAC5C,CAACU,EAAWC,CAAY,EAAIF,EAAS,EAAK,EAC1CG,EAAWC,EAAO,EACxBC,GAAoBf,EAAK,IAAMa,EAAS,OAAO,EAC/CG,GAAM,gBAAgB,IAGb,IAAM,CACX,IAAMC,EAAeJ,EAAS,QAC1B,CAACI,GAAgBA,IAAiB,SAAS,eAC/CA,EAAa,KAAK,CACpB,EACC,CAAC,CAAC,EACL,IAAMC,EAAmB,IAAM,CACzBL,EAAS,SACXA,EAAS,QAAQ,MAAM,CAE3B,EACMM,EAAmB,IAAM,CAC7BV,EAAc,EAAE,CAClB,EACAW,EAAU,IAAM,CACdb,EAASC,CAAU,CACrB,EAAG,CAACA,CAAU,CAAC,EACf,IAAMa,EAAeb,EAAW,OAAS,EACnCc,EAAkBd,EAAW,OAAS,GAAKF,GAAmBA,IAAoB,OAClFiB,EAAkB,KAAK,MAAMnC,EAAQA,EAAM,kBAAoBF,GAA8B,CAAC,EAC9FsC,EAAanB,IAAa,UAAYjB,EAAM,eAA8BK,EAAK,MAAO,CAC1F,IAAK,uCACL,IAAKL,EAAM,eAAe,IAC1B,MAAOA,EAAM,cACb,OAAQA,EAAM,aAChB,CAAC,EAAiBK,EAAKgC,GAAY,CACjC,MAAOrC,EAAM,eACb,MAAOA,EAAM,cACb,OAAQA,EAAM,aAChB,CAAC,EACD,OAAoBsC,EAAM,MAAO,CAC/B,KAAM,SACN,MAAO,CACL,GAAGC,GACH,WAAYC,GAAcxC,CAAK,EAC/B,YAAaA,GAASA,EAAM,kBAC5B,aAAcA,GAASA,EAAM,kBAC7B,IAAK,GACL,WAAYmC,EACZ,cAAeA,EACf,YAAa,MACf,EACA,QAASL,EACT,SAAU,CAAczB,EAAK,MAAO,CAClC,MAAO,CACL,WAAY,EACZ,QAAS,MACX,EACA,SAAUS,IAAW,WAAaM,EAA0Bf,EAAKoC,GAAa,CAC5E,MAAOzC,EAAM,eACb,gBAAiBA,EAAM,gBACvB,MAAO,CACL,OAAQA,GAASA,EAAM,cACvB,MAAOA,GAASA,EAAM,aACxB,CACF,CAAC,EAAIoC,CACP,CAAC,EAAgB/B,EAAK,QAAS,CAC7B,IAAKoB,EACL,WAAY,GACZ,UAAWV,EACX,MAAO,CACL,GAAG2B,GACH,wBAAyB,gBACzB,MAAO1C,EAAM,gBACb,WAAY,MACZ,cAAe,WACf,GAAGA,EAAM,UACT,GAAGA,EAAM,UACT,SAAUA,EAAM,cAEhB,oCAAqCA,EAAM,gBAC7C,EACA,QAAS,IAAM,CACb,IAAM2C,EAAe,SAAS,gBAAgB,UAC9C,SAAS,gBAAgB,UAAYA,CACvC,EACA,YAAa3B,EACb,MAAOI,EACP,SAAU,IAAMC,EAAcI,EAAS,QAAQ,KAAK,CACtD,CAAC,EAAGS,GAAgC7B,EAAKN,GAAa,CACpD,MAAOC,EACP,KAAMW,EAAM,gBACZ,KAAMA,EAAM,gBACZ,QAASoB,CACX,CAAC,CAAC,CACJ,CAAC,CACH,CAAC,EACKQ,GAAsB,CAC1B,QAAS,cACT,WAAY,SACZ,WAAY,CACd,EACMG,GAAa,CACjB,QAAS,OACT,OAAQ,OACR,WAAY,cACZ,WAAY,IACZ,OAAQ,MACR,QAAS,EACT,MAAO,MACT,EACaE,GAAyBhB,GAAM,KAAmBA,GAAM,WAAW,SAAmBjB,EAAOC,EAAK,CAC7G,GAAM,CACJ,MAAAiC,EACA,OAAAC,EACA,qBAAAC,EACA,KAAA9C,EAAO,YACP,aAAA+C,EAAe,OACf,SAAAC,EAAW,GACX,MAAAjD,EACA,WAAAkD,EACA,MAAAC,EACA,YAAAC,EACA,cAAAC,EACA,aAAAC,CACF,EAAI3C,EACE,CACJ,IAAA4C,EACA,MAAAC,EACA,MAAAC,CACF,EAAIX,EACEY,EAAUC,GAAQ,IACjBT,EACEK,EAAI,QAAQ,IAAIL,IAAc,EAAE,EADfK,EAEvB,CAACA,CAAG,CAAC,EACFK,EAAkBC,GAAuBC,GAASV,EAAYU,EAAOjB,CAAK,EAAGE,CAAoB,EACjGgB,EAAc9D,IAAS,YACvB+D,EAAeD,EAAcE,GAAM,EAAG,IAAUjE,EAAM,aAAeA,EAAM,OAAO,EAAI,EACtFkE,EAAelB,IAAiB,OAASU,EAAUS,GAAUrB,EAAO,YAAalD,EAAsB,EACvGwE,EAAcN,GAAS,CAC3BA,EAAM,eAAe,EACrBR,EAAaR,EAAO,GAAG,CACzB,EACMuB,EAAYP,GAAS,CACzBA,EAAM,eAAe,CACvB,EACA,OAAoBzD,EAAK,IAAK,CAC5B,IAAKO,EACL,MAAO,CACL,eAAgB,MAClB,EACA,KAAMkC,EAAO,IACb,QAASsB,EACT,YAAaR,EACb,YAAaS,EACb,cAAeP,GAAST,EAAcS,EAAOjB,CAAK,EAClD,SAAuBP,EAAM,KAAM,CACjC,MAAO,CACL,GAAGgC,GACH,GAAGnB,EACH,WAAYY,EAAc,GAAK,GAC/B,cAAeA,EAAc,GAAK,GAClC,MAAO/D,EAAM,gBACb,SAAU,WACV,YAAaA,GAASA,EAAM,kBAC5B,aAAcA,GAASA,EAAM,iBAC/B,EACA,SAAU,CAAcK,EAAK,MAAO,CAClC,MAAO,CACL,gBAAiBL,EAAM,gBACvB,SAAU,WACV,QAASiD,EAAW,IAAM,EAC1B,aAAAe,EACA,KAAMhE,GAAS+D,EAAc/D,EAAM,QAAU,EAC7C,MAAOA,GAAS+D,EAAc/D,EAAM,QAAU,EAC9C,IAAK,EACL,OAAQ,CACV,CACF,CAAC,EAAgBsC,EAAM,MAAO,CAC5B,MAAO,CACL,QAAS,OACT,cAAe,SACf,SAAU,SACV,IAAK,CACP,EACA,SAAU,CAAcjC,EAAK,KAAM,CACjC,MAAO,CACL,GAAGkE,GACH,GAAGvE,EAAM,UACT,WAAY,OACd,EACA,SAAUwD,CACZ,CAAC,EAAgBlB,EAAM,IAAK,CAC1B,MAAO,CACL,OAAQ,EACR,MAAOtC,EAAM,cACb,GAAGA,EAAM,aACT,WAAY,SACZ,SAAU,SACV,aAAc,WACd,WAAY,OACd,EACA,SAAU,CAACwE,GAAwBf,EAAQ,GAAI,IAAKS,CAAY,CAClE,CAAC,CAAC,CACJ,CAAC,CAAC,CACJ,EAAGpB,EAAO,GAAG,CACf,CAAC,CACH,CAAC,CAAC,EAKF,SAAS2B,GAAgB,CACvB,QAAAvE,CACF,EAAG,CACD,OAAoBG,EAAK,MAAO,CAC9B,MAAO,CACL,MAAO,OACP,UAAW,MACb,EACA,QAASH,CACX,CAAC,CACH,CACA,IAAMwE,GAAuB,CAC3B,QAAS,OACT,cAAe,SACf,WAAY,SACZ,eAAgB,aAChB,IAAK,GACL,SAAU,SACZ,EACA,SAASC,GAAgB,CACvB,WAAAC,EACA,MAAA5E,EACA,UAAA6E,EACA,UAAAC,EACA,SAAAC,EACA,aAAAC,CACF,EAAG,CACD,IAAMC,EAAeC,GAAoBN,EAAY5E,CAAK,EACpDmD,EAAQ,CACZ,GAAGuB,GACH,GAAGO,EACH,WAAY,YACZ,UAAWL,IAAe,WAAa5E,EAAM,UAAY,EACzD,OAAQ4E,IAAe,UAAY,OAAS,OAC5C,UAAWA,IAAe,YAAc,OAAS,OACjD,eAAgBA,IAAe,UAAY,WAAa,aACxD,cAAeA,IAAe,UAAY,iBAAmB,QAC/D,EACMO,EAAa,CACjB,GAAGT,GACH,GAAGO,EACH,OAAQL,IAAe,UAAY,OAAS,OAC5C,UAAWA,IAAe,YAAc,OAAS,OACjD,IAAKA,IAAe,UAAY,EAAI5E,EAAM,0BAC1C,gBAAiB4E,IAAe,UAAY5E,EAAM,gBAAkB,cACpE,eAAgB4E,IAAe,UAAY,WAAa,aACxD,cAAeA,IAAe,UAAY,iBAAmB,SAC7D,QAAS,GACT,QAAS,EACX,EACA,SAASQ,GAAwB,CAC/B,OAAQR,EAAY,CAClB,IAAK,WACH,CACE,IAAMS,EAAMC,GAAuB,UAAU,EACvCC,EAAOP,EAAeA,EAAaK,CAAG,EAAI,OAChD,OAAIE,GAGK,CACL,EAAG,IACH,QAAS,GACT,WAAY,CACV,SAAUC,EAAQ,QAAQ,EAAI,EAAI,GACpC,CACF,CAGJ,CACF,IAAK,YACH,CACE,IAAMH,EAAMC,GAAuB,WAAW,EACxCC,EAAOP,EAAeA,EAAaK,CAAG,EAAI,OAChD,OAAIE,GAGK,CACL,MAAO,IACP,QAAS,EACT,EAAG,EACH,EAAG,EACH,OAAQ,EACR,WAAY,CACV,KAAM,SACN,UAAW,IACX,QAAS,EACX,CACF,CAGJ,CACF,IAAK,UACH,CACE,IAAMF,EAAMC,GAAuB,SAAS,EACtCC,EAAOP,EAAeA,EAAaK,CAAG,EAAI,OAChD,OAAIE,GAGK,CACL,EAAG,IACH,QAAS,EACT,WAAY,CACV,SAAU,GACZ,CACF,CAGJ,CACJ,CACF,CACA,IAAME,EAAqBL,EAAsB,EACjD,OAAoB9C,EAAM,MAAO,CAC/B,MAAOa,EACP,UAAW0B,EACX,QAASf,GAASA,EAAM,gBAAgB,EACxC,SAAU,CAACc,IAAe,aAA4BvE,EAAKoE,GAAiB,CAC1E,QAASK,CACX,CAAC,EAAgBzE,EAAKqF,EAAO,IAAK,CAChC,QAASD,EACT,QAAS,CACP,QAAS,EACT,MAAO,EACP,EAAG,EACH,EAAG,EACH,OAAQ,CACV,EACA,WAAYA,EAAqBA,EAAmB,WAAa,OACjE,KAAM,CACJ,QAAS,EACT,WAAY,CACV,SAAU,CACZ,CACF,EACA,MAAON,EACP,SAAUJ,CACZ,CAAC,CAAC,CACJ,CAAC,CACH,CACA,SAASY,GAAe,CACtB,WAAAf,EACA,MAAA5E,EACA,SAAA+E,EACA,eAAAa,EACA,iBAAAC,EACA,WAAAC,CACF,EAAG,CACD,IAAM3C,EAAQ,CAGZ,WAAY,YACZ,gBAAiBnD,EAAM,gBACvB,MAAOA,EAAM,gBACb,aAAc4E,IAAe,YAAc5E,EAAM,aAAe,EAChE,MAAO,OACP,QAAS,OACT,cAAe,SACf,SAAU,SACV,UAAW4E,IAAe,UAAY5E,EAAM,OAAS,OACrD,UAAW4E,IAAe,YAAc,OAAO/E,4BAA4C,MAC7F,EAEM,CAACkG,EAAOC,CAAO,EAAIC,GAAW,EACpC,OAAAC,GAAgB,IAAM,CACpB,GAAItB,IAAe,aAAegB,EAAgB,OAClD,IAAMO,EAAaJ,EAAM,QAAQ,aACjCA,EAAM,QAAQ,MAAM,OAAS,OAC7B,IAAMK,EAASL,EAAM,QAAQ,aAC7BA,EAAM,QAAQ,MAAM,OAASI,EAAa,KAC1CH,EAAQD,EAAM,QAAS,CACrB,OAAQ,CAACI,EAAYC,CAAM,CAC7B,EAAGP,CAAgB,CACrB,EAAGC,CAAU,EACOzF,EAAK,MAAO,CAC9B,IAAK0F,EACL,KAAM,SACN,UAAWnB,IAAe,WAAa,4BAA8B,OACrE,MAAOzB,EACP,SAAU4B,CACZ,CAAC,CACH,CACA,IAAMsB,GAA0BzE,GAAM,WAAW,SAAoB,CACnE,MAAA5B,EACA,SAAA+E,CACF,EAAGnE,EAAK,CACN,IAAM0F,EAAUd,EAAQ,QAAQ,EAC1B,CAACe,EAAWC,CAAY,EAAI5E,GAAM,SAAS,EAAI,EACrD,OAAAA,GAAM,UAAU,IAAM,CACpB,GAAI,CAAC0E,EAAS,OACd,IAAMG,EAAU7F,EAAI,QACf6F,GACLD,EAAaC,EAAQ,aAAeA,EAAQ,YAAY,CAC1D,CAAC,EACmBpG,EAAK,MAAO,CAC9B,IAAKO,EACL,MAAO,CACL,MAAO,eAAeZ,EAAM,oBAC5B,UAAW,SACX,UAAW,SACX,mBAAoB,UACpB,YAAauG,EAAY,OAAY,OAIrC,UAAW,EACb,EACA,SAAUxB,CACZ,CAAC,CACH,CAAC,EACK2B,GAAc,CAClB,gBAAiB,UACjB,MAAO,OACP,UAAW,wCACX,WAAY,UACZ,UAAW,SACX,SAAU,GACV,QAAS,OACX,EACA,SAASC,GAAc,CACrB,OAAA7F,EACA,WAAA8D,EACA,MAAA5E,CACF,EAAG,CACD,IAAMmC,EAAkB,KAAK,MAAMnC,EAAQA,EAAM,kBAAoBF,GAA8B,CAAC,EAC9FqD,EAAQ,CACZ,GAAGuD,GACH,WAAY,OACZ,WAAYlE,GAAcxC,CAAK,EAC/B,YAAaA,GAASA,EAAM,kBAC5B,aAAcA,GAASA,EAAM,kBAC7B,WAAY,IACZ,WAAY,QAAQA,EAAM,qBAC1B,WAAYmC,EACZ,cAAeA,EACf,GAAGnC,EAAM,UACT,OAAQA,EAAM,OAAS,EACvB,SAAU4E,IAAe,WAAa,OAAS5E,EAAM,MACrD,MAAO4E,IAAe,WAAa,eAAezC,EAAkB,MAAQ,OAC5E,UAAWyC,IAAe,WAAa8B,GAAY,UACnD,aAAc9B,IAAe,WAAa5E,EAAM,YAClD,EACM4G,EAAkBhC,IAAe,WAAa,eAAiB,6CACrE,OAAI9D,IAAW,oBACOT,EAAK,MAAO,CAC9B,MAAO8C,EACP,SAAUyD,CACZ,CAAC,EAEC9F,IAAW,2BACOT,EAAK,MAAO,CAC9B,MAAO8C,EACP,SAAU,uBACZ,CAAC,EAEI,IACT,CACA,IAAMoB,GAAc,CAClB,aAAc,WACd,SAAU,OACV,SAAU,SACV,WAAY,IACZ,WAAY,SACZ,KAAM,EACN,OAAQ,CACV,EACMD,GAAkB,CACtB,QAAS,YACT,UAAW,OACX,WAAY,GACd,EACMuC,GAAgB,CACpB,KAAM,EACN,MAAO,GACT,EACMC,GAAiB,CACrB,IAAK,EACL,MAAO,MACT,EACMC,GAAkB,CACtB,MAAO,GACT,EACA,SAAS7B,GAAoB8B,EAAchH,EAAO,CAChD,OAAQgH,EAAc,CACpB,IAAK,UACH,MAAO,CACL,GAAGH,GACH,MAAO7G,EAAM,KACf,EACF,IAAK,WACH,OAAO8G,GACT,IAAK,YACH,MAAO,CACL,GAAGC,GACH,MAAO/G,EAAM,KACf,CACJ,CACF,CACO,IAAIiH,IACV,SAAUA,EAA4B,CACrCA,EAA2B,KAAU,OACrCA,EAA2B,KAAU,OACrCA,EAA2B,KAAU,MACvC,GAAGA,KAA+BA,GAA6B,CAAC,EAAE,EAC3D,IAAIC,IACV,SAAUA,EAAwB,CACjCA,EAAuB,KAAU,OACjCA,EAAuB,UAAe,YACtCA,EAAuB,UAAe,WACxC,GAAGA,KAA2BA,GAAyB,CAAC,EAAE,EACnD,IAAIC,IACV,SAAUA,EAAuB,CAChCA,EAAsB,GAAQ,KAC9BA,EAAsB,MAAW,OACnC,GAAGA,KAA0BA,GAAwB,CAAC,EAAE,EACjD,IAAIC,IACV,SAAUA,EAA0B,CACnCA,EAAyB,YAAiB,cAC1CA,EAAyB,KAAU,MACrC,GAAGA,KAA6BA,GAA2B,CAAC,EAAE,EACvD,IAAIC,IACV,SAAUA,EAAsB,CAC/BA,EAAqB,UAAe,YACpCA,EAAqB,UAAe,WACtC,GAAGA,KAAyBA,GAAuB,CAAC,EAAE,EAC/C,IAAIC,GACV,SAAUA,EAAkB,CAC3BA,EAAiB,QAAa,UAC9BA,EAAiB,SAAc,WAC/BA,EAAiB,UAAe,WAClC,GAAGA,IAAqBA,EAAmB,CAAC,EAAE,EACvC,IAAIC,IACV,SAAUA,EAAiB,CAC1BA,EAAgB,KAAU,OAC1BA,EAAgB,KAAU,MAC5B,GAAGA,KAAoBA,GAAkB,CAAC,EAAE,EACrC,IAAIC,GACV,SAAUA,EAAgB,CACzBA,EAAe,QAAa,UAC5BA,EAAe,OAAY,QAC7B,GAAGA,IAAmBA,EAAiB,CAAC,EAAE,EAInC,SAASC,GAAY9G,EAAO,CACjC,GAAM,CACJ,WAAAiE,EACA,MAAA5E,EACA,SAAA0H,EACA,aAAAC,EACA,gBAAAC,EACA,aAAA5C,EACA,cAAA6C,EACA,UAAA/C,CACF,EAAInE,EACE,CACJ,aAAAmH,CACF,EAAIC,GAAc,EACZC,EAAuEF,GAAa,GACpF5E,EAAyE4E,GAAa,KACtFG,EAAQvG,EAAO,EACfwG,EAAoBxG,EAAO,EAC3ByG,EAAazG,EAAO,EACpB,CAACuB,EAAUmF,CAAW,EAAI9G,EAAS,CACvC,MAAO,EACP,OAAQ,EACV,CAAC,EACKyB,EAAuBrB,EAAO,IAAI,EAClC,CAAC2G,EAA8BC,CAA+B,EAAIhH,EAASkE,EAAQ,OAAO,EAC1F,CAAC+C,EAAOC,CAAQ,EAAIlH,EAAS,EAAE,EAC/BmH,EAAgBC,GAAiBH,CAAK,EACtC,CACJ,QAAAI,EACA,OAAA7H,CACF,EAAI8H,GAAUH,EAAeT,EAAU,CACrC,aAAc,EACd,SAAAN,EACA,UAAWG,EAAc,SAC3B,CAAC,EACKgB,EAAiBF,EAAQ1F,EAAS,KAAK,EACvCd,GAAkB,KAAK,MAAMnC,EAAQA,EAAM,kBAAoBF,GAA8B,CAAC,EACpGkC,EAAU,IAAM,CAEdoG,EAAY,CACV,MAAO,EACP,OAAQ,EACV,CAAC,CACH,EAAG,CAACK,CAAa,CAAC,EAClB,IAAMK,GAA6BC,EAAY,CAACjF,EAAOjB,IAAU,CAC3DiB,EAAM,cAAgB,UAC1BwE,EAAgC,EAAI,EACpCF,EAAY,CACV,MAAAvF,EACA,OAAQ,EACV,CAAC,EACH,EAAG,CAAC,CAAC,EACCmG,GAA2BD,EAAY,CAACjF,EAAOjB,IAAU,CAC7DuF,EAAYa,GACNA,EAAiB,QAAUpG,EACtBoG,EAEF,CACL,MAAApG,EACA,OAAQ,EACV,CACD,CACH,EAAG,CAAC,CAAC,EACCqG,EAASC,GAAU,EACnBC,EAAaL,EAAY,MAAMxF,GAAO,CAC1C,GAAIzC,IAAW,oBAGf,GAAI,CACF,IAAIuI,EAAkBC,EAAqBC,GAAaC,GAExD,GAAM,CACJ,QAAAC,GACA,cAAAC,EACF,EAAIC,GAA0BT,EAAO,OAAQ3F,CAAG,EAC1CqG,IAASP,EAAmBH,EAAO,YAAc,MAAQG,IAAqB,OAAS,OAASA,EAAiB,KAAKH,EAAQO,EAAO,EAC3I,MAAOG,IAAU,OAAqCL,GAAcK,GAAM,QAAU,MAAQL,KAAgB,SAAmBD,EAAsBC,GAAY,WAAa,MAAQD,IAAwB,OAAlK,OAAoLA,EAAoB,KAAKC,EAAW,IACnQC,GAAmBN,EAAO,YAAc,MAAQM,KAAqB,QAAkBA,GAAiB,KAAKN,EAAQO,GAAS,KAAMC,GAAe,EAAK,CAC3J,MAAE,CACAG,EAAO,SAAS,KAAOtG,CACzB,CACF,EAAG,CAACzC,CAAM,CAAC,EACLgJ,GAAgBhG,GAAS,CAC7B,IAAMiG,EAAWpB,EAAQ,OAAS,EAClC,OAAQ7E,EAAM,KAAM,CAClB,IAAK,UAEH,GADAA,EAAM,eAAe,EACjBuE,EAA8B,CAChCC,EAAgC,EAAK,EACrC,MAEFF,EAAYa,IAAqB,CAC/B,MAAOhF,GAAM,EAAG8F,EAAUd,EAAiB,MAAQ,CAAC,EACpD,OAAQ,EACV,EAAE,EACF,MACF,IAAK,YAEH,GADAnF,EAAM,eAAe,EACjBuE,EAA8B,CAChCC,EAAgC,EAAK,EACrC,MAEFF,EAAYa,IAAqB,CAC/B,MAAOhF,GAAM,EAAG8F,EAAUd,EAAiB,MAAQ,CAAC,EACpD,OAAQ,EACV,EAAE,EACF,MACF,IAAK,SACH,MACF,IAAK,QACCJ,GACFO,EAAWP,EAAe,GAAG,EAE/B,MACF,QACE/E,EAAM,gBAAgB,CAC1B,CACF,EACMkG,EAAgBrB,EAAQ,SAAW,GAAKF,EAAc,OAAS,GAAK3H,IAAW,UAC/EmJ,EAAc,SAASxB,EAAc,OAAS,GAAKE,EAAQ,OAAS,GAAKqB,IAAkBlJ,IAAW,WAAaH,EAAM,cAAgBA,EAAM,aAAa,cAAgB,MAAM,EAClLuJ,GAAkB,QAAQvJ,EAAM,eAAiBA,EAAM,cAAc,WAAa,WAAW,EAC7FwJ,GAAUD,GAAkBlK,EAAM,QAAU,GAC5CoK,GAAiBH,GAAeC,GAAkBC,GAAUnK,EAAM,kBAAoB,EAAI,EAChG,OAAAgC,EAAU,IAAM,CACd,GAAI,CAACiB,EAAS,OAAQ,OACtB,IAAMwD,EAAUyB,EAAkB,QAC7BzB,GACL4D,GAAe5D,EAAS0B,EAAW,QAAS,CAC1C,UAAW8B,GAAeC,GAAkBE,GAAiB,EAC7D,aAAcF,GAAkBC,GAAU,CAC5C,CAAC,CAGH,EAAG,CAAClH,CAAQ,CAAC,EACOX,EAAMqC,GAAiB,CACzC,WAAYC,EACZ,aAAcI,EACd,MAAOhF,EACP,UAAW8J,GACX,UAAWhF,EACX,SAAU,CAAcxC,EAAMqD,GAAgB,CAC5C,WAAYf,EACZ,MAAO5E,EACP,eAAgBgF,EAAa,eAC7B,iBAAkBA,EAAa,iBAC/B,WAAY,CAAC2D,EAAQ,OAAQqB,CAAa,EAC1C,SAAU,CAAc3J,EAAKI,GAAO,CAClC,UAAW,GACX,IAAKwH,EACL,SAAUO,EACV,MAAOD,EACP,MAAOvI,EACP,OAAQc,EACR,SAAU6G,EAAa,YAAY,SACnC,YAAaA,EAAa,mBAAmB,gBAC7C,gBAAiBA,EAAeA,EAAa,gBAAkB,OAC/D,gBAAiBA,EAAa,eAChC,CAAC,EAAGsC,GAA4B5J,EAAKE,GAAS,CAC5C,MAAOP,EACP,KAAM2H,EAAa,WACrB,CAAC,EAAgBtH,EAAKgG,GAAY,CAChC,IAAK8B,EACL,MAAOnI,EACP,SAAuBsC,EAAM,KAAM,CACjC,YAAa,SACb,MAAO,CACL,QAAS,OACT,cAAe,SACf,MAAO,eAAetC,EAAM,oBAC5B,QAAS,EACT,WAAYoK,GACZ,cAAezB,EAAQ,QAAUuB,GAAkBC,GAAU,EAC7D,IAAKnK,EAAM,kBACX,OAAQ,CACV,EACA,SAAU,CAAC2I,EAAQ,IAAI,CAAC7F,EAAQD,IAAU,CACxC,IAAMyH,EAAazH,IAAUI,EAAS,MACtC,OAAoB5C,EAAKuC,GAAW,CAClC,IAAK0H,EAAapC,EAAoB,KACtC,MAAOrF,EACP,OAAQC,EACR,qBAAsBC,EACtB,SAAU,CAACsF,GAAgCiC,EAC3C,KAAM3J,EAAM,cAAc,SAC1B,aAAcA,EAAM,cAAc,gBAAgB,aAClD,MAAOX,EACP,WAAYkD,EACZ,YAAa8F,GACb,cAAeF,GACf,aAAcM,CAChB,EAAGtG,EAAO,GAAG,CACf,CAAC,EAAGkH,GAA8B3J,EAAK,KAAM,CAC3C,MAAO,CACL,WAAY8B,GAAkBiI,GAC9B,cAAejI,GACf,WAAY,MACZ,YAAanC,GAASA,EAAM,kBAC5B,aAAcA,GAASA,EAAM,kBAC7B,OAAoB,MACtB,EACA,SAAuBK,EAAK,KAAM,CAChC,MAAO,CACL,GAAGkE,GACH,UAAW,SACX,WAAY,QAAQvE,EAAM,qBAC1B,MAAOA,EAAM,cACb,GAAGA,EAAM,SACX,EACA,SAAU,YACZ,CAAC,CACH,CAAC,CAAC,CACJ,CAAC,CACH,CAAC,CAAC,CACJ,CAAC,EAAgBK,EAAKsG,GAAe,CACnC,OAAQ7F,EACR,WAAY8D,EACZ,MAAO5E,CACT,CAAC,CAAC,CACJ,CAAC,CACH,CCl1BA,SAASuK,IAAkB,CACzB,OAAI,OAAOC,EAAW,IACb,CACL,MAAO,EACP,OAAQ,CACV,EAEK,CACL,MAAOA,EAAO,WACd,OAAQA,EAAO,WACjB,CACF,CACO,SAASC,GAAqBC,EAAU,CAC7C,GAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAS,IAAMH,EAASH,GAAgB,CAAC,CAAC,EACpE,OAAAO,EAAU,IAAM,CACd,IAAMC,EAAqB,IAAMH,EAASF,EAASH,GAAgB,CAAC,CAAC,EACrE,OAAAC,EAAO,iBAAiB,SAAUO,CAAkB,EAC7C,IAAM,CACXP,EAAO,oBAAoB,SAAUO,CAAkB,CACzD,CACF,EAAG,CAAC,CAAC,EACEJ,CACT,CCbA,IAAIK,IAEH,SAAUA,EAAmB,CAC5BA,EAAkB,KAAU,OAC5BA,EAAkB,MAAW,OAC/B,GAAGA,KAAsBA,GAAoB,CAAC,EAAE,EAChD,SAASC,GAAYC,EAAgBC,EAAW,OAAQ,CACtD,GAAI,CAACD,EAAgB,OAAOC,EAC5B,GAAM,CACJ,EAAAC,EACA,EAAAC,EACA,KAAAC,EACA,MAAAC,EACA,OAAAC,CACF,EAAIN,EACJ,MAAO,GAAGE,OAAOC,OAAOC,OAAUE,OAAYD,GAChD,CACA,IAAME,GAAuBC,GAAW,SAAiBC,EAAOC,EAAK,CACnE,GAAM,CACJ,WAAAC,EACA,MAAAC,EACA,UAAAC,CACF,EAAIJ,EACJ,OAAAK,EAAU,IAAM,CACd,IAAMC,EAAgBC,GAAS,CACzBA,EAAM,OAAS,WACjBA,EAAM,gBAAgB,EACtBH,EAAU,EAEd,EACMI,EAAoBD,GAAS,CAC7BA,EAAM,cAAgB,SACG,QAAQA,EAAM,kBAAkB,SAAWA,EAAM,OAAO,QAAQ,eAAe,CAAC,GAEzG,SAAS,yBAAyB,kBACpC,SAAS,cAAc,KAAK,CAEhC,EAEA,OAAAE,EAAO,iBAAiB,UAAWH,CAAa,EAChDG,EAAO,iBAAiB,cAAeD,EAAmB,CACxD,QAAS,EACX,CAAC,EACD,SAAS,KAAK,UAAU,IAAIE,EAAkB,EACvC,IAAM,CACXD,EAAO,oBAAoB,UAAWH,CAAa,EACnDG,EAAO,oBAAoB,cAAeD,EAAmB,CAC3D,QAAS,EACX,CAAC,EACD,SAAS,KAAK,UAAU,OAAOE,EAAkB,CACnD,CACF,EAAG,CAAC,CAAC,EACeC,GAA2BC,EAAM,MAAO,CAC1D,IAAKX,EACL,UAAW,kCACX,KAAM,eACN,MAAO,CACL,GAAGY,GACH,OAAQb,EAAM,gBAAgB,OAC9B,eAAgBE,IAAeY,EAAiB,QAAU,aAAe,QAC3E,EACA,QAASV,EACT,SAAU,CAAcW,EAAKC,EAAO,IAAK,CACvC,KAAM,eACN,QAAS,CACP,QAAS,CACX,EACA,QAAS,CACP,QAAS,CACX,EACA,KAAM,CACJ,QAAS,EACT,WAAY,CACV,SAAU,CACZ,CACF,EACA,WAAYb,EAAM,kBAClB,MAAO,CACL,IAAK,EACL,KAAM,EACN,MAAO,EACP,OAAQ,EACR,MAAO,OACP,OAAQ,OACR,UAAW,aACX,SAAU,WACV,YAAa,OACb,gBAAiBH,EAAM,gBAAgB,eACzC,CACF,CAAC,EAAgBe,EAAKE,GAAa,CACjC,SAAUjB,EAAM,SAChB,WAAYE,EACZ,aAAcF,EAAM,aACpB,cAAeA,EAAM,cACrB,aAAcA,EAAM,aACpB,gBAAiBA,EAAM,gBACvB,MAAOA,EAAM,MACb,UAAWI,CACb,CAAC,CAAC,CACJ,CAAC,EAAG,SAAS,IAAI,CACnB,CAAC,EACKS,GAAiB,CACrB,MAAO,OACP,UAAW,aACX,WAAY,YACZ,SAAU,QACV,QAAS,OACT,WAAY,aACZ,IAAK,EACL,KAAM,EACN,MAAO,EACP,OAAQ,CACV,EACMK,GAAiB,CACrB,OAAQ,OACR,QAAS,OACT,aAAc,GACd,OAAQ,UACR,SAAU,QACZ,EACMR,GAAqB,2BAarBS,GAAaC,GAAQ,SAAoBpB,EAAO,CACpD,IAAIqB,EAA+BC,EAAqBC,EAAsBC,EAAsCC,EACpH,IAAMC,EAAUC,EAAO,IAAI,EACrB,CAACC,EAAQC,CAAS,EAAIC,EAAS,EAAK,EACpC,CAACC,EAAaC,CAAc,EAAIF,EAAS,EAAK,EAC9C,CAACG,EAAqBC,CAAsB,EAAIJ,EAAS,EAAK,EAC9D,CAACK,CAAU,EAAIL,EAAS,IAAMM,GAAa,QAAQ,IAAMA,GAAa,MAAM,EAClF/B,EAAU,IAAM,CACd2B,EAAeK,GAAiB,CAAC,EACjCH,EAAuBI,EAAQ,SAAS,GAAKA,EAAQ,QAAQ,CAAC,CAChE,EAAG,CAAC,CAAC,EACL,IAAMC,EAAsB,GAAAjB,EAAsBtB,EAAM,gBAAkB,MAAQsB,IAAwB,SAAmBD,EAAgCC,EAAoB,aAAe,MAAQD,IAAkC,SAAkBA,EAA8B,SAAYrB,EAAM,aAAa,UAAU,SAAW,OAExUwC,EAAgBP,EAAsB,aAAaM,KAAuBA,EAC1ErC,EAAauC,GAAqBC,GAClCA,EAAK,MAAQ1C,EAAM,aAAa,MAAQ,GACnCc,EAAiB,SAEnBd,EAAM,aAAa,YAAcA,EAAM,UAC/C,EACKG,EAAQ,CACZ,cAAeH,EAAM,cAAc,gBAAgB,cACnD,gBAAiBA,EAAM,aAAa,gBACpC,gBAAiBA,EAAM,cAAc,WACrC,iBAAkBA,EAAM,aAAa,mBAAmB,iBACxD,UAAa,GAAAuB,EAAuBvB,EAAM,iBAAmB,MAAQuB,IAAyB,SAAkBA,EAAqB,WAAc,CAACoB,GAAc3C,EAAM,cAAc,SAAS,EAAIA,EAAM,cAAc,UAAY,CACjO,SAAU,GACV,WAAY4C,GACZ,WAAY,GACd,EACA,aAAgB,GAAApB,EAAuCxB,EAAM,cAAc,mBAAqB,MAAQwB,IAAyC,SAAkBA,EAAqC,cAAiB,CAACmB,GAAc3C,EAAM,cAAc,gBAAgB,YAAY,EAAIA,EAAM,cAAc,gBAAgB,aAAe,CAC7U,SAAU,GACV,WAAY4C,GACZ,WAAY,GACd,EACA,UAAa,GAAAnB,EAAuBzB,EAAM,gBAAkB,MAAQyB,IAAyB,SAAkBA,EAAqB,WAAc,CAACkB,GAAc3C,EAAM,aAAa,SAAS,EAAIA,EAAM,aAAa,UAAY,CAC9N,SAAU,GACV,WAAY4C,GACZ,WAAY,GACd,EAEA,cAAeJ,EACf,MAAOxC,EAAM,aAAa,MAC1B,UAAWA,EAAM,aAAa,IAC9B,aAAcA,EAAM,aAAa,aACjC,OAAQV,GAAYU,EAAM,aAAa,MAAM,EAC7C,eAAgBA,EAAM,UACtB,cAAeA,EAAM,SACrB,eAAgBA,EAAM,UACtB,cAAeA,EAAM,aAAa,YAAY,SAC9C,eAAgBA,EAAM,aAAa,YAAY,UAC/C,eAAgBA,EAAM,aAAa,YAAY,UAC/C,0BAA2B,GAC3B,kBAAmB,EACnB,eAAgB,GAChB,OAAQ,GACR,QAAS,EACT,OAAQA,EAAM,gBAAgB,OAC9B,kBAAmB,GACnB,kBAAmBA,EAAM,gBAAgB,UAC3C,EACM6C,EAActC,GAAS,CAE3BA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EAClB,CAAAwB,GACJF,EAAU,EAAI,CAChB,EACA,OAAoBjB,EAAM,MAAO,CAC/B,MAAO,CACL,GAAGM,GACH,GAAGlB,EAAM,MACT,cAAe+B,EAAc,OAAS,OACtC,QAASA,EAAc,GAAK,CAC9B,EACA,SAAU,CAAchB,EAAK,SAAU,CACrC,aAAc,cACd,MAAO,CACL,MAAO,OACP,OAAQ,OACR,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,WAAY,OACZ,OAAQ,UACR,MAAO,UACP,OAAQ,OACR,QAAS,UACT,QAAS,CACX,EACA,QAAS8B,EACT,SAAU7C,EAAM,WAAa8C,EAAe,QAAU3C,EAAM,eAA8BY,EAAK,MAAO,CACpG,IAAK,mCACL,IAAKZ,EAAM,eAAe,IAC1B,MAAOA,EAAM,cACb,OAAQA,EAAM,aAChB,CAAC,EAAiBY,EAAKgC,GAAY,CACjC,MAAO5C,EAAM,eACb,MAAOA,EAAM,cACb,OAAQA,EAAM,aAChB,CAAC,CACH,CAAC,EAAgBY,EAAKiC,GAAiB,CACrC,SAAUpB,GAAU,CAACO,GAA2BpB,EAAKjB,GAAS,CAC5D,IAAK4B,EACL,WAAYxB,EACZ,SAAUF,EAAM,SAChB,aAAcA,EAAM,aACpB,cAAeA,EAAM,cACrB,gBAAiBA,EAAM,gBACvB,aAAcA,EAAM,aACpB,MAAOG,EACP,UAAW,IAAM0B,EAAU,EAAK,CAClC,CAAC,CACH,CAAC,CAAC,CACJ,CAAC,CACH,EAAG,CAGH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASW;AAAA,eACInB;AAAA;AAAA,WAIf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAWU,CAAC,EACJuC,GAAQ9B,GACf+B,GAAoB/B,GAAY,CAC9B,SAAU,CACR,MAAO,QAEP,KAAMgC,EAAY,SACpB,EAQA,SAAU,CACR,MAAO,OACP,KAAMA,EAAY,KAClB,QAAS,OAAO,OAAOL,CAAc,EACrC,aAAc,OAAO,OAAOA,CAAc,EAAE,IAAIM,CAAS,EACzD,wBAAyB,EAC3B,EACA,UAAW,CACT,MAAO,QACP,KAAMD,EAAY,MAClB,aAAc,OACd,OAAQnD,GAASA,EAAM,WAAa8C,EAAe,MACrD,EACA,UAAW,CACT,MAAO,OACP,KAAMK,EAAY,gBAClB,iBAAkB,CAAC,MAAO,MAAO,KAAK,EACtC,OAAQnD,GAASA,EAAM,WAAa8C,EAAe,OACrD,EACA,SAAU,CACR,MAAO,OACP,KAAMK,EAAY,OAClB,eAAgB,GAChB,aAAc,EAChB,EACA,aAAc,CACZ,MAAO,QACP,KAAMA,EAAY,OAClB,YAAa,eACb,SAAU,CACR,YAAa,CACX,MAAO,OACP,KAAMA,EAAY,OAClB,YAAa,cACb,SAAU,CACR,SAAU,CACR,MAAO,OACP,KAAMA,EAAY,KAClB,QAAS,OAAO,OAAOL,CAAc,EACrC,aAAc,OAAO,OAAOA,CAAc,EAAE,IAAIM,CAAS,EACzD,wBAAyB,EAC3B,EACA,UAAW,CACT,MAAO,QACP,KAAMD,EAAY,MAClB,aAAc,sBACd,OAAQ,CAAC,CACP,SAAAE,CACF,IACSA,IAAaP,EAAe,MAEvC,EACA,UAAW,CACT,MAAO,OACP,KAAMK,EAAY,gBAClB,iBAAkB,CAAC,MAAO,MAAO,KAAK,EACtC,OAAQ,CAAC,CACP,SAAAE,CACF,IAAMA,IAAaP,EAAe,OACpC,EACA,SAAU,CACR,MAAO,YACP,KAAMK,EAAY,OAClB,eAAgB,GAChB,aAAc,GACd,IAAK,EACL,IAAK,GACP,CACF,CACF,EACA,UAAW,CACT,MAAO,OAEP,KAAMA,EAAY,KAClB,gBAAiB,EACnB,EACA,UAAW,CACT,MAAO,QACP,KAAMA,EAAY,MAClB,aAAc,MAChB,EACA,mBAAoB,CAClB,MAAO,cACP,KAAMA,EAAY,OAClB,YAAa,cACb,SAAU,CACR,gBAAiB,CACf,MAAO,OACP,KAAMA,EAAY,OAClB,aAAc,WAChB,EACA,iBAAkB,CAChB,MAAO,QACP,KAAMA,EAAY,MAClB,aAAc,iBAChB,CACF,CACF,EACA,YAAa,CACX,MAAO,UACP,KAAMA,EAAY,KAClB,QAAS,OAAO,OAAOG,EAAsB,EAC7C,aAAc,OAAO,KAAKA,EAAsB,EAAE,IAAIF,CAAS,EAC/D,aAAcE,GAAuB,SACvC,EACA,gBAAiB,CACf,MAAO,aACP,KAAMH,EAAY,KAClB,QAAS,OAAO,OAAOI,EAA0B,EACjD,aAAc,OAAO,KAAKA,EAA0B,EAAE,IAAIH,CAAS,EACnE,aAAcG,GAA2B,IAC3C,EACA,gBAAiB,CACf,MAAO,aACP,KAAMJ,EAAY,OAClB,aAAc,QACd,OAAQnD,GAASA,EAAM,kBAAoBuD,GAA2B,IACxE,CACF,CACF,EACA,aAAc,CACZ,MAAO,QACP,YAAa,gBACb,KAAMJ,EAAY,OAClB,SAAU,CACR,WAAY,CACV,MAAO,SACP,KAAMA,EAAY,KAClB,QAAS,OAAO,KAAKrC,CAAgB,EACrC,aAAc,OAAO,OAAOA,CAAgB,EAAE,IAAIsC,CAAS,EAC3D,aAActC,EAAiB,SACjC,EACA,MAAO,CACL,MAAO,QACP,KAAMqC,EAAY,OAClB,aAAc,IACd,IAAK,IACL,IAAK,IACL,eAAgB,GAChB,KAAM,EACN,OAAQnD,GAASA,EAAM,aAAec,EAAiB,QACzD,EACA,IAAK,CACH,MAAO,MACP,KAAMqC,EAAY,OAClB,aAAc,EACd,IAAK,EACL,IAAK,IACL,eAAgB,GAChB,OAAQnD,GAASA,EAAM,aAAec,EAAiB,QACzD,EACA,eAAgB,CACd,MAAO,SACP,KAAMqC,EAAY,QAClB,aAAc,UACd,cAAe,UACf,OAAQ,CAAC,CACP,WAAAjD,CACF,IAAMA,IAAeY,EAAiB,SACxC,EACA,iBAAkB,CAChB,MAAO,OACP,KAAMqC,EAAY,WAClB,aAAc,CACZ,KAAM,SACN,UAAW,IACX,QAAS,EACX,EACA,OAAQ,CAAC,CACP,eAAAK,EACA,WAAAtD,CACF,IAAMA,IAAeY,EAAiB,WAAa0C,CACrD,EACA,aAAc,CACZ,MAAO,SACP,KAAML,EAAY,OAClB,aAAc,GACd,eAAgB,GAChB,IAAK,EACL,OAAQ,CAAC,CACP,WAAAjD,CACF,IAAMA,IAAeY,EAAiB,SACxC,EACA,OAAQ,CACN,YAAa,UACb,KAAMqC,EAAY,OAClB,aAAc,CACZ,EAAG,EACH,EAAG,GACH,KAAM,GACN,OAAQ,EACR,MAAO,iBACT,EACA,SAAU,CACR,MAAO,CACL,KAAMA,EAAY,MAClB,aAAc,iBAChB,EACA,EAAG,CACD,KAAMA,EAAY,OAClB,aAAc,CAChB,EACA,EAAG,CACD,KAAMA,EAAY,OAClB,aAAc,EAChB,EACA,KAAM,CACJ,KAAMA,EAAY,OAClB,aAAc,EAChB,EACA,OAAQ,CACN,KAAMA,EAAY,OAClB,aAAc,CAChB,CACF,CACF,EACA,gBAAiB,CACf,MAAO,aACP,KAAMA,EAAY,MAClB,aAAc,MAChB,EACA,CAACM,GAAuB3C,EAAiB,SAAS,CAAC,EAAG,CACpD,MAAO,YACP,KAAMqC,EAAY,OAClB,KAAM,SACN,OAAQ,CAAC,CACP,WAAAjD,CACF,IAAMA,IAAeY,EAAiB,UACtC,SAAU,GACV,YAAa,UACb,SAAU,CACR,QAAS,CACP,KAAMqC,EAAY,OAClB,aAAc,GACd,KAAM,GACN,IAAK,EACL,IAAK,CACP,EACA,MAAO,CACL,KAAMA,EAAY,OAClB,aAAc,IACd,KAAM,GACN,IAAK,EACL,IAAK,CACP,EAOA,EAAG,CACD,KAAMA,EAAY,OAClB,aAAc,EACd,IAAK,KACL,IAAK,GACP,EACA,EAAG,CACD,KAAMA,EAAY,OAClB,aAAc,EACd,IAAK,KACL,IAAK,GACP,EACA,WAAY,CACV,KAAMA,EAAY,UACpB,CACF,CACF,EACA,CAACM,GAAuB3C,EAAiB,QAAQ,CAAC,EAAG,CACnD,MAAO,YACP,KAAMqC,EAAY,OAClB,KAAM,SACN,YAAa,UACb,OAAQ,CAAC,CACP,WAAAjD,CACF,IAAMA,IAAeY,EAAiB,SACtC,SAAU,GACV,SAAU,CACR,QAAS,CACP,KAAMqC,EAAY,OAClB,aAAc,GACd,KAAM,GACN,IAAK,EACL,IAAK,CACP,EACA,EAAG,CACD,KAAMA,EAAY,OAClB,aAAc,EACd,IAAK,KACL,IAAK,GACP,EACA,WAAY,CACV,KAAMA,EAAY,UACpB,CACF,CACF,EACA,CAACM,GAAuB3C,EAAiB,OAAO,CAAC,EAAG,CAClD,MAAO,YACP,KAAMqC,EAAY,OAClB,KAAM,SACN,YAAa,UACb,OAAQ,CAAC,CACP,WAAAjD,CACF,IAAMA,IAAeY,EAAiB,QACtC,SAAU,GACV,SAAU,CACR,QAAS,CACP,KAAMqC,EAAY,OAClB,aAAc,GACd,KAAM,GACN,IAAK,EACL,IAAK,CACP,EACA,EAAG,CACD,KAAMA,EAAY,OAClB,aAAc,EACd,IAAK,KACL,IAAK,GACP,EACA,WAAY,CACV,KAAMA,EAAY,UACpB,CACF,CACF,CACF,CACF,EACA,cAAe,CACb,MAAO,UACP,YAAa,eACb,KAAMA,EAAY,OAClB,aAAc,CAAC,EAGf,SAAU,CACR,SAAU,CACR,MAAO,QACP,KAAMA,EAAY,KAClB,QAAS,OAAO,OAAOO,EAAoB,EAC3C,aAAc,OAAO,KAAKA,EAAoB,EAAE,IAAIN,CAAS,EAC7D,aAAcM,GAAqB,SACrC,EACA,UAAW,CACT,MAAO,QAEP,KAAMP,EAAY,KAClB,aAAc,CACZ,SAAU,EACZ,EACA,gBAAiB,EACnB,EACA,WAAY,CACV,MAAO,QACP,KAAMA,EAAY,MAClB,aAAc,MAChB,EACA,UAAW,CACT,MAAO,UACP,KAAMA,EAAY,KAClB,QAAS,OAAO,OAAOQ,EAAqB,EAC5C,aAAc,OAAO,KAAKA,EAAqB,EAAE,IAAIP,CAAS,EAC9D,aAAcO,GAAsB,GACpC,wBAAyB,EAC3B,EACA,gBAAiB,CACf,KAAMR,EAAY,OAClB,MAAO,WACP,YAAa,gBACb,SAAU,CACR,aAAc,CACZ,MAAO,OAEP,KAAMA,EAAY,KAClB,aAAc,CACZ,SAAU,EACZ,EACA,gBAAiB,EACnB,EACA,cAAe,CACb,MAAO,QACP,KAAMA,EAAY,MAClB,aAAc,oBAChB,EACA,aAAc,CACZ,MAAO,UACP,KAAMA,EAAY,KAClB,QAAS,OAAO,OAAOS,EAAwB,EAC/C,aAAc,OAAO,KAAKA,EAAwB,EAAE,IAAIR,CAAS,EACjE,aAAcQ,GAAyB,IACzC,CACF,CACF,CACF,CACF,EACA,gBAAiB,CACf,MAAO,WACP,KAAMT,EAAY,OAClB,YAAa,iBACb,SAAU,CACR,gBAAiB,CACf,MAAO,QACP,KAAMA,EAAY,MAClB,aAAc,oBAChB,EACA,OAAQ,CACN,MAAO,UACP,KAAMA,EAAY,OAClB,aAAc,GACd,eAAgB,GAChB,IAAK,EACL,IAAK,EACP,EACA,WAAY,CACV,KAAMA,EAAY,UACpB,CACF,CACF,CACF,CAAC,EACDhC,GAAW,YAAc,SC7tBzB,IAAM0C,GAAa,wJACbC,GAAiB,qCACjBC,GAAgBC,GACbH,GAAW,KAAK,OAAOG,CAAK,EAAE,YAAY,CAAC,EAE9CC,GAAoBC,GAAO,CAC/B,IAAIC,EACJ,GAAM,CAAC,CAAEC,EAAQC,CAAU,GAAKF,EAAqBD,EAAI,QAAQ,QAAS,GAAG,EAAE,MAAMJ,EAAc,KAAO,MAAQK,IAAuB,OAASA,EAAqB,CAAC,KAAM,KAAM,IAAI,EACxL,MAAO,CAACC,EAAQC,EAAa,IAAI,gBAAgBA,CAAU,EAAI,IAAI,CACrE,EACA,SAASC,GAAQJ,EAAK,CACpB,QAAQ,IAAIA,CAAG,EACf,GAAI,CACF,WAAI,IAAIA,CAAG,EACJA,CACT,MAAE,CACA,GAAI,CACF,WAAI,IAAI,WAAWA,GAAK,EACjB,WAAWA,GACpB,MAAE,CAAO,CACX,CAEF,CACA,SAASK,GAAcC,EAAM,CAC3B,OAAIA,IAAS,OAAkB,GAC3B,GAAAA,EAAK,WAAW,GAAG,GAAKA,EAAK,WAAW,GAAG,GAAKA,EAAK,WAAW,GAAG,EAEzE,CAKA,IAAMC,GAAU,KAYVC,GAAQC,GAAQ,SAAe,CACnC,QAAAC,EACA,WAAAC,EACA,aAAAC,EACA,QAAAC,EACA,eAAAC,EACA,YAAAC,EACA,eAAAC,EACA,MAAAC,EACA,OAAAC,EACA,KAAAC,EACA,OAAAC,EACA,KAAAC,EACA,IAAAC,EACA,MAAAC,EACA,SAAAC,CACF,EAAG,CACD,GAAM,CAAC1B,EAAO2B,CAAQ,EAAIC,EAAS,EAAE,EAC/B,CAACC,EAASC,CAAQ,EAAIF,EAAS,EAAK,EACpC,CAACG,EAAWC,CAAU,EAAIJ,EAAS,EAAK,EACxC,CAACK,EAASC,CAAQ,EAAIN,EAAS,EAAK,EACpC,CACJ,eAAAO,EACA,WAAAC,EACA,aAAAC,GACA,cAAAC,GACA,YAAAC,GACA,QAAAC,EACA,aAAAC,EACA,aAAAC,GACA,YAAAC,EACA,aAAAC,EACA,OAAAC,GACA,YAAAC,EACF,EAAI3B,EACE,CACJ,qBAAA4B,GACA,iBAAAC,EACA,mBAAAC,EACA,oBAAAC,EACA,kBAAAC,GACA,cAAAC,EACF,EAAIhC,EACEiC,GAAelB,EAAiB,GAAGC,OAAgBhB,EAAO,SAAWiB,GAAejB,EAAO,gBAAkBiB,QAAkBC,QAAmBC,OAAkB,GAAGC,OAAapB,EAAO,SAAWoB,EAAUpB,EAAO,gBAAkBoB,OAAaA,OAAaA,MACnQc,GAAqBP,GAAuB,GAAG3B,EAAO,SAAW,EAAI4B,OAAsBC,OAAwB7B,EAAO,SAAW,EAAI8B,OAAyBC,OAAwB,GAAG/B,EAAO,SAAW,EAAIgC,QAAmBA,QAAmBhC,EAAO,SAAW,EAAIgC,QAAmBA,OAClSG,GAASC,GAAU,EACnBC,GAAY,IAAM,CAItB,GAHWzB,EAAW,EAAK,EAC3BE,EAAS,EAAK,EACdP,EAAS,EAAE,EACPd,IAAe,QAAUU,GAAQ,CAACM,EAAS,CAC7C,GAAM,CAAC6B,EAAMC,CAAI,EAAIpC,EAAK,MAAM,GAAG,EAC7B,CACJ,QAAAqC,EACA,cAAAC,CACF,EAAIC,GAA0BP,GAAO,OAAQG,CAAI,EAIjD,GAHIE,GACFL,GAAO,SAASK,EAASD,EAAME,CAAa,EAE1C,CAACtD,GAAcgB,CAAI,EAAG,CACxB,IAAMrB,GAAMI,GAAQiB,CAAI,EACpBrB,IAAK6D,EAAO,KAAK7D,GAAK,QAAQ,GAGxC,EACM8D,GAAeC,EAAYjE,GAC3BA,IAAU,IAAM,CAACD,GAAcC,CAAK,GACtC8B,EAAS,EAAI,EACboC,GAAa,MAAM,OAAO,EACnB,IAEF,GACN,CAACnE,EAAa,CAAC,EACZoE,GAAeF,EAAYG,GAAS,CACxCtC,EAAS,EAAK,EACdH,EAASyC,EAAM,OAAO,KAAK,CAC7B,EAAG,CAAC,CAAC,EACCC,GAAcJ,EAAYG,GAAS,CACvClC,EAAS,EAAI,CACf,EAAG,CAAC,CAAC,EACCoC,GAAaL,EAAYG,GAAS,CACtClC,EAAS,EAAK,EACdJ,EAAS,EAAK,CAChB,EAAG,CAAC,CAAC,EACCyC,GAAeN,EAAYG,GAAS,CAExC,GADAA,EAAM,eAAe,EACjB,CAAArC,EAEJ,IADAC,EAAW,EAAI,EACXpB,IAAY,YAAa,CAC3B,GAAM,CAACR,EAAQC,CAAU,EAAIJ,GAAkBa,CAAY,EAC3D,GAAI,CAACkD,GAAahE,CAAK,GAAK,CAACI,GAAU,CAACC,EAAY,CAClD2B,EAAW,EAAK,EAChB,OAEF3B,EAAW,IAAI,SAAUL,CAAK,EAC9B,MAAM,WAAWI,mBAAyB,CACxC,OAAQ,OACR,KAAM,UACN,QAAS,CACP,eAAgB,iDAClB,EACA,KAAMC,EAAW,SAAS,CAC5B,CAAC,EAAE,KAAKmE,GAAY,CAClBf,GAAU,EACN5C,IAAe,WAA+Da,IAAS,CAC7F,CAAC,EAAE,MAAM+C,GAAS,CAChB,QAAQ,MAAMA,CAAK,EACnBzC,EAAW,EAAK,EAChBF,EAAS,EAAI,EACboC,GAAa,MAAM,OAAO,CAC5B,CAAC,EAEH,GAAItD,IAAY,QAAS,CACvB,GAAI,CAACoD,GAAahE,CAAK,EAAG,CACxBgC,EAAW,EAAK,EAChB,OAEF,IAAM0C,EAAY,SAAS,mBAAmB1E,CAAK,IAC7C2E,EAAgB,aAAa,mBAAmB3D,CAAc,IAE9D4D,GADe,CAAC,CAAC5D,GAAkBA,IAAmB,IAC5B0D,EAAY,IAAMC,EAAgBD,EAClE,MAAM,4CAA4C3D,IAAW,CAC3D,OAAQ,OACR,KAAM,UACN,QAAS,CACP,eAAgB,mCAClB,EACA,KAAM6D,EACR,CAAC,EAAE,KAAK,IAAM,CACZnB,GAAU,EACN5C,IAAe,WAA+Da,IAAS,CAC7F,CAAC,EAAE,MAAM+C,IAAS,CAChB,QAAQ,MAAMA,EAAK,EACnBzC,EAAW,EAAK,EAChBF,EAAS,EAAI,EACboC,GAAa,MAAM,OAAO,CAC5B,CAAC,EAEH,GAAItD,IAAY,YAAa,CAC3B,GAAI,CAACoD,GAAahE,CAAK,EAAG,CACxBgC,EAAW,EAAK,EAChB,OAEF,IAAM6C,EAAO,IAAI,SAAST,EAAM,MAAM,EAChCU,EAAU,OAAO,YAAYD,EAAK,QAAQ,CAAC,EACjD,MAAM,2BAA2B5D,IAAe,CAC9C,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,OAAQ,kBACV,EACA,KAAM,KAAK,UAAU6D,CAAO,CAC9B,CAAC,EAAE,KAAK,IAAM,CACZrB,GAAU,EAC0C/B,IAAS,CAC/D,CAAC,EAAE,MAAM+C,GAAS,CAChB,QAAQ,MAAMA,CAAK,EACnBzC,EAAW,EAAK,EAChBF,EAAS,EAAI,EACboC,GAAa,MAAM,OAAO,CAC5B,CAAC,EAEH,GAAItD,IAAY,cAAe,CAC7B,GAAI,CAACoD,GAAahE,CAAK,EAAG,CACxBgC,EAAW,EAAK,EAChB,OAEF,IAAM+C,EAAW,IAAI,SAASX,EAAM,MAAM,EACpCS,EAAO,OAAO,YAAYE,EAAS,QAAQ,CAAC,EAClDF,EAAK,cAAgB,SAAS,IAC9B,MAAM;AAAA,UACD,CACH,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,OAAQ,kBACV,EACA,KAAM,KAAK,UAAUA,CAAI,CAC3B,CAAC,EAAE,KAAK,IAAM,CACZpB,GAAU,EACN5C,IAAe,WAA+Da,IAAS,CAC7F,CAAC,EAAE,MAAM+C,GAAS,CAChB,QAAQ,MAAMA,CAAK,EACnBzC,EAAW,EAAK,EAChBF,EAAS,EAAI,EACboC,GAAa,MAAM,OAAO,CAC5B,CAAC,GAEL,EAAG,CAACpD,EAAcG,EAAajB,EAAO0B,EAAUsC,GAAcjC,CAAS,CAAC,EAClEmC,GAAec,GAAqB,EACpCC,GAAkB9D,EAAM,YAAc,eAAewB,EAAY,oBAAoBA,EAAY,aAAe,KAChHuC,GAAgB/D,EAAM,YAAc,eAAewB,EAAY,kBAAkBA,EAAY,aAAe,KAC5GwC,GAAehE,EAAM,aAAe,GAAGyB,EAAa,aAAaA,EAAa,aAAaA,EAAa,gBAAgBA,EAAa,cAAgB,KACrJwC,GAAejE,EAAM,aAAe,eAAeuB,GAAa,iBAAiBA,GAAa,cAAgB,KAC9G2C,GAAe,CACnB,QAAS,CACP,EAAG,CACL,EACA,MAAO,CACL,EAAG,CAAC,EAAG,GAAI,EAAG,CAAC,EACf,WAAY,CACV,SAAU,EACZ,CACF,CACF,EACMC,GAAgB,CACpB,QAAS,CACP,UAAWC,GAAiBN,GAAiBE,GAAcC,EAAY,CACzE,EACA,QAAS,CACP,UAAWG,GAAiBL,GAAeC,GAAcC,EAAY,CACvE,CACF,EACA,OAAoBI,EAAKC,EAAO,IAAK,CACnC,MAAO,CACL,GAAGhE,EACH,GAAGiE,GACH,oCAAqCvE,EAAM,gBAC7C,EACA,SAAUkE,GACV,QAASnB,GACT,SAAuByB,EAAM,OAAQ,CACnC,MAAO,CACL,MAAO,OACP,OAAQ,OACR,QAAS,OACT,SAAU,WACV,cAAerE,IAAW,WAAa,SAAW,MAClD,MAAOF,EAAO,MACd,IAAKA,EAAO,SAAW,EAAII,CAC7B,EACA,SAAU+C,GACV,OAAQ,OACR,SAAU,CAAC3D,IAAY,eAA8B4E,EAAK,QAAS,CACjE,KAAM,SACN,KAAM,UACN,MAAOtE,CACT,CAAC,EAAgBsE,EAAKC,EAAO,MAAO,CAClC,KAAM,QACN,KAAM,QACN,YAAatE,EAAM,YACnB,MAAOnB,EACP,UAAW,GAAGS,yBACd,SAAU0D,GACV,QAASE,GACT,OAAQC,GACR,aAAc,MACd,eAAgB,MAChB,YAAa,MACb,WAAY,QACZ,MAAO,CACL,GAAGsB,GACH,QAASvC,GACT,aAAAZ,EACA,SAAU,GACV,GAAGpB,EACH,WAAYF,EAAM,KAClB,OAAQ0B,GAAS,OAASC,GAC1B,MAAO3B,EAAM,MACb,UAAWoE,GAAiBN,GAAiBE,GAAcC,EAAY,CACzE,EACA,SAAUE,GACV,QAAS,GACT,QAASrD,EAAU,UAAY,UAC/B,WAAY,CACV,SAAU,EACZ,EACA,iBAAkB,EACpB,CAAC,EAAG,CAACb,EAAO,cAAgBW,GAA0ByD,EAAKK,GAAS,CAClE,aAAczE,EAAO,aACrB,eAAgBe,EAChB,WAAYC,EACZ,aAAcC,GACd,QAASG,EACT,MAAOrB,EAAM,KACf,CAAC,EAAGC,EAAO,cAA6BuE,EAAM,MAAO,CACnD,MAAO,CACL,SAAUvE,EAAO,SAAW,WAAa,WACzC,IAAKA,EAAO,SAAWA,EAAO,gBAAkB,EAChD,MAAOA,EAAO,SAAWA,EAAO,gBAAkB,EAClD,OAAQA,EAAO,SAAWA,EAAO,gBAAkB,CACrD,EACA,SAAU,CAAcoE,EAAKC,EAAO,MAAO,CACzC,KAAM,SACN,MAAOrE,EAAO,MACd,MAAO,CACL,GAAGwE,GACH,MAAOxE,EAAO,SAAWA,EAAO,gBAAkB,OAClD,OAAQyB,GAAS,OAASC,GAC1B,OAAQ,UACR,QAASQ,GACT,aAAclC,EAAO,SAAWqB,EAAerB,EAAO,gBAAkBqB,EAExE,SAAU,GACV,GAAGrB,EAAO,WACV,WAAYA,EAAO,KACnB,MAAOA,EAAO,MACd,OAAQ,EACR,UAAW0E,GAAgB1E,CAAM,CACnC,CACF,CAAC,EAAGW,GAA0ByD,EAAK,MAAO,CACxC,MAAO,CACL,aAAcpE,EAAO,SAAWqB,EAAerB,EAAO,gBAAkBqB,EACxE,SAAU,WACV,QAAS,OACT,eAAgB,SAChB,WAAY,SACZ,MAAO,OACP,OAAQ,OACR,MAAO,EACP,OAAQ,EACR,MAAOrB,EAAO,MACd,WAAYA,EAAO,IACrB,EACA,SAAuBoE,EAAKK,GAAS,CACnC,MAAOzE,EAAO,KAChB,CAAC,CACH,CAAC,CAAC,CACJ,CAAC,CAAC,CACJ,CAAC,CACH,CAAC,CACH,EAAG,CAAC,IAAIX,mGAAwG,CAAC,EAC3GoF,GAAUE,GAAS,CACvB,IAAMC,EAAkBD,EAAM,aAI1B,CAAC,EAJwC,CAC3C,SAAU,WACV,IAAK,kBACL,MAAOA,EAAM,eAAiBA,EAAM,aAAeA,EAAM,OAC3D,EACA,OAAoBP,EAAKC,EAAO,IAAK,CACnC,MAAO,CACL,OAAQ,GACR,MAAO,GACP,GAAGO,CACL,EACA,QAAS,CACP,OAAQ,CACV,EACA,QAAS,CACP,OAAQ,GACV,EACA,WAAY,CACV,SAAU,EACV,OAAQ,GACV,EACA,SAAuBR,EAAKC,EAAO,IAAK,CACtC,QAAS,CACP,MAAO,CACT,EACA,QAAS,CACP,MAAO,CACT,EACA,SAAuBE,EAAM,MAAO,CAClC,MAAO,6BACP,MAAO,KACP,OAAQ,KACR,MAAO,CACL,KAAM,eACN,MAAOI,EAAM,KACf,EACA,SAAU,CAAcP,EAAK,OAAQ,CACnC,EAAG,2NACH,KAAM,eACN,QAAS,KACX,CAAC,EAAgBA,EAAK,OAAQ,CAC5B,EAAG,yKACH,KAAM,cACR,CAAC,CAAC,CACJ,CAAC,CACH,CAAC,CACH,CAAC,CACH,EACAS,GAAoBvF,GAAO,CACzB,QAAS,CACP,MAAO,UACP,KAAMwF,EAAY,KAClB,QAAS,CAAC,QAAS,YAAa,YAAa,aAAa,EAC1D,aAAc,CAAC,QAAS,YAAa,YAAa,cAAc,EAChE,aAAc,OAChB,EACA,aAAc,CACZ,MAAO,MACP,YAAa,uDACb,KAAMA,EAAY,OAClB,OAAQH,GAASA,EAAM,UAAY,WACrC,EACA,QAAS,CACP,MAAO,KACP,YAAa,4BACb,KAAMG,EAAY,OAClB,OAAQH,GAASA,EAAM,UAAY,OACrC,EACA,eAAgB,CACd,MAAO,aACP,KAAMG,EAAY,OAClB,YAAa,QACb,SAAU,GACV,OAAQH,GAASA,EAAM,UAAY,OACrC,EACA,YAAa,CACX,MAAO,KACP,YAAa,WACb,KAAMG,EAAY,OAClB,OAAQH,GAASA,EAAM,UAAY,WACrC,EACA,eAAgB,CACd,MAAO,KACP,YAAa,OACb,KAAMG,EAAY,OAClB,OAAQH,GAASA,EAAM,UAAY,aACrC,EACA,WAAY,CACV,MAAO,UACP,KAAMG,EAAY,KAClB,QAAS,CAAC,OAAQ,SAAS,EAC3B,aAAc,CAAC,YAAa,cAAc,EAC1C,aAAc,MAChB,EACA,KAAM,CACJ,MAAO,WACP,KAAMA,EAAY,KAClB,OAAQH,GAASA,EAAM,aAAe,SACxC,EACA,SAAU,CACR,MAAO,SACP,KAAMG,EAAY,aAClB,OAAQH,GAASA,EAAM,aAAe,MACxC,EACA,OAAQ,CACN,MAAO,SACP,KAAMG,EAAY,KAClB,QAAS,CAAC,aAAc,UAAU,EAClC,wBAAyB,GACzB,OAAQH,GAASA,EAAM,OAAO,QAChC,EACA,KAAM,CACJ,KAAMG,EAAY,KAClB,MAAO,OACP,SAAU,UACZ,EACA,MAAO,CACL,MAAO,QACP,KAAMA,EAAY,OAClB,SAAU,CACR,YAAa,CACX,MAAO,cACP,KAAMA,EAAY,OAClB,aAAc,gBAChB,EACA,iBAAkB,CAChB,MAAO,IACP,KAAMA,EAAY,MAClB,aAAc,oBAChB,EACA,KAAM,CACJ,MAAO,OACP,KAAMA,EAAY,MAClB,aAAc,SAChB,EACA,MAAO,CACL,MAAO,OACP,KAAMA,EAAY,MAClB,aAAc,MAChB,EACA,OAAQ,CACN,MAAO,SACP,KAAMA,EAAY,QAClB,aAAc,OACd,cAAe,OACjB,EACA,YAAa,CACX,MAAO,IACP,KAAMA,EAAY,OAClB,eAAgB,GAChB,IAAK,EACL,aAAc,GACd,OAAQH,GAASA,EAAM,MACzB,EACA,QAAS,CACP,MAAO,UACP,KAAMG,EAAY,YAClB,UAAW,iBACX,aAAc,CAAC,UAAW,kBAAkB,EAC5C,aAAc,GACd,UAAW,CAAC,aAAc,eAAgB,gBAAiB,aAAa,EACxE,YAAa,CAAC,IAAK,IAAK,IAAK,GAAG,EAChC,IAAK,CACP,EACA,aAAc,CACZ,MAAO,SACP,KAAMA,EAAY,OAClB,eAAgB,GAChB,IAAK,EACL,aAAc,CAChB,EACA,YAAa,CACX,KAAMA,EAAY,OAClB,MAAO,QACP,SAAU,GACV,SAAU,CACR,eAAgB,CACd,MAAO,OACP,KAAMA,EAAY,OAClB,eAAgB,GAChB,aAAc,CAChB,EACA,aAAc,CACZ,MAAO,KACP,KAAMA,EAAY,OAClB,eAAgB,GAChB,aAAc,CAChB,EACA,WAAY,CACV,MAAO,QACP,KAAMA,EAAY,MAClB,aAAc,MAChB,CACF,CACF,EACA,aAAc,CACZ,KAAMA,EAAY,OAClB,MAAO,SACP,SAAU,GACV,SAAU,CACR,YAAa,CACX,MAAO,QACP,KAAMA,EAAY,OAClB,eAAgB,GAChB,aAAc,CAChB,EACA,YAAa,CACX,MAAO,QACP,KAAMA,EAAY,MAClB,aAAc,uBAChB,CACF,CACF,EACA,aAAc,CACZ,KAAMA,EAAY,OAClB,MAAO,SACP,SAAU,GACV,SAAU,CACR,YAAa,CACX,MAAO,QACP,KAAMA,EAAY,MAClB,aAAc,kBAChB,EACA,QAAS,CACP,MAAO,WACP,KAAMA,EAAY,OAClB,IAAK,KACL,IAAK,IACL,aAAc,CAChB,EACA,QAAS,CACP,MAAO,WACP,KAAMA,EAAY,OAClB,IAAK,KACL,IAAK,IACL,aAAc,CAChB,EACA,WAAY,CACV,MAAO,WACP,KAAMA,EAAY,OAClB,IAAK,EACL,IAAK,IACL,aAAc,CAChB,CACF,CACF,CACF,CACF,EACA,OAAQ,CACN,MAAO,SACP,KAAMA,EAAY,OAClB,SAAU,CACR,aAAc,CACZ,MAAO,OACP,KAAMA,EAAY,QAClB,aAAc,EAChB,EACA,MAAO,CACL,MAAO,QACP,KAAMA,EAAY,OAClB,aAAc,WAChB,EACA,WAAY,CACV,KAAMA,EAAY,KAClB,MAAO,OACP,SAAU,UACZ,EACA,KAAM,CACJ,MAAO,OACP,KAAMA,EAAY,MAClB,aAAc,MAChB,EACA,MAAO,CACL,MAAO,OACP,KAAMA,EAAY,MAClB,aAAc,MAChB,EACA,SAAU,CACR,MAAO,SACP,KAAMA,EAAY,QAClB,aAAc,EAChB,EACA,gBAAiB,CACf,MAAO,QACP,KAAMA,EAAY,OAClB,IAAK,EACL,aAAc,IACd,eAAgB,GAChB,OAAQH,GAAS,CAACA,EAAM,QAC1B,EACA,gBAAiB,CACf,MAAO,QACP,KAAMG,EAAY,OAClB,IAAK,EACL,aAAc,EACd,eAAgB,GAChB,OAAQH,GAAS,CAACA,EAAM,QAC1B,EACA,cAAe,CACb,MAAO,UACP,KAAMG,EAAY,YAClB,UAAW,uBACX,aAAc,CAAC,UAAW,kBAAkB,EAC5C,aAAc,GACd,UAAW,CAAC,mBAAoB,qBAAsB,sBAAuB,mBAAmB,EAChG,YAAa,CAAC,IAAK,IAAK,IAAK,GAAG,EAChC,IAAK,CACP,EACA,aAAc,CACZ,KAAMA,EAAY,OAClB,MAAO,SACP,SAAU,GACV,SAAU,CACR,YAAa,CACX,MAAO,QACP,KAAMA,EAAY,MAClB,aAAc,kBAChB,EACA,QAAS,CACP,MAAO,WACP,KAAMA,EAAY,OAClB,IAAK,KACL,IAAK,IACL,aAAc,CAChB,EACA,QAAS,CACP,MAAO,WACP,KAAMA,EAAY,OAClB,IAAK,KACL,IAAK,IACL,aAAc,CAChB,EACA,WAAY,CACV,MAAO,WACP,KAAMA,EAAY,OAClB,IAAK,EACL,IAAK,IACL,aAAc,CAChB,CACF,CACF,CACF,CACF,EACA,IAAK,CACH,MAAO,MACP,KAAMA,EAAY,OAClB,eAAgB,GAChB,IAAK,EACL,aAAc,GACd,OAAQH,GAASA,EAAM,OAAO,QAChC,CACF,CAAC,EACD,IAAMH,GAAe,CACnB,iBAAkB,OAClB,WAAY,OACZ,MAAO,OACP,OAAQ,OACR,QAAS,OACT,OAAQ,MACV,EACMF,GAAkB,CACtB,SAAU,WACV,MAAO,OACP,OAAQ,OACR,QAAS,OACT,eAAgB,SAChB,WAAY,QACd,EACA,SAASI,GAAgB1E,EAAQ,CAC/B,OAAIA,EAAO,aACF,GAAGA,EAAO,aAAa,aAAaA,EAAO,aAAa,aAAaA,EAAO,aAAa,gBAAgBA,EAAO,aAAa,cACxH,MAChB,CACA,SAASmE,MAAoBY,EAAS,CACpC,IAAMC,EAAS,CAAC,EAChB,OAAAD,EAAQ,QAAQE,GAAUA,GAAUD,EAAO,KAAKC,CAAM,CAAC,EAChDD,EAAO,KAAK,IAAI,CACzB,CACA,IAAOE,GAAQ5F",
  "names": ["SearchIcon", "props", "p", "ClearIcon", "u", "SpinnerIcon", "motion", "Storage", "name", "resolve", "reject", "request", "window", "e", "key", "value", "setCachedData", "url", "dataToCache", "cache", "Storage", "cacheKey", "data", "checkForCachedData", "VERSION", "isDefaultLocaleId", "localeId", "INDEX_KEY", "getIndexKey", "METADATA_KEY", "getMetadataKey", "getCachedIndex", "indexKey", "cachedIndex", "checkForCachedData", "setCachedIndex", "index", "setCachedData", "metadata", "VERSION", "metadataKey", "fakeResults", "peq", "myers_32", "a", "b", "n", "m", "lst", "pv", "mv", "sc", "i", "eq", "xv", "myers_x", "mhc", "phc", "hsize", "vsize", "j", "start", "vlen", "k", "i1", "pb", "mb", "xh", "ph", "mh", "k1", "mv1", "pv1", "start1", "vlen1", "k2", "score", "i2", "eq1", "pb1", "mb1", "xv1", "xh1", "ph1", "mh1", "k3", "distance", "tmp", "localStorageDebugFlag", "window", "e", "t", "titleCase", "o", "clampText", "n", "isEmptyObject", "createLogger", "DEFAULT_FONT_FAMILY", "getFontFamily", "animationKeyFromLayout", "safeDocument", "safeWindow", "getMetaTagContent", "e", "safeDocument", "checkIfOverLimit", "log", "time", "timeEnd", "createLogger", "localStorageDebugFlag", "isValidUrl", "url", "splitWords", "text", "getUniqueWords", "str", "words", "word", "getNormalizedString", "getNormalizedItem", "item", "normalizedItem", "key", "value", "getMatchRange", "currentRange", "start", "end", "result", "getScoreForSearchIndexItem", "query", "fullQuery", "score", "match", "urlWords", "splitLength", "clamp", "titleWords", "titleIndex", "distance", "titleWord", "headings", "heading", "headingWords", "headingWord", "descriptionIndex", "codeblock", "getSearchIndexItemScore", "normalizedQuery", "queryWords", "total", "queryWord", "useRawSearch", "index", "settings", "se", "path", "safeWindow", "results", "title", "SearchResultTitleType", "itemA", "itemB", "getIndexedScopedToUrl", "rawUrlScope", "scopedIndex", "baseScopeUrlHasVariable", "urlUpToPathVariable", "urlScope", "useSearch", "localeId", "searchIndex", "_setSearchIndex", "ye", "status", "setStatus", "setSearchIndex", "options", "ue", "loadSearchIndex", "metaTag", "safeDocument", "fakeResults", "cachedIndex", "getCachedIndex", "metaTagContent", "isOverLimit", "searchIndexURL", "getSearchIndexURL", "response", "downloadedIndex", "setCachedIndex", "error", "baseURL", "isDefaultLocaleId", "Browser", "isTouch", "window", "navigator", "isChrome", "isWebKit", "isSafari", "isSafariDesktop", "isWindows", "isMacOS", "useCallbackOnMouseMove", "callback", "mousePositionRef", "prevPositionRef", "pe", "te", "event", "Browser", "ref", "clientX", "clientY", "prevCursorPosition", "scrollIntoView", "targetElement", "scrollElement", "offsetTop", "offsetBottom", "targetElementBounds", "scrollElementBounds", "difference", "topAligned", "minOffset", "bottomAligned", "offset", "MAX_DESCRIPTION_LENGTH", "MODAL_MAX_HEIGHT", "VERTICAL_SPACING_MULTIPLIER", "ClearButton", "theme", "type", "onClick", "text", "iconOrText", "p", "ClearIcon", "Divider", "styles", "Input", "Y", "props", "ref", "value", "status", "autofocus", "placeholder", "iconType", "clearButtonType", "onChange", "inputValue", "setInputValue", "ye", "isFocused", "setIsFocused", "inputRef", "pe", "ce", "e", "inputElement", "handleInputClick", "handleClearClick", "ue", "hasInputText", "showClearButton", "verticalSpacing", "searchIcon", "SearchIcon", "u", "inputContainerStyle", "getFontFamily", "SpinnerIcon", "inputStyle", "scrollOffset", "ResultRow", "index", "result", "prevMousePositionRef", "subtitleType", "selected", "localeSlug", "style", "onMouseMove", "onPointerDown", "onNavigateTo", "url", "title", "score", "urlPath", "se", "handleMouseMove", "useCallbackOnMouseMove", "event", "isContained", "borderRadius", "clamp", "subtitleText", "clampText", "handleClick", "focusTrap", "resultContainer", "resultTitle", "localStorageDebugFlag", "QuickMenuSpacer", "layoutContainerStyle", "LayoutContainer", "layoutType", "onKeyDown", "onDismiss", "children", "modalOptions", "layoutStyles", "getLayoutBaseStyles", "innerStyle", "getContainerAnimation", "key", "animationKeyFromLayout", "prop", "Browser", "containerAnimation", "motion", "ModalContainer", "heightIsStatic", "heightTransition", "heightDeps", "scope", "animate", "useAnimate", "fe", "prevHeight", "height", "ScrollView", "isTouch", "canScroll", "setCanScroll", "element", "statusStyle", "StatusMessage", "previewInfoText", "sidebarStyles", "fixedTopStyles", "quickMenuStyles", "layoutOption", "SearchInputClearButtonType", "SearchInputDividerType", "SearchResultTitleType", "SearchResultSubtitleType", "SearchResultItemType", "SearchLayoutType", "SearchEntryType", "SearchIconType", "SearchModal", "urlScope", "inputOptions", "backdropOptions", "resultOptions", "activeLocale", "useLocaleInfo", "localeId", "input", "selectedResultRow", "scrollView", "setSelected", "isKeyboardNavigationDisabled", "setIsKeyboardNavigationDisabled", "query", "setQuery", "deferredQuery", "oe", "results", "useSearch", "selectedResult", "handleResultRowPointerDown", "te", "handleResultRowMouseMove", "previousSelected", "router", "useRouter", "navigateTo", "_router_getRoute", "_route_page_preload", "_route_page", "_router_navigate", "routeId", "pathVariables", "inferInitialRouteFromPath", "route", "window", "handleKeyDown", "maxIndex", "showNoResults", "showDivider", "isItemContained", "spacing", "listPaddingTop", "scrollIntoView", "isSelected", "getViewportSize", "window", "useViewportSizeState", "getState", "state", "setState", "ye", "ue", "handleWindowResize", "EntryPointOptions", "buildShadow", "shadowProperty", "fallback", "x", "y", "blur", "color", "spread", "Overlay", "Y", "props", "ref", "layoutType", "theme", "onDismiss", "ue", "handleKeyDown", "event", "handlePointerDown", "window", "bodyOverflowHidden", "qa", "u", "backdropStyles", "SearchLayoutType", "p", "motion", "SearchModal", "containerStyle", "EntryPoint", "withCSS", "_props_inputOptions_inputFont", "_props_inputOptions", "_props_resultOptions", "_props_resultOptions_subtitleOptions", "_props_inputOptions1", "overlay", "pe", "isOpen", "setIsOpen", "ye", "isOverLimit", "setIsOverLimit", "isSafariTouchDevice", "setIsSafariTouchDevice", "isOnCanvas", "RenderTarget", "checkIfOverLimit", "Browser", "baseInputFontSize", "inputFontSize", "useViewportSizeState", "size", "isEmptyObject", "DEFAULT_FONT_FAMILY", "handleClick", "SearchIconType", "SearchIcon", "AnimatePresence", "Search_default", "addPropertyControls", "ControlType", "titleCase", "iconType", "SearchInputDividerType", "SearchInputClearButtonType", "heightIsStatic", "animationKeyFromLayout", "SearchResultItemType", "SearchResultTitleType", "SearchResultSubtitleType", "emailRegex", "mailchimpRegex", "validateEmail", "email", "parseMailChimpUrl", "url", "_url_replace_match", "domain", "parameters", "safeURL", "isInternalURL", "href", "VERSION", "Input", "withCSS", "service", "redirectAs", "mailchimpURL", "loopsID", "loopsUserGroup", "formsparkID", "getwaitlistAPI", "input", "button", "font", "layout", "link", "gap", "style", "onSubmit", "setEmail", "ye", "isError", "setError", "isLoading", "setLoading", "isFocus", "setFocus", "paddingPerSide", "paddingTop", "paddingRight", "paddingBottom", "paddingLeft", "padding", "borderRadius", "borderObject", "focusObject", "shadowObject", "height", "fixedHeight", "buttonPaddingPerSide", "buttonPaddingTop", "buttonPaddingRight", "buttonPaddingBottom", "buttonPaddingLeft", "buttonPadding", "paddingValue", "buttonPaddingValue", "router", "useRouter", "onSuccess", "path", "hash", "routeId", "pathVariables", "inferInitialRouteFromPath", "window", "validateForm", "te", "formControls", "handleChange", "event", "handleFocus", "handleBlur", "handleSubmit", "response", "error", "emailBody", "userGroupBody", "formBody", "data", "entries", "formData", "useAnimationControls", "focusStylesFrom", "focusStylesTo", "shadowStyles", "borderStyles", "formVariants", "inputVariants", "dynamicBoxShadow", "p", "motion", "containerStyles", "u", "defaultStyle", "Spinner", "getButtonShadow", "props", "noButtonStyles", "addPropertyControls", "ControlType", "shadows", "output", "shadow", "Input_default"]
}
