mirror of
https://github.com/johndoe6345789/AutoMetabuilder.git
synced 2026-04-24 13:54:59 +00:00
- Created custom hooks: useWorkflowGraph, useWorkflowPlugins, usePluginSearch, useTabNavigation - Decomposed canvas logic into: useCanvasNodes, useCanvasEdges, useCanvasDragDrop - Built atomic node components: NodeHeader, NodeBody, NodePorts - Created canvas UI components: CanvasInfoPanel, CanvasHintPanel - Split builder into: LoadingState, ErrorState, WorkflowBuilderHeader, WorkflowBuilderTabs, WorkflowBuilderContent - Added React Flow for n8n-style visual canvas with drag-and-drop - All components now under 100 LOC following PROMPT.md guidelines Co-authored-by: johndoe6345789 <224850594+johndoe6345789@users.noreply.github.com>
33 lines
867 B
TypeScript
33 lines
867 B
TypeScript
import { Handle, Position } from "reactflow";
|
|
import { WorkflowPluginPort } from "../../lib/types";
|
|
|
|
type NodePortsProps = {
|
|
ports: WorkflowPluginPort[];
|
|
type: "input" | "output";
|
|
};
|
|
|
|
export default function NodePorts({ ports, type }: NodePortsProps) {
|
|
const isInput = type === "input";
|
|
const position = isInput ? Position.Left : Position.Right;
|
|
const handleType = isInput ? "target" : "source";
|
|
|
|
return (
|
|
<>
|
|
{ports.map((port, index) => (
|
|
<Handle
|
|
key={`${type}-${port.key}`}
|
|
type={handleType}
|
|
position={position}
|
|
id={port.key}
|
|
style={{
|
|
top: `${((index + 1) * 100) / (ports.length + 1)}%`,
|
|
width: 10,
|
|
height: 10,
|
|
backgroundColor: port.required ? "#f44336" : isInput ? "#4caf50" : "#2196f3",
|
|
}}
|
|
/>
|
|
))}
|
|
</>
|
|
);
|
|
}
|