From 351557a19b5fbc498fdad9d89d31afc79b2e9217 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Wed, 18 Mar 2026 13:09:14 +0800 Subject: [PATCH] Initial commit: XCEngine API Docs Viewer --- .gitignore | 5 + index.html | 12 + package-lock.json | 2806 +++++++++++++++++++++++++++++++ package.json | 27 + postcss.config.js | 6 + src/App.tsx | 7 + src/components/ApiDocViewer.tsx | 74 + src/components/DocContent.tsx | 180 ++ src/components/DocTree.tsx | 97 ++ src/data/RHI/RHIDevice.md | 37 + src/data/RHI/RHITexture.md | 48 + src/data/RHIBuffer.md | 53 + src/data/RHICommandList.md | 32 + src/data/RHICommandQueue.md | 32 + src/data/docs.ts | 249 +++ src/data/getting-started.md | 34 + src/index.css | 36 + src/lib/parser.ts | 236 +++ src/lib/types.ts | 38 + src/main.tsx | 10 + tailwind.config.js | 11 + tsconfig.json | 25 + tsconfig.node.json | 11 + vite.config.ts | 16 + 24 files changed, 4082 insertions(+) create mode 100644 .gitignore create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 src/App.tsx create mode 100644 src/components/ApiDocViewer.tsx create mode 100644 src/components/DocContent.tsx create mode 100644 src/components/DocTree.tsx create mode 100644 src/data/RHI/RHIDevice.md create mode 100644 src/data/RHI/RHITexture.md create mode 100644 src/data/RHIBuffer.md create mode 100644 src/data/RHICommandList.md create mode 100644 src/data/RHICommandQueue.md create mode 100644 src/data/docs.ts create mode 100644 src/data/getting-started.md create mode 100644 src/index.css create mode 100644 src/lib/parser.ts create mode 100644 src/lib/types.ts create mode 100644 src/main.tsx create mode 100644 tailwind.config.js create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b01a18a --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules/ +dist/ +.vite/ +*.log +.DS_Store diff --git a/index.html b/index.html new file mode 100644 index 0000000..9102730 --- /dev/null +++ b/index.html @@ -0,0 +1,12 @@ + + +
+ + +Select a document from the sidebar
+{doc.metadata.namespace}
+ {doc.metadata.package}
+ {doc.metadata.inherits}
+ {doc.metadata.description}
+ )} + + {doc.sections.map((section, idx) => ( + + ))} + + {doc.references.length > 0 && ( +{renderText()}
+} + +const TableContent = ({ table }: { table: DocTable }) => { + if (!table.headers.length || !table.rows.length) return null + + return ( +| + {header} + | + ))} +
|---|
| + {cell} + | + ))} +
+
+ {code.code}
+
+
+ )
+}
diff --git a/src/components/DocTree.tsx b/src/components/DocTree.tsx
new file mode 100644
index 0000000..9507936
--- /dev/null
+++ b/src/components/DocTree.tsx
@@ -0,0 +1,97 @@
+import React, { useState } from 'react'
+import { ChevronRight, ChevronDown, Folder, FileText } from 'lucide-react'
+import { clsx } from 'clsx'
+import type { DocFile } from '@/lib/types'
+import { getDisplayName } from '@/lib/parser'
+
+interface DocTreeProps {
+ files: DocFile[]
+ selectedPath?: string
+ onSelect: (file: DocFile) => void
+}
+
+interface DocTreeNodeProps {
+ file: DocFile
+ level: number
+ selectedPath?: string
+ onSelect: (file: DocFile) => void
+}
+
+const DocTreeNode = React.memo(({ file, level, selectedPath, onSelect }: DocTreeNodeProps) => {
+ const [expanded, setExpanded] = useState(level === 0)
+
+ const isSelected = selectedPath === file.relativePath
+ const isDir = file.isDir
+
+ const handleClick = (e: React.MouseEvent) => {
+ e.stopPropagation()
+ if (isDir) {
+ setExpanded(!expanded)
+ } else {
+ onSelect(file)
+ }
+ }
+
+ return (
+