feat(canvas): 画布工作台 - 新增生成副本并修复大型画布性能、素材同步与删除校验
统一图片与视频副本的生成落点并保留参考连接。\n优化大型画布节点虚拟化、媒体懒加载、拖拽与详情进入路径。\n修复素材主版本 ID 同步及删除时的画布独立引用校验。
This commit is contained in:
1 parent
b3b360481c
commit
3a21e0ebfc
45 files changed
+1348
-286
No files matched your search
@@ -1,6 +1,6 @@
|
||||
import { describe, expect, test } from "bun:test";
|
||||
|
||||
import { canGenerateImageInPlace, findAvailableGenerationGroupPosition, imageGenerationGroupSize } from "../src/lib/canvas/canvas-generation-layout";
|
||||
import { canGenerateImageInPlace, canGenerateMediaInPlace, findAvailableGenerationGroupPosition, imageGenerationGroupSize } from "../src/lib/canvas/canvas-generation-layout";
|
||||
import { CanvasNodeType, type CanvasNodeData } from "../src/types/canvas";
|
||||
|
||||
function node(id: string, x: number, y: number, width = 340, height = 240): CanvasNodeData {
|
||||
@@ -28,9 +28,17 @@ describe("findAvailableGenerationGroupPosition", () => {
|
||||
});
|
||||
|
||||
describe("canGenerateImageInPlace", () => {
|
||||
test("只有空图片节点复用原节点", () => {
|
||||
test("空图片和显式复制节点复用原节点", () => {
|
||||
expect(canGenerateImageInPlace(node("empty", 0, 0))).toBe(true);
|
||||
expect(canGenerateImageInPlace({ ...node("result", 0, 0), metadata: { content: "image-url" } })).toBe(false);
|
||||
expect(canGenerateImageInPlace({ ...node("copy", 0, 0), metadata: { content: "image-url", generationResultPlacement: "replace-node" } })).toBe(true);
|
||||
expect(canGenerateImageInPlace({ ...node("copy", 0, 0), metadata: { content: "image-url", generationResultPlacement: "new-version", copiedFromNodeId: "source" } })).toBe(false);
|
||||
expect(canGenerateImageInPlace({ ...node("text", 0, 0), type: CanvasNodeType.Text })).toBe(false);
|
||||
});
|
||||
|
||||
test("视频复制节点与图片使用相同的结果落点规则", () => {
|
||||
const video = { ...node("video-copy", 0, 0), type: CanvasNodeType.Video, metadata: { content: "video-url", generationResultPlacement: "replace-node" as const } };
|
||||
expect(canGenerateMediaInPlace(video, CanvasNodeType.Video)).toBe(true);
|
||||
expect(canGenerateMediaInPlace({ ...video, metadata: { ...video.metadata, generationResultPlacement: "new-version" } }, CanvasNodeType.Video)).toBe(false);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user