"use client"; import { motion } from "framer-motion"; import { useState, useEffect } from "react"; interface Argument { name: string; type: "string" | "number" | "boolean" | "object" | "array"; required: boolean; defaultValue?: string; reference?: string; // e.g., "state.variables.node_1.price" } interface NodeArgumentsPanelProps { nodeId: string; currentArgs: Argument[]; onUpdate: (args: Argument[]) => void; } export default function NodeArgumentsPanel({ nodeId, currentArgs, onUpdate }: NodeArgumentsPanelProps) { const [arguments_, setArguments] = useState(currentArgs || []); const [showAddArg, setShowAddArg] = useState(false); useEffect(() => { const timeoutId = setTimeout(() => { onUpdate(arguments_); }, 500); return () => clearTimeout(timeoutId); }, [arguments_, onUpdate]); const addArgument = () => { setArguments([ ...arguments_, { name: `arg${arguments_.length + 1}`, type: "string", required: false, }, ]); setShowAddArg(false); }; const updateArgument = (index: number, updates: Partial) => { setArguments( arguments_.map((arg, i) => (i === index ? { ...arg, ...updates } : arg)) ); }; const removeArgument = (index: number) => { setArguments(arguments_.filter((_, i) => i !== index)); }; return (

Arguments

{arguments_.length === 0 ? (

No arguments defined. Click "Add Argument" to get started.

) : (
{arguments_.map((arg, index) => (
{/* Argument Name */} updateArgument(index, { name: e.target.value })} placeholder="argumentName" className="px-10 py-6 bg-white border border-border-faint rounded-6 text-body-small text-accent-black font-mono focus:outline-none focus:border-heat-100 transition-colors" /> {/* Argument Type */}
{/* Remove Button */}
{/* Value Source */}
updateArgument(index, { reference: e.target.value })} placeholder="state.variables.node_1.price or 'default value'" className="w-full px-10 py-6 bg-white border border-border-faint rounded-6 text-body-small text-accent-black font-mono focus:outline-none focus:border-heat-100 transition-colors" />

Reference previous node output or set a default value

{/* Required Toggle */}
Required
))}
)} {showAddArg && (

Add a new argument to define what this node receives

)} {/* Quick Reference Guide */}
📖 Variable Reference Guide
Workflow Input: state.variables.input
Previous Node Output: state.variables.lastOutput
Specific Node Output: state.variables.node_1.price state.variables.agent_extract.data
Custom Variables: state.variables.myCustomVar
); }