feat: 骨架——Vite + Vue3 + Fabric v7,左工作区右侧栏

共享外壳与类型契约,四条并行开发线在此之上各自填空:
- types.ts 是唯一的跨线接口,并行期间冻结
- editor/ 画布单例、选中态、尺寸预设与比例锁
- Sidebar 按选中对象切换面板,五个面板位已接好
- fonts/ filters/ sources/ io/ 留桩,各线只改自己目录

导出定 WebP:实测 540x287 PNG 134KB vs 1200x630 WebP 23KB。
字体接口挂在 Vite 中间件上,工具只在 dev 下完整可用。
This commit is contained in:
Jz0ojiang
2026-09-04 15:42:27 +08:00
commit 95eeb69ff8
26 changed files with 1390 additions and 0 deletions
+25
View File
@@ -0,0 +1,25 @@
import type { ExportOptions, Template } from "@/types";
/**
* 【T5 待实现 — 导出与模板】
*
* export.ts:
* 画布导出成 WebP(默认,带质量滑杆)或 PNG,走浏览器下载到下载文件夹。
* **不上传图床、不写 frontmatter**——这两条明确不做。
* 导出必须是画布的逻辑尺寸(全分辨率),不受预览缩放影响;
* `useEditor().displayScale` 只改 CSS 尺寸,所以 `toDataURL` 默认就是对的,
* 但要注意 multiplier 别被重复乘一次。
*
* templates.ts:
* 模板 = `canvas.toJSON()` + 画布尺寸,存 localStorage(见 types.ts 的 Template)。
* 没有内置预设包,全靠用户自己存。加载走 `canvas.loadFromJSON()`。
* 存之前扫一遍文本对象的 fontFamily 填进 `usedFonts`——用了本机字体的模板
* 换台机器复现不出来,加载时要提示。
*/
export async function exportCanvas(_options: ExportOptions): Promise<void> {
throw new Error("T5 未实现:exportCanvas");
}
export function listTemplates(): Template[] {
throw new Error("T5 未实现:listTemplates");
}