diff --git a/.env.sample b/.env.sample index 950c1bd1..f2c6c143 100644 --- a/.env.sample +++ b/.env.sample @@ -3,3 +3,9 @@ export PORT=3000 # Simulate a Vercel deployment environment on a specific branch # export VERCEL_GIT_COMMIT_REF=tip + + +# Algolia's DocSearch config +NEXT_PUBLIC_DOCSEARCH_APP_ID= +NEXT_PUBLIC_DOCSEARCH_API_KEY= +NEXT_PUBLIC_DOCSEARCH_INDEX= diff --git a/package.json b/package.json index bbb87f4e..2da1ab60 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,8 @@ "zustand": "^5.0.2" }, "devDependencies": { + "@docsearch/css": "^4.1.0", + "@docsearch/js": "^4.1.0", "@types/klaw-sync": "^6.0.5", "@types/node": "20.14.13", "@types/react": "18.3.3", diff --git a/src/components/doc-search/DocSearch.module.css b/src/components/doc-search/DocSearch.module.css new file mode 100644 index 00000000..0f562ac9 --- /dev/null +++ b/src/components/doc-search/DocSearch.module.css @@ -0,0 +1,19 @@ +.docsearch { + display: flex; + justify-content: flex-end; + flex: 1; + padding: 0 30px; + + :global(.DocSearch-Button-Key) { + /* The default mix is at 20%, which is too subtle */ + border-color: color-mix(in srgb, var(--docsearch-subtle-color) 70%, transparent); + } + + @media(max-width: 768px) { + padding-right: 0; + + :global(.DocSearch-Button) { + border: 0; + } + } +} diff --git a/src/components/doc-search/index.tsx b/src/components/doc-search/index.tsx new file mode 100644 index 00000000..654945d6 --- /dev/null +++ b/src/components/doc-search/index.tsx @@ -0,0 +1,26 @@ +"use client"; + +import { useEffect } from "react"; +import docsearch from "@docsearch/js"; +import "@docsearch/css"; +import s from "./DocSearch.module.css"; + +export default function DocSearch() { + useEffect(() => { + if (process.env.NEXT_PUBLIC_DOCSEARCH_APP_ID + && process.env.NEXT_PUBLIC_DOCSEARCH_INDEX + && process.env.NEXT_PUBLIC_DOCSEARCH_API_KEY + ) { + docsearch({ + container: "#docsearch", + appId: process.env.NEXT_PUBLIC_DOCSEARCH_APP_ID, + indexName: process.env.NEXT_PUBLIC_DOCSEARCH_INDEX, + apiKey: process.env.NEXT_PUBLIC_DOCSEARCH_API_KEY, + }) + } + }, []); + + return