# 图像预览组件 ## 概述 图像预览组件是 Cherry Studio 中用于渲染和显示各种图表和图像格式的专用组件集合。它们为不同预览类型提供一致的用户体验,具有共享的加载状态、错误处理和交互控制功能。 ## 支持格式 - **Mermaid**: 交互式图表和流程图 - **PlantUML**: UML 图表和系统架构 - **SVG**: 可缩放矢量图形 - **Graphviz/DOT**: 图形可视化和网络图表 ## 架构 ```mermaid graph TD A[MermaidPreview] --> D[ImagePreviewLayout] B[PlantUmlPreview] --> D C[SvgPreview] --> D E[GraphvizPreview] --> D D --> F[ImageToolbar] D --> G[useDebouncedRender] F --> H[平移控制] F --> I[缩放控制] F --> J[重置功能] F --> K[对话框控制] G --> L[防抖渲染] G --> M[错误处理] G --> N[加载状态] G --> O[依赖管理] ``` ## 核心组件 ### ImagePreviewLayout 图像预览布局 为所有图像预览组件提供基础的通用布局包装器。 **功能特性:** - **加载状态管理**: 在渲染期间显示加载动画 - **错误显示**: 渲染失败时显示错误信息 - **工具栏集成**: 启用时有条件地渲染 ImageToolbar - **容器管理**: 使用一致的样式包装预览内容 - **响应式设计**: 适应不同的容器尺寸 **属性:** - `children`: 要显示的预览内容 - `loading`: 指示内容是否正在渲染的布尔值 - `error`: 渲染失败时显示的错误信息 - `enableToolbar`: 是否显示交互式工具栏 - `imageRef`: 用于图像操作的容器元素引用 ### ImageToolbar 图像工具栏 提供图像操作控制的交互式工具栏组件。 **功能特性:** - **平移控制**: 4方向平移按钮(上、下、左、右) - **缩放控制**: 放大/缩小功能,支持可配置的增量 - **重置功能**: 恢复原始平移和缩放状态 - **对话框控制**: 在展开对话框中打开预览 - **无障碍设计**: 完整的键盘导航和屏幕阅读器支持 **布局:** - 3x3 网格布局,位于预览右下角 - 响应式按钮尺寸 - 所有控件的工具提示支持 ### useDebouncedRender Hook 防抖渲染钩子 用于管理预览渲染的专用 React Hook,具有性能优化功能。 **功能特性:** - **防抖渲染**: 防止内容快速变化时的过度重新渲染(默认 300ms 延迟) - **自动依赖管理**: 处理渲染和条件函数的依赖项 - **错误处理**: 捕获和管理渲染错误,提供详细的错误信息 - **加载状态**: 跟踪渲染进度并自动更新状态 - **条件渲染**: 支持预渲染条件检查 - **手动控制**: 提供触发、取消和状态管理功能 **API:** ```typescript const { containerRef, error, isLoading, triggerRender, cancelRender, clearError, setLoading } = useDebouncedRender( value, renderFunction, options ) ``` **选项:** - `debounceDelay`: 自定义防抖时间 - `shouldRender`: 条件渲染逻辑函数 ## 组件实现 ### MermaidPreview Mermaid 预览 渲染 Mermaid 图表,具有可见性检测的特殊处理。 **特殊功能:** - 渲染前语法验证 - 可见性检测以处理折叠的容器 - 边缘情况的 SVG 坐标修复 - 与 mermaid.js 库集成 ### PlantUmlPreview PlantUML 预览 使用在线 PlantUML 服务器渲染 PlantUML 图表。 **特殊功能:** - 网络错误处理和重试逻辑 - 使用 deflate 压缩的图表编码 - 支持明/暗主题 - 服务器状态监控 ### SvgPreview SVG 预览 使用 Shadow DOM 隔离渲染 SVG 内容。 **特殊功能:** - Shadow DOM 渲染实现样式隔离 - 直接 SVG 内容注入 - 最小化处理开销 - 跨浏览器兼容性 ### GraphvizPreview Graphviz 预览 使用 viz.js 库渲染 Graphviz/DOT 图表。 **特殊功能:** - 使用 viz.js 进行客户端渲染 - viz.js 库的懒加载 - SVG 元素生成 - 内存高效处理 ## 共享功能 ### 错误处理 所有预览组件提供一致的错误处理: - 网络错误(连接失败) - 语法错误(无效的图表代码) - 服务器错误(外部服务失败) - 渲染错误(库失败) ### 加载状态 所有组件的标准化加载指示器: - 处理期间的动画 - 长时间操作的进度反馈 - 状态间的平滑过渡 ### 交互控制 通用交互模式: - 平移和缩放功能 - 重置到原始视图 - 全屏对话框模式 - 键盘无障碍访问 ### 性能优化 - 防抖渲染以防止过度更新 - 重型库的懒加载 - 大型图表的内存管理 - 高效的重新渲染策略 ## 与 CodeBlockView 的集成 图像预览组件与 CodeBlockView 无缝集成: - 基于语言标签的自动格式检测 - 一致的工具栏集成 - 共享状态管理 - 响应式布局适应 有关整体 CodeBlockView 架构的更多信息,请参阅 [CodeBlockView 文档](./code-block-view.md)。