{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/uU1mtMKXsrVAg8N5hW7w/PCK1x1QLNluYNoEoapwx/cachedIndex.js", "ssg:https://framerusercontent.com/modules/MyBp84Z0p9nUcMimVMnY/BnqcejQBXXxetC6WfHUY/useSearch.js", "ssg:https://framerusercontent.com/modules/tV9haTHllpHHc9Fjue2H/O8BdKaPr0sU4i2x6gdnN/SearchModal.js", "ssg:https://framerusercontent.com/modules/6wAE2eMb2Tl3zrU7u4UL/x5NCBnUd55BvLFPKZws0/Search.js"],
  "sourcesContent": ["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", "import { clamp } from \"framer-motion\";\nimport { useEffect, useMemo, useState } from \"react\";\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/IUldo6dKZIdbnCORBbXK/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  return text.split(RegExp(\"[\\\\s.,;!?\\\\p{P}\\\\p{Z}]+\", \"u\"));\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 distanceScore1 = distance(query, headingWord);\n      if (distanceScore1 <= 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); // Use first `h1` instead of title if the page has one.\n      const heading = item.h1.length && item.h1[0]; // Convert index item to result item.\n      const result = {\n        url: item.url,\n        title: heading ? heading : item.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    \"SearchIndex\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"useSearch\": {\n      \"type\": \"function\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"__FramerMetadata__\": {\n      \"type\": \"variable\"\n    }\n  }\n};\n//# sourceMappingURL=./useSearch.map", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useSearch } from \"https://framerusercontent.com/modules/MyBp84Z0p9nUcMimVMnY/BnqcejQBXXxetC6WfHUY/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/IUldo6dKZIdbnCORBbXK/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 } 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 === SearchInputClearButtonType.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 === SearchInputDividerType.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 !== SearchInputClearButtonType.None;\n  const verticalSpacing = Math.floor(theme ? theme.horizontalSpacing * VERTICAL_SPACING_MULTIPLIER : 0);\n  const searchIcon = iconType === SearchIconType.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 = SearchResultItemType.Contained,\n    subtitleType = SearchResultSubtitleType.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 === SearchResultItemType.Contained;\n  const borderRadius = isContained ? clamp(0, Infinity, theme.borderRadius - theme.spacing) : 0;\n  const subtitleText = subtitleType === SearchResultSubtitleType.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 === SearchLayoutType.FixedTop ? theme.offsetTop : 0,\n    height: layoutType === SearchLayoutType.Sidebar ? \"100%\" : \"auto\",\n    maxHeight: layoutType === SearchLayoutType.QuickMenu ? \"100%\" : \"none\",\n    justifyContent: layoutType === SearchLayoutType.Sidebar ? \"flex-end\" : \"flex-start\",\n    flexDirection: layoutType === SearchLayoutType.Sidebar ? \"column-reverse\" : \"column\"\n  };\n  const innerStyle = {\n    ...layoutContainerStyle,\n    ...layoutStyles,\n    height: layoutType === SearchLayoutType.Sidebar ? \"100%\" : \"auto\",\n    maxHeight: layoutType === SearchLayoutType.QuickMenu ? \"100%\" : \"none\",\n    gap: layoutType === SearchLayoutType.Sidebar ? 0 : theme.gapBetweenStatusAndSearch,\n    backgroundColor: layoutType === SearchLayoutType.Sidebar ? theme.backgroundColor : \"transparent\",\n    justifyContent: layoutType === SearchLayoutType.Sidebar ? \"flex-end\" : \"flex-start\",\n    flexDirection: layoutType === SearchLayoutType.Sidebar ? \"column-reverse\" : \"column\",\n    originX: .5,\n    originY: .5\n  };\n  function getContainerAnimation() {\n    switch (layoutType) {\n      case SearchLayoutType.FixedTop:\n        {\n          const key = animationKeyFromLayout(SearchLayoutType.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 SearchLayoutType.QuickMenu:\n        {\n          const key1 = animationKeyFromLayout(SearchLayoutType.QuickMenu);\n          const prop1 = modalOptions ? modalOptions[key1] : undefined;\n          if (prop1) {\n            return prop1;\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 SearchLayoutType.Sidebar:\n        {\n          const key2 = animationKeyFromLayout(SearchLayoutType.Sidebar);\n          const prop2 = modalOptions ? modalOptions[key2] : undefined;\n          if (prop2) {\n            return prop2;\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 === SearchLayoutType.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 === SearchLayoutType.QuickMenu ? theme.borderRadius : 0,\n    width: \"100%\",\n    display: \"flex\",\n    flexDirection: \"column\",\n    overflow: \"hidden\",\n    boxShadow: layoutType !== SearchLayoutType.Sidebar ? theme.shadow : undefined,\n    maxHeight: layoutType === SearchLayoutType.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 !== SearchLayoutType.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 === SearchLayoutType.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 === SearchLayoutType.FixedTop ? \"none\" : theme.width,\n    width: layoutType === SearchLayoutType.FixedTop ? `calc(100% - ${verticalSpacing * 2}px` : \"100%\",\n    boxShadow: layoutType !== SearchLayoutType.Sidebar && statusStyle.boxShadow,\n    borderRadius: layoutType !== SearchLayoutType.Sidebar && theme.borderRadius\n  }; // Show less text on fixed text to look nicer on mobile\n  const previewInfoText = layoutType === SearchLayoutType.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 SearchLayoutType.Sidebar:\n      return {\n        ...sidebarStyles,\n        width: theme.width\n      };\n    case SearchLayoutType.FixedTop:\n      return fixedTopStyles;\n    case SearchLayoutType.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 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    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  });\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 navigateTo = useCallback(url => {\n    if (status === \"no-meta-tag-found\") {\n      return;\n    }\n    window.location.href = url;\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 !== SearchInputDividerType.None);\n  const isItemContained = Boolean(props.resultOptions && props.resultOptions.itemType === SearchResultItemType.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: SearchLayoutType.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    \"SearchIconType\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchModal\": {\n      \"type\": \"reactComponent\",\n      \"name\": \"SearchModal\",\n      \"slots\": [],\n      \"annotations\": {\n        \"framerContractVersion\": \"1\",\n        \"framerSupportedLayoutWidth\": \"fixed\",\n        \"framerSupportedLayoutHeight\": \"fixed\"\n      }\n    },\n    \"SearchInputClearButtonType\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchResultSubtitleType\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchTheme\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchEntryType\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchProps\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchResultItemType\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchLayoutType\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"SearchInputDividerType\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"ResultRow\": {\n      \"type\": \"variable\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"Input\": {\n      \"type\": \"variable\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"__FramerMetadata__\": {\n      \"type\": \"variable\"\n    }\n  }\n};\n//# sourceMappingURL=./SearchModal.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, SearchResultSubtitleType, SearchInputDividerType, SearchInputClearButtonType, SearchLayoutType, SearchIconType } from \"https://framerusercontent.com/modules/tV9haTHllpHHc9Fjue2H/O8BdKaPr0sU4i2x6gdnN/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/IUldo6dKZIdbnCORBbXK/utils.js\";\nimport { Browser } from \"https://framerusercontent.com/modules/PJVBcBLmDteTEAZh3J9Z/keXJyjyE9VnzUcDMayjg/browser.js\";\nvar\n// SITE SEARCH\n// By Anthony and Hunter\nEntryPointOptions;\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 ref, ref1, ref2, ref3, ref4;\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 = ((ref = props.inputOptions) === null || ref === void 0 ? void 0 : (ref1 = ref.inputFont) === null || ref1 === void 0 ? void 0 : ref1.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: ((ref2 = props.resultOptions) === null || ref2 === void 0 ? void 0 : ref2.titleFont) && !isEmptyObject(props.resultOptions.titleFont) ? props.resultOptions.titleFont : {\n      fontSize: 14,\n      fontFamily: DEFAULT_FONT_FAMILY,\n      fontWeight: 500\n    },\n    subtitleFont: ((ref3 = props.resultOptions.subtitleOptions) === null || ref3 === void 0 ? void 0 : ref3.subtitleFont) && !isEmptyObject(props.resultOptions.subtitleOptions.subtitleFont) ? props.resultOptions.subtitleOptions.subtitleFont : {\n      fontSize: 12,\n      fontFamily: DEFAULT_FONT_FAMILY,\n      fontWeight: 500\n    },\n    inputFont: ((ref4 = props.inputOptions) === null || ref4 === void 0 ? void 0 : ref4.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      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    \"Shadow\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\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    \"default\": {\n      \"type\": \"reactComponent\",\n      \"name\": \"EntryPoint\",\n      \"slots\": [],\n      \"annotations\": {\n        \"framerSupportedLayoutHeight\": \"any-prefer-fixed\",\n        \"framerSupportedLayoutWidth\": \"any-prefer-fixed\",\n        \"framerContractVersion\": \"1\",\n        \"framerIntrinsicHeight\": \"40\",\n        \"framerIntrinsicWidth\": \"40\",\n        \"framerDisableUnlink\": \"*\"\n      }\n    },\n    \"EntryPointProps\": {\n      \"type\": \"tsType\",\n      \"annotations\": {\n        \"framerContractVersion\": \"1\"\n      }\n    },\n    \"__FramerMetadata__\": {\n      \"type\": \"variable\"\n    }\n  }\n};\n//# sourceMappingURL=./Search.map"],
  "mappings": "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",
  "names": ["VERSION", "isDefaultLocaleId", "localeId", "INDEX_KEY", "getIndexKey", "METADATA_KEY", "getMetadataKey", "getCachedIndex", "indexKey", "cachedIndex", "checkForCachedData", "setCachedIndex", "index", "setCachedData", "metadata", "VERSION", "metadataKey", "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", "p", "codeblock", "getSearchIndexItemScore", "normalizedQuery", "queryWords", "total", "queryWord", "useRawSearch", "index", "settings", "se", "path", "safeWindow", "results", "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", "MAX_DESCRIPTION_LENGTH", "MODAL_MAX_HEIGHT", "VERTICAL_SPACING_MULTIPLIER", "ClearButton", "theme", "type", "onClick", "text", "iconOrText", "SearchInputClearButtonType", "p", "ClearIcon", "Divider", "styles", "SearchInputDividerType", "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", "SearchIconType", "SearchIcon", "u", "inputContainerStyle", "getFontFamily", "SpinnerIcon", "inputStyle", "scrollOffset", "ResultRow", "index", "result", "prevMousePositionRef", "SearchResultItemType", "subtitleType", "SearchResultSubtitleType", "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", "SearchLayoutType", "innerStyle", "getContainerAnimation", "key", "animationKeyFromLayout", "prop", "Browser", "key1", "prop1", "key2", "prop2", "containerAnimation", "motion", "ModalContainer", "heightIsStatic", "heightTransition", "heightDeps", "scope", "animate", "useAnimate", "fe", "prevHeight", "height", "ScrollView", "isTouch", "canScroll", "setCanScroll", "element", "statusStyle", "StatusMessage", "previewInfoText", "sidebarStyles", "fixedTopStyles", "quickMenuStyles", "layoutOption", "SearchEntryType", "SearchModal", "urlScope", "inputOptions", "backdropOptions", "activeLocale", "useLocaleInfo", "localeId", "input", "selectedResultRow", "scrollView", "setSelected", "isKeyboardNavigationDisabled", "setIsKeyboardNavigationDisabled", "query", "setQuery", "deferredQuery", "oe", "results", "useSearch", "selectedResult", "handleResultRowPointerDown", "te", "handleResultRowMouseMove", "previousSelected", "navigateTo", "window", "handleKeyDown", "maxIndex", "showNoResults", "showDivider", "isItemContained", "spacing", "listPaddingTop", "scrollIntoView", "isSelected", "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", "ref1", "ref2", "ref3", "ref4", "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", "SearchResultSubtitleType"]
}
