auto-save 2026-05-17 11:01 (~5)
This commit is contained in:
@@ -24,6 +24,9 @@ import {
|
||||
} from "@/lib/api"
|
||||
import { TRANSPARENT_HUMAN_NEGATIVE_PROMPT, TRANSPARENT_HUMAN_VIDEO_PROMPT } from "@/lib/workflow-target"
|
||||
|
||||
type FlowNodeData = NodeData & Record<string, unknown>
|
||||
type StudioFlowNode = Node<FlowNodeData>
|
||||
|
||||
const NODE_TYPES = {
|
||||
input: InputNode,
|
||||
visual: VisualLabNode,
|
||||
@@ -767,7 +770,7 @@ export default function Home() {
|
||||
|
||||
// 用 useNodesState 让 ReactFlow 自己管位置(避免轮询时重置 drag)
|
||||
const savedSizes = useMemo(() => loadNodeSizes(), [])
|
||||
const [nodes, setNodes] = useNodesState<Node>(
|
||||
const [nodes, setNodes] = useNodesState<StudioFlowNode>(
|
||||
LAYOUT.map((n) => {
|
||||
const s = savedSizes[n.id] ?? {}
|
||||
const w = s.w ?? n.w
|
||||
@@ -777,7 +780,7 @@ export default function Home() {
|
||||
id: n.id,
|
||||
type: n.type,
|
||||
position: { x: n.x, y: n.y },
|
||||
data: nodeData,
|
||||
data: nodeData as FlowNodeData,
|
||||
draggable: !isPinned,
|
||||
width: w,
|
||||
...(typeof h === "number" ? { height: h } : {}),
|
||||
@@ -876,7 +879,7 @@ export default function Home() {
|
||||
|
||||
// Job 数据变化时只更新节点 data 不动 position
|
||||
useEffect(() => {
|
||||
setNodes((prev) => prev.map((n) => ({ ...n, data: nodeData })))
|
||||
setNodes((prev) => prev.map((n) => ({ ...n, data: nodeData as FlowNodeData })))
|
||||
}, [nodeData, setNodes])
|
||||
|
||||
// 关键帧详情面板是独立 ReactFlow 节点:可拖动、跟随画布缩放。
|
||||
@@ -900,7 +903,7 @@ export default function Home() {
|
||||
return prev.map((n) => n.id === KEYFRAME_PANEL_ID
|
||||
? {
|
||||
...n,
|
||||
data: nodeData,
|
||||
data: nodeData as FlowNodeData,
|
||||
draggable: !framePanelPinned,
|
||||
dragHandle: framePanelPinned ? undefined : ".keyframe-panel-drag",
|
||||
}
|
||||
@@ -914,7 +917,7 @@ export default function Home() {
|
||||
id: KEYFRAME_PANEL_ID,
|
||||
type: "keyframePanel",
|
||||
position: defaultPosition,
|
||||
data: nodeData,
|
||||
data: nodeData as FlowNodeData,
|
||||
draggable: !framePanelPinned,
|
||||
dragHandle: framePanelPinned ? undefined : ".keyframe-panel-drag",
|
||||
selectable: true,
|
||||
@@ -953,7 +956,7 @@ export default function Home() {
|
||||
return prev.map((n) => n.id === VIDEO_FRAME_PANEL_ID
|
||||
? {
|
||||
...n,
|
||||
data: nodeData,
|
||||
data: nodeData as FlowNodeData,
|
||||
draggable: videoPanelDock === "canvas",
|
||||
dragHandle: videoPanelDock === "canvas" ? ".video-frame-panel-drag" : undefined,
|
||||
}
|
||||
@@ -967,7 +970,7 @@ export default function Home() {
|
||||
id: VIDEO_FRAME_PANEL_ID,
|
||||
type: "videoFramePanel",
|
||||
position: defaultPosition,
|
||||
data: nodeData,
|
||||
data: nodeData as FlowNodeData,
|
||||
draggable: videoPanelDock === "canvas",
|
||||
dragHandle: videoPanelDock === "canvas" ? ".video-frame-panel-drag" : undefined,
|
||||
selectable: true,
|
||||
|
||||
Reference in New Issue
Block a user