From 809a6e7eeaf5e0d775e4b98d8955385a9bafa4a6 Mon Sep 17 00:00:00 2001
From: Alex Yang <himself65@outlook.com>
Date: Thu, 24 Oct 2024 00:02:59 -0700
Subject: [PATCH] docs(next): generate llamacloud api (#1377)

---
 apps/next/.gitignore                          |   5 +-
 apps/next/package.json                        |   7 +-
 apps/next/scripts/generate-docs.mjs           |  22 +++
 apps/next/src/app/(home)/page.tsx             |   2 +-
 apps/next/src/app/docs/[[...slug]]/page.tsx   |   9 +-
 apps/next/src/app/layout.config.tsx           |   2 +-
 .../src/components/create-app-animation.tsx   |   1 +
 apps/next/src/content/docs/cloud/index.mdx    |   8 +
 apps/next/src/content/docs/cloud/meta.json    |   6 +
 .../content/docs/{ => llamaindex}/index.mdx   |   0
 .../src/content/docs/llamaindex/meta.json     |   6 +
 apps/next/src/content/docs/meta.json          |   3 +
 apps/next/src/lib/source.ts                   |   3 +
 apps/next/tailwind.config.js                  |   1 +
 pnpm-lock.yaml                                | 165 +++++++++++++++++-
 15 files changed, 230 insertions(+), 10 deletions(-)
 create mode 100644 apps/next/scripts/generate-docs.mjs
 create mode 100644 apps/next/src/content/docs/cloud/index.mdx
 create mode 100644 apps/next/src/content/docs/cloud/meta.json
 rename apps/next/src/content/docs/{ => llamaindex}/index.mdx (100%)
 create mode 100644 apps/next/src/content/docs/llamaindex/meta.json
 create mode 100644 apps/next/src/content/docs/meta.json

diff --git a/apps/next/.gitignore b/apps/next/.gitignore
index 55a12ae71..27829797e 100644
--- a/apps/next/.gitignore
+++ b/apps/next/.gitignore
@@ -25,4 +25,7 @@ yarn-error.log*
 # others
 .env*.local
 .vercel
-next-env.d.ts
\ No newline at end of file
+next-env.d.ts
+
+# build
+/src/content/docs/cloud/api
diff --git a/apps/next/package.json b/apps/next/package.json
index 942499b63..f9e7a2db0 100644
--- a/apps/next/package.json
+++ b/apps/next/package.json
@@ -3,10 +3,11 @@
   "version": "0.0.0",
   "private": true,
   "scripts": {
-    "build": "next build",
+    "build": "pnpm run build:docs && next build",
     "dev": "next dev",
     "start": "next start",
-    "postinstall": "fumadocs-mdx"
+    "postinstall": "fumadocs-mdx",
+    "build:docs": "node ./scripts/generate-docs.mjs"
   },
   "dependencies": {
     "@icons-pack/react-simple-icons": "^10.1.0",
@@ -17,6 +18,7 @@
     "foxact": "^0.2.39",
     "fumadocs-core": "14.0.2",
     "fumadocs-mdx": "11.0.0",
+    "fumadocs-openapi": "^5.5.3",
     "fumadocs-ui": "14.0.2",
     "hast-util-to-jsx-runtime": "^2.3.2",
     "lucide-react": "^0.436.0",
@@ -25,6 +27,7 @@
     "react-dom": "^18.3.1",
     "react-icons": "^5.3.0",
     "react-text-transition": "^3.1.0",
+    "rimraf": "^6.0.1",
     "shiki": "^1.22.0",
     "tailwind-merge": "^2.5.2",
     "tailwindcss-animate": "^1.0.7"
diff --git a/apps/next/scripts/generate-docs.mjs b/apps/next/scripts/generate-docs.mjs
new file mode 100644
index 000000000..c35b9b818
--- /dev/null
+++ b/apps/next/scripts/generate-docs.mjs
@@ -0,0 +1,22 @@
+import * as OpenAPI from "fumadocs-openapi";
+import { fileURLToPath } from "node:url";
+import { rimrafSync } from "rimraf";
+
+const out = "./src/content/docs/cloud/api";
+
+// clean generated files
+rimrafSync(out, {
+  filter(v) {
+    return !v.endsWith("index.mdx") && !v.endsWith("meta.json");
+  },
+});
+
+void OpenAPI.generateFiles({
+  input: [
+    fileURLToPath(
+      new URL("../../../packages/cloud/openapi.json", import.meta.url),
+    ),
+  ],
+  output: out,
+  groupBy: "tag",
+});
diff --git a/apps/next/src/app/(home)/page.tsx b/apps/next/src/app/(home)/page.tsx
index ab071c2bd..8789422ef 100644
--- a/apps/next/src/app/(home)/page.tsx
+++ b/apps/next/src/app/(home)/page.tsx
@@ -26,7 +26,7 @@ export default function HomePage() {
       </div>
 
       <div className="flex flex-wrap justify-center gap-4">
-        <Link href="/docs">
+        <Link href="/docs/llamaindex">
           <Button variant="outline">Get Started</Button>
         </Link>
         <NpmInstall />
diff --git a/apps/next/src/app/docs/[[...slug]]/page.tsx b/apps/next/src/app/docs/[[...slug]]/page.tsx
index 047cf8f9b..79e2d9a77 100644
--- a/apps/next/src/app/docs/[[...slug]]/page.tsx
+++ b/apps/next/src/app/docs/[[...slug]]/page.tsx
@@ -1,4 +1,4 @@
-import { source } from "@/lib/source";
+import { openapi, source } from "@/lib/source";
 import defaultMdxComponents from "fumadocs-ui/mdx";
 import {
   DocsBody,
@@ -22,7 +22,12 @@ export default async function Page(props: {
       <DocsTitle>{page.data.title}</DocsTitle>
       <DocsDescription>{page.data.description}</DocsDescription>
       <DocsBody>
-        <MDX components={{ ...defaultMdxComponents }} />
+        <MDX
+          components={{
+            ...defaultMdxComponents,
+            APIPage: openapi.APIPage,
+          }}
+        />
       </DocsBody>
     </DocsPage>
   );
diff --git a/apps/next/src/app/layout.config.tsx b/apps/next/src/app/layout.config.tsx
index 9793774f6..843b36516 100644
--- a/apps/next/src/app/layout.config.tsx
+++ b/apps/next/src/app/layout.config.tsx
@@ -14,7 +14,7 @@ export const baseOptions: BaseLayoutProps = {
   links: [
     {
       text: "Documentation",
-      url: "/docs",
+      url: "/docs/llamaindex",
       active: "nested-url",
     },
   ],
diff --git a/apps/next/src/components/create-app-animation.tsx b/apps/next/src/components/create-app-animation.tsx
index b2e21ba28..8a13c04bd 100644
--- a/apps/next/src/components/create-app-animation.tsx
+++ b/apps/next/src/components/create-app-animation.tsx
@@ -190,6 +190,7 @@ export function ChatExample() {
             ? ""
             : userMessageFull.substring(0, userMessageLength)
         }
+        readOnly
         placeholder="Input message..."
       />
     </div>
diff --git a/apps/next/src/content/docs/cloud/index.mdx b/apps/next/src/content/docs/cloud/index.mdx
new file mode 100644
index 000000000..b967c9b1b
--- /dev/null
+++ b/apps/next/src/content/docs/cloud/index.mdx
@@ -0,0 +1,8 @@
+---
+title: LlamaCloud
+description: LlamaCloud is a new generation of managed parsing, ingestion, and retrieval services, designed to bring production-grade context-augmentation to your LLM and RAG applications.
+---
+
+This is TypeScript binding for LlamaCloud API. It provides a simple way to interact with LlamaCloud API.
+
+If you are looking for the official documentation, please visit the [Official Document](https://docs.cloud.llamaindex.ai/)
diff --git a/apps/next/src/content/docs/cloud/meta.json b/apps/next/src/content/docs/cloud/meta.json
new file mode 100644
index 000000000..d22fe129e
--- /dev/null
+++ b/apps/next/src/content/docs/cloud/meta.json
@@ -0,0 +1,6 @@
+{
+  "title": "LlamaCloud",
+  "description": "The Cloud framework for LLM",
+  "root": true,
+  "pages": ["---Guide---", "index", "api"]
+}
diff --git a/apps/next/src/content/docs/index.mdx b/apps/next/src/content/docs/llamaindex/index.mdx
similarity index 100%
rename from apps/next/src/content/docs/index.mdx
rename to apps/next/src/content/docs/llamaindex/index.mdx
diff --git a/apps/next/src/content/docs/llamaindex/meta.json b/apps/next/src/content/docs/llamaindex/meta.json
new file mode 100644
index 000000000..0fba10093
--- /dev/null
+++ b/apps/next/src/content/docs/llamaindex/meta.json
@@ -0,0 +1,6 @@
+{
+  "title": "LlamaIndex",
+  "description": "The Data framework for LLM",
+  "root": true,
+  "pages": ["---Guide---", "index"]
+}
diff --git a/apps/next/src/content/docs/meta.json b/apps/next/src/content/docs/meta.json
new file mode 100644
index 000000000..8172c428b
--- /dev/null
+++ b/apps/next/src/content/docs/meta.json
@@ -0,0 +1,3 @@
+{
+  "pages": ["llamaindex", "cloud"]
+}
diff --git a/apps/next/src/lib/source.ts b/apps/next/src/lib/source.ts
index f1fcea46d..0ef11cc60 100644
--- a/apps/next/src/lib/source.ts
+++ b/apps/next/src/lib/source.ts
@@ -1,8 +1,11 @@
 import { docs, meta } from '../../.source';
 import { createMDXSource } from 'fumadocs-mdx';
 import { loader } from 'fumadocs-core/source';
+import { createOpenAPI } from "fumadocs-openapi/server";
 
 export const source = loader({
   baseUrl: '/docs',
   source: createMDXSource(docs, meta),
 });
+
+export const openapi = createOpenAPI();
diff --git a/apps/next/tailwind.config.js b/apps/next/tailwind.config.js
index 4c97e8981..47d28a20e 100644
--- a/apps/next/tailwind.config.js
+++ b/apps/next/tailwind.config.js
@@ -9,6 +9,7 @@ export default {
     "./src/content/**/*.{md,mdx}",
     "./src/mdx-components.{ts,tsx}",
     "./node_modules/fumadocs-ui/dist/**/*.js",
+    "./node_modules/fumadocs-openapi/dist/**/*.js",
   ],
   presets: [createPreset()],
   plugins: [require("tailwindcss-animate")],
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a30538ba6..4e6640053 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -148,6 +148,9 @@ importers:
       fumadocs-mdx:
         specifier: 11.0.0
         version: 11.0.0(acorn@8.13.0)(fumadocs-core@14.0.2(@opentelemetry/api@1.9.0)(@types/react@18.3.12))(next@15.0.0(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+      fumadocs-openapi:
+        specifier: ^5.5.3
+        version: 5.5.3(@opentelemetry/api@1.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(next@15.0.0(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       fumadocs-ui:
         specifier: 14.0.2
         version: 14.0.2(@opentelemetry/api@1.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(next@15.0.0(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -172,6 +175,9 @@ importers:
       react-text-transition:
         specifier: ^3.1.0
         version: 3.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      rimraf:
+        specifier: ^6.0.1
+        version: 6.0.1
       shiki:
         specifier: ^1.22.0
         version: 1.22.0
@@ -1361,6 +1367,10 @@ packages:
     resolution: {integrity: sha512-pRrmXMCwnmrkS3MLgAIW5dXRzeTv6GLjkjb4HmxNnvAKXN1Nfzp4KmGADBQvlVUcqi+a5D+hfGDLLnd5NnYxog==}
     engines: {node: '>= 16'}
 
+  '@apidevtools/json-schema-ref-parser@11.7.2':
+    resolution: {integrity: sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA==}
+    engines: {node: '>= 16'}
+
   '@assemblyscript/loader@0.27.29':
     resolution: {integrity: sha512-ippZ7U8mcwIGf9lWlOSqvpxeB84xCRNeWbol0lDlnm9PBlKTIyIbqa+BIDm8VNMdRARJ/wRca7srOv7W8N6Ueg==}
 
@@ -3613,6 +3623,10 @@ packages:
   '@formatjs/intl-localematcher@0.5.5':
     resolution: {integrity: sha512-t5tOGMgZ/i5+ALl2/offNqAQq/lfUnKLEw0mXQI4N4bqpedhrSE+fyKLpwnd22sK0dif6AV+ufQcTsKShB9J1g==}
 
+  '@fumari/json-schema-to-typescript@1.1.1':
+    resolution: {integrity: sha512-vVnuwLqW8WJsg09EanNHnXnzsjYYsZE7JlD4M1sLvDnWGjvYJKNU6VpRqDxOiDChUszDZFKhxQSNYGShF0bKJg==}
+    engines: {node: '>=18.0.0'}
+
   '@google-cloud/vertexai@1.2.0':
     resolution: {integrity: sha512-EH0dnoMRIBQzJEEOUWN03eWPSdLBFdsZA/am3eU+qYrnNyY9okUueOajZd79U48KwgFbqoFrCA9yHQ30DgfD8Q==}
     engines: {node: '>=18.0.0'}
@@ -4575,6 +4589,19 @@ packages:
       '@types/react-dom':
         optional: true
 
+  '@radix-ui/react-select@2.1.2':
+    resolution: {integrity: sha512-rZJtWmorC7dFRi0owDmoijm6nSJH1tVw64QGiNIZ9PNLyBDtG+iAq+XGsya052At4BfarzY/Dhv9wrrUr6IMZA==}
+    peerDependencies:
+      '@types/react': '*'
+      '@types/react-dom': '*'
+      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+    peerDependenciesMeta:
+      '@types/react':
+        optional: true
+      '@types/react-dom':
+        optional: true
+
   '@radix-ui/react-slot@1.0.2':
     resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==}
     peerDependencies:
@@ -8397,6 +8424,9 @@ packages:
   for-each@0.3.3:
     resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
 
+  foreach@2.0.6:
+    resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==}
+
   foreground-child@3.3.0:
     resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
     engines: {node: '>=14'}
@@ -8516,6 +8546,13 @@ packages:
       fumadocs-core: ^14.0.0
       next: 14.x.x || 15.x.x
 
+  fumadocs-openapi@5.5.3:
+    resolution: {integrity: sha512-sOPzi61oHUuHWUArp/ro2fQ9NtWPCeaXKgMR8ViTKr4aSfVIxG/qSCsqCkKCokfODJ/9pV+TE1+oyFEHTgOLJw==}
+    peerDependencies:
+      next: 14.x.x || 15.x.x
+      react: '>= 18'
+      react-dom: '>= 18'
+
   fumadocs-ui@14.0.2:
     resolution: {integrity: sha512-LZM7X98iTa0xsS4KYr1pn6JcnAGalRqdzSDuCH1ZbgR5Vk5ZzsLMvPhBnhrL1mWdmjzkvse2J7i4pyrvxEQj3w==}
     peerDependencies:
@@ -9460,6 +9497,9 @@ packages:
   json-parse-even-better-errors@2.3.1:
     resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
 
+  json-pointer@0.6.2:
+    resolution: {integrity: sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==}
+
   json-schema-traverse@0.4.1:
     resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
 
@@ -10587,6 +10627,9 @@ packages:
       zod:
         optional: true
 
+  openapi-sampler@1.5.1:
+    resolution: {integrity: sha512-tIWIrZUKNAsbqf3bd9U1oH6JEXo8LNYuDlXw26By67EygpjT+ArFnsxxyTMjFWRfbqo5ozkvgSQDK69Gd8CddA==}
+
   opener@1.5.2:
     resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==}
     hasBin: true
@@ -11492,6 +11535,12 @@ packages:
     peerDependencies:
       react: ^16.6.0 || ^17.0.0 || ^18.0.0
 
+  react-hook-form@7.53.1:
+    resolution: {integrity: sha512-6aiQeBda4zjcuaugWvim9WsGqisoUk+etmFEsSUMm451/Ic8L/UAb7sRtMj3V+Hdzm6mMjU1VhiSzYUZeBm0Vg==}
+    engines: {node: '>=18.0.0'}
+    peerDependencies:
+      react: ^16.8.0 || ^17 || ^18 || ^19
+
   react-icons@5.3.0:
     resolution: {integrity: sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==}
     peerDependencies:
@@ -11742,6 +11791,9 @@ packages:
   remark-rehype@11.1.0:
     resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==}
 
+  remark-rehype@11.1.1:
+    resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==}
+
   remark-stringify@11.0.0:
     resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
 
@@ -11845,6 +11897,11 @@ packages:
     deprecated: Rimraf versions prior to v4 are no longer supported
     hasBin: true
 
+  rimraf@6.0.1:
+    resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==}
+    engines: {node: 20 || >=22}
+    hasBin: true
+
   rollup-plugin-dts@6.1.1:
     resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==}
     engines: {node: '>=16'}
@@ -13687,6 +13744,12 @@ snapshots:
       '@types/json-schema': 7.0.15
       js-yaml: 4.1.0
 
+  '@apidevtools/json-schema-ref-parser@11.7.2':
+    dependencies:
+      '@jsdevtools/ono': 7.1.3
+      '@types/json-schema': 7.0.15
+      js-yaml: 4.1.0
+
   '@assemblyscript/loader@0.27.29': {}
 
   '@aws-crypto/crc32@3.0.0':
@@ -15373,7 +15436,7 @@ snapshots:
     dependencies:
       '@aws-sdk/client-sso': 3.675.0
       '@aws-sdk/core': 3.667.0
-      '@aws-sdk/token-providers': 3.667.0(@aws-sdk/client-sso-oidc@3.678.0(@aws-sdk/client-sts@3.650.0))
+      '@aws-sdk/token-providers': 3.667.0(@aws-sdk/client-sso-oidc@3.678.0(@aws-sdk/client-sts@3.678.0))
       '@aws-sdk/types': 3.667.0
       '@smithy/property-provider': 3.1.8
       '@smithy/shared-ini-file-loader': 3.1.9
@@ -18250,6 +18313,12 @@ snapshots:
     dependencies:
       tslib: 2.8.0
 
+  '@fumari/json-schema-to-typescript@1.1.1':
+    dependencies:
+      '@apidevtools/json-schema-ref-parser': 11.7.2
+      js-yaml: 4.1.0
+      prettier: 3.3.3
+
   '@google-cloud/vertexai@1.2.0(encoding@0.1.13)':
     dependencies:
       google-auth-library: 9.14.0(encoding@0.1.13)
@@ -18544,7 +18613,7 @@ snapshots:
       estree-util-to-js: 2.0.0
       estree-walker: 3.0.3
       hast-util-to-estree: 3.1.0
-      hast-util-to-jsx-runtime: 2.3.0
+      hast-util-to-jsx-runtime: 2.3.2
       markdown-extensions: 2.0.0
       periscopic: 3.1.0
       remark-mdx: 3.0.1
@@ -19213,6 +19282,35 @@ snapshots:
       '@types/react': 18.3.12
       '@types/react-dom': 18.3.1
 
+  '@radix-ui/react-select@2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+    dependencies:
+      '@radix-ui/number': 1.1.0
+      '@radix-ui/primitive': 1.1.0
+      '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+      '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+      '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+      '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+      '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+      '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+      '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+      '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+      '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+      '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+      '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      aria-hidden: 1.2.4
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+      react-remove-scroll: 2.6.0(@types/react@18.3.12)(react@18.3.1)
+    optionalDependencies:
+      '@types/react': 18.3.12
+      '@types/react-dom': 18.3.1
+
   '@radix-ui/react-slot@1.0.2(@types/react@18.3.12)(react@18.3.1)':
     dependencies:
       '@babel/runtime': 7.25.6
@@ -23517,7 +23615,7 @@ snapshots:
       is-bun-module: 1.1.0
       is-glob: 4.0.3
     optionalDependencies:
-      eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
+      eslint-plugin-import: 2.29.1(@typescript-eslint/parser@8.10.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)
     transitivePeerDependencies:
       - '@typescript-eslint/parser'
       - eslint-import-resolver-node
@@ -24126,6 +24224,8 @@ snapshots:
     dependencies:
       is-callable: 1.2.7
 
+  foreach@2.0.6: {}
+
   foreground-child@3.3.0:
     dependencies:
       cross-spawn: 7.0.3
@@ -24290,6 +24390,39 @@ snapshots:
       - acorn
       - supports-color
 
+  fumadocs-openapi@5.5.3(@opentelemetry/api@1.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(next@15.0.0(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+    dependencies:
+      '@apidevtools/json-schema-ref-parser': 11.7.2
+      '@fumari/json-schema-to-typescript': 1.1.1
+      '@radix-ui/react-select': 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+      class-variance-authority: 0.7.0
+      fast-glob: 3.3.2
+      fumadocs-core: 14.0.2(@opentelemetry/api@1.9.0)(@types/react@18.3.12)
+      fumadocs-ui: 14.0.2(@opentelemetry/api@1.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(next@15.0.0(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      github-slugger: 2.0.0
+      hast-util-to-jsx-runtime: 2.3.2
+      js-yaml: 4.1.0
+      next: 15.0.0(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      openapi-sampler: 1.5.1
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+      react-hook-form: 7.53.1(react@18.3.1)
+      remark: 15.0.1
+      remark-rehype: 11.1.1
+      shiki: 1.22.0
+    transitivePeerDependencies:
+      - '@babel/core'
+      - '@opentelemetry/api'
+      - '@playwright/test'
+      - '@types/react'
+      - '@types/react-dom'
+      - babel-plugin-macros
+      - babel-plugin-react-compiler
+      - sass
+      - supports-color
+      - ts-node
+
   fumadocs-ui@14.0.2(@opentelemetry/api@1.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(next@15.0.0(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
     dependencies:
       '@radix-ui/react-accordion': 1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -25413,6 +25546,10 @@ snapshots:
 
   json-parse-even-better-errors@2.3.1: {}
 
+  json-pointer@0.6.2:
+    dependencies:
+      foreach: 2.0.6
+
   json-schema-traverse@0.4.1: {}
 
   json-schema-traverse@1.0.0: {}
@@ -26997,6 +27134,11 @@ snapshots:
       - encoding
     optional: true
 
+  openapi-sampler@1.5.1:
+    dependencies:
+      '@types/json-schema': 7.0.15
+      json-pointer: 0.6.2
+
   opener@1.5.2: {}
 
   option@0.2.4: {}
@@ -28060,6 +28202,10 @@ snapshots:
       react-fast-compare: 3.2.2
       shallowequal: 1.1.0
 
+  react-hook-form@7.53.1(react@18.3.1):
+    dependencies:
+      react: 18.3.1
+
   react-icons@5.3.0(react@18.3.1):
     dependencies:
       react: 18.3.1
@@ -28429,6 +28575,14 @@ snapshots:
       unified: 11.0.5
       vfile: 6.0.3
 
+  remark-rehype@11.1.1:
+    dependencies:
+      '@types/hast': 3.0.4
+      '@types/mdast': 4.0.4
+      mdast-util-to-hast: 13.2.0
+      unified: 11.0.5
+      vfile: 6.0.3
+
   remark-stringify@11.0.0:
     dependencies:
       '@types/mdast': 4.0.4
@@ -28529,6 +28683,11 @@ snapshots:
     dependencies:
       glob: 7.2.3
 
+  rimraf@6.0.1:
+    dependencies:
+      glob: 11.0.0
+      package-json-from-dist: 1.0.0
+
   rollup-plugin-dts@6.1.1(rollup@4.24.0)(typescript@5.6.2):
     dependencies:
       magic-string: 0.30.12
-- 
GitLab