Files
ttstd-infinite-canvas/web/src/constant/canvas.ts

128 lines
5.2 KiB
TypeScript

import { CanvasNodeType } from "@/types/canvas";
import type { CanvasNodeMetadata } from "@/types/canvas";
type CanvasNodeSpec = {
width: number;
height: number;
title: string;
metadata?: CanvasNodeMetadata;
};
export const NODE_DEFAULT_SIZE = {
[CanvasNodeType.Image]: { width: 720, height: 405, title: "图片" },
[CanvasNodeType.Text]: { width: 340, height: 240, title: "Note" },
[CanvasNodeType.Drawing]: { width: 440, height: 300, title: "绘图" },
[CanvasNodeType.Script]: { width: 920, height: 360, title: "分镜脚本" },
[CanvasNodeType.Skill]: { width: 360, height: 220, title: "技能" },
// 配置节点同时承载模式、渠道、工作流和参数;预留稳定空间,避免控件和错误状态互相挤压。
[CanvasNodeType.Config]: { width: 480, height: 390, title: "生成配置" },
[CanvasNodeType.Video]: { width: 720, height: 405, title: "视频" },
[CanvasNodeType.Audio]: { width: 340, height: 120, title: "Audio" },
[CanvasNodeType.Frame]: { width: 760, height: 520, title: "未命名背板" },
[CanvasNodeType.Markdown]: { width: 420, height: 320, title: "Markdown" },
[CanvasNodeType.Svg]: { width: 420, height: 320, title: "SVG" },
[CanvasNodeType.Html]: { width: 520, height: 380, title: "HTML" },
[CanvasNodeType.Panorama]: { width: 520, height: 300, title: "全景" },
[CanvasNodeType.Compare]: { width: 520, height: 320, title: "对比" },
[CanvasNodeType.Chart]: { width: 480, height: 320, title: "图表" },
[CanvasNodeType.ColorGrade]: { width: 420, height: 360, title: "调色" },
[CanvasNodeType.MediaConversion]: { width: 480, height: 460, title: "转换" },
[CanvasNodeType.BatchTable]: { width: 1280, height: 560, title: "批量创作表" },
} satisfies Record<CanvasNodeType, { width: number; height: number; title: string }>;
export const NODE_SPECS = {
[CanvasNodeType.Image]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.Image],
metadata: { content: "", status: "idle" },
},
[CanvasNodeType.Text]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.Text],
metadata: { content: "", status: "idle", fontSize: 14 },
},
[CanvasNodeType.Drawing]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.Drawing],
metadata: { status: "success" },
},
[CanvasNodeType.Script]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.Script],
metadata: {
status: "idle",
workflowKind: "script",
storyboard: {
rows: [],
visibleColumns: ["shotNumber", "durationSeconds", "videoMotionPrompt", "dialogue", "assets"],
referenceNodeIds: [],
},
},
},
[CanvasNodeType.Skill]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.Skill],
metadata: { status: "success" },
},
[CanvasNodeType.Config]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.Config],
metadata: { content: "", status: "idle", generationMode: "image" },
},
[CanvasNodeType.Video]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.Video],
metadata: { content: "", status: "idle" },
},
[CanvasNodeType.Audio]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.Audio],
metadata: { content: "", status: "idle" },
},
[CanvasNodeType.Frame]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.Frame],
metadata: { frame: { collapsed: false, expandedWidth: NODE_DEFAULT_SIZE[CanvasNodeType.Frame].width, expandedHeight: NODE_DEFAULT_SIZE[CanvasNodeType.Frame].height } },
},
[CanvasNodeType.Markdown]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.Markdown],
metadata: { content: "", status: "idle" },
},
[CanvasNodeType.Svg]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.Svg],
metadata: { content: "", status: "idle" },
},
[CanvasNodeType.Html]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.Html],
metadata: { content: "", status: "idle" },
},
[CanvasNodeType.Panorama]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.Panorama],
metadata: { content: "", status: "idle" },
},
[CanvasNodeType.Compare]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.Compare],
metadata: { status: "idle" },
},
[CanvasNodeType.Chart]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.Chart],
metadata: { content: "", status: "idle" },
},
[CanvasNodeType.ColorGrade]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.ColorGrade],
metadata: { status: "idle" },
},
[CanvasNodeType.MediaConversion]: { ...NODE_DEFAULT_SIZE[CanvasNodeType.MediaConversion], metadata: { status: "idle" } },
[CanvasNodeType.BatchTable]: {
...NODE_DEFAULT_SIZE[CanvasNodeType.BatchTable],
metadata: {
status: "idle",
batchTable: {
operation: "try_on",
concurrency: 10,
referenceColumns: [
{ id: "reference-1", label: "参考图 1" },
{ id: "reference-2", label: "参考图 2" },
{ id: "reference-3", label: "参考图 3" },
],
rows: [],
},
},
},
} satisfies Record<CanvasNodeType, CanvasNodeSpec>;
export function getNodeSpec(type: CanvasNodeType) {
return NODE_SPECS[type];
}