feat: 增加 ECharts 渲染与预览交互增强
- 新增可复用的 markdown-echarts 工作区,支持安全的 YAML 围栏、默认值、语义校验、错误占位和 SVG 渲染 - 将 ECharts 接入统一 Markdown、快速预览、精确预览与 PDF 链路,并复用 Mermaid 的不可跨页和超高图单页适配策略 - 默认示例加入 ECharts,增加源文本折叠、顶部文档状态、页码输入跳转与滚动同步 - 快速预览改用外层容器滚动,使滚动条与精确预览统一贴在预览区域右侧,并兼容显示缩放 - 完善 Docker 工作区复制、可配置 Compose 镜像、测试覆盖和进度文档
This commit is contained in:
@@ -3,7 +3,50 @@ export interface PageVerticalRange {
|
||||
bottom: number;
|
||||
}
|
||||
|
||||
export const PREVIEW_SCROLLBAR_WIDTH_PX = 14;
|
||||
export function getPreviewPageScrollTop(
|
||||
currentScrollTop: number,
|
||||
pageViewportTop: number,
|
||||
scrollerViewportTop: number
|
||||
) {
|
||||
if (
|
||||
!Number.isFinite(currentScrollTop) ||
|
||||
!Number.isFinite(pageViewportTop) ||
|
||||
!Number.isFinite(scrollerViewportTop)
|
||||
) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return Math.max(
|
||||
0,
|
||||
currentScrollTop + pageViewportTop - scrollerViewportTop
|
||||
);
|
||||
}
|
||||
|
||||
export function normalizePreviewPageNumber(
|
||||
value: string,
|
||||
current: number,
|
||||
total: number
|
||||
) {
|
||||
if (!Number.isInteger(total) || total < 1) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const normalizedValue = value.trim();
|
||||
const fallback = Number.isInteger(current)
|
||||
? Math.min(Math.max(current, 1), total)
|
||||
: 1;
|
||||
|
||||
if (normalizedValue.length === 0) {
|
||||
return fallback;
|
||||
}
|
||||
|
||||
const parsed = Number(normalizedValue);
|
||||
if (!Number.isInteger(parsed)) {
|
||||
return fallback;
|
||||
}
|
||||
|
||||
return Math.min(Math.max(parsed, 1), total);
|
||||
}
|
||||
|
||||
export function getNearestPageNumber(
|
||||
viewportCenter: number,
|
||||
|
||||
Reference in New Issue
Block a user