Refactor workflow editor to overlay node config

This commit is contained in:
mlogclub
2026-06-22 22:59:12 +08:00
parent 658ebf130e
commit 2dc0a416de
@@ -393,9 +393,7 @@ export function WorkflowEditor({
</> </>
) : null} ) : null}
<ResizablePanel <ResizablePanel
defaultSize={ defaultSize={nodeLibraryCollapsed ? "100%" : "82%"}
nodeLibraryCollapsed ? (selectedNode ? "74%" : "100%") : selectedNode ? "56%" : "82%"
}
minSize="30%" minSize="30%"
className="min-h-0" className="min-h-0"
> >
@@ -447,24 +445,9 @@ export function WorkflowEditor({
<MiniMap pannable zoomable /> <MiniMap pannable zoomable />
</ReactFlow> </ReactFlow>
<WorkflowValidationBadge errors={validation.errors} valid={validation.valid} /> <WorkflowValidationBadge errors={validation.errors} valid={validation.valid} />
{pendingNodeDrag?.active ? (
<div
className="pointer-events-none fixed z-50 rounded-md border bg-background px-3 py-2 text-sm font-medium shadow-lg"
style={{
left: pendingNodeDrag.x + 12,
top: pendingNodeDrag.y + 12,
}}
>
{pendingNodeDrag.spec.title}
</div>
) : null}
</section>
</ResizablePanel>
{selectedNode ? ( {selectedNode ? (
<> <aside className="absolute top-3 right-3 z-30 h-[calc(100%-1.5rem)] w-[min(380px,calc(100%-1.5rem))] overflow-hidden rounded-md border bg-background shadow-lg">
<ResizableHandle withHandle /> <ScrollArea className="h-full min-h-0">
<ResizablePanel defaultSize="26%" minSize="18%" maxSize="40%" className="min-h-0">
<aside className="h-full min-h-0 overflow-y-auto bg-muted/10">
<NodeConfigPanel <NodeConfigPanel
node={selectedNode} node={selectedNode}
nodeSpec={selectedNodeSpec} nodeSpec={selectedNodeSpec}
@@ -481,10 +464,22 @@ export function WorkflowEditor({
</ul> </ul>
</div> </div>
) : null} ) : null}
</ScrollArea>
</aside> </aside>
</ResizablePanel>
</>
) : null} ) : null}
{pendingNodeDrag?.active ? (
<div
className="pointer-events-none fixed z-50 rounded-md border bg-background px-3 py-2 text-sm font-medium shadow-lg"
style={{
left: pendingNodeDrag.x + 12,
top: pendingNodeDrag.y + 12,
}}
>
{pendingNodeDrag.spec.title}
</div>
) : null}
</section>
</ResizablePanel>
</ResizablePanelGroup> </ResizablePanelGroup>
) )
} }