diff --git a/docs/nextra-theme-docs/search.js b/docs/nextra-theme-docs/search.js index b4f437734de18..c0829ae387458 100644 --- a/docs/nextra-theme-docs/search.js +++ b/docs/nextra-theme-docs/search.js @@ -9,6 +9,7 @@ import { matchSorter } from "match-sorter"; import cn from "classnames"; import { useRouter } from "next/router"; import Link from "next/link"; +import useMounted from "./utils/use-mounted"; const Item = ({ title, active, href, onMouseOver, search }) => { const highlight = title.toLowerCase().indexOf(search.toLowerCase()); @@ -37,7 +38,7 @@ const Search = ({ directories = [] }) => { const [search, setSearch] = useState(""); const [active, setActive] = useState(0); const input = useRef(null); - + const isMounted = useMounted(); const results = useMemo(() => { if (!search) return []; @@ -139,7 +140,13 @@ const Search = ({ directories = [] }) => { placeholder="Search docs..." onKeyDown={handleKeyDown} onFocus={() => setShow(true)} - onBlur={() => setShow(false)} + onBlur={() => { + setTimeout(() => { + if (isMounted) { + setShow(false); + } + }, 300); + }} ref={input} spellCheck={false} /> diff --git a/docs/nextra-theme-docs/utils/use-mounted.js b/docs/nextra-theme-docs/utils/use-mounted.js index 5dbd095c02465..c42d93f33a408 100644 --- a/docs/nextra-theme-docs/utils/use-mounted.js +++ b/docs/nextra-theme-docs/utils/use-mounted.js @@ -1,11 +1,11 @@ -import { useEffect, useState } from 'react' +import { useEffect, useState } from "react"; -export default () => { - const [mounted, setMounted] = useState(false) +export default function useMounted() { + const [mounted, setMounted] = useState(false); useEffect(() => { - setMounted(true) - }, []) + setMounted(true); + }, []); - return mounted + return mounted; }