Skip to content

feat(预览): 支持 MDX 独立文档渲染与交互预览 - #2

Merged
xiaolfeng merged 2 commits into
masterfrom
xiaolfeng/feature-add-preview-mdx
Sep 22, 2026
Merged

xiaolfeng merged 2 commits into
masterfrom
xiaolfeng/feature-add-preview-mdx

Conversation

@xiaolfeng

Copy link
Copy Markdown
Owner

概要

Preview(预览)模块此前缺乏对 .mdx 文件的独立感知与渲染能力,当上传或浏览 .mdx 文件时会直接回退至纯代码视图。本 PR 为 Preview 模块赋予独立支持 MDX 文档的渲染与交互大纲能力,使其与 HTML、LPW、TSX 等同为一等公民预览格式。

主要变更

1. 后端服务层(Go)

  • MIME 与推断:
    • 新增 PreviewMimeMDX = "text/mdx; charset=utf-8" 常量。
    • 在 inferMimeType 中将 .mdx 文件精准推断为 PreviewMimeMDX。
  • 入口文件解析(Entry Resolution):
    • 更新 FindPreviewEntry、FindPreviewEntryFromPreviewFiles 与 FindPreviewEntryFromPageFiles:
      • 支持 MDX 文档入口推导:优先选取 index.mdx,其次选取 readme.mdx / overview.mdx,最后回退首个 .mdx。
      • 优先级对齐:LPW > HTML > TSX > MDX > Markdown。
      • 增加 isMdxEntryFile 辅助判定,保障历史行 MIME 漂移兜底与常量一致性。
  • 直出与路由:
    • 在 navigateShim 拦截正则中追加 .mdx 扩展名。
    • 在 ServePreviewPath 中统一调用 logic.FindPreviewEntry 处理默认重定向。
    • 更新 preview_handlers.go 的可评审入口提示文案。

2. 共享组件库(@lumina/components)

  • 独立 MDX 模块:在 components/src/mdx/ 建立独立模块并在 components/package.json 导出 "./mdx"。
  • YAML Frontmatter 解析器(frontmatter.ts):
    • 轻量且稳健地解析 ---\n 起始的 YAML Frontmatter。
    • 提取 title、description、icon、tags、date/last_updated 以及自定义属性字典,正文与元数据安全分离。
  • 文档头部卡片(mdx-header.tsx):
    • 动态关联 Lucide 图标库呈现对应主题图标。
    • 呈现静烛微明风格的大标题(display-title)与导言描述。
    • 渲染标签徽章并提供折叠式的原始元数据面板。
  • 专用 MDX 查看器(mdx-viewer.tsx):
    • 提供 PreviewMdxViewer(全页模式)与 PreviewMdxInlineViewer(内联卡片模式)。
    • 套用微明设计语言(proseArticle),支持 GFM、扩展围栏块(:::callout、:::card、:::steps、:::step)、Mermaid 架构图懒加载与 KaTeX 数学公式渲染。
    • 提取 H2/H3 标题并集成 TableOfContents,在宽屏右侧保持 sticky 目录大纲,移动端提供悬浮折叠大纲。

3. 控制台前端应用(web/)

  • 类型系统扩展:PreviewKind 联合类型扩充 'mdx',previewLanguageFromFilename 映射为 'markdown'。
  • 查看器分发:在 file-viewer.tsx 中分发 mdx 到 <PreviewMdxViewer />,并保持「源码模式」无缝切换。
  • Pages 页面展示与 Q&A 适配:
    • 在 showcase-shell.tsx 的 isRenderable 中加入 mdx,支持 MDX 文档晋升快照并在 Pages 页面中直接渲染。
    • 在 preview-frame.tsx 中增加内联 MDX 渲染分支(<PreviewMdxInlineViewer />)。

验证情况

  • 后端 Go 测试:
    • make fmt 与 make vet 静态检查通过。
    • go test -count=1 ./internal/logic ./internal/handler ./internal/mcp 全部通过。
    • go test -short -race ./... 竞态安全测试全部通过。
  • 前端与组件测试:
    • @lumina/components:55 个测试文件,287 个测试用例全部通过;tsc --noEmit 与 ESLint 通过。
    • web:34 个测试文件,156 个测试用例全部通过;修改文件 ESLint 通过;生产构建顺利完成。
    • web-wiki:10 个测试文件,80 个测试用例全部通过。

原因: 预览工作台此前缺乏对 .mdx 文件的独立渲染能力,直接回退至纯代码视图。
内容:
- 后端新增 PreviewMimeMDX 常量与 MIME 推断,支持 MDX 入口文件自动解析
- 共享组件库新增 mdx 模块,支持 YAML frontmatter 解析、头部卡片与目录大纲
- 控制台前端扩展 PreviewKind,完成文件查看器分发、Pages 展示与 Q&A 内联适配
@xiaolfeng
xiaolfeng merged commit c5705a5 into master Sep 22, 2026
2 checks passed
@xiaolfeng
xiaolfeng deleted the xiaolfeng/feature-add-preview-mdx branch September 22, 2026 13:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant