import { useState, useEffect, useCallback } from 'react' import { DocTree } from './DocTree' import { DocContent } from './DocContent' import { parseMarkdown, buildFileTree } from '@/lib/parser' import type { DocFile, ParsedDoc } from '@/lib/types' import { config } from '@/config' const modules = import.meta.glob('../docs/**/*.md', { as: 'raw', eager: true }) const DOCS_FILES: Record = Object.fromEntries( Object.entries(modules).map(([path, content]) => { const relativePath = path.replace('../docs/', '') return [relativePath, content as string] }) ) export const ApiDocViewer = () => { const [fileTree, setFileTree] = useState([]) const [selectedPath, setSelectedPath] = useState() const [currentDoc, setCurrentDoc] = useState(null) useEffect(() => { const files = Object.keys(DOCS_FILES) const tree = buildFileTree(files, '/') setFileTree(tree) if (files.length > 0) { setSelectedPath(files[0]) } }, []) useEffect(() => { if (selectedPath) { const content = DOCS_FILES[selectedPath] if (content) { const parsed = parseMarkdown(content) setCurrentDoc(parsed) } } }, [selectedPath]) const handleSelect = useCallback((file: DocFile) => { if (!file.isDir) { setSelectedPath(file.relativePath) } }, []) const handleReferenceClick = useCallback((ref: string) => { const normalizedRef = ref.replace('.md', '').replace(/^\.\.\//, '') const allFiles = Object.keys(DOCS_FILES) const match = allFiles.find(f => f.replace('.md', '') === normalizedRef) if (match) { setSelectedPath(match) } }, []) return (
) }