docs: add orama search support (#4366)

This commit is contained in:
Alex Yang
2025-09-02 14:34:49 -07:00
committed by GitHub
parent 74e94c72f0
commit 8849a9bcb3
9 changed files with 344 additions and 14 deletions

View File

@@ -1 +1,7 @@
NEXT_PUBLIC_URL=http://localhost:3000
NEXT_PUBLIC_URL=http://localhost:3000
# Orama Search Configuration
ORAMA_PRIVATE_API_KEY=
NEXT_PUBLIC_ORAMA_PUBLIC_API_KEY=
NEXT_PUBLIC_ORAMA_ENDPOINT=
ORAMA_INDEX_ID=

View File

@@ -9,6 +9,7 @@ import { baseUrl, createMetadata } from "@/lib/metadata";
import { Analytics } from "@vercel/analytics/react";
import { ThemeProvider } from "@/components/theme-provider";
import { Toaster } from "@/components/ui/sonner";
import { CustomSearchDialog } from "@/components/search-dialog";
export const metadata = createMetadata({
title: {
@@ -50,6 +51,10 @@ export default function Layout({ children }: { children: ReactNode }) {
enableSystem: true,
defaultTheme: "dark",
}}
search={{
enabled: true,
SearchDialog: CustomSearchDialog,
}}
>
<NavbarProvider>
<Navbar />

View File

@@ -0,0 +1,7 @@
import { exportSearchIndexes } from "@/lib/export-search-indexes";
export const revalidate = false;
export async function GET() {
return Response.json(await exportSearchIndexes());
}

View File

@@ -0,0 +1,59 @@
"use client";
import {
SearchDialog,
SearchDialogClose,
SearchDialogContent,
SearchDialogFooter,
SearchDialogHeader,
SearchDialogIcon,
SearchDialogInput,
SearchDialogList,
SearchDialogOverlay,
type SharedProps,
} from "fumadocs-ui/components/dialog/search";
import { useDocsSearch } from "fumadocs-core/search/client";
import { OramaClient } from "@oramacloud/client";
import { useI18n } from "fumadocs-ui/contexts/i18n";
const client = new OramaClient({
endpoint: process.env.NEXT_PUBLIC_ORAMA_ENDPOINT!,
api_key: process.env.NEXT_PUBLIC_ORAMA_PUBLIC_API_KEY!,
});
export function CustomSearchDialog(props: SharedProps) {
const { locale } = useI18n();
const { search, setSearch, query } = useDocsSearch({
type: "orama-cloud",
client,
locale,
});
return (
<SearchDialog
search={search}
onSearchChange={setSearch}
isLoading={query.isLoading}
{...props}
>
<SearchDialogOverlay />
<SearchDialogContent>
<SearchDialogHeader>
<SearchDialogIcon />
<SearchDialogInput />
<SearchDialogClose />
</SearchDialogHeader>
<SearchDialogList items={query.data !== "empty" ? query.data : null} />
<SearchDialogFooter>
<a
href="https://orama.com"
rel="noreferrer noopener"
className="ms-auto text-xs text-fd-muted-foreground"
>
Search powered by Orama
</a>
</SearchDialogFooter>
</SearchDialogContent>
</SearchDialog>
);
}

View File

@@ -0,0 +1,14 @@
import { source } from "@/lib/source";
import type { OramaDocument } from "fumadocs-core/search/orama-cloud";
export async function exportSearchIndexes() {
return source.getPages().map((page) => {
return {
id: page.url,
structured: page.data.structuredData,
url: page.url,
title: page.data.title,
description: page.data.description,
} satisfies OramaDocument;
});
}

View File

@@ -4,14 +4,16 @@
"private": true,
"type": "module",
"scripts": {
"build": "next build",
"build": "next build && pnpm run scripts:sync-orama",
"dev": "next dev --turbopack",
"start": "next start",
"postinstall": "fumadocs-mdx",
"scripts:endpoint-to-doc": "bun ./scripts/endpoint-to-doc/index.ts"
"scripts:endpoint-to-doc": "bun ./scripts/endpoint-to-doc/index.ts",
"scripts:sync-orama": "node ./scripts/sync-orama.ts"
},
"dependencies": {
"@hookform/resolvers": "^5.2.1",
"@oramacloud/client": "^2.1.4",
"@radix-ui/react-accordion": "^1.2.12",
"@radix-ui/react-alert-dialog": "^1.1.15",
"@radix-ui/react-aspect-ratio": "^1.1.2",

View File

@@ -0,0 +1,30 @@
import { sync, type OramaDocument } from "fumadocs-core/search/orama-cloud";
import * as fs from "node:fs/promises";
import { CloudManager } from "@oramacloud/client";
import * as process from "node:process";
import "dotenv/config";
const filePath = ".next/server/app/static.json.body";
async function main() {
const apiKey = process.env.ORAMA_PRIVATE_API_KEY;
if (!apiKey) {
console.log("no api key for Orama found, skipping");
return;
}
const content = await fs.readFile(filePath);
const records = JSON.parse(content.toString()) as OramaDocument[];
const manager = new CloudManager({ api_key: apiKey });
await sync(manager, {
index: process.env.ORAMA_INDEX_ID!,
documents: records,
autoDeploy: true,
});
console.log(`search updated: ${records.length} records`);
}
void main();

View File

@@ -3,7 +3,13 @@
"extends": ["//"],
"tasks": {
"build": {
"env": ["GITHUB_TOKEN"]
"env": [
"GITHUB_TOKEN",
"ORAMA_PRIVATE_API_KEY",
"ORAMA_INDEX_ID",
"NEXT_PUBLIC_ORAMA_PUBLIC_API_KEY",
"NEXT_PUBLIC_ORAMA_ENDPOINT"
]
}
}
}

221
pnpm-lock.yaml generated
View File

@@ -337,6 +337,9 @@ importers:
'@hookform/resolvers':
specifier: ^5.2.1
version: 5.2.1(react-hook-form@7.62.0(react@19.1.1))
'@oramacloud/client':
specifier: ^2.1.4
version: 2.1.4
'@radix-ui/react-accordion':
specifier: ^1.2.12
version: 1.2.12(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
@@ -441,19 +444,19 @@ importers:
version: 0.2.49(react@19.1.1)
fumadocs-core:
specifier: 15.7.1
version: 15.7.1(@types/react@19.1.10)(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
version: 15.7.1(@oramacloud/client@2.1.4)(@types/react@19.1.10)(algoliasearch@5.36.0)(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
fumadocs-docgen:
specifier: 2.1.0
version: 2.1.0
fumadocs-mdx:
specifier: 11.8.0
version: 11.8.0(acorn@8.15.0)(fumadocs-core@15.7.1(@types/react@19.1.10)(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react@19.1.1)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
version: 11.8.0(acorn@8.15.0)(fumadocs-core@15.7.1(@oramacloud/client@2.1.4)(@types/react@19.1.10)(algoliasearch@5.36.0)(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react@19.1.1)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
fumadocs-typescript:
specifier: ^4.0.6
version: 4.0.6(@types/react@19.1.10)(typescript@5.9.2)
fumadocs-ui:
specifier: 15.7.1
version: 15.7.1(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.12)
version: 15.7.1(@oramacloud/client@2.1.4)(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(algoliasearch@5.36.0)(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.12)
gray-matter:
specifier: ^4.0.3
version: 4.0.3
@@ -927,6 +930,62 @@ packages:
graphql:
optional: true
'@algolia/abtesting@1.2.0':
resolution: {integrity: sha512-Z6Liq7US5CpdHExZLfPMBPxQHHUObV587kGvCLniLr1UTx0fGFIeGNWd005WIqQXqEda9GyAi7T2e7DUupVv0g==}
engines: {node: '>= 14.0.0'}
'@algolia/client-abtesting@5.36.0':
resolution: {integrity: sha512-uGr57O1UqDDeZHYXr1VnUomtdgQMxb6fS8yC/LXCMOn5ucN4k6FlcCRqXQnUyiiFZNG/rVK3zpRiyomq4JWXdQ==}
engines: {node: '>= 14.0.0'}
'@algolia/client-analytics@5.36.0':
resolution: {integrity: sha512-/zrf0NMxcvBBQ4r9lIqM7rMt7oI7gY7bZ+bNcgpZAQMvzXbKJVla3MqKGuPC/bfOthKvAcAr0mCZ8/7GwBmkVw==}
engines: {node: '>= 14.0.0'}
'@algolia/client-common@5.36.0':
resolution: {integrity: sha512-fDsg9w6xXWQyNkm/VfiWF2D9wnpTPv0fRVei7lWtz7cXJewhOmP1kKE2GaDTI4QDxVxgDkoPJ1+3UVMIzTcjjQ==}
engines: {node: '>= 14.0.0'}
'@algolia/client-insights@5.36.0':
resolution: {integrity: sha512-x6ZICyIN3BZjja47lqlMLG+AZwfx9wrYWttd6Daxp+wX/fFGxha6gdqxeoi5J44BmFqK8CUU4u8vpwHqGOCl4g==}
engines: {node: '>= 14.0.0'}
'@algolia/client-personalization@5.36.0':
resolution: {integrity: sha512-gnH9VHrC+/9OuaumbgxNXzzEq1AY2j3tm00ymNXNz35T7RQ2AK/x4T5b2UnjOUJejuXaSJ88gFyPk3nM5OhJZQ==}
engines: {node: '>= 14.0.0'}
'@algolia/client-query-suggestions@5.36.0':
resolution: {integrity: sha512-GkWIS+cAMoxsNPHEp3j7iywO9JJMVHVCWHzPPHFXIe0iNIOfsnZy5MqC1T9sifjqoU9b0GGbzzdxB3TEdwfiFA==}
engines: {node: '>= 14.0.0'}
'@algolia/client-search@5.36.0':
resolution: {integrity: sha512-MLx32nSeDSNxfx28IfvwfHEfeo3AYe9JgEj0rLeYtJGmt0W30K6tCNokxhWGUUKrggQTH6H1lnohWsoj2OC2bw==}
engines: {node: '>= 14.0.0'}
'@algolia/ingestion@1.36.0':
resolution: {integrity: sha512-6zmlPLCsyzShOsfs1G1uqxwLTojte3NLyukwyUmJFfa46DSq3wkIOE9hFtqAoV951dXp4sZd2KCFYJmgRjcYbA==}
engines: {node: '>= 14.0.0'}
'@algolia/monitoring@1.36.0':
resolution: {integrity: sha512-SjJeDqlzAKJiWhquqfDWLEu5X/PIM+5KvUH65c4LBvt8T+USOVJbijtzA9UHZ1eUIfFSDBmbzEH0YvlS6Di2mg==}
engines: {node: '>= 14.0.0'}
'@algolia/recommend@5.36.0':
resolution: {integrity: sha512-FalJm3h9fwoZZpkkMpA0r4Grcvjk32FzmC4CXvlpyF/gBvu6pXE01yygjJBU20zGVLGsXU+Ad8nYPf+oGD7Zkg==}
engines: {node: '>= 14.0.0'}
'@algolia/requester-browser-xhr@5.36.0':
resolution: {integrity: sha512-weE9SImWIDmQrfGLb1pSPEfP3mioKQ84GaQRpUmjFxlxG/4nW2bSsmkV+kNp1s+iomL2gnxFknSmcQuuAy+kPA==}
engines: {node: '>= 14.0.0'}
'@algolia/requester-fetch@5.36.0':
resolution: {integrity: sha512-zGPI2sgzvOwCHTVMmDvc301iirOKCtJ+Egh+HQB/+DG0zTGUT1DpdwQVT25A7Yin/twnO8CkFpI/S+74FVYNjg==}
engines: {node: '>= 14.0.0'}
'@algolia/requester-node-http@5.36.0':
resolution: {integrity: sha512-dNbBGE/O6VG/6vFhv3CFm5za4rubAVrhQf/ef0YWiDqPMmalPxGEzIijw4xV1mU1JmX2ffyp/x8Kdtz24sDkOQ==}
engines: {node: '>= 14.0.0'}
'@alloc/quick-lru@5.2.0':
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'}
@@ -3133,10 +3192,20 @@ packages:
resolution: {integrity: sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==}
engines: {node: '>=8.0'}
'@orama/cuid2@2.2.3':
resolution: {integrity: sha512-Lcak3chblMejdlSHgYU2lS2cdOhDpU6vkfIJH4m+YKvqQyLqs1bB8+w6NT1MG5bO12NUK2GFc34Mn2xshMIQ1g==}
'@orama/orama@3.1.11':
resolution: {integrity: sha512-Szki0cgFiXE5F9RLx2lUyEtJllnuCSQ4B8RLDwIjXkVit6qZjoDAxH+xhJs29MjKLDz0tbPLdKFa6QrQ/qoGGA==}
engines: {node: '>= 20.0.0'}
'@orama/orama@3.1.12':
resolution: {integrity: sha512-U7PY8FwXHuJ6bNBpbsqe0KLzb91IcJuORDggqHHkFy1waokY5SpWLN9tzB3AOW776awp6s1bjwts9I9Davy3lw==}
engines: {node: '>= 20.0.0'}
'@oramacloud/client@2.1.4':
resolution: {integrity: sha512-uNPFs4wq/iOPbggCwTkVNbIr64Vfd7ZS/h+cricXVnzXWocjDTfJ3wLL4lr0qiSu41g8z+eCAGBqJ30RO2O4AA==}
'@oxc-transform/binding-android-arm64@0.75.1':
resolution: {integrity: sha512-nCWttA1TJpRlK6CFd8VbHHh7G8x06Fo1WKjuziwls112eSJrqPKQMCzWlpemgcbkzii1llviWOhNi46F+/rV3Q==}
engines: {node: '>=14.0.0'}
@@ -5688,6 +5757,10 @@ packages:
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
algoliasearch@5.36.0:
resolution: {integrity: sha512-FpwQ+p4x4RIsWnPj2z9idOC70T90ga7Oeh8BURSFKpqp5lITRsgkIj/bwYj2bY5xbyD7uBuP9AZRnM5EV20WOw==}
engines: {node: '>= 14.0.0'}
anser@1.4.10:
resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==}
@@ -12844,6 +12917,104 @@ snapshots:
optionalDependencies:
graphql: 16.11.0
'@algolia/abtesting@1.2.0':
dependencies:
'@algolia/client-common': 5.36.0
'@algolia/requester-browser-xhr': 5.36.0
'@algolia/requester-fetch': 5.36.0
'@algolia/requester-node-http': 5.36.0
optional: true
'@algolia/client-abtesting@5.36.0':
dependencies:
'@algolia/client-common': 5.36.0
'@algolia/requester-browser-xhr': 5.36.0
'@algolia/requester-fetch': 5.36.0
'@algolia/requester-node-http': 5.36.0
optional: true
'@algolia/client-analytics@5.36.0':
dependencies:
'@algolia/client-common': 5.36.0
'@algolia/requester-browser-xhr': 5.36.0
'@algolia/requester-fetch': 5.36.0
'@algolia/requester-node-http': 5.36.0
optional: true
'@algolia/client-common@5.36.0':
optional: true
'@algolia/client-insights@5.36.0':
dependencies:
'@algolia/client-common': 5.36.0
'@algolia/requester-browser-xhr': 5.36.0
'@algolia/requester-fetch': 5.36.0
'@algolia/requester-node-http': 5.36.0
optional: true
'@algolia/client-personalization@5.36.0':
dependencies:
'@algolia/client-common': 5.36.0
'@algolia/requester-browser-xhr': 5.36.0
'@algolia/requester-fetch': 5.36.0
'@algolia/requester-node-http': 5.36.0
optional: true
'@algolia/client-query-suggestions@5.36.0':
dependencies:
'@algolia/client-common': 5.36.0
'@algolia/requester-browser-xhr': 5.36.0
'@algolia/requester-fetch': 5.36.0
'@algolia/requester-node-http': 5.36.0
optional: true
'@algolia/client-search@5.36.0':
dependencies:
'@algolia/client-common': 5.36.0
'@algolia/requester-browser-xhr': 5.36.0
'@algolia/requester-fetch': 5.36.0
'@algolia/requester-node-http': 5.36.0
optional: true
'@algolia/ingestion@1.36.0':
dependencies:
'@algolia/client-common': 5.36.0
'@algolia/requester-browser-xhr': 5.36.0
'@algolia/requester-fetch': 5.36.0
'@algolia/requester-node-http': 5.36.0
optional: true
'@algolia/monitoring@1.36.0':
dependencies:
'@algolia/client-common': 5.36.0
'@algolia/requester-browser-xhr': 5.36.0
'@algolia/requester-fetch': 5.36.0
'@algolia/requester-node-http': 5.36.0
optional: true
'@algolia/recommend@5.36.0':
dependencies:
'@algolia/client-common': 5.36.0
'@algolia/requester-browser-xhr': 5.36.0
'@algolia/requester-fetch': 5.36.0
'@algolia/requester-node-http': 5.36.0
optional: true
'@algolia/requester-browser-xhr@5.36.0':
dependencies:
'@algolia/client-common': 5.36.0
optional: true
'@algolia/requester-fetch@5.36.0':
dependencies:
'@algolia/client-common': 5.36.0
optional: true
'@algolia/requester-node-http@5.36.0':
dependencies:
'@algolia/client-common': 5.36.0
optional: true
'@alloc/quick-lru@5.2.0': {}
'@ampproject/remapping@2.3.0':
@@ -15264,8 +15435,20 @@ snapshots:
'@oozcitak/util@8.3.8': {}
'@orama/cuid2@2.2.3':
dependencies:
'@noble/hashes': 1.8.0
'@orama/orama@3.1.11': {}
'@orama/orama@3.1.12': {}
'@oramacloud/client@2.1.4':
dependencies:
'@orama/cuid2': 2.2.3
'@orama/orama': 3.1.12
lodash: 4.17.21
'@oxc-transform/binding-android-arm64@0.75.1':
optional: true
@@ -16673,9 +16856,7 @@ snapshots:
metro-runtime: 0.83.1
transitivePeerDependencies:
- '@babel/core'
- bufferutil
- supports-color
- utf-8-validate
'@react-native/normalize-colors@0.79.5': {}
@@ -18278,6 +18459,24 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
algoliasearch@5.36.0:
dependencies:
'@algolia/abtesting': 1.2.0
'@algolia/client-abtesting': 5.36.0
'@algolia/client-analytics': 5.36.0
'@algolia/client-common': 5.36.0
'@algolia/client-insights': 5.36.0
'@algolia/client-personalization': 5.36.0
'@algolia/client-query-suggestions': 5.36.0
'@algolia/client-search': 5.36.0
'@algolia/ingestion': 1.36.0
'@algolia/monitoring': 1.36.0
'@algolia/recommend': 5.36.0
'@algolia/requester-browser-xhr': 5.36.0
'@algolia/requester-fetch': 5.36.0
'@algolia/requester-node-http': 5.36.0
optional: true
anser@1.4.10: {}
ansi-escapes@4.3.2:
@@ -20819,7 +21018,7 @@ snapshots:
fsevents@2.3.3:
optional: true
fumadocs-core@15.7.1(@types/react@19.1.10)(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
fumadocs-core@15.7.1(@oramacloud/client@2.1.4)(@types/react@19.1.10)(algoliasearch@5.36.0)(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
dependencies:
'@formatjs/intl-localematcher': 0.6.1
'@orama/orama': 3.1.11
@@ -20839,7 +21038,9 @@ snapshots:
shiki: 3.12.1
unist-util-visit: 5.0.0
optionalDependencies:
'@oramacloud/client': 2.1.4
'@types/react': 19.1.10
algoliasearch: 5.36.0
next: 15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
@@ -20855,14 +21056,14 @@ snapshots:
unist-util-visit: 5.0.0
zod: 4.1.5
fumadocs-mdx@11.8.0(acorn@8.15.0)(fumadocs-core@15.7.1(@types/react@19.1.10)(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react@19.1.1)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)):
fumadocs-mdx@11.8.0(acorn@8.15.0)(fumadocs-core@15.7.1(@oramacloud/client@2.1.4)(@types/react@19.1.10)(algoliasearch@5.36.0)(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react@19.1.1)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)):
dependencies:
'@mdx-js/mdx': 3.1.0(acorn@8.15.0)
'@standard-schema/spec': 1.0.0
chokidar: 4.0.3
esbuild: 0.25.9
estree-util-value-to-estree: 3.4.0
fumadocs-core: 15.7.1(@types/react@19.1.10)(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
fumadocs-core: 15.7.1(@oramacloud/client@2.1.4)(@types/react@19.1.10)(algoliasearch@5.36.0)(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
js-yaml: 4.1.0
lru-cache: 11.1.0
picocolors: 1.1.1
@@ -20895,7 +21096,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
fumadocs-ui@15.7.1(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.12):
fumadocs-ui@15.7.1(@oramacloud/client@2.1.4)(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(algoliasearch@5.36.0)(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.12):
dependencies:
'@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
@@ -20908,7 +21109,7 @@ snapshots:
'@radix-ui/react-slot': 1.2.3(@types/react@19.1.10)(react@19.1.1)
'@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
class-variance-authority: 0.7.1
fumadocs-core: 15.7.1(@types/react@19.1.10)(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
fumadocs-core: 15.7.1(@oramacloud/client@2.1.4)(@types/react@19.1.10)(algoliasearch@5.36.0)(next@15.5.2(@babel/core@7.28.3)(@playwright/test@1.55.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
lodash.merge: 4.6.2
next-themes: 0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
postcss-selector-parser: 7.1.0