SearchPage
is an async component
import { Frame, searchResults, shareNow } from "#codebase/tcmts/share"; export async function SearchPage({ q }: { q: string }) { const s = shareNow(); let results: ReturnType<typeof searchResults> = []; let problem = ""; if (s.signedIn && q) try { results = searchResults(s, q); } catch (e) { problem = (e as Error).message; } return ( <Frame tab="" title={q ? `Search: ${q}` : "Search"}> <div className="narrow"> <h2 className="title">Search</h2> <p className="muted"> {q ? `${results.length} result${results.length === 1 ? "" : "s"} for “${q}”` : "Names (the letters in order), words in docs, or a type (:(xs: T[]) => T)."} </p> {problem && <div className="notice bad">{problem}</div>} {results.length > 0 ? ( <div className="box"> {results.map((r) => ( <div className="drow full" key={r.path}> <span /> <a className="mono" href={r.href}> {r.path} </a> <span className="sig">{r.signature}</span> {r.detail && <span className="doc">{r.detail}</span>} </div> ))} </div> ) : q ? ( <div className="empty">Nothing found.</div> ) : null} </div> </Frame> ); }