- Updated links in CONTRIBUTING.md and README.md to point to the correct Chinese documentation paths. - Removed outdated files including the English and Chinese versions of the branching strategy, contributing guide, and test plan documents. - Cleaned up references to non-existent documentation in the project structure to streamline the contributor experience.
4.7 KiB
4.7 KiB
图像预览组件
概述
图像预览组件是 Cherry Studio 中用于渲染和显示各种图表和图像格式的专用组件集合。它们为不同预览类型提供一致的用户体验,具有共享的加载状态、错误处理和交互控制功能。
支持格式
- Mermaid: 交互式图表和流程图
- PlantUML: UML 图表和系统架构
- SVG: 可缩放矢量图形
- Graphviz/DOT: 图形可视化和网络图表
架构
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:
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 文档。