@runtypelabs/react-flow 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/index.ts","../src/utils/adapter.ts","../src/utils/layout.ts","../src/hooks/useRuntypeFlow.ts","../src/hooks/useFlowValidation.ts","../src/components/nodes/BaseNode.tsx","../src/components/nodes/PromptNode.tsx","../src/components/nodes/FetchUrlNode.tsx","../src/components/nodes/CodeNode.tsx","../src/components/nodes/ConditionalNode.tsx","../src/components/nodes/SendEmailNode.tsx","../src/components/RuntypeFlowEditor.tsx"],"names":["useState","useNodesState","useEdgesState","useRef","useCallback","addEdge","newEdges","useEffect","useMemo","memo","BaseNode","jsx","Handle","Position","jsxs","styles","PromptNode","Fragment","FetchUrlNode","CodeNode","ConditionalNode","SendEmailNode","GlobeIcon","CodeIcon","MailIcon","ReactFlow","ConnectionLineType","Background","BackgroundVariant","Controls","MiniMap","Panel"],"mappings":"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","file":"index.js","sourcesContent":["import type { Node, Edge, NodeProps } from '@xyflow/react'\nimport type { FlowStepType, PromptStepMode } from '../flow-step-types'\nimport type { RuntypeClient } from '@runtypelabs/sdk'\n\n// ============================================================================\n// Flow Step Types (matching Runtype API)\n// ============================================================================\n\n/**\n * Core FlowStep interface matching the Runtype API structure\n */\nexport interface FlowStep {\n id: string\n type: FlowStepType\n name: string\n order: number\n enabled: boolean\n config: FlowStepConfig\n}\n\n/**\n * Union type for all step configurations\n */\nexport type FlowStepConfig =\n | PromptStepConfig\n | FetchUrlStepConfig\n | TransformDataStepConfig\n | ConditionalStepConfig\n | SendEmailStepConfig\n | GenericStepConfig\n\n/**\n * Prompt step configuration\n */\nexport interface PromptStepConfig {\n mode?: PromptStepMode\n model: string\n systemPrompt?: string\n userPrompt: string\n previousMessages?: string\n responseFormat?: 'json' | 'markdown' | 'text' | 'html' | 'xml'\n temperature?: number\n maxTokens?: number\n outputVariable: string\n tools?: {\n toolIds: string[]\n }\n}\n\n/**\n * Fetch URL step configuration\n */\nexport interface FetchUrlStepConfig {\n http: {\n url: string\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'\n headers?: Record<string, string>\n body?: string\n timeout?: number\n }\n auth?: {\n type: 'none' | 'bearer' | 'basic' | 'api-key'\n token?: string\n username?: string\n password?: string\n apiKey?: string\n headerName?: string\n }\n responseType?: 'json' | 'text' | 'xml'\n outputVariable: string\n errorHandling?: 'fail' | 'continue' | 'default'\n defaultValue?: unknown\n}\n\n/**\n * Transform data (code) step configuration\n */\nexport interface TransformDataStepConfig {\n script: string\n outputVariable: string\n sandboxProvider?: 'quickjs' | 'daytona'\n language?: 'javascript' | 'typescript' | 'python'\n errorHandling?: 'fail' | 'continue' | 'default'\n defaultValue?: unknown\n}\n\n/**\n * Conditional step configuration\n */\nexport interface ConditionalStepConfig {\n condition: string\n trueSteps: FlowStep[]\n falseSteps?: FlowStep[]\n}\n\n/**\n * Send email step configuration\n */\nexport interface SendEmailStepConfig {\n from: string\n to: string\n subject: string\n replyTo?: string\n cc?: string\n bcc?: string\n html?: string\n text?: string\n attachments?: Array<{\n filename: string\n content: string\n contentType?: string\n }>\n outputVariable: string\n errorHandling?: 'fail' | 'continue' | 'default'\n defaultValue?: unknown\n}\n\n/**\n * Generic step config for extensibility\n */\nexport interface GenericStepConfig {\n [key: string]: unknown\n outputVariable?: string\n}\n\n// ============================================================================\n// React Flow Node Types\n// ============================================================================\n\n/**\n * Base data structure for all Runtype nodes\n * Uses index signature to satisfy React Flow's Record<string, unknown> constraint\n */\nexport interface RuntypeNodeData extends Record<string, unknown> {\n step: FlowStep\n label: string\n onChange?: (stepId: string, updates: Partial<FlowStep>) => void\n onDelete?: (stepId: string) => void\n}\n\n/**\n * Runtype node extending React Flow's Node type\n */\nexport type RuntypeNode = Node<RuntypeNodeData, FlowStepType>\n\n/**\n * Runtype edge type\n */\nexport type RuntypeEdge = Edge<{ stepOrder?: number }>\n\n/**\n * Props for node components\n */\nexport type RuntypeNodeProps = NodeProps\n\n// ============================================================================\n// Node Type Registry\n// ============================================================================\n\n/**\n * Supported node types that have custom components\n */\nexport const SUPPORTED_NODE_TYPES = [\n 'prompt',\n 'fetch-url',\n 'transform-data',\n 'conditional',\n 'send-email',\n] as const\n\nexport type SupportedNodeType = typeof SUPPORTED_NODE_TYPES[number]\n\n/**\n * Check if a step type has a custom node component\n */\nexport function isSupportedNodeType(type: FlowStepType): type is SupportedNodeType {\n return SUPPORTED_NODE_TYPES.includes(type as SupportedNodeType)\n}\n\n// ============================================================================\n// Editor Configuration\n// ============================================================================\n\n/**\n * Configuration for the RuntypeFlowEditor component\n */\nexport interface RuntypeFlowEditorProps {\n /** Runtype API client instance */\n client: RuntypeClient\n /** ID of an existing flow to load */\n flowId?: string\n /** Initial flow name (for new flows) */\n initialName?: string\n /** Initial flow description */\n initialDescription?: string\n /** Initial steps to populate the editor */\n initialSteps?: FlowStep[]\n /** Callback when flow is saved */\n onSave?: (flow: SavedFlow) => void\n /** Callback when flow changes */\n onChange?: (nodes: RuntypeNode[], edges: RuntypeEdge[]) => void\n /** Callback when a step is selected */\n onStepSelect?: (step: FlowStep | null) => void\n /** Whether to show the toolbar */\n showToolbar?: boolean\n /** Whether the editor is read-only */\n readOnly?: boolean\n /** Custom class name for the editor container */\n className?: string\n /** Available models for prompt steps */\n availableModels?: ModelOption[]\n}\n\n/**\n * Model option for prompt step configuration\n */\nexport interface ModelOption {\n id: string\n name: string\n provider: string\n}\n\n/**\n * Saved flow data returned after save operations\n */\nexport interface SavedFlow {\n id: string\n name: string\n description?: string\n steps: FlowStep[]\n createdAt?: string\n updatedAt?: string\n}\n\n// ============================================================================\n// Hook Types\n// ============================================================================\n\n/**\n * Return type for useRuntypeFlow hook\n */\nexport interface UseRuntypeFlowReturn {\n /** Current React Flow nodes */\n nodes: RuntypeNode[]\n /** Current React Flow edges */\n edges: RuntypeEdge[]\n /** Handler for node changes */\n onNodesChange: (changes: unknown) => void\n /** Handler for edge changes */\n onEdgesChange: (changes: unknown) => void\n /** Handler for new connections */\n onConnect: (connection: unknown) => void\n /** Flow metadata */\n flowName: string\n flowDescription: string\n flowId: string | null\n /** Set flow name */\n setFlowName: (name: string) => void\n /** Set flow description */\n setFlowDescription: (description: string) => void\n /** Load a flow by ID */\n loadFlow: (flowId: string) => Promise<void>\n /** Save the current flow */\n saveFlow: () => Promise<SavedFlow>\n /** Create a new flow */\n createFlow: (name: string, description?: string) => Promise<SavedFlow>\n /** Delete a step */\n deleteStep: (stepId: string) => void\n /** Update a step's configuration */\n updateStep: (stepId: string, updates: Partial<FlowStep>) => void\n /** Add a new step */\n addStep: (type: FlowStepType, position?: { x: number; y: number }) => void\n /** Loading state */\n isLoading: boolean\n /** Saving state */\n isSaving: boolean\n /** Error state */\n error: Error | null\n /** Whether there are unsaved changes */\n hasUnsavedChanges: boolean\n}\n\n/**\n * Validation result for a flow\n */\nexport interface FlowValidationResult {\n isValid: boolean\n errors: ValidationError[]\n warnings: ValidationWarning[]\n}\n\nexport interface ValidationError {\n stepId: string\n field?: string\n message: string\n}\n\nexport interface ValidationWarning {\n stepId: string\n field?: string\n message: string\n}\n\n// ============================================================================\n// Event Types\n// ============================================================================\n\n/**\n * Event emitted when a step is updated\n */\nexport interface StepUpdateEvent {\n stepId: string\n updates: Partial<FlowStep>\n previousValue: FlowStep\n}\n\n/**\n * Event emitted when a step is deleted\n */\nexport interface StepDeleteEvent {\n stepId: string\n step: FlowStep\n}\n\n/**\n * Event emitted when a step is added\n */\nexport interface StepAddEvent {\n step: FlowStep\n position: { x: number; y: number }\n}\n\n","import type { FlowStep, RuntypeNode, RuntypeEdge, RuntypeNodeData } from '../types'\nimport type { FlowStepType } from '../flow-step-types'\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst NODE_WIDTH = 280\nconst NODE_HEIGHT = 200 // Increased for better card visibility\nconst NODE_SPACING_X = 350 // Horizontal space between main steps\nconst NODE_SPACING_Y = 80 // Vertical space between branch steps\nconst BRANCH_OFFSET_X = 350 // Horizontal offset for branches to the right of conditional\nconst BRANCH_OFFSET_Y = -80 // Vertical offset for true branch (above center)\nconst FALSE_BRANCH_GAP = 100 // Gap between true and false branches\n\n// ============================================================================\n// Flow Steps to React Flow Nodes\n// ============================================================================\n\ninterface FlowStepsToNodesOptions {\n onChange?: (stepId: string, updates: Partial<FlowStep>) => void\n onDelete?: (stepId: string) => void\n startPosition?: { x: number; y: number }\n /** Internal: prefix for nested step IDs */\n idPrefix?: string\n /** Internal: parent conditional ID */\n parentId?: string\n}\n\n/**\n * Convert Runtype FlowStep array to React Flow Node array\n * Handles nested conditional branches with vertical stacking below conditional\n */\nexport function flowStepsToNodes(\n steps: FlowStep[],\n options?: FlowStepsToNodesOptions\n): RuntypeNode[] {\n const { \n onChange, \n onDelete, \n startPosition = { x: 50, y: 200 },\n idPrefix = '',\n parentId,\n } = options ?? {}\n\n // Sort steps by order\n const sortedSteps = [...steps].sort((a, b) => a.order - b.order)\n\n const nodes: RuntypeNode[] = []\n let currentX = startPosition.x\n let maxBranchY = startPosition.y // Track the maximum Y extent for branches\n\n for (const step of sortedSteps) {\n const nodeId = idPrefix ? `${idPrefix}${step.id}` : step.id\n\n const nodeData: RuntypeNodeData = {\n step,\n label: step.name || getDefaultStepName(step.type),\n onChange,\n onDelete,\n }\n\n const node: RuntypeNode = {\n id: nodeId,\n type: step.type,\n position: { x: currentX, y: startPosition.y },\n data: nodeData,\n draggable: true,\n selectable: true,\n }\n \n if (parentId) {\n node.parentId = parentId\n }\n\n nodes.push(node)\n \n // DEBUG: Log node positions\n console.log(`[flowStepsToNodes] Placed \"${step.name}\" (${step.type}) at x=${currentX}`)\n \n // Handle conditional branches - position to the right with true above, false below\n if (step.type === 'conditional' && step.config) {\n const config = step.config as { trueSteps?: FlowStep[]; falseSteps?: FlowStep[] }\n const branchX = currentX + BRANCH_OFFSET_X\n \n // Calculate branch lengths (horizontal extent)\n const trueBranchLength = config.trueSteps?.length || 0\n const falseBranchLength = config.falseSteps?.length || 0\n const maxBranchLength = Math.max(trueBranchLength, falseBranchLength)\n \n // Calculate true branch height (vertical extent for stacking)\n const trueBranchHeight = trueBranchLength * (NODE_HEIGHT + NODE_SPACING_Y)\n \n // True branch nodes (positioned to the right, above center)\n if (config.trueSteps && config.trueSteps.length > 0) {\n const trueBranchY = startPosition.y + BRANCH_OFFSET_Y\n const trueBranchNodes = flowStepsToNodes(config.trueSteps, {\n onChange,\n onDelete,\n startPosition: { \n x: branchX, \n y: trueBranchY \n },\n idPrefix: `${nodeId}-true-`,\n parentId: nodeId,\n })\n \n nodes.push(...trueBranchNodes)\n maxBranchY = Math.max(maxBranchY, trueBranchY + trueBranchHeight)\n }\n \n // False branch nodes (positioned to the right, below center)\n if (config.falseSteps && config.falseSteps.length > 0) {\n // Position false branch below true branch (or at center + gap if no true branch)\n const falseBranchY = trueBranchLength > 0\n ? startPosition.y + BRANCH_OFFSET_Y + trueBranchHeight + FALSE_BRANCH_GAP\n : startPosition.y + NODE_HEIGHT + NODE_SPACING_Y\n \n const falseBranchNodes = flowStepsToNodes(config.falseSteps, {\n onChange,\n onDelete,\n startPosition: { \n x: branchX, \n y: falseBranchY \n },\n idPrefix: `${nodeId}-false-`,\n parentId: nodeId,\n })\n \n nodes.push(...falseBranchNodes)\n const falseBranchHeight = config.falseSteps.length * (NODE_HEIGHT + NODE_SPACING_Y)\n maxBranchY = Math.max(maxBranchY, falseBranchY + falseBranchHeight)\n }\n \n // Skip past the conditional AND all its branch steps\n // Branches start at branchX, so we need to account for:\n // - The offset from conditional to first branch step (BRANCH_OFFSET_X)\n // - All the branch steps (maxBranchLength * (NODE_WIDTH + NODE_SPACING_X))\n if (maxBranchLength > 0) {\n const advance = BRANCH_OFFSET_X + (maxBranchLength * (NODE_WIDTH + NODE_SPACING_X))\n console.log(`[flowStepsToNodes] Conditional \"${step.name}\" has ${maxBranchLength} branch steps, advancing currentX by ${advance}`)\n currentX += advance\n console.log(`[flowStepsToNodes] After conditional, currentX = ${currentX}`)\n } else {\n currentX += NODE_WIDTH + NODE_SPACING_X\n }\n } else {\n // Move to the next X position for horizontal layout (non-conditional steps)\n currentX += NODE_WIDTH + NODE_SPACING_X\n }\n }\n\n return nodes\n}\n\n// ============================================================================\n// React Flow Nodes to Flow Steps\n// ============================================================================\n\n/**\n * Convert React Flow Node array back to Runtype FlowStep array\n */\nexport function nodesToFlowSteps(nodes: RuntypeNode[]): FlowStep[] {\n // Filter out branch nodes (handled within conditional steps)\n const topLevelNodes = nodes.filter(n => !n.parentId && !n.id.includes('-true-') && !n.id.includes('-false-'))\n \n // Sort by X position to determine order (horizontal layout)\n const sortedNodes = [...topLevelNodes].sort((a, b) => a.position.x - b.position.x)\n \n return sortedNodes.map((node, index) => {\n const step = node.data.step\n \n // Handle conditional steps - extract nested steps\n if (step.type === 'conditional') {\n const trueSteps = extractBranchSteps(nodes, node.id, 'true')\n const falseSteps = extractBranchSteps(nodes, node.id, 'false')\n \n return {\n ...step,\n order: index,\n config: {\n ...step.config,\n trueSteps,\n falseSteps,\n },\n }\n }\n \n return {\n ...step,\n order: index,\n }\n })\n}\n\n/**\n * Extract branch steps from conditional node\n */\nfunction extractBranchSteps(nodes: RuntypeNode[], parentId: string, branch: 'true' | 'false'): FlowStep[] {\n // Match nodes with the branch prefix pattern\n const branchPrefix = `${parentId}-${branch}-`\n const branchNodes = nodes.filter(n => n.id.startsWith(branchPrefix))\n \n // Sort by X position (horizontal layout within branches)\n const sortedBranchNodes = [...branchNodes].sort((a, b) => a.position.x - b.position.x)\n \n return sortedBranchNodes.map((node, index) => ({\n ...node.data.step,\n order: index,\n }))\n}\n\n// ============================================================================\n// Create Edges from Nodes\n// ============================================================================\n\n/**\n * Create edges connecting nodes in sequence\n */\nexport function createEdgesFromNodes(nodes: RuntypeNode[]): RuntypeEdge[] {\n const edges: RuntypeEdge[] = []\n\n // Helper to check if a node is a branch node\n const isBranchNode = (n: RuntypeNode) => n.parentId || n.id.includes('-true-') || n.id.includes('-false-')\n \n // Get top-level nodes sorted by X position (horizontal layout)\n const topLevelNodes = nodes\n .filter(n => !isBranchNode(n))\n .sort((a, b) => a.position.x - b.position.x)\n \n // Create sequential edges for top-level nodes\n // Skip conditionals - their branches connect to the next step instead\n for (let i = 0; i < topLevelNodes.length - 1; i++) {\n const sourceNode = topLevelNodes[i]\n const targetNode = topLevelNodes[i + 1]\n \n // Skip edge from conditional - branches will connect to next step\n if (sourceNode.data.step.type === 'conditional') {\n continue\n }\n \n edges.push({\n id: `edge-${sourceNode.id}-${targetNode.id}`,\n source: sourceNode.id,\n target: targetNode.id,\n sourceHandle: 'output',\n type: 'smoothstep',\n animated: false,\n data: { stepOrder: i },\n })\n }\n \n // Create edges for conditional branches\n const conditionalNodes = nodes.filter(n => n.data.step.type === 'conditional' && !isBranchNode(n))\n \n for (const conditionalNode of conditionalNodes) {\n const conditionalId = conditionalNode.id\n const conditionalIndex = topLevelNodes.findIndex(n => n.id === conditionalId)\n const nextMainStep = conditionalIndex < topLevelNodes.length - 1 \n ? topLevelNodes[conditionalIndex + 1] \n : null\n \n // Find true branch nodes (contain -true- after the conditional ID)\n // Sort by X position since branches flow horizontally\n const trueBranchNodes = nodes\n .filter(n => n.id.startsWith(`${conditionalId}-true-`))\n .sort((a, b) => a.position.x - b.position.x)\n \n // Find false branch nodes (contain -false- after the conditional ID)\n // Sort by X position since branches flow horizontally\n const falseBranchNodes = nodes\n .filter(n => n.id.startsWith(`${conditionalId}-false-`))\n .sort((a, b) => a.position.x - b.position.x)\n \n // Connect conditional to first true branch node (branch goes right)\n if (trueBranchNodes.length > 0) {\n edges.push({\n id: `edge-${conditionalId}-to-true-branch`,\n source: conditionalId,\n target: trueBranchNodes[0].id,\n sourceHandle: 'true',\n type: 'smoothstep',\n animated: false,\n label: 'True',\n labelStyle: { fill: '#22c55e', fontWeight: 600, fontSize: 11 },\n labelBgStyle: { fill: '#f0fdf4', fillOpacity: 0.9 },\n labelBgPadding: [4, 6] as [number, number],\n labelBgBorderRadius: 4,\n style: { stroke: '#22c55e', strokeWidth: 2 },\n })\n \n // Connect true branch nodes sequentially (horizontal connections)\n for (let i = 0; i < trueBranchNodes.length - 1; i++) {\n edges.push({\n id: `edge-true-${trueBranchNodes[i].id}-${trueBranchNodes[i + 1].id}`,\n source: trueBranchNodes[i].id,\n target: trueBranchNodes[i + 1].id,\n sourceHandle: 'output',\n type: 'smoothstep',\n animated: false,\n style: { stroke: '#22c55e', strokeWidth: 1.5 },\n })\n }\n \n // Connect last true branch node to next main step (convergence)\n if (nextMainStep) {\n const lastTrueNode = trueBranchNodes[trueBranchNodes.length - 1]\n edges.push({\n id: `edge-true-${lastTrueNode.id}-to-${nextMainStep.id}`,\n source: lastTrueNode.id,\n target: nextMainStep.id,\n sourceHandle: 'output',\n type: 'smoothstep',\n animated: false,\n style: { stroke: '#22c55e', strokeWidth: 1.5 },\n })\n }\n } else if (nextMainStep) {\n // No true branch steps - connect conditional directly to next step via true handle\n edges.push({\n id: `edge-${conditionalId}-true-to-${nextMainStep.id}`,\n source: conditionalId,\n target: nextMainStep.id,\n sourceHandle: 'true',\n type: 'smoothstep',\n animated: false,\n label: 'True',\n labelStyle: { fill: '#22c55e', fontWeight: 600, fontSize: 11 },\n labelBgStyle: { fill: '#f0fdf4', fillOpacity: 0.9 },\n labelBgPadding: [4, 6] as [number, number],\n labelBgBorderRadius: 4,\n style: { stroke: '#22c55e', strokeWidth: 2 },\n })\n }\n \n // Connect conditional to first false branch node (branch goes right, below true)\n if (falseBranchNodes.length > 0) {\n edges.push({\n id: `edge-${conditionalId}-to-false-branch`,\n source: conditionalId,\n target: falseBranchNodes[0].id,\n sourceHandle: 'false',\n type: 'smoothstep',\n animated: false,\n label: 'False',\n labelStyle: { fill: '#ef4444', fontWeight: 600, fontSize: 11 },\n labelBgStyle: { fill: '#fef2f2', fillOpacity: 0.9 },\n labelBgPadding: [4, 6] as [number, number],\n labelBgBorderRadius: 4,\n style: { stroke: '#ef4444', strokeWidth: 2 },\n })\n \n // Connect false branch nodes sequentially (horizontal connections)\n for (let i = 0; i < falseBranchNodes.length - 1; i++) {\n edges.push({\n id: `edge-false-${falseBranchNodes[i].id}-${falseBranchNodes[i + 1].id}`,\n source: falseBranchNodes[i].id,\n target: falseBranchNodes[i + 1].id,\n sourceHandle: 'output',\n type: 'smoothstep',\n animated: false,\n style: { stroke: '#ef4444', strokeWidth: 1.5 },\n })\n }\n \n // Connect last false branch node to next main step (convergence)\n if (nextMainStep) {\n const lastFalseNode = falseBranchNodes[falseBranchNodes.length - 1]\n edges.push({\n id: `edge-false-${lastFalseNode.id}-to-${nextMainStep.id}`,\n source: lastFalseNode.id,\n target: nextMainStep.id,\n sourceHandle: 'output',\n type: 'smoothstep',\n animated: false,\n style: { stroke: '#ef4444', strokeWidth: 1.5 },\n })\n }\n } else if (nextMainStep) {\n // No false branch steps - connect conditional directly to next step via false handle\n edges.push({\n id: `edge-${conditionalId}-false-to-${nextMainStep.id}`,\n source: conditionalId,\n target: nextMainStep.id,\n sourceHandle: 'false',\n type: 'smoothstep',\n animated: false,\n label: 'False',\n labelStyle: { fill: '#ef4444', fontWeight: 600, fontSize: 11 },\n labelBgStyle: { fill: '#fef2f2', fillOpacity: 0.9 },\n labelBgPadding: [4, 6] as [number, number],\n labelBgBorderRadius: 4,\n style: { stroke: '#ef4444', strokeWidth: 2 },\n })\n }\n \n // Handle case where conditional has no branches - connect directly to next step\n if (trueBranchNodes.length === 0 && falseBranchNodes.length === 0 && nextMainStep) {\n edges.push({\n id: `edge-${conditionalId}-to-${nextMainStep.id}`,\n source: conditionalId,\n target: nextMainStep.id,\n sourceHandle: 'output',\n type: 'smoothstep',\n animated: false,\n })\n }\n }\n \n return edges\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Get default name for a step type\n */\nexport function getDefaultStepName(type: FlowStepType): string {\n const names: Record<FlowStepType, string> = {\n 'prompt': 'AI Prompt',\n 'fetch-url': 'Fetch URL',\n 'retrieve-record': 'Retrieve Record',\n 'fetch-github': 'Fetch GitHub',\n 'api-call': 'API Call',\n 'transform-data': 'Transform Data',\n 'conditional': 'Conditional',\n 'set-variable': 'Set Variable',\n 'upsert-record': 'Upsert Record',\n 'send-email': 'Send Email',\n 'send-text': 'Send Text',\n 'send-event': 'Send Event',\n 'send-stream': 'Send Stream',\n 'update-record': 'Update Record',\n 'search': 'Search',\n 'generate-embedding': 'Generate Embedding',\n 'vector-search': 'Vector Search',\n 'tool-call': 'Tool Call',\n 'wait-until': 'Wait Until',\n }\n \n return names[type] || type\n}\n\n/**\n * Create a new flow step with default configuration\n */\nexport function createDefaultStep(type: FlowStepType, order: number = 0): FlowStep {\n const id = `step-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n \n const baseStep = {\n id,\n type,\n name: getDefaultStepName(type),\n order,\n enabled: true,\n }\n \n switch (type) {\n case 'prompt':\n return {\n ...baseStep,\n config: {\n mode: 'instruction',\n model: '',\n userPrompt: '',\n responseFormat: 'text',\n outputVariable: `${type}_result`,\n },\n }\n \n case 'fetch-url':\n return {\n ...baseStep,\n config: {\n http: {\n url: '',\n method: 'GET',\n },\n responseType: 'json',\n outputVariable: 'fetch_result',\n },\n }\n \n case 'transform-data':\n return {\n ...baseStep,\n config: {\n script: '// Transform your data here\\nreturn { result: input }',\n outputVariable: 'transform_result',\n },\n }\n \n case 'conditional':\n return {\n ...baseStep,\n config: {\n condition: 'true',\n trueSteps: [],\n falseSteps: [],\n },\n }\n \n case 'send-email':\n return {\n ...baseStep,\n config: {\n from: 'no-reply@messages.runtype.com',\n to: '',\n subject: '',\n html: '',\n outputVariable: 'email_result',\n },\n }\n \n default:\n return {\n ...baseStep,\n config: {\n outputVariable: `${type.replace(/-/g, '_')}_result`,\n },\n }\n }\n}\n\n/**\n * Generate a unique step ID\n */\nexport function generateStepId(prefix: string = 'step'): string {\n return `${prefix}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n}\n\n/**\n * Clone a step with a new ID\n */\nexport function cloneStep(step: FlowStep): FlowStep {\n return {\n ...step,\n id: generateStepId(step.type),\n config: JSON.parse(JSON.stringify(step.config)),\n }\n}\n\n","import type { RuntypeNode, RuntypeEdge } from '../types'\n\n// ============================================================================\n// Layout Constants\n// ============================================================================\n\nconst DEFAULT_NODE_WIDTH = 280\nconst DEFAULT_NODE_HEIGHT = 150\nconst HORIZONTAL_SPACING = 100\nconst VERTICAL_SPACING = 80\nconst BRANCH_OFFSET = 350\n\n// ============================================================================\n// Auto Layout Algorithm\n// ============================================================================\n\nexport interface LayoutOptions {\n /** Direction of the flow */\n direction?: 'vertical' | 'horizontal'\n /** Starting position */\n startPosition?: { x: number; y: number }\n /** Node dimensions */\n nodeWidth?: number\n nodeHeight?: number\n /** Spacing between nodes */\n horizontalSpacing?: number\n verticalSpacing?: number\n /** Offset for conditional branches */\n branchOffset?: number\n}\n\n/**\n * Automatically layout nodes in a flow-like arrangement\n */\nexport function autoLayout(\n nodes: RuntypeNode[],\n edges: RuntypeEdge[],\n options: LayoutOptions = {}\n): RuntypeNode[] {\n const {\n direction = 'vertical',\n startPosition = { x: 400, y: 50 },\n nodeWidth = DEFAULT_NODE_WIDTH,\n nodeHeight = DEFAULT_NODE_HEIGHT,\n horizontalSpacing = HORIZONTAL_SPACING,\n verticalSpacing = VERTICAL_SPACING,\n branchOffset = BRANCH_OFFSET,\n } = options\n\n // Build adjacency map from edges\n const adjacencyMap = new Map<string, string[]>()\n const incomingMap = new Map<string, string[]>()\n \n for (const edge of edges) {\n const existing = adjacencyMap.get(edge.source) || []\n adjacencyMap.set(edge.source, [...existing, edge.target])\n \n const incoming = incomingMap.get(edge.target) || []\n incomingMap.set(edge.target, [...incoming, edge.source])\n }\n\n // Find root nodes (nodes with no incoming edges)\n const rootNodes = nodes.filter(node => {\n const incoming = incomingMap.get(node.id)\n return !incoming || incoming.length === 0\n })\n\n // If no root nodes found, use the first node\n if (rootNodes.length === 0 && nodes.length > 0) {\n rootNodes.push(nodes[0])\n }\n\n // Track positioned nodes\n const positionedNodes = new Map<string, { x: number; y: number }>()\n const visited = new Set<string>()\n\n // Position nodes using BFS\n const queue: Array<{ nodeId: string; x: number; y: number; depth: number }> = []\n \n // Start with root nodes\n let startX = startPosition.x\n for (const rootNode of rootNodes) {\n queue.push({ nodeId: rootNode.id, x: startX, y: startPosition.y, depth: 0 })\n startX += nodeWidth + horizontalSpacing\n }\n\n while (queue.length > 0) {\n const { nodeId, x, y, depth } = queue.shift()!\n \n if (visited.has(nodeId)) continue\n visited.add(nodeId)\n \n positionedNodes.set(nodeId, { x, y })\n \n // Get children\n const children = adjacencyMap.get(nodeId) || []\n const node = nodes.find(n => n.id === nodeId)\n \n // Check if this is a conditional node\n const isConditional = node?.data.step.type === 'conditional'\n \n if (isConditional && children.length > 0) {\n // Position conditional branches side by side\n const trueBranch = children.filter(c => c.includes('-true-'))\n const falseBranch = children.filter(c => c.includes('-false-'))\n const normalChildren = children.filter(c => !c.includes('-true-') && !c.includes('-false-'))\n \n // Position true branch to the right\n let trueY = y + nodeHeight + verticalSpacing\n for (const childId of trueBranch) {\n if (!visited.has(childId)) {\n queue.push({\n nodeId: childId,\n x: x + branchOffset,\n y: trueY,\n depth: depth + 1,\n })\n trueY += nodeHeight + verticalSpacing\n }\n }\n \n // Position false branch to the left\n let falseY = y + nodeHeight + verticalSpacing\n for (const childId of falseBranch) {\n if (!visited.has(childId)) {\n queue.push({\n nodeId: childId,\n x: x - branchOffset,\n y: falseY,\n depth: depth + 1,\n })\n falseY += nodeHeight + verticalSpacing\n }\n }\n \n // Position normal children below\n const maxBranchY = Math.max(trueY, falseY)\n let childY = maxBranchY\n for (const childId of normalChildren) {\n if (!visited.has(childId)) {\n queue.push({\n nodeId: childId,\n x,\n y: childY,\n depth: depth + 1,\n })\n childY += nodeHeight + verticalSpacing\n }\n }\n } else {\n // Position children in sequence\n let childY = y + nodeHeight + verticalSpacing\n let childX = x\n \n for (let i = 0; i < children.length; i++) {\n const childId = children[i]\n if (!visited.has(childId)) {\n if (direction === 'horizontal') {\n queue.push({\n nodeId: childId,\n x: childX + nodeWidth + horizontalSpacing,\n y,\n depth: depth + 1,\n })\n childX += nodeWidth + horizontalSpacing\n } else {\n queue.push({\n nodeId: childId,\n x,\n y: childY,\n depth: depth + 1,\n })\n childY += nodeHeight + verticalSpacing\n }\n }\n }\n }\n }\n\n // Apply positions to nodes\n return nodes.map(node => {\n const position = positionedNodes.get(node.id)\n if (position) {\n return {\n ...node,\n position,\n }\n }\n return node\n })\n}\n\n/**\n * Center nodes within a viewport\n */\nexport function centerNodes(\n nodes: RuntypeNode[],\n viewportWidth: number,\n viewportHeight: number\n): RuntypeNode[] {\n if (nodes.length === 0) return nodes\n\n // Calculate bounding box\n let minX = Infinity\n let maxX = -Infinity\n let minY = Infinity\n let maxY = -Infinity\n\n for (const node of nodes) {\n minX = Math.min(minX, node.position.x)\n maxX = Math.max(maxX, node.position.x + DEFAULT_NODE_WIDTH)\n minY = Math.min(minY, node.position.y)\n maxY = Math.max(maxY, node.position.y + DEFAULT_NODE_HEIGHT)\n }\n\n // Calculate offset to center\n const contentWidth = maxX - minX\n const contentHeight = maxY - minY\n const offsetX = (viewportWidth - contentWidth) / 2 - minX\n const offsetY = (viewportHeight - contentHeight) / 2 - minY\n\n // Apply offset\n return nodes.map(node => ({\n ...node,\n position: {\n x: node.position.x + offsetX,\n y: node.position.y + offsetY,\n },\n }))\n}\n\n/**\n * Align nodes to a grid\n */\nexport function snapToGrid(\n nodes: RuntypeNode[],\n gridSize: number = 20\n): RuntypeNode[] {\n return nodes.map(node => ({\n ...node,\n position: {\n x: Math.round(node.position.x / gridSize) * gridSize,\n y: Math.round(node.position.y / gridSize) * gridSize,\n },\n }))\n}\n\n/**\n * Get the bounding box of all nodes\n */\nexport function getNodesBoundingBox(nodes: RuntypeNode[]): {\n minX: number\n maxX: number\n minY: number\n maxY: number\n width: number\n height: number\n} {\n if (nodes.length === 0) {\n return { minX: 0, maxX: 0, minY: 0, maxY: 0, width: 0, height: 0 }\n }\n\n let minX = Infinity\n let maxX = -Infinity\n let minY = Infinity\n let maxY = -Infinity\n\n for (const node of nodes) {\n minX = Math.min(minX, node.position.x)\n maxX = Math.max(maxX, node.position.x + DEFAULT_NODE_WIDTH)\n minY = Math.min(minY, node.position.y)\n maxY = Math.max(maxY, node.position.y + DEFAULT_NODE_HEIGHT)\n }\n\n return {\n minX,\n maxX,\n minY,\n maxY,\n width: maxX - minX,\n height: maxY - minY,\n }\n}\n\n","import { useState, useCallback, useRef, useEffect } from 'react'\nimport {\n useNodesState,\n useEdgesState,\n addEdge,\n type OnNodesChange,\n type OnEdgesChange,\n type OnConnect,\n type Connection,\n} from '@xyflow/react'\nimport type { RuntypeClient } from '@runtypelabs/sdk'\nimport type {\n FlowStep,\n RuntypeNode,\n RuntypeEdge,\n SavedFlow,\n UseRuntypeFlowReturn,\n} from '../types'\nimport {\n flowStepsToNodes,\n nodesToFlowSteps,\n createEdgesFromNodes,\n createDefaultStep,\n} from '../utils/adapter'\nimport { autoLayout } from '../utils/layout'\nimport type { FlowStepType } from '../flow-step-types'\n\n// ============================================================================\n// Hook Options\n// ============================================================================\n\nexport interface UseRuntypeFlowOptions {\n /** Runtype API client instance */\n client: RuntypeClient\n /** Initial flow ID to load */\n flowId?: string\n /** Initial flow name */\n initialName?: string\n /** Initial flow description */\n initialDescription?: string\n /** Initial steps */\n initialSteps?: FlowStep[]\n /** Callback when flow changes */\n onChange?: (nodes: RuntypeNode[], edges: RuntypeEdge[]) => void\n /** Auto-layout nodes on load */\n autoLayoutOnLoad?: boolean\n}\n\n// ============================================================================\n// Main Hook\n// ============================================================================\n\nexport function useRuntypeFlow(options: UseRuntypeFlowOptions): UseRuntypeFlowReturn {\n const {\n client,\n flowId: initialFlowId,\n initialName = '',\n initialDescription = '',\n initialSteps = [],\n onChange,\n autoLayoutOnLoad = true,\n } = options\n\n // State\n const [flowId, setFlowId] = useState<string | null>(initialFlowId || null)\n const [flowName, setFlowName] = useState(initialName)\n const [flowDescription, setFlowDescription] = useState(initialDescription)\n const [isLoading, setIsLoading] = useState(false)\n const [isSaving, setIsSaving] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false)\n\n // React Flow state\n const [nodes, setNodes, onNodesChange] = useNodesState<RuntypeNode>([])\n const [edges, setEdges, onEdgesChange] = useEdgesState<RuntypeEdge>([])\n\n // Track last saved state for change detection\n const lastSavedState = useRef<string>('')\n\n // ============================================================================\n // Handlers\n // ============================================================================\n\n const handleStepChange = useCallback(\n (stepId: string, updates: Partial<FlowStep>) => {\n setNodes((nds) =>\n nds.map((node) => {\n if (node.id === stepId) {\n return {\n ...node,\n data: {\n ...node.data,\n step: {\n ...node.data.step,\n ...updates,\n config: updates.config\n ? { ...node.data.step.config, ...updates.config }\n : node.data.step.config,\n },\n },\n }\n }\n return node\n })\n )\n setHasUnsavedChanges(true)\n },\n [setNodes]\n )\n\n const handleStepDelete = useCallback(\n (stepId: string) => {\n setNodes((nds) => nds.filter((node) => node.id !== stepId))\n setEdges((eds) =>\n eds.filter((edge) => edge.source !== stepId && edge.target !== stepId)\n )\n setHasUnsavedChanges(true)\n },\n [setNodes, setEdges]\n )\n\n const handleConnect: OnConnect = useCallback(\n (connection: Connection) => {\n setEdges((eds) => addEdge({ ...connection, type: 'smoothstep' }, eds))\n setHasUnsavedChanges(true)\n },\n [setEdges]\n )\n\n // ============================================================================\n // API Operations\n // ============================================================================\n\n /**\n * Load a flow by ID\n */\n const loadFlow = useCallback(\n async (id: string) => {\n setIsLoading(true)\n setError(null)\n\n try {\n const flow = await client.flows.get(id)\n \n // Get flow steps\n const stepsResponse = await client.flowSteps.getByFlow(id)\n const steps: FlowStep[] = Array.isArray(stepsResponse) ? stepsResponse : []\n\n // Convert to React Flow nodes\n let newNodes = flowStepsToNodes(steps, {\n onChange: handleStepChange,\n onDelete: handleStepDelete,\n })\n\n // Auto-layout if enabled\n if (autoLayoutOnLoad) {\n const newEdges = createEdgesFromNodes(newNodes)\n newNodes = autoLayout(newNodes, newEdges)\n }\n\n const newEdges = createEdgesFromNodes(newNodes)\n\n setFlowId(id)\n setFlowName(flow.name || '')\n setFlowDescription(flow.description || '')\n setNodes(newNodes)\n setEdges(newEdges)\n setHasUnsavedChanges(false)\n\n // Store last saved state\n lastSavedState.current = JSON.stringify(nodesToFlowSteps(newNodes))\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to load flow'))\n throw err\n } finally {\n setIsLoading(false)\n }\n },\n [client, handleStepChange, handleStepDelete, autoLayoutOnLoad, setNodes, setEdges]\n )\n\n /**\n * Save the current flow\n */\n const saveFlow = useCallback(async (): Promise<SavedFlow> => {\n if (!flowId) {\n throw new Error('No flow ID. Use createFlow() to create a new flow first.')\n }\n\n setIsSaving(true)\n setError(null)\n\n try {\n const steps = nodesToFlowSteps(nodes)\n\n // Update flow metadata\n await client.flows.update(flowId, {\n name: flowName,\n description: flowDescription,\n })\n\n // Update steps - delete existing and create new\n const existingSteps = await client.flowSteps.getByFlow(flowId)\n for (const step of existingSteps) {\n await client.flowSteps.delete(step.id)\n }\n\n // Create new steps\n for (const step of steps) {\n await client.flowSteps.create({\n flowId,\n type: step.type,\n name: step.name,\n order: step.order,\n enabled: step.enabled,\n config: step.config,\n })\n }\n\n setHasUnsavedChanges(false)\n lastSavedState.current = JSON.stringify(steps)\n\n return {\n id: flowId,\n name: flowName,\n description: flowDescription,\n steps,\n }\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to save flow'))\n throw err\n } finally {\n setIsSaving(false)\n }\n }, [flowId, flowName, flowDescription, nodes, client])\n\n /**\n * Create a new flow\n */\n const createFlow = useCallback(\n async (name: string, description?: string): Promise<SavedFlow> => {\n setIsSaving(true)\n setError(null)\n\n try {\n const flow = await client.flows.create({\n name,\n description,\n prompts: [],\n })\n\n setFlowId(flow.id)\n setFlowName(name)\n setFlowDescription(description || '')\n setNodes([])\n setEdges([])\n setHasUnsavedChanges(false)\n lastSavedState.current = '[]'\n\n return {\n id: flow.id,\n name,\n description,\n steps: [],\n }\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to create flow'))\n throw err\n } finally {\n setIsSaving(false)\n }\n },\n [client, setNodes, setEdges]\n )\n\n /**\n * Delete a step\n */\n const deleteStep = useCallback(\n (stepId: string) => {\n handleStepDelete(stepId)\n },\n [handleStepDelete]\n )\n\n /**\n * Update a step's configuration\n */\n const updateStep = useCallback(\n (stepId: string, updates: Partial<FlowStep>) => {\n handleStepChange(stepId, updates)\n },\n [handleStepChange]\n )\n\n /**\n * Add a new step\n */\n const addStep = useCallback(\n (type: FlowStepType, position?: { x: number; y: number }) => {\n const newStep = createDefaultStep(type, nodes.length)\n\n const newNode: RuntypeNode = {\n id: newStep.id,\n type: newStep.type,\n position: position || { x: 400, y: nodes.length * 230 + 50 },\n data: {\n step: newStep,\n label: newStep.name,\n onChange: handleStepChange,\n onDelete: handleStepDelete,\n },\n draggable: true,\n selectable: true,\n }\n\n setNodes((nds) => [...nds, newNode])\n\n // Add edge from previous node if exists\n if (nodes.length > 0) {\n const lastNode = nodes[nodes.length - 1]\n setEdges((eds) => [\n ...eds,\n {\n id: `edge-${lastNode.id}-${newNode.id}`,\n source: lastNode.id,\n target: newNode.id,\n type: 'smoothstep',\n },\n ])\n }\n\n setHasUnsavedChanges(true)\n },\n [nodes, setNodes, setEdges, handleStepChange, handleStepDelete]\n )\n\n // ============================================================================\n // Effects\n // ============================================================================\n\n // Load initial flow if flowId is provided\n useEffect(() => {\n if (initialFlowId) {\n loadFlow(initialFlowId)\n } else if (initialSteps.length > 0) {\n // Initialize with provided steps\n let newNodes = flowStepsToNodes(initialSteps, {\n onChange: handleStepChange,\n onDelete: handleStepDelete,\n })\n\n if (autoLayoutOnLoad) {\n const newEdges = createEdgesFromNodes(newNodes)\n newNodes = autoLayout(newNodes, newEdges)\n }\n\n const newEdges = createEdgesFromNodes(newNodes)\n\n setNodes(newNodes)\n setEdges(newEdges)\n }\n }, []) // Only run on mount\n\n // Notify onChange when nodes/edges change\n useEffect(() => {\n onChange?.(nodes, edges)\n }, [nodes, edges, onChange])\n\n // Detect unsaved changes\n useEffect(() => {\n const currentState = JSON.stringify(nodesToFlowSteps(nodes))\n if (lastSavedState.current && currentState !== lastSavedState.current) {\n setHasUnsavedChanges(true)\n }\n }, [nodes])\n\n // ============================================================================\n // Return\n // ============================================================================\n\n return {\n // React Flow state\n nodes,\n edges,\n onNodesChange: onNodesChange as unknown as (changes: unknown) => void,\n onEdgesChange: onEdgesChange as unknown as (changes: unknown) => void,\n onConnect: handleConnect as unknown as (connection: unknown) => void,\n\n // Flow metadata\n flowName,\n flowDescription,\n flowId,\n setFlowName,\n setFlowDescription,\n\n // API operations\n loadFlow,\n saveFlow,\n createFlow,\n deleteStep,\n updateStep,\n addStep,\n\n // Status\n isLoading,\n isSaving,\n error,\n hasUnsavedChanges,\n }\n}\n\nexport default useRuntypeFlow\n\n","import { useMemo, useCallback } from 'react'\nimport type {\n FlowStep,\n RuntypeNode,\n FlowValidationResult,\n ValidationError,\n ValidationWarning,\n PromptStepConfig,\n FetchUrlStepConfig,\n TransformDataStepConfig,\n ConditionalStepConfig,\n SendEmailStepConfig,\n} from '../types'\n\n// ============================================================================\n// Validation Rules\n// ============================================================================\n\ninterface ValidationRule {\n validate: (step: FlowStep, allSteps: FlowStep[]) => ValidationError[]\n}\n\ninterface WarningRule {\n check: (step: FlowStep, allSteps: FlowStep[]) => ValidationWarning[]\n}\n\n// ============================================================================\n// Prompt Step Validation\n// ============================================================================\n\nconst promptValidation: ValidationRule = {\n validate: (step) => {\n const errors: ValidationError[] = []\n const config = step.config as PromptStepConfig\n\n if (!config.model) {\n errors.push({\n stepId: step.id,\n field: 'model',\n message: 'Model is required',\n })\n }\n\n if (!config.userPrompt?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'userPrompt',\n message: 'User prompt is required',\n })\n }\n\n if (!config.outputVariable?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'outputVariable',\n message: 'Output variable is required',\n })\n }\n\n return errors\n },\n}\n\n// ============================================================================\n// Fetch URL Step Validation\n// ============================================================================\n\nconst fetchUrlValidation: ValidationRule = {\n validate: (step) => {\n const errors: ValidationError[] = []\n const config = step.config as FetchUrlStepConfig\n\n if (!config.http?.url?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'http.url',\n message: 'URL is required',\n })\n } else {\n // Validate URL format (allow template variables)\n const url = config.http.url\n if (!url.startsWith('http://') && !url.startsWith('https://') && !url.includes('{{')) {\n errors.push({\n stepId: step.id,\n field: 'http.url',\n message: 'URL must start with http:// or https://',\n })\n }\n }\n\n if (!config.outputVariable?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'outputVariable',\n message: 'Output variable is required',\n })\n }\n\n return errors\n },\n}\n\n// ============================================================================\n// Transform Data Step Validation\n// ============================================================================\n\nconst transformDataValidation: ValidationRule = {\n validate: (step) => {\n const errors: ValidationError[] = []\n const config = step.config as TransformDataStepConfig\n\n if (!config.script?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'script',\n message: 'Script is required',\n })\n }\n\n if (!config.outputVariable?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'outputVariable',\n message: 'Output variable is required',\n })\n }\n\n return errors\n },\n}\n\n// ============================================================================\n// Conditional Step Validation\n// ============================================================================\n\nconst conditionalValidation: ValidationRule = {\n validate: (step, allSteps) => {\n const errors: ValidationError[] = []\n const config = step.config as ConditionalStepConfig\n\n if (!config.condition?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'condition',\n message: 'Condition is required',\n })\n }\n\n // Validate nested steps\n if (config.trueSteps && config.trueSteps.length > 0) {\n for (const nestedStep of config.trueSteps) {\n const nestedErrors = validateStep(nestedStep, allSteps)\n errors.push(\n ...nestedErrors.map((e) => ({\n ...e,\n message: `True branch: ${e.message}`,\n }))\n )\n }\n }\n\n if (config.falseSteps && config.falseSteps.length > 0) {\n for (const nestedStep of config.falseSteps) {\n const nestedErrors = validateStep(nestedStep, allSteps)\n errors.push(\n ...nestedErrors.map((e) => ({\n ...e,\n message: `False branch: ${e.message}`,\n }))\n )\n }\n }\n\n return errors\n },\n}\n\n// ============================================================================\n// Send Email Step Validation\n// ============================================================================\n\nconst sendEmailValidation: ValidationRule = {\n validate: (step) => {\n const errors: ValidationError[] = []\n const config = step.config as SendEmailStepConfig\n\n if (!config.to?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'to',\n message: 'Recipient (To) is required',\n })\n } else {\n // Validate email format (allow template variables)\n const to = config.to\n if (!to.includes('@') && !to.includes('{{')) {\n errors.push({\n stepId: step.id,\n field: 'to',\n message: 'Invalid email address',\n })\n }\n }\n\n if (!config.subject?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'subject',\n message: 'Subject is required',\n })\n }\n\n if (!config.html?.trim() && !config.text?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'html',\n message: 'Email content (HTML or text) is required',\n })\n }\n\n if (!config.outputVariable?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'outputVariable',\n message: 'Output variable is required',\n })\n }\n\n return errors\n },\n}\n\n// ============================================================================\n// Warning Rules\n// ============================================================================\n\nconst outputVariableWarning: WarningRule = {\n check: (step, allSteps) => {\n const warnings: ValidationWarning[] = []\n const config = step.config as { outputVariable?: string }\n\n if (config.outputVariable) {\n // Check for duplicate output variables\n const duplicates = allSteps.filter(\n (s) =>\n s.id !== step.id &&\n (s.config as { outputVariable?: string }).outputVariable === config.outputVariable\n )\n\n if (duplicates.length > 0) {\n warnings.push({\n stepId: step.id,\n field: 'outputVariable',\n message: `Output variable \"${config.outputVariable}\" is also used by another step`,\n })\n }\n }\n\n return warnings\n },\n}\n\nconst emptyBranchWarning: WarningRule = {\n check: (step) => {\n const warnings: ValidationWarning[] = []\n\n if (step.type === 'conditional') {\n const config = step.config as ConditionalStepConfig\n\n if (!config.trueSteps || config.trueSteps.length === 0) {\n warnings.push({\n stepId: step.id,\n field: 'trueSteps',\n message: 'True branch has no steps',\n })\n }\n\n if (!config.falseSteps || config.falseSteps.length === 0) {\n warnings.push({\n stepId: step.id,\n field: 'falseSteps',\n message: 'False branch has no steps',\n })\n }\n }\n\n return warnings\n },\n}\n\n// ============================================================================\n// Validation Logic\n// ============================================================================\n\nconst validationRules: Record<string, ValidationRule> = {\n prompt: promptValidation,\n 'fetch-url': fetchUrlValidation,\n 'transform-data': transformDataValidation,\n conditional: conditionalValidation,\n 'send-email': sendEmailValidation,\n}\n\nconst warningRules: WarningRule[] = [outputVariableWarning, emptyBranchWarning]\n\nfunction validateStep(step: FlowStep, allSteps: FlowStep[]): ValidationError[] {\n const errors: ValidationError[] = []\n\n // Common validation\n if (!step.name?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'name',\n message: 'Step name is required',\n })\n }\n\n // Type-specific validation\n const rule = validationRules[step.type]\n if (rule) {\n errors.push(...rule.validate(step, allSteps))\n }\n\n return errors\n}\n\nfunction checkWarnings(step: FlowStep, allSteps: FlowStep[]): ValidationWarning[] {\n const warnings: ValidationWarning[] = []\n\n for (const rule of warningRules) {\n warnings.push(...rule.check(step, allSteps))\n }\n\n return warnings\n}\n\n// ============================================================================\n// Hook\n// ============================================================================\n\nexport interface UseFlowValidationOptions {\n /** Steps to validate */\n steps?: FlowStep[]\n /** Nodes to validate (will extract steps from nodes) */\n nodes?: RuntypeNode[]\n}\n\nexport interface UseFlowValidationReturn {\n /** Validation result */\n result: FlowValidationResult\n /** Validate a specific step */\n validateStep: (step: FlowStep) => ValidationError[]\n /** Check if a specific step is valid */\n isStepValid: (stepId: string) => boolean\n /** Get errors for a specific step */\n getStepErrors: (stepId: string) => ValidationError[]\n /** Get warnings for a specific step */\n getStepWarnings: (stepId: string) => ValidationWarning[]\n}\n\nexport function useFlowValidation(options: UseFlowValidationOptions): UseFlowValidationReturn {\n const { steps: providedSteps, nodes } = options\n\n // Extract steps from nodes if not provided directly\n const steps = useMemo(() => {\n if (providedSteps) return providedSteps\n if (nodes) return nodes.map((n) => n.data.step)\n return []\n }, [providedSteps, nodes])\n\n // Perform validation\n const result = useMemo((): FlowValidationResult => {\n const errors: ValidationError[] = []\n const warnings: ValidationWarning[] = []\n\n for (const step of steps) {\n errors.push(...validateStep(step, steps))\n warnings.push(...checkWarnings(step, steps))\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n warnings,\n }\n }, [steps])\n\n // Helper functions\n const validateStepFn = useCallback(\n (step: FlowStep) => validateStep(step, steps),\n [steps]\n )\n\n const isStepValid = useCallback(\n (stepId: string) => {\n return !result.errors.some((e) => e.stepId === stepId)\n },\n [result.errors]\n )\n\n const getStepErrors = useCallback(\n (stepId: string) => {\n return result.errors.filter((e) => e.stepId === stepId)\n },\n [result.errors]\n )\n\n const getStepWarnings = useCallback(\n (stepId: string) => {\n return result.warnings.filter((w) => w.stepId === stepId)\n },\n [result.warnings]\n )\n\n return {\n result,\n validateStep: validateStepFn,\n isStepValid,\n getStepErrors,\n getStepWarnings,\n }\n}\n\nexport default useFlowValidation\n\n","import React, { memo } from 'react'\nimport { Handle, Position } from '@xyflow/react'\nimport type { RuntypeNodeData, FlowStep } from '../../types'\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface BaseNodeProps {\n /** Node data containing the step */\n data: RuntypeNodeData\n /** Whether the node is selected */\n selected?: boolean\n /** Node ID */\n id: string\n /** Node type label */\n typeLabel: string\n /** Icon component to display */\n icon: React.ReactNode\n /** Header color (Tailwind class or CSS color) */\n headerColor?: string\n /** Whether to show source handle */\n showSourceHandle?: boolean\n /** Whether to show target handle */\n showTargetHandle?: boolean\n /** Additional source handles for conditional branches */\n additionalSourceHandles?: Array<{\n id: string\n position: Position\n label?: string\n color?: string\n style?: React.CSSProperties\n }>\n /** Children to render in the node body */\n children: React.ReactNode\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n container: (selected: boolean) => ({\n minWidth: '280px',\n maxWidth: '320px',\n backgroundColor: '#ffffff',\n borderRadius: '12px',\n border: selected ? '2px solid #6366f1' : '1px solid #e5e7eb',\n boxShadow: selected\n ? '0 0 0 2px rgba(99, 102, 241, 0.2), 0 4px 6px -1px rgba(0, 0, 0, 0.1)'\n : '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n overflow: 'hidden',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n }),\n header: (color: string) => ({\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 12px',\n backgroundColor: color,\n borderBottom: '1px solid rgba(0, 0, 0, 0.05)',\n }),\n iconWrapper: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: '6px',\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n color: '#374151',\n },\n headerContent: {\n flex: 1,\n minWidth: 0,\n },\n typeLabel: {\n fontSize: '10px',\n fontWeight: 600,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: 'rgba(0, 0, 0, 0.5)',\n marginBottom: '2px',\n },\n stepName: {\n fontSize: '13px',\n fontWeight: 600,\n color: '#1f2937',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n },\n body: {\n padding: '12px',\n },\n handle: {\n width: '12px',\n height: '12px',\n borderRadius: '50%',\n border: '2px solid #ffffff',\n },\n targetHandle: {\n backgroundColor: '#6366f1',\n },\n sourceHandle: {\n backgroundColor: '#10b981',\n },\n deleteButton: {\n padding: '4px',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n color: '#9ca3af',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'color 0.15s ease, background-color 0.15s ease',\n },\n enabledBadge: (enabled: boolean) => ({\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 6px',\n borderRadius: '4px',\n fontSize: '10px',\n fontWeight: 500,\n backgroundColor: enabled ? 'rgba(16, 185, 129, 0.1)' : 'rgba(239, 68, 68, 0.1)',\n color: enabled ? '#059669' : '#dc2626',\n }),\n}\n\n// ============================================================================\n// Header Color Presets\n// ============================================================================\n\nexport const NODE_HEADER_COLORS: Record<string, string> = {\n prompt: '#f3e8ff', // Purple tint\n 'fetch-url': '#dbeafe', // Blue tint\n 'transform-data': '#fef3c7', // Amber tint\n conditional: '#fce7f3', // Pink tint\n 'send-email': '#d1fae5', // Green tint\n default: '#f3f4f6', // Gray tint\n}\n\n// ============================================================================\n// Base Node Component\n// ============================================================================\n\nexport const BaseNode = memo(function BaseNode({\n data,\n selected = false,\n id,\n typeLabel,\n icon,\n headerColor,\n showSourceHandle = true,\n showTargetHandle = true,\n additionalSourceHandles,\n children,\n}: BaseNodeProps) {\n const { step, onChange, onDelete } = data\n const color = headerColor || NODE_HEADER_COLORS[step.type] || NODE_HEADER_COLORS.default\n\n const handleDelete = (e: React.MouseEvent) => {\n e.stopPropagation()\n onDelete?.(id)\n }\n\n return (\n <div style={styles.container(selected)}>\n {/* Target Handle (input) - on left for horizontal flow */}\n {showTargetHandle && (\n <Handle\n type=\"target\"\n position={Position.Left}\n style={{ ...styles.handle, ...styles.targetHandle }}\n />\n )}\n\n {/* Header */}\n <div style={styles.header(color)}>\n <div style={styles.iconWrapper}>{icon}</div>\n <div style={styles.headerContent}>\n <div style={styles.typeLabel}>{typeLabel}</div>\n <div style={styles.stepName} title={step.name}>\n {step.name || 'Untitled Step'}\n </div>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span style={styles.enabledBadge(step.enabled)}>\n {step.enabled ? 'Active' : 'Disabled'}\n </span>\n {onDelete && (\n <button\n style={styles.deleteButton}\n onClick={handleDelete}\n title=\"Delete step\"\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'rgba(239, 68, 68, 0.1)'\n e.currentTarget.style.color = '#dc2626'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.color = '#9ca3af'\n }}\n >\n <DeleteIcon />\n </button>\n )}\n </div>\n </div>\n\n {/* Body - nodrag class prevents React Flow from intercepting events */}\n <div style={styles.body} className=\"nodrag\">{children}</div>\n\n {/* Source Handle (output) - on right for horizontal flow */}\n {showSourceHandle && (\n <Handle\n type=\"source\"\n position={Position.Right}\n id=\"output\"\n style={{ ...styles.handle, ...styles.sourceHandle }}\n />\n )}\n\n {/* Additional source handles for conditional branches */}\n {additionalSourceHandles?.map((handle) => (\n <Handle\n key={handle.id}\n type=\"source\"\n position={handle.position}\n id={handle.id}\n style={{\n ...styles.handle,\n backgroundColor: handle.color || '#10b981',\n ...handle.style,\n }}\n />\n ))}\n </div>\n )\n})\n\n// ============================================================================\n// Icon Components\n// ============================================================================\n\nconst DeleteIcon = () => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 6h18\" />\n <path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" />\n <path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n </svg>\n)\n\n// Export common icons for use in step nodes\nexport const BrainIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z\" />\n <path d=\"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z\" />\n <path d=\"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4\" />\n <path d=\"M17.599 6.5a3 3 0 0 0 .399-1.375\" />\n <path d=\"M6.003 5.125A3 3 0 0 0 6.401 6.5\" />\n <path d=\"M3.477 10.896a4 4 0 0 1 .585-.396\" />\n <path d=\"M19.938 10.5a4 4 0 0 1 .585.396\" />\n <path d=\"M6 18a4 4 0 0 1-1.967-.516\" />\n <path d=\"M19.967 17.484A4 4 0 0 1 18 18\" />\n </svg>\n)\n\nexport const GlobeIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </svg>\n)\n\nexport const CodeIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"16 18 22 12 16 6\" />\n <polyline points=\"8 6 2 12 8 18\" />\n </svg>\n)\n\nexport const GitBranchIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\" />\n <circle cx=\"18\" cy=\"6\" r=\"3\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <path d=\"M18 9a9 9 0 0 1-9 9\" />\n </svg>\n)\n\nexport const MailIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\" />\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\n </svg>\n)\n\nexport default BaseNode\n\n","import React, { memo, useCallback, useState } from 'react'\nimport type { NodeProps } from '@xyflow/react'\nimport { BaseNode, BrainIcon, NODE_HEADER_COLORS } from './BaseNode'\nimport type { RuntypeNodeData, PromptStepConfig, FlowStep } from '../../types'\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n field: {\n marginBottom: '12px',\n },\n label: {\n display: 'block',\n fontSize: '11px',\n fontWeight: 600,\n color: '#6b7280',\n marginBottom: '4px',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.03em',\n },\n input: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n },\n textarea: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n resize: 'vertical' as const,\n minHeight: '60px',\n fontFamily: 'inherit',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n },\n select: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n cursor: 'pointer',\n },\n row: {\n display: 'flex',\n gap: '8px',\n },\n modeBadge: (isAgent: boolean) => ({\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 8px',\n borderRadius: '12px',\n fontSize: '10px',\n fontWeight: 600,\n backgroundColor: isAgent ? '#dbeafe' : '#f3e8ff',\n color: isAgent ? '#1d4ed8' : '#7c3aed',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n }),\n preview: {\n fontSize: '11px',\n color: '#6b7280',\n backgroundColor: '#f3f4f6',\n padding: '8px',\n borderRadius: '6px',\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap' as const,\n wordBreak: 'break-word' as const,\n maxHeight: '80px',\n overflow: 'auto',\n },\n}\n\n// ============================================================================\n// Prompt Node Component\n// ============================================================================\n\nexport const PromptNode = memo(function PromptNode(props: NodeProps) {\n const { data, selected, id } = props as NodeProps & { data: RuntypeNodeData }\n const { step, onChange } = data\n const config = step.config as PromptStepConfig\n \n const [isExpanded, setIsExpanded] = useState(false)\n\n const handleChange = useCallback(\n (field: keyof PromptStepConfig, value: unknown) => {\n onChange?.(id, {\n config: {\n ...config,\n [field]: value,\n },\n } as Partial<FlowStep>)\n },\n [id, config, onChange]\n )\n\n const handleNameChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(id, { name: e.target.value })\n },\n [id, onChange]\n )\n\n const isAgentMode = config.mode === 'agent'\n\n return (\n <BaseNode\n data={data}\n selected={selected}\n id={id}\n typeLabel=\"AI Prompt\"\n icon={<BrainIcon />}\n headerColor={NODE_HEADER_COLORS.prompt}\n >\n <div style={styles.field}>\n <label style={styles.label}>Step Name</label>\n <input\n style={styles.input}\n value={step.name}\n onChange={handleNameChange}\n placeholder=\"Enter step name\"\n onKeyDown={(e) => e.stopPropagation()}\n onFocus={(e) => {\n e.target.style.borderColor = '#6366f1'\n e.target.style.boxShadow = '0 0 0 2px rgba(99, 102, 241, 0.1)'\n }}\n onBlur={(e) => {\n e.target.style.borderColor = '#e5e7eb'\n e.target.style.boxShadow = 'none'\n }}\n />\n </div>\n\n <div style={styles.field}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '4px' }}>\n <label style={styles.label}>Mode</label>\n <span style={styles.modeBadge(isAgentMode)}>\n {isAgentMode ? 'Agent' : 'Instruction'}\n </span>\n </div>\n <select\n style={styles.select}\n value={config.mode || 'instruction'}\n onChange={(e) => handleChange('mode', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"instruction\">Instruction Mode</option>\n <option value=\"agent\">Agent Mode</option>\n </select>\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>Model</label>\n <input\n style={styles.input}\n value={config.model || ''}\n onChange={(e) => handleChange('model', e.target.value)}\n placeholder=\"e.g., gpt-4, claude-3-sonnet\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>User Prompt</label>\n <textarea\n style={styles.textarea}\n value={config.userPrompt || ''}\n onChange={(e) => handleChange('userPrompt', e.target.value)}\n placeholder=\"Enter your prompt...\"\n rows={3}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n {isExpanded && (\n <>\n {config.systemPrompt !== undefined && (\n <div style={styles.field}>\n <label style={styles.label}>System Prompt</label>\n <textarea\n style={styles.textarea}\n value={config.systemPrompt || ''}\n onChange={(e) => handleChange('systemPrompt', e.target.value)}\n placeholder=\"System instructions...\"\n rows={2}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n )}\n\n <div style={styles.row}>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>Response Format</label>\n <select\n style={styles.select}\n value={config.responseFormat || 'text'}\n onChange={(e) => handleChange('responseFormat', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"text\">Text</option>\n <option value=\"json\">JSON</option>\n <option value=\"markdown\">Markdown</option>\n <option value=\"html\">HTML</option>\n </select>\n </div>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>Temperature</label>\n <input\n style={styles.input}\n type=\"number\"\n min=\"0\"\n max=\"2\"\n step=\"0.1\"\n value={config.temperature ?? 0.7}\n onChange={(e) => handleChange('temperature', parseFloat(e.target.value))}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>Output Variable</label>\n <input\n style={styles.input}\n value={config.outputVariable || ''}\n onChange={(e) => handleChange('outputVariable', e.target.value)}\n placeholder=\"result\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n </>\n )}\n\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n style={{\n width: '100%',\n padding: '6px',\n fontSize: '11px',\n color: '#6366f1',\n backgroundColor: 'transparent',\n border: '1px dashed #e5e7eb',\n borderRadius: '6px',\n cursor: 'pointer',\n marginTop: '4px',\n }}\n >\n {isExpanded ? 'Show Less' : 'Show More Options'}\n </button>\n </BaseNode>\n )\n})\n\nexport default PromptNode\n\n","import React, { memo, useCallback, useState } from 'react'\nimport type { NodeProps } from '@xyflow/react'\nimport { BaseNode, GlobeIcon, NODE_HEADER_COLORS } from './BaseNode'\nimport type { RuntypeNodeData, FetchUrlStepConfig, FlowStep } from '../../types'\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n field: {\n marginBottom: '12px',\n },\n label: {\n display: 'block',\n fontSize: '11px',\n fontWeight: 600,\n color: '#6b7280',\n marginBottom: '4px',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.03em',\n },\n input: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n },\n textarea: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n resize: 'vertical' as const,\n minHeight: '60px',\n fontFamily: 'monospace',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n },\n select: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n cursor: 'pointer',\n },\n row: {\n display: 'flex',\n gap: '8px',\n },\n methodBadge: (method: string) => {\n const colors: Record<string, { bg: string; text: string }> = {\n GET: { bg: '#d1fae5', text: '#059669' },\n POST: { bg: '#dbeafe', text: '#1d4ed8' },\n PUT: { bg: '#fef3c7', text: '#d97706' },\n DELETE: { bg: '#fee2e2', text: '#dc2626' },\n PATCH: { bg: '#e0e7ff', text: '#4f46e5' },\n }\n const color = colors[method] || colors.GET\n return {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 8px',\n borderRadius: '4px',\n fontSize: '10px',\n fontWeight: 700,\n backgroundColor: color.bg,\n color: color.text,\n fontFamily: 'monospace',\n }\n },\n urlPreview: {\n fontSize: '11px',\n color: '#6b7280',\n backgroundColor: '#f3f4f6',\n padding: '6px 8px',\n borderRadius: '4px',\n fontFamily: 'monospace',\n wordBreak: 'break-all' as const,\n marginTop: '4px',\n },\n}\n\n// ============================================================================\n// Fetch URL Node Component\n// ============================================================================\n\nexport const FetchUrlNode = memo(function FetchUrlNode(props: NodeProps) {\n const { data, selected, id } = props as NodeProps & { data: RuntypeNodeData }\n const { step, onChange } = data\n const config = step.config as FetchUrlStepConfig\n \n const [isExpanded, setIsExpanded] = useState(false)\n\n const handleChange = useCallback(\n (field: string, value: unknown) => {\n if (field.startsWith('http.')) {\n const httpField = field.replace('http.', '')\n onChange?.(id, {\n config: {\n ...config,\n http: {\n ...config.http,\n [httpField]: value,\n },\n },\n } as Partial<FlowStep>)\n } else {\n onChange?.(id, {\n config: {\n ...config,\n [field]: value,\n },\n } as Partial<FlowStep>)\n }\n },\n [id, config, onChange]\n )\n\n const handleNameChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n // console.log('[FetchUrlNode] Name change:', e.target.value)\n onChange?.(id, { name: e.target.value })\n },\n [id, onChange]\n )\n\n const method = config.http?.method || 'GET'\n\n return (\n <BaseNode\n data={data}\n selected={selected}\n id={id}\n typeLabel=\"Fetch URL\"\n icon={<GlobeIcon />}\n headerColor={NODE_HEADER_COLORS['fetch-url']}\n >\n <div style={styles.field}>\n <label style={styles.label}>Step Name</label>\n <input\n style={styles.input}\n value={step.name}\n onChange={handleNameChange}\n placeholder=\"Enter step name\"\n onKeyDown={(e) => {\n // console.log('[FetchUrlNode] KeyDown:', e.key)\n e.stopPropagation()\n }}\n // onInput={(e) => console.log('[FetchUrlNode] Input event:', (e.target as HTMLInputElement).value)}\n />\n </div>\n\n <div style={styles.field}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '4px' }}>\n <label style={styles.label}>Method</label>\n <span style={styles.methodBadge(method)}>{method}</span>\n </div>\n <select\n style={styles.select}\n value={method}\n onChange={(e) => handleChange('http.method', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"GET\">GET</option>\n <option value=\"POST\">POST</option>\n <option value=\"PUT\">PUT</option>\n <option value=\"DELETE\">DELETE</option>\n <option value=\"PATCH\">PATCH</option>\n </select>\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>URL</label>\n <input\n style={styles.input}\n value={config.http?.url || ''}\n onChange={(e) => handleChange('http.url', e.target.value)}\n placeholder=\"https://api.example.com/endpoint\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n {config.http?.url && (\n <div style={styles.urlPreview}>\n {config.http.url}\n </div>\n )}\n </div>\n\n {isExpanded && (\n <>\n {(method === 'POST' || method === 'PUT' || method === 'PATCH') && (\n <div style={styles.field}>\n <label style={styles.label}>Request Body</label>\n <textarea\n style={styles.textarea}\n value={config.http?.body || ''}\n onChange={(e) => handleChange('http.body', e.target.value)}\n placeholder='{\"key\": \"value\"}'\n rows={3}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n )}\n\n <div style={styles.field}>\n <label style={styles.label}>Headers (JSON)</label>\n <textarea\n style={styles.textarea}\n value={config.http?.headers ? JSON.stringify(config.http.headers, null, 2) : ''}\n onChange={(e) => {\n try {\n const headers = JSON.parse(e.target.value)\n handleChange('http.headers', headers)\n } catch {\n // Invalid JSON, don't update\n }\n }}\n placeholder='{\"Content-Type\": \"application/json\"}'\n rows={2}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.row}>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>Response Type</label>\n <select\n style={styles.select}\n value={config.responseType || 'json'}\n onChange={(e) => handleChange('responseType', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"json\">JSON</option>\n <option value=\"text\">Text</option>\n <option value=\"xml\">XML</option>\n </select>\n </div>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>On Error</label>\n <select\n style={styles.select}\n value={config.errorHandling || 'fail'}\n onChange={(e) => handleChange('errorHandling', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"fail\">Fail</option>\n <option value=\"continue\">Continue</option>\n <option value=\"default\">Use Default</option>\n </select>\n </div>\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>Output Variable</label>\n <input\n style={styles.input}\n value={config.outputVariable || ''}\n onChange={(e) => handleChange('outputVariable', e.target.value)}\n placeholder=\"api_response\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n </>\n )}\n\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n style={{\n width: '100%',\n padding: '6px',\n fontSize: '11px',\n color: '#6366f1',\n backgroundColor: 'transparent',\n border: '1px dashed #e5e7eb',\n borderRadius: '6px',\n cursor: 'pointer',\n marginTop: '4px',\n }}\n >\n {isExpanded ? 'Show Less' : 'Show More Options'}\n </button>\n </BaseNode>\n )\n})\n\nexport default FetchUrlNode\n\n","import React, { memo, useCallback, useState } from 'react'\nimport type { NodeProps } from '@xyflow/react'\nimport { BaseNode, CodeIcon, NODE_HEADER_COLORS } from './BaseNode'\nimport type { RuntypeNodeData, TransformDataStepConfig, FlowStep } from '../../types'\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n field: {\n marginBottom: '12px',\n },\n label: {\n display: 'block',\n fontSize: '11px',\n fontWeight: 600,\n color: '#6b7280',\n marginBottom: '4px',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.03em',\n },\n input: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n },\n codeArea: {\n width: '100%',\n padding: '10px',\n fontSize: '11px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#1e1e1e',\n color: '#d4d4d4',\n outline: 'none',\n resize: 'vertical' as const,\n minHeight: '100px',\n fontFamily: '\"Fira Code\", \"Monaco\", \"Consolas\", monospace',\n lineHeight: 1.5,\n tabSize: 2,\n },\n select: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n cursor: 'pointer',\n },\n row: {\n display: 'flex',\n gap: '8px',\n },\n languageBadge: (language: string) => {\n const colors: Record<string, { bg: string; text: string }> = {\n javascript: { bg: '#fef3c7', text: '#d97706' },\n typescript: { bg: '#dbeafe', text: '#1d4ed8' },\n python: { bg: '#d1fae5', text: '#059669' },\n }\n const color = colors[language] || colors.javascript\n return {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 8px',\n borderRadius: '4px',\n fontSize: '10px',\n fontWeight: 600,\n backgroundColor: color.bg,\n color: color.text,\n textTransform: 'capitalize' as const,\n }\n },\n lineNumbers: {\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'flex-end',\n paddingRight: '8px',\n marginRight: '8px',\n borderRight: '1px solid #3f3f46',\n color: '#6b7280',\n fontSize: '11px',\n fontFamily: '\"Fira Code\", \"Monaco\", \"Consolas\", monospace',\n lineHeight: 1.5,\n userSelect: 'none' as const,\n },\n codePreview: {\n fontSize: '10px',\n color: '#9ca3af',\n marginTop: '4px',\n },\n}\n\n// ============================================================================\n// Code Node Component\n// ============================================================================\n\nexport const CodeNode = memo(function CodeNode(props: NodeProps) {\n const { data, selected, id } = props as NodeProps & { data: RuntypeNodeData }\n const { step, onChange } = data\n const config = step.config as TransformDataStepConfig\n \n const [isExpanded, setIsExpanded] = useState(false)\n\n const handleChange = useCallback(\n (field: keyof TransformDataStepConfig, value: unknown) => {\n onChange?.(id, {\n config: {\n ...config,\n [field]: value,\n },\n } as Partial<FlowStep>)\n },\n [id, config, onChange]\n )\n\n const handleNameChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(id, { name: e.target.value })\n },\n [id, onChange]\n )\n\n const language = config.language || 'javascript'\n const lineCount = (config.script || '').split('\\n').length\n\n return (\n <BaseNode\n data={data}\n selected={selected}\n id={id}\n typeLabel=\"Run Code\"\n icon={<CodeIcon />}\n headerColor={NODE_HEADER_COLORS['transform-data']}\n >\n <div style={styles.field}>\n <label style={styles.label}>Step Name</label>\n <input\n style={styles.input}\n value={step.name}\n onChange={handleNameChange}\n placeholder=\"Enter step name\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.field}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '4px' }}>\n <label style={styles.label}>Code</label>\n <span style={styles.languageBadge(language)}>{language}</span>\n </div>\n <textarea\n style={styles.codeArea}\n value={config.script || ''}\n onChange={(e) => handleChange('script', e.target.value)}\n placeholder={`// Write your ${language} code here\\nreturn { result: input }`}\n spellCheck={false}\n onKeyDown={(e) => e.stopPropagation()}\n />\n <div style={styles.codePreview}>\n {lineCount} line{lineCount !== 1 ? 's' : ''}\n </div>\n </div>\n\n {isExpanded && (\n <>\n <div style={styles.row}>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>Language</label>\n <select\n style={styles.select}\n value={language}\n onChange={(e) => handleChange('language', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"javascript\">JavaScript</option>\n <option value=\"typescript\">TypeScript</option>\n <option value=\"python\">Python</option>\n </select>\n </div>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>Sandbox</label>\n <select\n style={styles.select}\n value={config.sandboxProvider || 'quickjs'}\n onChange={(e) => handleChange('sandboxProvider', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"quickjs\">QuickJS (Fast)</option>\n <option value=\"daytona\">Daytona (Full)</option>\n </select>\n </div>\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>On Error</label>\n <select\n style={styles.select}\n value={config.errorHandling || 'fail'}\n onChange={(e) => handleChange('errorHandling', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"fail\">Fail</option>\n <option value=\"continue\">Continue</option>\n <option value=\"default\">Use Default</option>\n </select>\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>Output Variable</label>\n <input\n style={styles.input}\n value={config.outputVariable || ''}\n onChange={(e) => handleChange('outputVariable', e.target.value)}\n placeholder=\"transform_result\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n </>\n )}\n\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n style={{\n width: '100%',\n padding: '6px',\n fontSize: '11px',\n color: '#6366f1',\n backgroundColor: 'transparent',\n border: '1px dashed #e5e7eb',\n borderRadius: '6px',\n cursor: 'pointer',\n marginTop: '4px',\n }}\n >\n {isExpanded ? 'Show Less' : 'Show More Options'}\n </button>\n </BaseNode>\n )\n})\n\nexport default CodeNode\n\n","import React, { memo, useCallback, useState } from 'react'\nimport type { NodeProps } from '@xyflow/react'\nimport { Position } from '@xyflow/react'\nimport { BaseNode, GitBranchIcon, NODE_HEADER_COLORS } from './BaseNode'\nimport type { RuntypeNodeData, ConditionalStepConfig, FlowStep } from '../../types'\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n field: {\n marginBottom: '12px',\n },\n label: {\n display: 'block',\n fontSize: '11px',\n fontWeight: 600,\n color: '#6b7280',\n marginBottom: '4px',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.03em',\n },\n input: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n },\n conditionArea: {\n width: '100%',\n padding: '10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#fef7ee',\n color: '#92400e',\n outline: 'none',\n resize: 'vertical' as const,\n minHeight: '60px',\n fontFamily: '\"Fira Code\", \"Monaco\", \"Consolas\", monospace',\n lineHeight: 1.5,\n },\n branchInfo: {\n display: 'flex',\n gap: '12px',\n marginTop: '8px',\n },\n branchCard: (type: 'true' | 'false') => ({\n flex: 1,\n padding: '10px',\n borderRadius: '8px',\n backgroundColor: type === 'true' ? '#d1fae5' : '#fee2e2',\n border: `1px solid ${type === 'true' ? '#a7f3d0' : '#fecaca'}`,\n }),\n branchLabel: (type: 'true' | 'false') => ({\n fontSize: '10px',\n fontWeight: 700,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: type === 'true' ? '#059669' : '#dc2626',\n marginBottom: '4px',\n }),\n branchCount: {\n fontSize: '18px',\n fontWeight: 700,\n color: '#1f2937',\n },\n branchCountLabel: {\n fontSize: '10px',\n color: '#6b7280',\n },\n helpText: {\n fontSize: '10px',\n color: '#9ca3af',\n marginTop: '4px',\n fontStyle: 'italic' as const,\n },\n}\n\n// ============================================================================\n// Conditional Node Component\n// ============================================================================\n\nexport const ConditionalNode = memo(function ConditionalNode(props: NodeProps) {\n const { data, selected, id } = props as NodeProps & { data: RuntypeNodeData }\n const { step, onChange } = data\n const config = step.config as ConditionalStepConfig\n \n const [isExpanded, setIsExpanded] = useState(false)\n\n const handleChange = useCallback(\n (field: keyof ConditionalStepConfig, value: unknown) => {\n onChange?.(id, {\n config: {\n ...config,\n [field]: value,\n },\n } as Partial<FlowStep>)\n },\n [id, config, onChange]\n )\n\n const handleNameChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(id, { name: e.target.value })\n },\n [id, onChange]\n )\n\n const trueStepsCount = config.trueSteps?.length || 0\n const falseStepsCount = config.falseSteps?.length || 0\n\n return (\n <BaseNode\n data={data}\n selected={selected}\n id={id}\n typeLabel=\"Conditional\"\n icon={<GitBranchIcon />}\n headerColor={NODE_HEADER_COLORS.conditional}\n showSourceHandle={false}\n additionalSourceHandles={[\n {\n id: 'true',\n position: Position.Right,\n label: 'True',\n color: '#22c55e',\n style: { top: '40%' },\n },\n {\n id: 'false',\n position: Position.Right,\n label: 'False',\n color: '#ef4444',\n style: { top: '60%' },\n },\n ]}\n >\n <div style={styles.field}>\n <label style={styles.label}>Step Name</label>\n <input\n style={styles.input}\n value={step.name}\n onChange={handleNameChange}\n placeholder=\"Enter step name\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>Condition (JavaScript)</label>\n <textarea\n style={styles.conditionArea}\n value={config.condition || ''}\n onChange={(e) => handleChange('condition', e.target.value)}\n placeholder=\"user_type === 'premium'\"\n spellCheck={false}\n onKeyDown={(e) => e.stopPropagation()}\n />\n <div style={styles.helpText}>\n Access variables directly: <code>variable_name</code>, <code>_record.metadata.field</code>\n </div>\n </div>\n\n <div style={styles.branchInfo}>\n <div style={styles.branchCard('true')}>\n <div style={styles.branchLabel('true')}>\n <TrueIcon /> True Branch\n </div>\n <div style={styles.branchCount}>{trueStepsCount}</div>\n <div style={styles.branchCountLabel}>\n step{trueStepsCount !== 1 ? 's' : ''}\n </div>\n </div>\n <div style={styles.branchCard('false')}>\n <div style={styles.branchLabel('false')}>\n <FalseIcon /> False Branch\n </div>\n <div style={styles.branchCount}>{falseStepsCount}</div>\n <div style={styles.branchCountLabel}>\n step{falseStepsCount !== 1 ? 's' : ''}\n </div>\n </div>\n </div>\n\n {isExpanded && (\n <div style={{ marginTop: '12px' }}>\n <div style={styles.field}>\n <label style={styles.label}>Condition Examples</label>\n <div style={{ fontSize: '11px', color: '#6b7280', lineHeight: 1.6 }}>\n <div><code>status === 'active'</code> - Check equality</div>\n <div><code>count {'>'} 10</code> - Numeric comparison</div>\n <div><code>data && data.length {'>'} 0</code> - Check array</div>\n <div><code>_record.metadata.type === 'premium'</code> - API input</div>\n </div>\n </div>\n </div>\n )}\n\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n style={{\n width: '100%',\n padding: '6px',\n fontSize: '11px',\n color: '#6366f1',\n backgroundColor: 'transparent',\n border: '1px dashed #e5e7eb',\n borderRadius: '6px',\n cursor: 'pointer',\n marginTop: '12px',\n }}\n >\n {isExpanded ? 'Hide Examples' : 'Show Examples'}\n </button>\n </BaseNode>\n )\n})\n\n// ============================================================================\n// Icon Components\n// ============================================================================\n\nconst TrueIcon = () => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ display: 'inline', marginRight: '4px', verticalAlign: 'middle' }}\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n)\n\nconst FalseIcon = () => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ display: 'inline', marginRight: '4px', verticalAlign: 'middle' }}\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n)\n\nexport default ConditionalNode\n\n","import React, { memo, useCallback, useState } from 'react'\nimport type { NodeProps } from '@xyflow/react'\nimport { BaseNode, MailIcon, NODE_HEADER_COLORS } from './BaseNode'\nimport type { RuntypeNodeData, SendEmailStepConfig, FlowStep } from '../../types'\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n field: {\n marginBottom: '12px',\n },\n label: {\n display: 'block',\n fontSize: '11px',\n fontWeight: 600,\n color: '#6b7280',\n marginBottom: '4px',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.03em',\n },\n input: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n },\n textarea: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n resize: 'vertical' as const,\n minHeight: '80px',\n fontFamily: 'inherit',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n },\n select: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n cursor: 'pointer',\n },\n row: {\n display: 'flex',\n gap: '8px',\n },\n emailPreview: {\n backgroundColor: '#f8fafc',\n border: '1px solid #e2e8f0',\n borderRadius: '8px',\n padding: '10px',\n marginTop: '8px',\n },\n previewHeader: {\n fontSize: '10px',\n color: '#64748b',\n marginBottom: '4px',\n },\n previewValue: {\n fontSize: '12px',\n color: '#1e293b',\n fontWeight: 500,\n marginBottom: '8px',\n wordBreak: 'break-all' as const,\n },\n variableHint: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 6px',\n borderRadius: '4px',\n fontSize: '10px',\n backgroundColor: '#f0f9ff',\n color: '#0369a1',\n fontFamily: 'monospace',\n marginRight: '4px',\n marginTop: '4px',\n },\n}\n\n// ============================================================================\n// Send Email Node Component\n// ============================================================================\n\nexport const SendEmailNode = memo(function SendEmailNode(props: NodeProps) {\n const { data, selected, id } = props as NodeProps & { data: RuntypeNodeData }\n const { step, onChange } = data\n const config = step.config as SendEmailStepConfig\n \n const [isExpanded, setIsExpanded] = useState(false)\n\n const handleChange = useCallback(\n (field: keyof SendEmailStepConfig, value: unknown) => {\n onChange?.(id, {\n config: {\n ...config,\n [field]: value,\n },\n } as Partial<FlowStep>)\n },\n [id, config, onChange]\n )\n\n const handleNameChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(id, { name: e.target.value })\n },\n [id, onChange]\n )\n\n // Check for template variables in fields\n const hasVariables = (value: string) => /\\{\\{[\\w._]+\\}\\}/.test(value)\n\n return (\n <BaseNode\n data={data}\n selected={selected}\n id={id}\n typeLabel=\"Send Email\"\n icon={<MailIcon />}\n headerColor={NODE_HEADER_COLORS['send-email']}\n >\n <div style={styles.field}>\n <label style={styles.label}>Step Name</label>\n <input\n style={styles.input}\n value={step.name}\n onChange={handleNameChange}\n placeholder=\"Enter step name\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>To</label>\n <input\n style={styles.input}\n value={config.to || ''}\n onChange={(e) => handleChange('to', e.target.value)}\n placeholder=\"recipient@example.com or {{_record.metadata.email}}\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n {hasVariables(config.to || '') && (\n <span style={styles.variableHint}>Uses variable</span>\n )}\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>Subject</label>\n <input\n style={styles.input}\n value={config.subject || ''}\n onChange={(e) => handleChange('subject', e.target.value)}\n placeholder=\"Your subject line\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>HTML Content</label>\n <textarea\n style={styles.textarea}\n value={config.html || ''}\n onChange={(e) => handleChange('html', e.target.value)}\n placeholder=\"<p>Your email content...</p>&#10;&#10;Use {{variable}} for dynamic content\"\n rows={4}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n {isExpanded && (\n <>\n <div style={styles.field}>\n <label style={styles.label}>From</label>\n <input\n style={styles.input}\n value={config.from || ''}\n onChange={(e) => handleChange('from', e.target.value)}\n placeholder=\"no-reply@messages.runtype.com\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.row}>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>CC</label>\n <input\n style={styles.input}\n value={config.cc || ''}\n onChange={(e) => handleChange('cc', e.target.value)}\n placeholder=\"cc@example.com\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>BCC</label>\n <input\n style={styles.input}\n value={config.bcc || ''}\n onChange={(e) => handleChange('bcc', e.target.value)}\n placeholder=\"bcc@example.com\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>Reply To</label>\n <input\n style={styles.input}\n value={config.replyTo || ''}\n onChange={(e) => handleChange('replyTo', e.target.value)}\n placeholder=\"reply@example.com\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>Plain Text (Fallback)</label>\n <textarea\n style={styles.textarea}\n value={config.text || ''}\n onChange={(e) => handleChange('text', e.target.value)}\n placeholder=\"Plain text version of your email...\"\n rows={2}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.row}>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>On Error</label>\n <select\n style={styles.select}\n value={config.errorHandling || 'fail'}\n onChange={(e) => handleChange('errorHandling', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"fail\">Fail</option>\n <option value=\"continue\">Continue</option>\n <option value=\"default\">Use Default</option>\n </select>\n </div>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>Output Variable</label>\n <input\n style={styles.input}\n value={config.outputVariable || ''}\n onChange={(e) => handleChange('outputVariable', e.target.value)}\n placeholder=\"email_result\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n </div>\n </>\n )}\n\n {/* Email Preview */}\n {(config.to || config.subject) && (\n <div style={styles.emailPreview}>\n <div style={styles.previewHeader}>Preview</div>\n {config.to && (\n <div style={styles.previewValue}>\n <strong>To:</strong> {config.to}\n </div>\n )}\n {config.subject && (\n <div style={styles.previewValue}>\n <strong>Subject:</strong> {config.subject}\n </div>\n )}\n </div>\n )}\n\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n style={{\n width: '100%',\n padding: '6px',\n fontSize: '11px',\n color: '#6366f1',\n backgroundColor: 'transparent',\n border: '1px dashed #e5e7eb',\n borderRadius: '6px',\n cursor: 'pointer',\n marginTop: '8px',\n }}\n >\n {isExpanded ? 'Show Less' : 'Show More Options'}\n </button>\n </BaseNode>\n )\n})\n\nexport default SendEmailNode\n\n","import React, { useCallback, useMemo, useState } from 'react'\nimport {\n ReactFlow,\n Controls,\n Background,\n MiniMap,\n Panel,\n type NodeTypes,\n BackgroundVariant,\n ConnectionLineType,\n} from '@xyflow/react'\n\nimport type {\n RuntypeFlowEditorProps,\n RuntypeNode,\n FlowStep,\n SupportedNodeType,\n} from '../types'\nimport { useRuntypeFlow } from '../hooks/useRuntypeFlow'\nimport { useFlowValidation } from '../hooks/useFlowValidation'\nimport { PromptNode } from './nodes/PromptNode'\nimport { FetchUrlNode } from './nodes/FetchUrlNode'\nimport { CodeNode } from './nodes/CodeNode'\nimport { ConditionalNode } from './nodes/ConditionalNode'\nimport { SendEmailNode } from './nodes/SendEmailNode'\nimport { BaseNode, BrainIcon, NODE_HEADER_COLORS } from './nodes/BaseNode'\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n container: {\n width: '100%',\n height: '100%',\n position: 'relative' as const,\n },\n toolbar: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n backgroundColor: '#ffffff',\n borderRadius: '8px',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',\n border: '1px solid #e5e7eb',\n },\n toolbarButton: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '8px 12px',\n fontSize: '12px',\n fontWeight: 500,\n backgroundColor: '#f9fafb',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n cursor: 'pointer',\n color: '#374151',\n transition: 'all 0.15s ease',\n },\n toolbarButtonPrimary: {\n backgroundColor: '#6366f1',\n borderColor: '#6366f1',\n color: '#ffffff',\n },\n toolbarDivider: {\n width: '1px',\n height: '24px',\n backgroundColor: '#e5e7eb',\n margin: '0 4px',\n },\n statusPanel: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n backgroundColor: '#ffffff',\n borderRadius: '8px',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',\n border: '1px solid #e5e7eb',\n fontSize: '12px',\n color: '#6b7280',\n },\n statusBadge: (isValid: boolean) => ({\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 8px',\n borderRadius: '12px',\n fontSize: '10px',\n fontWeight: 600,\n backgroundColor: isValid ? '#d1fae5' : '#fee2e2',\n color: isValid ? '#059669' : '#dc2626',\n }),\n addStepMenu: {\n position: 'absolute' as const,\n top: '100%',\n left: 0,\n marginTop: '4px',\n backgroundColor: '#ffffff',\n borderRadius: '8px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n border: '1px solid #e5e7eb',\n padding: '4px',\n zIndex: 1000,\n minWidth: '200px',\n },\n addStepMenuItem: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n fontSize: '12px',\n color: '#374151',\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n width: '100%',\n textAlign: 'left' as const,\n transition: 'background-color 0.15s ease',\n },\n flowNameInput: {\n padding: '6px 10px',\n fontSize: '14px',\n fontWeight: 600,\n border: '1px solid transparent',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: '#1f2937',\n outline: 'none',\n transition: 'border-color 0.15s ease, background-color 0.15s ease',\n minWidth: '200px',\n },\n unsavedBadge: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 6px',\n borderRadius: '4px',\n fontSize: '10px',\n fontWeight: 500,\n backgroundColor: '#fef3c7',\n color: '#d97706',\n },\n}\n\n// ============================================================================\n// Node Types Configuration\n// ============================================================================\n\nconst nodeTypes: NodeTypes = {\n prompt: PromptNode,\n 'fetch-url': FetchUrlNode,\n 'transform-data': CodeNode,\n conditional: ConditionalNode,\n 'send-email': SendEmailNode,\n // Default node for unsupported types\n default: DefaultNode,\n}\n\n// Default node for unsupported step types\nfunction DefaultNode(props: { data: { step: FlowStep; label: string }; selected?: boolean; id: string }) {\n const { data, selected, id } = props\n \n return (\n <BaseNode\n data={data as any}\n selected={selected}\n id={id}\n typeLabel={data.step.type}\n icon={<BrainIcon />}\n headerColor={NODE_HEADER_COLORS.default}\n >\n <div style={{ fontSize: '12px', color: '#6b7280' }}>\n This step type is not yet fully supported in the visual editor.\n </div>\n </BaseNode>\n )\n}\n\n// ============================================================================\n// Step Type Options\n// ============================================================================\n\nconst STEP_TYPE_OPTIONS: Array<{\n type: SupportedNodeType\n label: string\n icon: React.ReactNode\n color: string\n}> = [\n {\n type: 'prompt',\n label: 'AI Prompt',\n icon: <PromptIcon />,\n color: NODE_HEADER_COLORS.prompt,\n },\n {\n type: 'fetch-url',\n label: 'Fetch URL',\n icon: <GlobeIcon />,\n color: NODE_HEADER_COLORS['fetch-url'],\n },\n {\n type: 'transform-data',\n label: 'Run Code',\n icon: <CodeIcon />,\n color: NODE_HEADER_COLORS['transform-data'],\n },\n {\n type: 'conditional',\n label: 'Conditional',\n icon: <BranchIcon />,\n color: NODE_HEADER_COLORS.conditional,\n },\n {\n type: 'send-email',\n label: 'Send Email',\n icon: <MailIcon />,\n color: NODE_HEADER_COLORS['send-email'],\n },\n]\n\n// ============================================================================\n// Main Editor Component\n// ============================================================================\n\nexport function RuntypeFlowEditor({\n client,\n flowId,\n initialName = 'Untitled Flow',\n initialDescription = '',\n initialSteps = [],\n onSave,\n onChange,\n onStepSelect,\n showToolbar = true,\n readOnly = false,\n className,\n}: RuntypeFlowEditorProps) {\n const [showAddMenu, setShowAddMenu] = useState(false)\n const [selectedNode, setSelectedNode] = useState<RuntypeNode | null>(null)\n\n // Initialize flow hook\n const {\n nodes,\n edges,\n onNodesChange,\n onEdgesChange,\n onConnect,\n flowName,\n setFlowName,\n saveFlow,\n addStep,\n isLoading,\n isSaving,\n error,\n hasUnsavedChanges,\n } = useRuntypeFlow({\n client,\n flowId,\n initialName,\n initialDescription,\n initialSteps,\n onChange,\n autoLayoutOnLoad: true,\n })\n\n // Validation\n const { result: validationResult } = useFlowValidation({ nodes })\n\n // Handlers\n const handleSave = useCallback(async () => {\n try {\n const savedFlow = await saveFlow()\n onSave?.(savedFlow)\n } catch (err) {\n console.error('Failed to save flow:', err)\n }\n }, [saveFlow, onSave])\n\n const handleAddStep = useCallback(\n (type: SupportedNodeType) => {\n addStep(type)\n setShowAddMenu(false)\n },\n [addStep]\n )\n\n const handleNodeClick = useCallback(\n (_: React.MouseEvent, node: RuntypeNode) => {\n setSelectedNode(node)\n onStepSelect?.(node.data.step)\n },\n [onStepSelect]\n )\n\n const handlePaneClick = useCallback(() => {\n setSelectedNode(null)\n onStepSelect?.(null)\n }, [onStepSelect])\n\n // Minimap node color\n const minimapNodeColor = useCallback((node: RuntypeNode) => {\n return NODE_HEADER_COLORS[node.data.step.type] || NODE_HEADER_COLORS.default\n }, [])\n\n return (\n <div style={styles.container} className={className}>\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={readOnly ? undefined : onNodesChange}\n onEdgesChange={readOnly ? undefined : onEdgesChange}\n onConnect={readOnly ? undefined : onConnect}\n onNodeClick={handleNodeClick}\n onPaneClick={handlePaneClick}\n nodeTypes={nodeTypes}\n fitView\n fitViewOptions={{ padding: 0.2 }}\n snapToGrid\n snapGrid={[20, 20]}\n connectionLineType={ConnectionLineType.SmoothStep}\n defaultEdgeOptions={{\n type: 'smoothstep',\n animated: false,\n }}\n proOptions={{ hideAttribution: true }}\n >\n <Background variant={BackgroundVariant.Dots} gap={20} size={1} color=\"#d1d5db\" />\n <Controls showInteractive={!readOnly} />\n <MiniMap\n nodeColor={minimapNodeColor}\n nodeStrokeWidth={3}\n zoomable\n pannable\n style={{\n backgroundColor: '#f9fafb',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n }}\n />\n\n {/* Top Toolbar */}\n {showToolbar && (\n <Panel position=\"top-left\">\n <div style={styles.toolbar}>\n {/* Flow Name */}\n <input\n style={styles.flowNameInput}\n value={flowName}\n onChange={(e) => setFlowName(e.target.value)}\n placeholder=\"Flow name...\"\n disabled={readOnly}\n onFocus={(e) => {\n e.target.style.borderColor = '#6366f1'\n e.target.style.backgroundColor = '#ffffff'\n }}\n onBlur={(e) => {\n e.target.style.borderColor = 'transparent'\n e.target.style.backgroundColor = 'transparent'\n }}\n />\n\n {hasUnsavedChanges && (\n <span style={styles.unsavedBadge}>Unsaved</span>\n )}\n\n <div style={styles.toolbarDivider} />\n\n {/* Add Step Button */}\n {!readOnly && (\n <div style={{ position: 'relative' }}>\n <button\n style={styles.toolbarButton}\n onClick={() => setShowAddMenu(!showAddMenu)}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#f3f4f6'\n e.currentTarget.style.borderColor = '#d1d5db'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = '#f9fafb'\n e.currentTarget.style.borderColor = '#e5e7eb'\n }}\n >\n <PlusIcon /> Add Step\n </button>\n\n {showAddMenu && (\n <div style={styles.addStepMenu}>\n {STEP_TYPE_OPTIONS.map((option) => (\n <button\n key={option.type}\n style={styles.addStepMenuItem}\n onClick={() => handleAddStep(option.type)}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = option.color\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n >\n {option.icon}\n {option.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Save Button */}\n {!readOnly && flowId && (\n <button\n style={{ ...styles.toolbarButton, ...styles.toolbarButtonPrimary }}\n onClick={handleSave}\n disabled={isSaving || !hasUnsavedChanges}\n onMouseEnter={(e) => {\n if (!isSaving && hasUnsavedChanges) {\n e.currentTarget.style.backgroundColor = '#4f46e5'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = '#6366f1'\n }}\n >\n {isSaving ? 'Saving...' : 'Save'}\n </button>\n )}\n </div>\n </Panel>\n )}\n\n {/* Status Panel */}\n <Panel position=\"top-right\">\n <div style={styles.statusPanel}>\n <span style={styles.statusBadge(validationResult.isValid)}>\n {validationResult.isValid ? 'Valid' : `${validationResult.errors.length} Error(s)`}\n </span>\n <span>{nodes.length} steps</span>\n {isLoading && <span>Loading...</span>}\n {error && (\n <span style={{ color: '#dc2626' }}>Error: {error.message}</span>\n )}\n </div>\n </Panel>\n </ReactFlow>\n\n {/* Click outside to close menu */}\n {showAddMenu && (\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 999,\n }}\n onClick={() => setShowAddMenu(false)}\n />\n )}\n </div>\n )\n}\n\n// ============================================================================\n// Icon Components\n// ============================================================================\n\nfunction PlusIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n )\n}\n\nfunction PromptIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z\" />\n <path d=\"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z\" />\n </svg>\n )\n}\n\nfunction GlobeIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </svg>\n )\n}\n\nfunction CodeIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"16 18 22 12 16 6\" />\n <polyline points=\"8 6 2 12 8 18\" />\n </svg>\n )\n}\n\nfunction BranchIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\" />\n <circle cx=\"18\" cy=\"6\" r=\"3\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <path d=\"M18 9a9 9 0 0 1-9 9\" />\n </svg>\n )\n}\n\nfunction MailIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\" />\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\n </svg>\n )\n}\n\nexport default RuntypeFlowEditor\n\n"]}
1
+ {"version":3,"sources":["../src/types/index.ts","../src/utils/adapter.ts","../src/utils/layout.ts","../src/hooks/useRuntypeFlow.ts","../src/hooks/useFlowValidation.ts","../src/components/nodes/BaseNode.tsx","../src/components/nodes/PromptNode.tsx","../src/components/nodes/FetchUrlNode.tsx","../src/components/nodes/CodeNode.tsx","../src/components/nodes/ConditionalNode.tsx","../src/components/nodes/SendEmailNode.tsx","../src/components/RuntypeFlowEditor.tsx"],"names":["useState","useNodesState","useEdgesState","useRef","useCallback","addEdge","newEdges","useEffect","useMemo","memo","BaseNode","jsx","Handle","Position","jsxs","styles","PromptNode","Fragment","FetchUrlNode","CodeNode","ConditionalNode","SendEmailNode","GlobeIcon","CodeIcon","MailIcon","ReactFlow","ConnectionLineType","Background","BackgroundVariant","Controls","MiniMap","Panel"],"mappings":"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","file":"index.js","sourcesContent":["import type { Node, Edge, NodeProps } from '@xyflow/react'\nimport type { FlowStepType, PromptStepMode } from '../flow-step-types'\nimport type { RuntypeClient } from '@runtypelabs/sdk'\n\n// ============================================================================\n// Flow Step Types (matching Runtype API)\n// ============================================================================\n\n/**\n * Core FlowStep interface matching the Runtype API structure\n */\nexport interface FlowStep {\n id: string\n type: FlowStepType\n name: string\n order: number\n enabled: boolean\n config: FlowStepConfig\n}\n\n/**\n * Union type for all step configurations\n */\nexport type FlowStepConfig =\n | PromptStepConfig\n | FetchUrlStepConfig\n | TransformDataStepConfig\n | ConditionalStepConfig\n | SendEmailStepConfig\n | GenericStepConfig\n\n/**\n * Prompt step configuration\n */\nexport interface PromptStepConfig {\n mode?: PromptStepMode\n model: string\n systemPrompt?: string\n userPrompt: string\n previousMessages?: string\n responseFormat?: 'json' | 'markdown' | 'text' | 'html' | 'xml'\n temperature?: number\n maxTokens?: number\n outputVariable: string\n tools?: {\n toolIds: string[]\n }\n}\n\n/**\n * Fetch URL step configuration\n */\nexport interface FetchUrlStepConfig {\n http: {\n url: string\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'\n headers?: Record<string, string>\n body?: string\n timeout?: number\n }\n auth?: {\n type: 'none' | 'bearer' | 'basic' | 'api-key'\n token?: string\n username?: string\n password?: string\n apiKey?: string\n headerName?: string\n }\n responseType?: 'json' | 'text' | 'xml'\n outputVariable: string\n errorHandling?: 'fail' | 'continue' | 'default'\n defaultValue?: unknown\n}\n\n/**\n * Transform data (code) step configuration\n */\nexport interface TransformDataStepConfig {\n script: string\n outputVariable: string\n sandboxProvider?: 'quickjs' | 'daytona'\n language?: 'javascript' | 'typescript' | 'python'\n errorHandling?: 'fail' | 'continue' | 'default'\n defaultValue?: unknown\n}\n\n/**\n * Conditional step configuration\n */\nexport interface ConditionalStepConfig {\n condition: string\n trueSteps: FlowStep[]\n falseSteps?: FlowStep[]\n}\n\n/**\n * Send email step configuration\n */\nexport interface SendEmailStepConfig {\n from: string\n to: string\n subject: string\n replyTo?: string\n cc?: string\n bcc?: string\n html?: string\n text?: string\n attachments?: Array<{\n filename: string\n content: string\n contentType?: string\n }>\n outputVariable: string\n errorHandling?: 'fail' | 'continue' | 'default'\n defaultValue?: unknown\n}\n\n/**\n * Generic step config for extensibility\n */\nexport interface GenericStepConfig {\n [key: string]: unknown\n outputVariable?: string\n}\n\n// ============================================================================\n// React Flow Node Types\n// ============================================================================\n\n/**\n * Base data structure for all Runtype nodes\n * Uses index signature to satisfy React Flow's Record<string, unknown> constraint\n */\nexport interface RuntypeNodeData extends Record<string, unknown> {\n step: FlowStep\n label: string\n onChange?: (stepId: string, updates: Partial<FlowStep>) => void\n onDelete?: (stepId: string) => void\n}\n\n/**\n * Runtype node extending React Flow's Node type\n */\nexport type RuntypeNode = Node<RuntypeNodeData, FlowStepType>\n\n/**\n * Runtype edge type\n */\nexport type RuntypeEdge = Edge<{ stepOrder?: number }>\n\n/**\n * Props for node components\n */\nexport type RuntypeNodeProps = NodeProps\n\n// ============================================================================\n// Node Type Registry\n// ============================================================================\n\n/**\n * Supported node types that have custom components\n */\nexport const SUPPORTED_NODE_TYPES = [\n 'prompt',\n 'fetch-url',\n 'transform-data',\n 'conditional',\n 'send-email',\n] as const\n\nexport type SupportedNodeType = typeof SUPPORTED_NODE_TYPES[number]\n\n/**\n * Check if a step type has a custom node component\n */\nexport function isSupportedNodeType(type: FlowStepType): type is SupportedNodeType {\n return SUPPORTED_NODE_TYPES.includes(type as SupportedNodeType)\n}\n\n// ============================================================================\n// Editor Configuration\n// ============================================================================\n\n/**\n * Configuration for the RuntypeFlowEditor component\n */\nexport interface RuntypeFlowEditorProps {\n /** Runtype API client instance */\n client: RuntypeClient\n /** ID of an existing flow to load */\n flowId?: string\n /** Initial flow name (for new flows) */\n initialName?: string\n /** Initial flow description */\n initialDescription?: string\n /** Initial steps to populate the editor */\n initialSteps?: FlowStep[]\n /** Callback when flow is saved */\n onSave?: (flow: SavedFlow) => void\n /** Callback when flow changes */\n onChange?: (nodes: RuntypeNode[], edges: RuntypeEdge[]) => void\n /** Callback when a step is selected */\n onStepSelect?: (step: FlowStep | null) => void\n /** Whether to show the toolbar */\n showToolbar?: boolean\n /** Whether the editor is read-only */\n readOnly?: boolean\n /** Custom class name for the editor container */\n className?: string\n /** Available models for prompt steps */\n availableModels?: ModelOption[]\n}\n\n/**\n * Model option for prompt step configuration\n */\nexport interface ModelOption {\n id: string\n name: string\n provider: string\n}\n\n/**\n * Saved flow data returned after save operations\n */\nexport interface SavedFlow {\n id: string\n name: string\n description?: string\n steps: FlowStep[]\n createdAt?: string\n updatedAt?: string\n}\n\n// ============================================================================\n// Hook Types\n// ============================================================================\n\n/**\n * Return type for useRuntypeFlow hook\n */\nexport interface UseRuntypeFlowReturn {\n /** Current React Flow nodes */\n nodes: RuntypeNode[]\n /** Current React Flow edges */\n edges: RuntypeEdge[]\n /** Handler for node changes */\n onNodesChange: (changes: unknown) => void\n /** Handler for edge changes */\n onEdgesChange: (changes: unknown) => void\n /** Handler for new connections */\n onConnect: (connection: unknown) => void\n /** Flow metadata */\n flowName: string\n flowDescription: string\n flowId: string | null\n /** Set flow name */\n setFlowName: (name: string) => void\n /** Set flow description */\n setFlowDescription: (description: string) => void\n /** Load a flow by ID */\n loadFlow: (flowId: string) => Promise<void>\n /** Save the current flow */\n saveFlow: () => Promise<SavedFlow>\n /** Create a new flow */\n createFlow: (name: string, description?: string) => Promise<SavedFlow>\n /** Delete a step */\n deleteStep: (stepId: string) => void\n /** Update a step's configuration */\n updateStep: (stepId: string, updates: Partial<FlowStep>) => void\n /** Add a new step */\n addStep: (type: FlowStepType, position?: { x: number; y: number }) => void\n /** Loading state */\n isLoading: boolean\n /** Saving state */\n isSaving: boolean\n /** Error state */\n error: Error | null\n /** Whether there are unsaved changes */\n hasUnsavedChanges: boolean\n}\n\n/**\n * Validation result for a flow\n */\nexport interface FlowValidationResult {\n isValid: boolean\n errors: ValidationError[]\n warnings: ValidationWarning[]\n}\n\nexport interface ValidationError {\n stepId: string\n field?: string\n message: string\n}\n\nexport interface ValidationWarning {\n stepId: string\n field?: string\n message: string\n}\n\n// ============================================================================\n// Event Types\n// ============================================================================\n\n/**\n * Event emitted when a step is updated\n */\nexport interface StepUpdateEvent {\n stepId: string\n updates: Partial<FlowStep>\n previousValue: FlowStep\n}\n\n/**\n * Event emitted when a step is deleted\n */\nexport interface StepDeleteEvent {\n stepId: string\n step: FlowStep\n}\n\n/**\n * Event emitted when a step is added\n */\nexport interface StepAddEvent {\n step: FlowStep\n position: { x: number; y: number }\n}\n\n","import type { FlowStep, RuntypeNode, RuntypeEdge, RuntypeNodeData } from '../types'\nimport type { FlowStepType } from '../flow-step-types'\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst NODE_WIDTH = 280\nconst NODE_HEIGHT = 200 // Increased for better card visibility\nconst NODE_SPACING_X = 350 // Horizontal space between main steps\nconst NODE_SPACING_Y = 80 // Vertical space between branch steps\nconst BRANCH_OFFSET_X = 350 // Horizontal offset for branches to the right of conditional\nconst BRANCH_OFFSET_Y = -80 // Vertical offset for true branch (above center)\nconst FALSE_BRANCH_GAP = 100 // Gap between true and false branches\n\n// ============================================================================\n// Flow Steps to React Flow Nodes\n// ============================================================================\n\ninterface FlowStepsToNodesOptions {\n onChange?: (stepId: string, updates: Partial<FlowStep>) => void\n onDelete?: (stepId: string) => void\n startPosition?: { x: number; y: number }\n /** Internal: prefix for nested step IDs */\n idPrefix?: string\n /** Internal: parent conditional ID */\n parentId?: string\n}\n\n/**\n * Convert Runtype FlowStep array to React Flow Node array\n * Handles nested conditional branches with vertical stacking below conditional\n */\nexport function flowStepsToNodes(\n steps: FlowStep[],\n options?: FlowStepsToNodesOptions\n): RuntypeNode[] {\n const { \n onChange, \n onDelete, \n startPosition = { x: 50, y: 200 },\n idPrefix = '',\n parentId,\n } = options ?? {}\n\n // Sort steps by order\n const sortedSteps = [...steps].sort((a, b) => a.order - b.order)\n\n const nodes: RuntypeNode[] = []\n let currentX = startPosition.x\n let maxBranchY = startPosition.y // Track the maximum Y extent for branches\n\n for (const step of sortedSteps) {\n const nodeId = idPrefix ? `${idPrefix}${step.id}` : step.id\n\n const nodeData: RuntypeNodeData = {\n step,\n label: step.name || getDefaultStepName(step.type),\n onChange,\n onDelete,\n }\n\n const node: RuntypeNode = {\n id: nodeId,\n type: step.type,\n position: { x: currentX, y: startPosition.y },\n data: nodeData,\n draggable: true,\n selectable: true,\n }\n \n if (parentId) {\n node.parentId = parentId\n }\n\n nodes.push(node)\n \n // DEBUG: Log node positions\n console.log(`[flowStepsToNodes] Placed \"${step.name}\" (${step.type}) at x=${currentX}`)\n \n // Handle conditional branches - position to the right with true above, false below\n if (step.type === 'conditional' && step.config) {\n const config = step.config as { trueSteps?: FlowStep[]; falseSteps?: FlowStep[] }\n const branchX = currentX + BRANCH_OFFSET_X\n \n // Calculate branch lengths (horizontal extent)\n const trueBranchLength = config.trueSteps?.length || 0\n const falseBranchLength = config.falseSteps?.length || 0\n const maxBranchLength = Math.max(trueBranchLength, falseBranchLength)\n \n // Calculate true branch height (vertical extent for stacking)\n const trueBranchHeight = trueBranchLength * (NODE_HEIGHT + NODE_SPACING_Y)\n \n // True branch nodes (positioned to the right, above center)\n if (config.trueSteps && config.trueSteps.length > 0) {\n const trueBranchY = startPosition.y + BRANCH_OFFSET_Y\n const trueBranchNodes = flowStepsToNodes(config.trueSteps, {\n onChange,\n onDelete,\n startPosition: { \n x: branchX, \n y: trueBranchY \n },\n idPrefix: `${nodeId}-true-`,\n parentId: nodeId,\n })\n \n nodes.push(...trueBranchNodes)\n maxBranchY = Math.max(maxBranchY, trueBranchY + trueBranchHeight)\n }\n \n // False branch nodes (positioned to the right, below center)\n if (config.falseSteps && config.falseSteps.length > 0) {\n // Position false branch below true branch (or at center + gap if no true branch)\n const falseBranchY = trueBranchLength > 0\n ? startPosition.y + BRANCH_OFFSET_Y + trueBranchHeight + FALSE_BRANCH_GAP\n : startPosition.y + NODE_HEIGHT + NODE_SPACING_Y\n \n const falseBranchNodes = flowStepsToNodes(config.falseSteps, {\n onChange,\n onDelete,\n startPosition: { \n x: branchX, \n y: falseBranchY \n },\n idPrefix: `${nodeId}-false-`,\n parentId: nodeId,\n })\n \n nodes.push(...falseBranchNodes)\n const falseBranchHeight = config.falseSteps.length * (NODE_HEIGHT + NODE_SPACING_Y)\n maxBranchY = Math.max(maxBranchY, falseBranchY + falseBranchHeight)\n }\n \n // Skip past the conditional AND all its branch steps\n // Branches start at branchX, so we need to account for:\n // - The offset from conditional to first branch step (BRANCH_OFFSET_X)\n // - All the branch steps (maxBranchLength * (NODE_WIDTH + NODE_SPACING_X))\n if (maxBranchLength > 0) {\n const advance = BRANCH_OFFSET_X + (maxBranchLength * (NODE_WIDTH + NODE_SPACING_X))\n console.log(`[flowStepsToNodes] Conditional \"${step.name}\" has ${maxBranchLength} branch steps, advancing currentX by ${advance}`)\n currentX += advance\n console.log(`[flowStepsToNodes] After conditional, currentX = ${currentX}`)\n } else {\n currentX += NODE_WIDTH + NODE_SPACING_X\n }\n } else {\n // Move to the next X position for horizontal layout (non-conditional steps)\n currentX += NODE_WIDTH + NODE_SPACING_X\n }\n }\n\n return nodes\n}\n\n// ============================================================================\n// React Flow Nodes to Flow Steps\n// ============================================================================\n\n/**\n * Convert React Flow Node array back to Runtype FlowStep array\n */\nexport function nodesToFlowSteps(nodes: RuntypeNode[]): FlowStep[] {\n // Filter out branch nodes (handled within conditional steps)\n const topLevelNodes = nodes.filter(n => !n.parentId && !n.id.includes('-true-') && !n.id.includes('-false-'))\n \n // Sort by X position to determine order (horizontal layout)\n const sortedNodes = [...topLevelNodes].sort((a, b) => a.position.x - b.position.x)\n \n return sortedNodes.map((node, index) => {\n const step = node.data.step\n \n // Handle conditional steps - extract nested steps\n if (step.type === 'conditional') {\n const trueSteps = extractBranchSteps(nodes, node.id, 'true')\n const falseSteps = extractBranchSteps(nodes, node.id, 'false')\n \n return {\n ...step,\n order: index,\n config: {\n ...step.config,\n trueSteps,\n falseSteps,\n },\n }\n }\n \n return {\n ...step,\n order: index,\n }\n })\n}\n\n/**\n * Extract branch steps from conditional node\n */\nfunction extractBranchSteps(nodes: RuntypeNode[], parentId: string, branch: 'true' | 'false'): FlowStep[] {\n // Match nodes with the branch prefix pattern\n const branchPrefix = `${parentId}-${branch}-`\n const branchNodes = nodes.filter(n => n.id.startsWith(branchPrefix))\n \n // Sort by X position (horizontal layout within branches)\n const sortedBranchNodes = [...branchNodes].sort((a, b) => a.position.x - b.position.x)\n \n return sortedBranchNodes.map((node, index) => ({\n ...node.data.step,\n order: index,\n }))\n}\n\n// ============================================================================\n// Create Edges from Nodes\n// ============================================================================\n\n/**\n * Create edges connecting nodes in sequence\n */\nexport function createEdgesFromNodes(nodes: RuntypeNode[]): RuntypeEdge[] {\n const edges: RuntypeEdge[] = []\n\n // Helper to check if a node is a branch node\n const isBranchNode = (n: RuntypeNode) => n.parentId || n.id.includes('-true-') || n.id.includes('-false-')\n \n // Get top-level nodes sorted by X position (horizontal layout)\n const topLevelNodes = nodes\n .filter(n => !isBranchNode(n))\n .sort((a, b) => a.position.x - b.position.x)\n \n // Create sequential edges for top-level nodes\n // Skip conditionals - their branches connect to the next step instead\n for (let i = 0; i < topLevelNodes.length - 1; i++) {\n const sourceNode = topLevelNodes[i]\n const targetNode = topLevelNodes[i + 1]\n \n // Skip edge from conditional - branches will connect to next step\n if (sourceNode.data.step.type === 'conditional') {\n continue\n }\n \n edges.push({\n id: `edge-${sourceNode.id}-${targetNode.id}`,\n source: sourceNode.id,\n target: targetNode.id,\n sourceHandle: 'output',\n type: 'smoothstep',\n animated: false,\n data: { stepOrder: i },\n })\n }\n \n // Create edges for conditional branches\n const conditionalNodes = nodes.filter(n => n.data.step.type === 'conditional' && !isBranchNode(n))\n \n for (const conditionalNode of conditionalNodes) {\n const conditionalId = conditionalNode.id\n const conditionalIndex = topLevelNodes.findIndex(n => n.id === conditionalId)\n const nextMainStep = conditionalIndex < topLevelNodes.length - 1 \n ? topLevelNodes[conditionalIndex + 1] \n : null\n \n // Find true branch nodes (contain -true- after the conditional ID)\n // Sort by X position since branches flow horizontally\n const trueBranchNodes = nodes\n .filter(n => n.id.startsWith(`${conditionalId}-true-`))\n .sort((a, b) => a.position.x - b.position.x)\n \n // Find false branch nodes (contain -false- after the conditional ID)\n // Sort by X position since branches flow horizontally\n const falseBranchNodes = nodes\n .filter(n => n.id.startsWith(`${conditionalId}-false-`))\n .sort((a, b) => a.position.x - b.position.x)\n \n // Connect conditional to first true branch node (branch goes right)\n if (trueBranchNodes.length > 0) {\n edges.push({\n id: `edge-${conditionalId}-to-true-branch`,\n source: conditionalId,\n target: trueBranchNodes[0].id,\n sourceHandle: 'true',\n type: 'smoothstep',\n animated: false,\n label: 'True',\n labelStyle: { fill: '#22c55e', fontWeight: 600, fontSize: 11 },\n labelBgStyle: { fill: '#f0fdf4', fillOpacity: 0.9 },\n labelBgPadding: [4, 6] as [number, number],\n labelBgBorderRadius: 4,\n style: { stroke: '#22c55e', strokeWidth: 2 },\n })\n \n // Connect true branch nodes sequentially (horizontal connections)\n for (let i = 0; i < trueBranchNodes.length - 1; i++) {\n edges.push({\n id: `edge-true-${trueBranchNodes[i].id}-${trueBranchNodes[i + 1].id}`,\n source: trueBranchNodes[i].id,\n target: trueBranchNodes[i + 1].id,\n sourceHandle: 'output',\n type: 'smoothstep',\n animated: false,\n style: { stroke: '#22c55e', strokeWidth: 1.5 },\n })\n }\n \n // Connect last true branch node to next main step (convergence)\n if (nextMainStep) {\n const lastTrueNode = trueBranchNodes[trueBranchNodes.length - 1]\n edges.push({\n id: `edge-true-${lastTrueNode.id}-to-${nextMainStep.id}`,\n source: lastTrueNode.id,\n target: nextMainStep.id,\n sourceHandle: 'output',\n type: 'smoothstep',\n animated: false,\n style: { stroke: '#22c55e', strokeWidth: 1.5 },\n })\n }\n } else if (nextMainStep) {\n // No true branch steps - connect conditional directly to next step via true handle\n edges.push({\n id: `edge-${conditionalId}-true-to-${nextMainStep.id}`,\n source: conditionalId,\n target: nextMainStep.id,\n sourceHandle: 'true',\n type: 'smoothstep',\n animated: false,\n label: 'True',\n labelStyle: { fill: '#22c55e', fontWeight: 600, fontSize: 11 },\n labelBgStyle: { fill: '#f0fdf4', fillOpacity: 0.9 },\n labelBgPadding: [4, 6] as [number, number],\n labelBgBorderRadius: 4,\n style: { stroke: '#22c55e', strokeWidth: 2 },\n })\n }\n \n // Connect conditional to first false branch node (branch goes right, below true)\n if (falseBranchNodes.length > 0) {\n edges.push({\n id: `edge-${conditionalId}-to-false-branch`,\n source: conditionalId,\n target: falseBranchNodes[0].id,\n sourceHandle: 'false',\n type: 'smoothstep',\n animated: false,\n label: 'False',\n labelStyle: { fill: '#ef4444', fontWeight: 600, fontSize: 11 },\n labelBgStyle: { fill: '#fef2f2', fillOpacity: 0.9 },\n labelBgPadding: [4, 6] as [number, number],\n labelBgBorderRadius: 4,\n style: { stroke: '#ef4444', strokeWidth: 2 },\n })\n \n // Connect false branch nodes sequentially (horizontal connections)\n for (let i = 0; i < falseBranchNodes.length - 1; i++) {\n edges.push({\n id: `edge-false-${falseBranchNodes[i].id}-${falseBranchNodes[i + 1].id}`,\n source: falseBranchNodes[i].id,\n target: falseBranchNodes[i + 1].id,\n sourceHandle: 'output',\n type: 'smoothstep',\n animated: false,\n style: { stroke: '#ef4444', strokeWidth: 1.5 },\n })\n }\n \n // Connect last false branch node to next main step (convergence)\n if (nextMainStep) {\n const lastFalseNode = falseBranchNodes[falseBranchNodes.length - 1]\n edges.push({\n id: `edge-false-${lastFalseNode.id}-to-${nextMainStep.id}`,\n source: lastFalseNode.id,\n target: nextMainStep.id,\n sourceHandle: 'output',\n type: 'smoothstep',\n animated: false,\n style: { stroke: '#ef4444', strokeWidth: 1.5 },\n })\n }\n } else if (nextMainStep) {\n // No false branch steps - connect conditional directly to next step via false handle\n edges.push({\n id: `edge-${conditionalId}-false-to-${nextMainStep.id}`,\n source: conditionalId,\n target: nextMainStep.id,\n sourceHandle: 'false',\n type: 'smoothstep',\n animated: false,\n label: 'False',\n labelStyle: { fill: '#ef4444', fontWeight: 600, fontSize: 11 },\n labelBgStyle: { fill: '#fef2f2', fillOpacity: 0.9 },\n labelBgPadding: [4, 6] as [number, number],\n labelBgBorderRadius: 4,\n style: { stroke: '#ef4444', strokeWidth: 2 },\n })\n }\n \n // Handle case where conditional has no branches - connect directly to next step\n if (trueBranchNodes.length === 0 && falseBranchNodes.length === 0 && nextMainStep) {\n edges.push({\n id: `edge-${conditionalId}-to-${nextMainStep.id}`,\n source: conditionalId,\n target: nextMainStep.id,\n sourceHandle: 'output',\n type: 'smoothstep',\n animated: false,\n })\n }\n }\n \n return edges\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Get default name for a step type\n */\nexport function getDefaultStepName(type: FlowStepType): string {\n const names: Record<FlowStepType, string> = {\n 'prompt': 'AI Prompt',\n 'fetch-url': 'Fetch URL',\n 'retrieve-record': 'Retrieve Record',\n 'fetch-github': 'Fetch GitHub',\n 'api-call': 'API Call',\n 'transform-data': 'Transform Data',\n 'conditional': 'Conditional',\n 'set-variable': 'Set Variable',\n 'upsert-record': 'Upsert Record',\n 'send-email': 'Send Email',\n 'send-text': 'Send Text',\n 'send-event': 'Send Event',\n 'send-stream': 'Send Stream',\n 'update-record': 'Update Record',\n 'search': 'Search',\n 'generate-embedding': 'Generate Embedding',\n 'vector-search': 'Vector Search',\n 'tool-call': 'Tool Call',\n 'wait-until': 'Wait Until',\n }\n \n return names[type] || type\n}\n\n/**\n * Create a new flow step with default configuration\n */\nexport function createDefaultStep(type: FlowStepType, order: number = 0): FlowStep {\n const id = `step-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n \n const baseStep = {\n id,\n type,\n name: getDefaultStepName(type),\n order,\n enabled: true,\n }\n \n switch (type) {\n case 'prompt':\n return {\n ...baseStep,\n config: {\n mode: 'instruction',\n model: '',\n userPrompt: '',\n responseFormat: 'text',\n outputVariable: `${type}_result`,\n },\n }\n \n case 'fetch-url':\n return {\n ...baseStep,\n config: {\n http: {\n url: '',\n method: 'GET',\n },\n responseType: 'json',\n outputVariable: 'fetch_result',\n },\n }\n \n case 'transform-data':\n return {\n ...baseStep,\n config: {\n script: '// Transform your data here\\nreturn { result: input }',\n outputVariable: 'transform_result',\n },\n }\n \n case 'conditional':\n return {\n ...baseStep,\n config: {\n condition: 'true',\n trueSteps: [],\n falseSteps: [],\n },\n }\n \n case 'send-email':\n return {\n ...baseStep,\n config: {\n from: 'no-reply@messages.runtype.com',\n to: '',\n subject: '',\n html: '',\n outputVariable: 'email_result',\n },\n }\n \n default:\n return {\n ...baseStep,\n config: {\n outputVariable: `${type.replace(/-/g, '_')}_result`,\n },\n }\n }\n}\n\n/**\n * Generate a unique step ID\n */\nexport function generateStepId(prefix: string = 'step'): string {\n return `${prefix}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n}\n\n/**\n * Clone a step with a new ID\n */\nexport function cloneStep(step: FlowStep): FlowStep {\n return {\n ...step,\n id: generateStepId(step.type),\n config: JSON.parse(JSON.stringify(step.config)),\n }\n}\n\n","import type { RuntypeNode, RuntypeEdge } from '../types'\n\n// ============================================================================\n// Layout Constants\n// ============================================================================\n\nconst DEFAULT_NODE_WIDTH = 280\nconst DEFAULT_NODE_HEIGHT = 150\nconst HORIZONTAL_SPACING = 100\nconst VERTICAL_SPACING = 80\nconst BRANCH_OFFSET = 350\n\n// ============================================================================\n// Auto Layout Algorithm\n// ============================================================================\n\nexport interface LayoutOptions {\n /** Direction of the flow */\n direction?: 'vertical' | 'horizontal'\n /** Starting position */\n startPosition?: { x: number; y: number }\n /** Node dimensions */\n nodeWidth?: number\n nodeHeight?: number\n /** Spacing between nodes */\n horizontalSpacing?: number\n verticalSpacing?: number\n /** Offset for conditional branches */\n branchOffset?: number\n}\n\n/**\n * Automatically layout nodes in a flow-like arrangement\n */\nexport function autoLayout(\n nodes: RuntypeNode[],\n edges: RuntypeEdge[],\n options: LayoutOptions = {}\n): RuntypeNode[] {\n const {\n direction = 'vertical',\n startPosition = { x: 400, y: 50 },\n nodeWidth = DEFAULT_NODE_WIDTH,\n nodeHeight = DEFAULT_NODE_HEIGHT,\n horizontalSpacing = HORIZONTAL_SPACING,\n verticalSpacing = VERTICAL_SPACING,\n branchOffset = BRANCH_OFFSET,\n } = options\n\n // Build adjacency map from edges\n const adjacencyMap = new Map<string, string[]>()\n const incomingMap = new Map<string, string[]>()\n \n for (const edge of edges) {\n const existing = adjacencyMap.get(edge.source) || []\n adjacencyMap.set(edge.source, [...existing, edge.target])\n \n const incoming = incomingMap.get(edge.target) || []\n incomingMap.set(edge.target, [...incoming, edge.source])\n }\n\n // Find root nodes (nodes with no incoming edges)\n const rootNodes = nodes.filter(node => {\n const incoming = incomingMap.get(node.id)\n return !incoming || incoming.length === 0\n })\n\n // If no root nodes found, use the first node\n if (rootNodes.length === 0 && nodes.length > 0) {\n rootNodes.push(nodes[0])\n }\n\n // Track positioned nodes\n const positionedNodes = new Map<string, { x: number; y: number }>()\n const visited = new Set<string>()\n\n // Position nodes using BFS\n const queue: Array<{ nodeId: string; x: number; y: number; depth: number }> = []\n \n // Start with root nodes\n let startX = startPosition.x\n for (const rootNode of rootNodes) {\n queue.push({ nodeId: rootNode.id, x: startX, y: startPosition.y, depth: 0 })\n startX += nodeWidth + horizontalSpacing\n }\n\n while (queue.length > 0) {\n const { nodeId, x, y, depth } = queue.shift()!\n \n if (visited.has(nodeId)) continue\n visited.add(nodeId)\n \n positionedNodes.set(nodeId, { x, y })\n \n // Get children\n const children = adjacencyMap.get(nodeId) || []\n const node = nodes.find(n => n.id === nodeId)\n \n // Check if this is a conditional node\n const isConditional = node?.data.step.type === 'conditional'\n \n if (isConditional && children.length > 0) {\n // Position conditional branches side by side\n const trueBranch = children.filter(c => c.includes('-true-'))\n const falseBranch = children.filter(c => c.includes('-false-'))\n const normalChildren = children.filter(c => !c.includes('-true-') && !c.includes('-false-'))\n \n // Position true branch to the right\n let trueY = y + nodeHeight + verticalSpacing\n for (const childId of trueBranch) {\n if (!visited.has(childId)) {\n queue.push({\n nodeId: childId,\n x: x + branchOffset,\n y: trueY,\n depth: depth + 1,\n })\n trueY += nodeHeight + verticalSpacing\n }\n }\n \n // Position false branch to the left\n let falseY = y + nodeHeight + verticalSpacing\n for (const childId of falseBranch) {\n if (!visited.has(childId)) {\n queue.push({\n nodeId: childId,\n x: x - branchOffset,\n y: falseY,\n depth: depth + 1,\n })\n falseY += nodeHeight + verticalSpacing\n }\n }\n \n // Position normal children below\n const maxBranchY = Math.max(trueY, falseY)\n let childY = maxBranchY\n for (const childId of normalChildren) {\n if (!visited.has(childId)) {\n queue.push({\n nodeId: childId,\n x,\n y: childY,\n depth: depth + 1,\n })\n childY += nodeHeight + verticalSpacing\n }\n }\n } else {\n // Position children in sequence\n let childY = y + nodeHeight + verticalSpacing\n let childX = x\n \n for (let i = 0; i < children.length; i++) {\n const childId = children[i]\n if (!visited.has(childId)) {\n if (direction === 'horizontal') {\n queue.push({\n nodeId: childId,\n x: childX + nodeWidth + horizontalSpacing,\n y,\n depth: depth + 1,\n })\n childX += nodeWidth + horizontalSpacing\n } else {\n queue.push({\n nodeId: childId,\n x,\n y: childY,\n depth: depth + 1,\n })\n childY += nodeHeight + verticalSpacing\n }\n }\n }\n }\n }\n\n // Apply positions to nodes\n return nodes.map(node => {\n const position = positionedNodes.get(node.id)\n if (position) {\n return {\n ...node,\n position,\n }\n }\n return node\n })\n}\n\n/**\n * Center nodes within a viewport\n */\nexport function centerNodes(\n nodes: RuntypeNode[],\n viewportWidth: number,\n viewportHeight: number\n): RuntypeNode[] {\n if (nodes.length === 0) return nodes\n\n // Calculate bounding box\n let minX = Infinity\n let maxX = -Infinity\n let minY = Infinity\n let maxY = -Infinity\n\n for (const node of nodes) {\n minX = Math.min(minX, node.position.x)\n maxX = Math.max(maxX, node.position.x + DEFAULT_NODE_WIDTH)\n minY = Math.min(minY, node.position.y)\n maxY = Math.max(maxY, node.position.y + DEFAULT_NODE_HEIGHT)\n }\n\n // Calculate offset to center\n const contentWidth = maxX - minX\n const contentHeight = maxY - minY\n const offsetX = (viewportWidth - contentWidth) / 2 - minX\n const offsetY = (viewportHeight - contentHeight) / 2 - minY\n\n // Apply offset\n return nodes.map(node => ({\n ...node,\n position: {\n x: node.position.x + offsetX,\n y: node.position.y + offsetY,\n },\n }))\n}\n\n/**\n * Align nodes to a grid\n */\nexport function snapToGrid(\n nodes: RuntypeNode[],\n gridSize: number = 20\n): RuntypeNode[] {\n return nodes.map(node => ({\n ...node,\n position: {\n x: Math.round(node.position.x / gridSize) * gridSize,\n y: Math.round(node.position.y / gridSize) * gridSize,\n },\n }))\n}\n\n/**\n * Get the bounding box of all nodes\n */\nexport function getNodesBoundingBox(nodes: RuntypeNode[]): {\n minX: number\n maxX: number\n minY: number\n maxY: number\n width: number\n height: number\n} {\n if (nodes.length === 0) {\n return { minX: 0, maxX: 0, minY: 0, maxY: 0, width: 0, height: 0 }\n }\n\n let minX = Infinity\n let maxX = -Infinity\n let minY = Infinity\n let maxY = -Infinity\n\n for (const node of nodes) {\n minX = Math.min(minX, node.position.x)\n maxX = Math.max(maxX, node.position.x + DEFAULT_NODE_WIDTH)\n minY = Math.min(minY, node.position.y)\n maxY = Math.max(maxY, node.position.y + DEFAULT_NODE_HEIGHT)\n }\n\n return {\n minX,\n maxX,\n minY,\n maxY,\n width: maxX - minX,\n height: maxY - minY,\n }\n}\n\n","import { useState, useCallback, useRef, useEffect } from 'react'\nimport {\n useNodesState,\n useEdgesState,\n addEdge,\n type OnNodesChange,\n type OnEdgesChange,\n type OnConnect,\n type Connection,\n} from '@xyflow/react'\nimport type { RuntypeClient } from '@runtypelabs/sdk'\nimport type {\n FlowStep,\n RuntypeNode,\n RuntypeEdge,\n SavedFlow,\n UseRuntypeFlowReturn,\n} from '../types'\nimport {\n flowStepsToNodes,\n nodesToFlowSteps,\n createEdgesFromNodes,\n createDefaultStep,\n} from '../utils/adapter'\nimport { autoLayout } from '../utils/layout'\nimport type { FlowStepType } from '../flow-step-types'\n\n// ============================================================================\n// Hook Options\n// ============================================================================\n\nexport interface UseRuntypeFlowOptions {\n /** Runtype API client instance */\n client: RuntypeClient\n /** Initial flow ID to load */\n flowId?: string\n /** Initial flow name */\n initialName?: string\n /** Initial flow description */\n initialDescription?: string\n /** Initial steps */\n initialSteps?: FlowStep[]\n /** Callback when flow changes */\n onChange?: (nodes: RuntypeNode[], edges: RuntypeEdge[]) => void\n /** Auto-layout nodes on load */\n autoLayoutOnLoad?: boolean\n}\n\n// ============================================================================\n// Main Hook\n// ============================================================================\n\nexport function useRuntypeFlow(options: UseRuntypeFlowOptions): UseRuntypeFlowReturn {\n const {\n client,\n flowId: initialFlowId,\n initialName = '',\n initialDescription = '',\n initialSteps = [],\n onChange,\n autoLayoutOnLoad = true,\n } = options\n\n // State\n const [flowId, setFlowId] = useState<string | null>(initialFlowId || null)\n const [flowName, setFlowName] = useState(initialName)\n const [flowDescription, setFlowDescription] = useState(initialDescription)\n const [isLoading, setIsLoading] = useState(false)\n const [isSaving, setIsSaving] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false)\n\n // React Flow state\n const [nodes, setNodes, onNodesChange] = useNodesState<RuntypeNode>([])\n const [edges, setEdges, onEdgesChange] = useEdgesState<RuntypeEdge>([])\n\n // Track last saved state for change detection\n const lastSavedState = useRef<string>('')\n\n // ============================================================================\n // Handlers\n // ============================================================================\n\n const handleStepChange = useCallback(\n (stepId: string, updates: Partial<FlowStep>) => {\n setNodes((nds) =>\n nds.map((node) => {\n if (node.id === stepId) {\n return {\n ...node,\n data: {\n ...node.data,\n step: {\n ...node.data.step,\n ...updates,\n config: updates.config\n ? { ...node.data.step.config, ...updates.config }\n : node.data.step.config,\n },\n },\n }\n }\n return node\n })\n )\n setHasUnsavedChanges(true)\n },\n [setNodes]\n )\n\n const handleStepDelete = useCallback(\n (stepId: string) => {\n setNodes((nds) => nds.filter((node) => node.id !== stepId))\n setEdges((eds) =>\n eds.filter((edge) => edge.source !== stepId && edge.target !== stepId)\n )\n setHasUnsavedChanges(true)\n },\n [setNodes, setEdges]\n )\n\n const handleConnect: OnConnect = useCallback(\n (connection: Connection) => {\n setEdges((eds) => addEdge({ ...connection, type: 'smoothstep' }, eds))\n setHasUnsavedChanges(true)\n },\n [setEdges]\n )\n\n // ============================================================================\n // API Operations\n // ============================================================================\n\n /**\n * Load a flow by ID\n */\n const loadFlow = useCallback(\n async (id: string) => {\n setIsLoading(true)\n setError(null)\n\n try {\n // Get flow with embedded steps\n const flow = await client.flows.get(id)\n\n // Use flow steps from the flow response (consolidated endpoint)\n const steps: FlowStep[] = Array.isArray(flow.flowSteps) ? flow.flowSteps : []\n\n // Convert to React Flow nodes\n let newNodes = flowStepsToNodes(steps, {\n onChange: handleStepChange,\n onDelete: handleStepDelete,\n })\n\n // Auto-layout if enabled\n if (autoLayoutOnLoad) {\n const newEdges = createEdgesFromNodes(newNodes)\n newNodes = autoLayout(newNodes, newEdges)\n }\n\n const newEdges = createEdgesFromNodes(newNodes)\n\n setFlowId(id)\n setFlowName(flow.name || '')\n setFlowDescription(flow.description || '')\n setNodes(newNodes)\n setEdges(newEdges)\n setHasUnsavedChanges(false)\n\n // Store last saved state\n lastSavedState.current = JSON.stringify(nodesToFlowSteps(newNodes))\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to load flow'))\n throw err\n } finally {\n setIsLoading(false)\n }\n },\n [client, handleStepChange, handleStepDelete, autoLayoutOnLoad, setNodes, setEdges]\n )\n\n /**\n * Save the current flow\n */\n const saveFlow = useCallback(async (): Promise<SavedFlow> => {\n if (!flowId) {\n throw new Error('No flow ID. Use createFlow() to create a new flow first.')\n }\n\n setIsSaving(true)\n setError(null)\n\n try {\n const steps = nodesToFlowSteps(nodes)\n\n // Update flow with metadata and steps in one atomic operation\n await client.flows.update(flowId, {\n name: flowName,\n description: flowDescription,\n flow_steps: steps.map(step => ({\n type: step.type,\n name: step.name,\n order: step.order,\n enabled: step.enabled,\n config: step.config,\n })),\n })\n\n setHasUnsavedChanges(false)\n lastSavedState.current = JSON.stringify(steps)\n\n return {\n id: flowId,\n name: flowName,\n description: flowDescription,\n steps,\n }\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to save flow'))\n throw err\n } finally {\n setIsSaving(false)\n }\n }, [flowId, flowName, flowDescription, nodes, client])\n\n /**\n * Create a new flow\n */\n const createFlow = useCallback(\n async (name: string, description?: string): Promise<SavedFlow> => {\n setIsSaving(true)\n setError(null)\n\n try {\n const flow = await client.flows.create({\n name,\n description,\n prompts: [],\n })\n\n setFlowId(flow.id)\n setFlowName(name)\n setFlowDescription(description || '')\n setNodes([])\n setEdges([])\n setHasUnsavedChanges(false)\n lastSavedState.current = '[]'\n\n return {\n id: flow.id,\n name,\n description,\n steps: [],\n }\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to create flow'))\n throw err\n } finally {\n setIsSaving(false)\n }\n },\n [client, setNodes, setEdges]\n )\n\n /**\n * Delete a step\n */\n const deleteStep = useCallback(\n (stepId: string) => {\n handleStepDelete(stepId)\n },\n [handleStepDelete]\n )\n\n /**\n * Update a step's configuration\n */\n const updateStep = useCallback(\n (stepId: string, updates: Partial<FlowStep>) => {\n handleStepChange(stepId, updates)\n },\n [handleStepChange]\n )\n\n /**\n * Add a new step\n */\n const addStep = useCallback(\n (type: FlowStepType, position?: { x: number; y: number }) => {\n const newStep = createDefaultStep(type, nodes.length)\n\n const newNode: RuntypeNode = {\n id: newStep.id,\n type: newStep.type,\n position: position || { x: 400, y: nodes.length * 230 + 50 },\n data: {\n step: newStep,\n label: newStep.name,\n onChange: handleStepChange,\n onDelete: handleStepDelete,\n },\n draggable: true,\n selectable: true,\n }\n\n setNodes((nds) => [...nds, newNode])\n\n // Add edge from previous node if exists\n if (nodes.length > 0) {\n const lastNode = nodes[nodes.length - 1]\n setEdges((eds) => [\n ...eds,\n {\n id: `edge-${lastNode.id}-${newNode.id}`,\n source: lastNode.id,\n target: newNode.id,\n type: 'smoothstep',\n },\n ])\n }\n\n setHasUnsavedChanges(true)\n },\n [nodes, setNodes, setEdges, handleStepChange, handleStepDelete]\n )\n\n // ============================================================================\n // Effects\n // ============================================================================\n\n // Load initial flow if flowId is provided\n useEffect(() => {\n if (initialFlowId) {\n loadFlow(initialFlowId)\n } else if (initialSteps.length > 0) {\n // Initialize with provided steps\n let newNodes = flowStepsToNodes(initialSteps, {\n onChange: handleStepChange,\n onDelete: handleStepDelete,\n })\n\n if (autoLayoutOnLoad) {\n const newEdges = createEdgesFromNodes(newNodes)\n newNodes = autoLayout(newNodes, newEdges)\n }\n\n const newEdges = createEdgesFromNodes(newNodes)\n\n setNodes(newNodes)\n setEdges(newEdges)\n }\n }, []) // Only run on mount\n\n // Notify onChange when nodes/edges change\n useEffect(() => {\n onChange?.(nodes, edges)\n }, [nodes, edges, onChange])\n\n // Detect unsaved changes\n useEffect(() => {\n const currentState = JSON.stringify(nodesToFlowSteps(nodes))\n if (lastSavedState.current && currentState !== lastSavedState.current) {\n setHasUnsavedChanges(true)\n }\n }, [nodes])\n\n // ============================================================================\n // Return\n // ============================================================================\n\n return {\n // React Flow state\n nodes,\n edges,\n onNodesChange: onNodesChange as unknown as (changes: unknown) => void,\n onEdgesChange: onEdgesChange as unknown as (changes: unknown) => void,\n onConnect: handleConnect as unknown as (connection: unknown) => void,\n\n // Flow metadata\n flowName,\n flowDescription,\n flowId,\n setFlowName,\n setFlowDescription,\n\n // API operations\n loadFlow,\n saveFlow,\n createFlow,\n deleteStep,\n updateStep,\n addStep,\n\n // Status\n isLoading,\n isSaving,\n error,\n hasUnsavedChanges,\n }\n}\n\nexport default useRuntypeFlow\n\n","import { useMemo, useCallback } from 'react'\nimport type {\n FlowStep,\n RuntypeNode,\n FlowValidationResult,\n ValidationError,\n ValidationWarning,\n PromptStepConfig,\n FetchUrlStepConfig,\n TransformDataStepConfig,\n ConditionalStepConfig,\n SendEmailStepConfig,\n} from '../types'\n\n// ============================================================================\n// Validation Rules\n// ============================================================================\n\ninterface ValidationRule {\n validate: (step: FlowStep, allSteps: FlowStep[]) => ValidationError[]\n}\n\ninterface WarningRule {\n check: (step: FlowStep, allSteps: FlowStep[]) => ValidationWarning[]\n}\n\n// ============================================================================\n// Prompt Step Validation\n// ============================================================================\n\nconst promptValidation: ValidationRule = {\n validate: (step) => {\n const errors: ValidationError[] = []\n const config = step.config as PromptStepConfig\n\n if (!config.model) {\n errors.push({\n stepId: step.id,\n field: 'model',\n message: 'Model is required',\n })\n }\n\n if (!config.userPrompt?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'userPrompt',\n message: 'User prompt is required',\n })\n }\n\n if (!config.outputVariable?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'outputVariable',\n message: 'Output variable is required',\n })\n }\n\n return errors\n },\n}\n\n// ============================================================================\n// Fetch URL Step Validation\n// ============================================================================\n\nconst fetchUrlValidation: ValidationRule = {\n validate: (step) => {\n const errors: ValidationError[] = []\n const config = step.config as FetchUrlStepConfig\n\n if (!config.http?.url?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'http.url',\n message: 'URL is required',\n })\n } else {\n // Validate URL format (allow template variables)\n const url = config.http.url\n if (!url.startsWith('http://') && !url.startsWith('https://') && !url.includes('{{')) {\n errors.push({\n stepId: step.id,\n field: 'http.url',\n message: 'URL must start with http:// or https://',\n })\n }\n }\n\n if (!config.outputVariable?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'outputVariable',\n message: 'Output variable is required',\n })\n }\n\n return errors\n },\n}\n\n// ============================================================================\n// Transform Data Step Validation\n// ============================================================================\n\nconst transformDataValidation: ValidationRule = {\n validate: (step) => {\n const errors: ValidationError[] = []\n const config = step.config as TransformDataStepConfig\n\n if (!config.script?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'script',\n message: 'Script is required',\n })\n }\n\n if (!config.outputVariable?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'outputVariable',\n message: 'Output variable is required',\n })\n }\n\n return errors\n },\n}\n\n// ============================================================================\n// Conditional Step Validation\n// ============================================================================\n\nconst conditionalValidation: ValidationRule = {\n validate: (step, allSteps) => {\n const errors: ValidationError[] = []\n const config = step.config as ConditionalStepConfig\n\n if (!config.condition?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'condition',\n message: 'Condition is required',\n })\n }\n\n // Validate nested steps\n if (config.trueSteps && config.trueSteps.length > 0) {\n for (const nestedStep of config.trueSteps) {\n const nestedErrors = validateStep(nestedStep, allSteps)\n errors.push(\n ...nestedErrors.map((e) => ({\n ...e,\n message: `True branch: ${e.message}`,\n }))\n )\n }\n }\n\n if (config.falseSteps && config.falseSteps.length > 0) {\n for (const nestedStep of config.falseSteps) {\n const nestedErrors = validateStep(nestedStep, allSteps)\n errors.push(\n ...nestedErrors.map((e) => ({\n ...e,\n message: `False branch: ${e.message}`,\n }))\n )\n }\n }\n\n return errors\n },\n}\n\n// ============================================================================\n// Send Email Step Validation\n// ============================================================================\n\nconst sendEmailValidation: ValidationRule = {\n validate: (step) => {\n const errors: ValidationError[] = []\n const config = step.config as SendEmailStepConfig\n\n if (!config.to?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'to',\n message: 'Recipient (To) is required',\n })\n } else {\n // Validate email format (allow template variables)\n const to = config.to\n if (!to.includes('@') && !to.includes('{{')) {\n errors.push({\n stepId: step.id,\n field: 'to',\n message: 'Invalid email address',\n })\n }\n }\n\n if (!config.subject?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'subject',\n message: 'Subject is required',\n })\n }\n\n if (!config.html?.trim() && !config.text?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'html',\n message: 'Email content (HTML or text) is required',\n })\n }\n\n if (!config.outputVariable?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'outputVariable',\n message: 'Output variable is required',\n })\n }\n\n return errors\n },\n}\n\n// ============================================================================\n// Warning Rules\n// ============================================================================\n\nconst outputVariableWarning: WarningRule = {\n check: (step, allSteps) => {\n const warnings: ValidationWarning[] = []\n const config = step.config as { outputVariable?: string }\n\n if (config.outputVariable) {\n // Check for duplicate output variables\n const duplicates = allSteps.filter(\n (s) =>\n s.id !== step.id &&\n (s.config as { outputVariable?: string }).outputVariable === config.outputVariable\n )\n\n if (duplicates.length > 0) {\n warnings.push({\n stepId: step.id,\n field: 'outputVariable',\n message: `Output variable \"${config.outputVariable}\" is also used by another step`,\n })\n }\n }\n\n return warnings\n },\n}\n\nconst emptyBranchWarning: WarningRule = {\n check: (step) => {\n const warnings: ValidationWarning[] = []\n\n if (step.type === 'conditional') {\n const config = step.config as ConditionalStepConfig\n\n if (!config.trueSteps || config.trueSteps.length === 0) {\n warnings.push({\n stepId: step.id,\n field: 'trueSteps',\n message: 'True branch has no steps',\n })\n }\n\n if (!config.falseSteps || config.falseSteps.length === 0) {\n warnings.push({\n stepId: step.id,\n field: 'falseSteps',\n message: 'False branch has no steps',\n })\n }\n }\n\n return warnings\n },\n}\n\n// ============================================================================\n// Validation Logic\n// ============================================================================\n\nconst validationRules: Record<string, ValidationRule> = {\n prompt: promptValidation,\n 'fetch-url': fetchUrlValidation,\n 'transform-data': transformDataValidation,\n conditional: conditionalValidation,\n 'send-email': sendEmailValidation,\n}\n\nconst warningRules: WarningRule[] = [outputVariableWarning, emptyBranchWarning]\n\nfunction validateStep(step: FlowStep, allSteps: FlowStep[]): ValidationError[] {\n const errors: ValidationError[] = []\n\n // Common validation\n if (!step.name?.trim()) {\n errors.push({\n stepId: step.id,\n field: 'name',\n message: 'Step name is required',\n })\n }\n\n // Type-specific validation\n const rule = validationRules[step.type]\n if (rule) {\n errors.push(...rule.validate(step, allSteps))\n }\n\n return errors\n}\n\nfunction checkWarnings(step: FlowStep, allSteps: FlowStep[]): ValidationWarning[] {\n const warnings: ValidationWarning[] = []\n\n for (const rule of warningRules) {\n warnings.push(...rule.check(step, allSteps))\n }\n\n return warnings\n}\n\n// ============================================================================\n// Hook\n// ============================================================================\n\nexport interface UseFlowValidationOptions {\n /** Steps to validate */\n steps?: FlowStep[]\n /** Nodes to validate (will extract steps from nodes) */\n nodes?: RuntypeNode[]\n}\n\nexport interface UseFlowValidationReturn {\n /** Validation result */\n result: FlowValidationResult\n /** Validate a specific step */\n validateStep: (step: FlowStep) => ValidationError[]\n /** Check if a specific step is valid */\n isStepValid: (stepId: string) => boolean\n /** Get errors for a specific step */\n getStepErrors: (stepId: string) => ValidationError[]\n /** Get warnings for a specific step */\n getStepWarnings: (stepId: string) => ValidationWarning[]\n}\n\nexport function useFlowValidation(options: UseFlowValidationOptions): UseFlowValidationReturn {\n const { steps: providedSteps, nodes } = options\n\n // Extract steps from nodes if not provided directly\n const steps = useMemo(() => {\n if (providedSteps) return providedSteps\n if (nodes) return nodes.map((n) => n.data.step)\n return []\n }, [providedSteps, nodes])\n\n // Perform validation\n const result = useMemo((): FlowValidationResult => {\n const errors: ValidationError[] = []\n const warnings: ValidationWarning[] = []\n\n for (const step of steps) {\n errors.push(...validateStep(step, steps))\n warnings.push(...checkWarnings(step, steps))\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n warnings,\n }\n }, [steps])\n\n // Helper functions\n const validateStepFn = useCallback(\n (step: FlowStep) => validateStep(step, steps),\n [steps]\n )\n\n const isStepValid = useCallback(\n (stepId: string) => {\n return !result.errors.some((e) => e.stepId === stepId)\n },\n [result.errors]\n )\n\n const getStepErrors = useCallback(\n (stepId: string) => {\n return result.errors.filter((e) => e.stepId === stepId)\n },\n [result.errors]\n )\n\n const getStepWarnings = useCallback(\n (stepId: string) => {\n return result.warnings.filter((w) => w.stepId === stepId)\n },\n [result.warnings]\n )\n\n return {\n result,\n validateStep: validateStepFn,\n isStepValid,\n getStepErrors,\n getStepWarnings,\n }\n}\n\nexport default useFlowValidation\n\n","import React, { memo } from 'react'\nimport { Handle, Position } from '@xyflow/react'\nimport type { RuntypeNodeData, FlowStep } from '../../types'\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface BaseNodeProps {\n /** Node data containing the step */\n data: RuntypeNodeData\n /** Whether the node is selected */\n selected?: boolean\n /** Node ID */\n id: string\n /** Node type label */\n typeLabel: string\n /** Icon component to display */\n icon: React.ReactNode\n /** Header color (Tailwind class or CSS color) */\n headerColor?: string\n /** Whether to show source handle */\n showSourceHandle?: boolean\n /** Whether to show target handle */\n showTargetHandle?: boolean\n /** Additional source handles for conditional branches */\n additionalSourceHandles?: Array<{\n id: string\n position: Position\n label?: string\n color?: string\n style?: React.CSSProperties\n }>\n /** Children to render in the node body */\n children: React.ReactNode\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n container: (selected: boolean) => ({\n minWidth: '280px',\n maxWidth: '320px',\n backgroundColor: '#ffffff',\n borderRadius: '12px',\n border: selected ? '2px solid #6366f1' : '1px solid #e5e7eb',\n boxShadow: selected\n ? '0 0 0 2px rgba(99, 102, 241, 0.2), 0 4px 6px -1px rgba(0, 0, 0, 0.1)'\n : '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n overflow: 'hidden',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n }),\n header: (color: string) => ({\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 12px',\n backgroundColor: color,\n borderBottom: '1px solid rgba(0, 0, 0, 0.05)',\n }),\n iconWrapper: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: '6px',\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n color: '#374151',\n },\n headerContent: {\n flex: 1,\n minWidth: 0,\n },\n typeLabel: {\n fontSize: '10px',\n fontWeight: 600,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: 'rgba(0, 0, 0, 0.5)',\n marginBottom: '2px',\n },\n stepName: {\n fontSize: '13px',\n fontWeight: 600,\n color: '#1f2937',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n },\n body: {\n padding: '12px',\n },\n handle: {\n width: '12px',\n height: '12px',\n borderRadius: '50%',\n border: '2px solid #ffffff',\n },\n targetHandle: {\n backgroundColor: '#6366f1',\n },\n sourceHandle: {\n backgroundColor: '#10b981',\n },\n deleteButton: {\n padding: '4px',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n color: '#9ca3af',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'color 0.15s ease, background-color 0.15s ease',\n },\n enabledBadge: (enabled: boolean) => ({\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 6px',\n borderRadius: '4px',\n fontSize: '10px',\n fontWeight: 500,\n backgroundColor: enabled ? 'rgba(16, 185, 129, 0.1)' : 'rgba(239, 68, 68, 0.1)',\n color: enabled ? '#059669' : '#dc2626',\n }),\n}\n\n// ============================================================================\n// Header Color Presets\n// ============================================================================\n\nexport const NODE_HEADER_COLORS: Record<string, string> = {\n prompt: '#f3e8ff', // Purple tint\n 'fetch-url': '#dbeafe', // Blue tint\n 'transform-data': '#fef3c7', // Amber tint\n conditional: '#fce7f3', // Pink tint\n 'send-email': '#d1fae5', // Green tint\n default: '#f3f4f6', // Gray tint\n}\n\n// ============================================================================\n// Base Node Component\n// ============================================================================\n\nexport const BaseNode = memo(function BaseNode({\n data,\n selected = false,\n id,\n typeLabel,\n icon,\n headerColor,\n showSourceHandle = true,\n showTargetHandle = true,\n additionalSourceHandles,\n children,\n}: BaseNodeProps) {\n const { step, onChange, onDelete } = data\n const color = headerColor || NODE_HEADER_COLORS[step.type] || NODE_HEADER_COLORS.default\n\n const handleDelete = (e: React.MouseEvent) => {\n e.stopPropagation()\n onDelete?.(id)\n }\n\n return (\n <div style={styles.container(selected)}>\n {/* Target Handle (input) - on left for horizontal flow */}\n {showTargetHandle && (\n <Handle\n type=\"target\"\n position={Position.Left}\n style={{ ...styles.handle, ...styles.targetHandle }}\n />\n )}\n\n {/* Header */}\n <div style={styles.header(color)}>\n <div style={styles.iconWrapper}>{icon}</div>\n <div style={styles.headerContent}>\n <div style={styles.typeLabel}>{typeLabel}</div>\n <div style={styles.stepName} title={step.name}>\n {step.name || 'Untitled Step'}\n </div>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span style={styles.enabledBadge(step.enabled)}>\n {step.enabled ? 'Active' : 'Disabled'}\n </span>\n {onDelete && (\n <button\n style={styles.deleteButton}\n onClick={handleDelete}\n title=\"Delete step\"\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'rgba(239, 68, 68, 0.1)'\n e.currentTarget.style.color = '#dc2626'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.color = '#9ca3af'\n }}\n >\n <DeleteIcon />\n </button>\n )}\n </div>\n </div>\n\n {/* Body - nodrag class prevents React Flow from intercepting events */}\n <div style={styles.body} className=\"nodrag\">{children}</div>\n\n {/* Source Handle (output) - on right for horizontal flow */}\n {showSourceHandle && (\n <Handle\n type=\"source\"\n position={Position.Right}\n id=\"output\"\n style={{ ...styles.handle, ...styles.sourceHandle }}\n />\n )}\n\n {/* Additional source handles for conditional branches */}\n {additionalSourceHandles?.map((handle) => (\n <Handle\n key={handle.id}\n type=\"source\"\n position={handle.position}\n id={handle.id}\n style={{\n ...styles.handle,\n backgroundColor: handle.color || '#10b981',\n ...handle.style,\n }}\n />\n ))}\n </div>\n )\n})\n\n// ============================================================================\n// Icon Components\n// ============================================================================\n\nconst DeleteIcon = () => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 6h18\" />\n <path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" />\n <path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n </svg>\n)\n\n// Export common icons for use in step nodes\nexport const BrainIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z\" />\n <path d=\"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z\" />\n <path d=\"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4\" />\n <path d=\"M17.599 6.5a3 3 0 0 0 .399-1.375\" />\n <path d=\"M6.003 5.125A3 3 0 0 0 6.401 6.5\" />\n <path d=\"M3.477 10.896a4 4 0 0 1 .585-.396\" />\n <path d=\"M19.938 10.5a4 4 0 0 1 .585.396\" />\n <path d=\"M6 18a4 4 0 0 1-1.967-.516\" />\n <path d=\"M19.967 17.484A4 4 0 0 1 18 18\" />\n </svg>\n)\n\nexport const GlobeIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </svg>\n)\n\nexport const CodeIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"16 18 22 12 16 6\" />\n <polyline points=\"8 6 2 12 8 18\" />\n </svg>\n)\n\nexport const GitBranchIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\" />\n <circle cx=\"18\" cy=\"6\" r=\"3\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <path d=\"M18 9a9 9 0 0 1-9 9\" />\n </svg>\n)\n\nexport const MailIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\" />\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\n </svg>\n)\n\nexport default BaseNode\n\n","import React, { memo, useCallback, useState } from 'react'\nimport type { NodeProps } from '@xyflow/react'\nimport { BaseNode, BrainIcon, NODE_HEADER_COLORS } from './BaseNode'\nimport type { RuntypeNodeData, PromptStepConfig, FlowStep } from '../../types'\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n field: {\n marginBottom: '12px',\n },\n label: {\n display: 'block',\n fontSize: '11px',\n fontWeight: 600,\n color: '#6b7280',\n marginBottom: '4px',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.03em',\n },\n input: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n },\n textarea: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n resize: 'vertical' as const,\n minHeight: '60px',\n fontFamily: 'inherit',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n },\n select: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n cursor: 'pointer',\n },\n row: {\n display: 'flex',\n gap: '8px',\n },\n modeBadge: (isAgent: boolean) => ({\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 8px',\n borderRadius: '12px',\n fontSize: '10px',\n fontWeight: 600,\n backgroundColor: isAgent ? '#dbeafe' : '#f3e8ff',\n color: isAgent ? '#1d4ed8' : '#7c3aed',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n }),\n preview: {\n fontSize: '11px',\n color: '#6b7280',\n backgroundColor: '#f3f4f6',\n padding: '8px',\n borderRadius: '6px',\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap' as const,\n wordBreak: 'break-word' as const,\n maxHeight: '80px',\n overflow: 'auto',\n },\n}\n\n// ============================================================================\n// Prompt Node Component\n// ============================================================================\n\nexport const PromptNode = memo(function PromptNode(props: NodeProps) {\n const { data, selected, id } = props as NodeProps & { data: RuntypeNodeData }\n const { step, onChange } = data\n const config = step.config as PromptStepConfig\n \n const [isExpanded, setIsExpanded] = useState(false)\n\n const handleChange = useCallback(\n (field: keyof PromptStepConfig, value: unknown) => {\n onChange?.(id, {\n config: {\n ...config,\n [field]: value,\n },\n } as Partial<FlowStep>)\n },\n [id, config, onChange]\n )\n\n const handleNameChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(id, { name: e.target.value })\n },\n [id, onChange]\n )\n\n const isAgentMode = config.mode === 'agent'\n\n return (\n <BaseNode\n data={data}\n selected={selected}\n id={id}\n typeLabel=\"AI Prompt\"\n icon={<BrainIcon />}\n headerColor={NODE_HEADER_COLORS.prompt}\n >\n <div style={styles.field}>\n <label style={styles.label}>Step Name</label>\n <input\n style={styles.input}\n value={step.name}\n onChange={handleNameChange}\n placeholder=\"Enter step name\"\n onKeyDown={(e) => e.stopPropagation()}\n onFocus={(e) => {\n e.target.style.borderColor = '#6366f1'\n e.target.style.boxShadow = '0 0 0 2px rgba(99, 102, 241, 0.1)'\n }}\n onBlur={(e) => {\n e.target.style.borderColor = '#e5e7eb'\n e.target.style.boxShadow = 'none'\n }}\n />\n </div>\n\n <div style={styles.field}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '4px' }}>\n <label style={styles.label}>Mode</label>\n <span style={styles.modeBadge(isAgentMode)}>\n {isAgentMode ? 'Agent' : 'Instruction'}\n </span>\n </div>\n <select\n style={styles.select}\n value={config.mode || 'instruction'}\n onChange={(e) => handleChange('mode', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"instruction\">Instruction Mode</option>\n <option value=\"agent\">Agent Mode</option>\n </select>\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>Model</label>\n <input\n style={styles.input}\n value={config.model || ''}\n onChange={(e) => handleChange('model', e.target.value)}\n placeholder=\"e.g., gpt-4, claude-3-sonnet\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>User Prompt</label>\n <textarea\n style={styles.textarea}\n value={config.userPrompt || ''}\n onChange={(e) => handleChange('userPrompt', e.target.value)}\n placeholder=\"Enter your prompt...\"\n rows={3}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n {isExpanded && (\n <>\n {config.systemPrompt !== undefined && (\n <div style={styles.field}>\n <label style={styles.label}>System Prompt</label>\n <textarea\n style={styles.textarea}\n value={config.systemPrompt || ''}\n onChange={(e) => handleChange('systemPrompt', e.target.value)}\n placeholder=\"System instructions...\"\n rows={2}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n )}\n\n <div style={styles.row}>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>Response Format</label>\n <select\n style={styles.select}\n value={config.responseFormat || 'text'}\n onChange={(e) => handleChange('responseFormat', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"text\">Text</option>\n <option value=\"json\">JSON</option>\n <option value=\"markdown\">Markdown</option>\n <option value=\"html\">HTML</option>\n </select>\n </div>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>Temperature</label>\n <input\n style={styles.input}\n type=\"number\"\n min=\"0\"\n max=\"2\"\n step=\"0.1\"\n value={config.temperature ?? 0.7}\n onChange={(e) => handleChange('temperature', parseFloat(e.target.value))}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>Output Variable</label>\n <input\n style={styles.input}\n value={config.outputVariable || ''}\n onChange={(e) => handleChange('outputVariable', e.target.value)}\n placeholder=\"result\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n </>\n )}\n\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n style={{\n width: '100%',\n padding: '6px',\n fontSize: '11px',\n color: '#6366f1',\n backgroundColor: 'transparent',\n border: '1px dashed #e5e7eb',\n borderRadius: '6px',\n cursor: 'pointer',\n marginTop: '4px',\n }}\n >\n {isExpanded ? 'Show Less' : 'Show More Options'}\n </button>\n </BaseNode>\n )\n})\n\nexport default PromptNode\n\n","import React, { memo, useCallback, useState } from 'react'\nimport type { NodeProps } from '@xyflow/react'\nimport { BaseNode, GlobeIcon, NODE_HEADER_COLORS } from './BaseNode'\nimport type { RuntypeNodeData, FetchUrlStepConfig, FlowStep } from '../../types'\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n field: {\n marginBottom: '12px',\n },\n label: {\n display: 'block',\n fontSize: '11px',\n fontWeight: 600,\n color: '#6b7280',\n marginBottom: '4px',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.03em',\n },\n input: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n },\n textarea: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n resize: 'vertical' as const,\n minHeight: '60px',\n fontFamily: 'monospace',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n },\n select: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n cursor: 'pointer',\n },\n row: {\n display: 'flex',\n gap: '8px',\n },\n methodBadge: (method: string) => {\n const colors: Record<string, { bg: string; text: string }> = {\n GET: { bg: '#d1fae5', text: '#059669' },\n POST: { bg: '#dbeafe', text: '#1d4ed8' },\n PUT: { bg: '#fef3c7', text: '#d97706' },\n DELETE: { bg: '#fee2e2', text: '#dc2626' },\n PATCH: { bg: '#e0e7ff', text: '#4f46e5' },\n }\n const color = colors[method] || colors.GET\n return {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 8px',\n borderRadius: '4px',\n fontSize: '10px',\n fontWeight: 700,\n backgroundColor: color.bg,\n color: color.text,\n fontFamily: 'monospace',\n }\n },\n urlPreview: {\n fontSize: '11px',\n color: '#6b7280',\n backgroundColor: '#f3f4f6',\n padding: '6px 8px',\n borderRadius: '4px',\n fontFamily: 'monospace',\n wordBreak: 'break-all' as const,\n marginTop: '4px',\n },\n}\n\n// ============================================================================\n// Fetch URL Node Component\n// ============================================================================\n\nexport const FetchUrlNode = memo(function FetchUrlNode(props: NodeProps) {\n const { data, selected, id } = props as NodeProps & { data: RuntypeNodeData }\n const { step, onChange } = data\n const config = step.config as FetchUrlStepConfig\n \n const [isExpanded, setIsExpanded] = useState(false)\n\n const handleChange = useCallback(\n (field: string, value: unknown) => {\n if (field.startsWith('http.')) {\n const httpField = field.replace('http.', '')\n onChange?.(id, {\n config: {\n ...config,\n http: {\n ...config.http,\n [httpField]: value,\n },\n },\n } as Partial<FlowStep>)\n } else {\n onChange?.(id, {\n config: {\n ...config,\n [field]: value,\n },\n } as Partial<FlowStep>)\n }\n },\n [id, config, onChange]\n )\n\n const handleNameChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n // console.log('[FetchUrlNode] Name change:', e.target.value)\n onChange?.(id, { name: e.target.value })\n },\n [id, onChange]\n )\n\n const method = config.http?.method || 'GET'\n\n return (\n <BaseNode\n data={data}\n selected={selected}\n id={id}\n typeLabel=\"Fetch URL\"\n icon={<GlobeIcon />}\n headerColor={NODE_HEADER_COLORS['fetch-url']}\n >\n <div style={styles.field}>\n <label style={styles.label}>Step Name</label>\n <input\n style={styles.input}\n value={step.name}\n onChange={handleNameChange}\n placeholder=\"Enter step name\"\n onKeyDown={(e) => {\n // console.log('[FetchUrlNode] KeyDown:', e.key)\n e.stopPropagation()\n }}\n // onInput={(e) => console.log('[FetchUrlNode] Input event:', (e.target as HTMLInputElement).value)}\n />\n </div>\n\n <div style={styles.field}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '4px' }}>\n <label style={styles.label}>Method</label>\n <span style={styles.methodBadge(method)}>{method}</span>\n </div>\n <select\n style={styles.select}\n value={method}\n onChange={(e) => handleChange('http.method', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"GET\">GET</option>\n <option value=\"POST\">POST</option>\n <option value=\"PUT\">PUT</option>\n <option value=\"DELETE\">DELETE</option>\n <option value=\"PATCH\">PATCH</option>\n </select>\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>URL</label>\n <input\n style={styles.input}\n value={config.http?.url || ''}\n onChange={(e) => handleChange('http.url', e.target.value)}\n placeholder=\"https://api.example.com/endpoint\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n {config.http?.url && (\n <div style={styles.urlPreview}>\n {config.http.url}\n </div>\n )}\n </div>\n\n {isExpanded && (\n <>\n {(method === 'POST' || method === 'PUT' || method === 'PATCH') && (\n <div style={styles.field}>\n <label style={styles.label}>Request Body</label>\n <textarea\n style={styles.textarea}\n value={config.http?.body || ''}\n onChange={(e) => handleChange('http.body', e.target.value)}\n placeholder='{\"key\": \"value\"}'\n rows={3}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n )}\n\n <div style={styles.field}>\n <label style={styles.label}>Headers (JSON)</label>\n <textarea\n style={styles.textarea}\n value={config.http?.headers ? JSON.stringify(config.http.headers, null, 2) : ''}\n onChange={(e) => {\n try {\n const headers = JSON.parse(e.target.value)\n handleChange('http.headers', headers)\n } catch {\n // Invalid JSON, don't update\n }\n }}\n placeholder='{\"Content-Type\": \"application/json\"}'\n rows={2}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.row}>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>Response Type</label>\n <select\n style={styles.select}\n value={config.responseType || 'json'}\n onChange={(e) => handleChange('responseType', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"json\">JSON</option>\n <option value=\"text\">Text</option>\n <option value=\"xml\">XML</option>\n </select>\n </div>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>On Error</label>\n <select\n style={styles.select}\n value={config.errorHandling || 'fail'}\n onChange={(e) => handleChange('errorHandling', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"fail\">Fail</option>\n <option value=\"continue\">Continue</option>\n <option value=\"default\">Use Default</option>\n </select>\n </div>\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>Output Variable</label>\n <input\n style={styles.input}\n value={config.outputVariable || ''}\n onChange={(e) => handleChange('outputVariable', e.target.value)}\n placeholder=\"api_response\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n </>\n )}\n\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n style={{\n width: '100%',\n padding: '6px',\n fontSize: '11px',\n color: '#6366f1',\n backgroundColor: 'transparent',\n border: '1px dashed #e5e7eb',\n borderRadius: '6px',\n cursor: 'pointer',\n marginTop: '4px',\n }}\n >\n {isExpanded ? 'Show Less' : 'Show More Options'}\n </button>\n </BaseNode>\n )\n})\n\nexport default FetchUrlNode\n\n","import React, { memo, useCallback, useState } from 'react'\nimport type { NodeProps } from '@xyflow/react'\nimport { BaseNode, CodeIcon, NODE_HEADER_COLORS } from './BaseNode'\nimport type { RuntypeNodeData, TransformDataStepConfig, FlowStep } from '../../types'\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n field: {\n marginBottom: '12px',\n },\n label: {\n display: 'block',\n fontSize: '11px',\n fontWeight: 600,\n color: '#6b7280',\n marginBottom: '4px',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.03em',\n },\n input: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n },\n codeArea: {\n width: '100%',\n padding: '10px',\n fontSize: '11px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#1e1e1e',\n color: '#d4d4d4',\n outline: 'none',\n resize: 'vertical' as const,\n minHeight: '100px',\n fontFamily: '\"Fira Code\", \"Monaco\", \"Consolas\", monospace',\n lineHeight: 1.5,\n tabSize: 2,\n },\n select: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n cursor: 'pointer',\n },\n row: {\n display: 'flex',\n gap: '8px',\n },\n languageBadge: (language: string) => {\n const colors: Record<string, { bg: string; text: string }> = {\n javascript: { bg: '#fef3c7', text: '#d97706' },\n typescript: { bg: '#dbeafe', text: '#1d4ed8' },\n python: { bg: '#d1fae5', text: '#059669' },\n }\n const color = colors[language] || colors.javascript\n return {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 8px',\n borderRadius: '4px',\n fontSize: '10px',\n fontWeight: 600,\n backgroundColor: color.bg,\n color: color.text,\n textTransform: 'capitalize' as const,\n }\n },\n lineNumbers: {\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'flex-end',\n paddingRight: '8px',\n marginRight: '8px',\n borderRight: '1px solid #3f3f46',\n color: '#6b7280',\n fontSize: '11px',\n fontFamily: '\"Fira Code\", \"Monaco\", \"Consolas\", monospace',\n lineHeight: 1.5,\n userSelect: 'none' as const,\n },\n codePreview: {\n fontSize: '10px',\n color: '#9ca3af',\n marginTop: '4px',\n },\n}\n\n// ============================================================================\n// Code Node Component\n// ============================================================================\n\nexport const CodeNode = memo(function CodeNode(props: NodeProps) {\n const { data, selected, id } = props as NodeProps & { data: RuntypeNodeData }\n const { step, onChange } = data\n const config = step.config as TransformDataStepConfig\n \n const [isExpanded, setIsExpanded] = useState(false)\n\n const handleChange = useCallback(\n (field: keyof TransformDataStepConfig, value: unknown) => {\n onChange?.(id, {\n config: {\n ...config,\n [field]: value,\n },\n } as Partial<FlowStep>)\n },\n [id, config, onChange]\n )\n\n const handleNameChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(id, { name: e.target.value })\n },\n [id, onChange]\n )\n\n const language = config.language || 'javascript'\n const lineCount = (config.script || '').split('\\n').length\n\n return (\n <BaseNode\n data={data}\n selected={selected}\n id={id}\n typeLabel=\"Run Code\"\n icon={<CodeIcon />}\n headerColor={NODE_HEADER_COLORS['transform-data']}\n >\n <div style={styles.field}>\n <label style={styles.label}>Step Name</label>\n <input\n style={styles.input}\n value={step.name}\n onChange={handleNameChange}\n placeholder=\"Enter step name\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.field}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '4px' }}>\n <label style={styles.label}>Code</label>\n <span style={styles.languageBadge(language)}>{language}</span>\n </div>\n <textarea\n style={styles.codeArea}\n value={config.script || ''}\n onChange={(e) => handleChange('script', e.target.value)}\n placeholder={`// Write your ${language} code here\\nreturn { result: input }`}\n spellCheck={false}\n onKeyDown={(e) => e.stopPropagation()}\n />\n <div style={styles.codePreview}>\n {lineCount} line{lineCount !== 1 ? 's' : ''}\n </div>\n </div>\n\n {isExpanded && (\n <>\n <div style={styles.row}>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>Language</label>\n <select\n style={styles.select}\n value={language}\n onChange={(e) => handleChange('language', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"javascript\">JavaScript</option>\n <option value=\"typescript\">TypeScript</option>\n <option value=\"python\">Python</option>\n </select>\n </div>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>Sandbox</label>\n <select\n style={styles.select}\n value={config.sandboxProvider || 'quickjs'}\n onChange={(e) => handleChange('sandboxProvider', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"quickjs\">QuickJS (Fast)</option>\n <option value=\"daytona\">Daytona (Full)</option>\n </select>\n </div>\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>On Error</label>\n <select\n style={styles.select}\n value={config.errorHandling || 'fail'}\n onChange={(e) => handleChange('errorHandling', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"fail\">Fail</option>\n <option value=\"continue\">Continue</option>\n <option value=\"default\">Use Default</option>\n </select>\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>Output Variable</label>\n <input\n style={styles.input}\n value={config.outputVariable || ''}\n onChange={(e) => handleChange('outputVariable', e.target.value)}\n placeholder=\"transform_result\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n </>\n )}\n\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n style={{\n width: '100%',\n padding: '6px',\n fontSize: '11px',\n color: '#6366f1',\n backgroundColor: 'transparent',\n border: '1px dashed #e5e7eb',\n borderRadius: '6px',\n cursor: 'pointer',\n marginTop: '4px',\n }}\n >\n {isExpanded ? 'Show Less' : 'Show More Options'}\n </button>\n </BaseNode>\n )\n})\n\nexport default CodeNode\n\n","import React, { memo, useCallback, useState } from 'react'\nimport type { NodeProps } from '@xyflow/react'\nimport { Position } from '@xyflow/react'\nimport { BaseNode, GitBranchIcon, NODE_HEADER_COLORS } from './BaseNode'\nimport type { RuntypeNodeData, ConditionalStepConfig, FlowStep } from '../../types'\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n field: {\n marginBottom: '12px',\n },\n label: {\n display: 'block',\n fontSize: '11px',\n fontWeight: 600,\n color: '#6b7280',\n marginBottom: '4px',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.03em',\n },\n input: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n },\n conditionArea: {\n width: '100%',\n padding: '10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#fef7ee',\n color: '#92400e',\n outline: 'none',\n resize: 'vertical' as const,\n minHeight: '60px',\n fontFamily: '\"Fira Code\", \"Monaco\", \"Consolas\", monospace',\n lineHeight: 1.5,\n },\n branchInfo: {\n display: 'flex',\n gap: '12px',\n marginTop: '8px',\n },\n branchCard: (type: 'true' | 'false') => ({\n flex: 1,\n padding: '10px',\n borderRadius: '8px',\n backgroundColor: type === 'true' ? '#d1fae5' : '#fee2e2',\n border: `1px solid ${type === 'true' ? '#a7f3d0' : '#fecaca'}`,\n }),\n branchLabel: (type: 'true' | 'false') => ({\n fontSize: '10px',\n fontWeight: 700,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: type === 'true' ? '#059669' : '#dc2626',\n marginBottom: '4px',\n }),\n branchCount: {\n fontSize: '18px',\n fontWeight: 700,\n color: '#1f2937',\n },\n branchCountLabel: {\n fontSize: '10px',\n color: '#6b7280',\n },\n helpText: {\n fontSize: '10px',\n color: '#9ca3af',\n marginTop: '4px',\n fontStyle: 'italic' as const,\n },\n}\n\n// ============================================================================\n// Conditional Node Component\n// ============================================================================\n\nexport const ConditionalNode = memo(function ConditionalNode(props: NodeProps) {\n const { data, selected, id } = props as NodeProps & { data: RuntypeNodeData }\n const { step, onChange } = data\n const config = step.config as ConditionalStepConfig\n \n const [isExpanded, setIsExpanded] = useState(false)\n\n const handleChange = useCallback(\n (field: keyof ConditionalStepConfig, value: unknown) => {\n onChange?.(id, {\n config: {\n ...config,\n [field]: value,\n },\n } as Partial<FlowStep>)\n },\n [id, config, onChange]\n )\n\n const handleNameChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(id, { name: e.target.value })\n },\n [id, onChange]\n )\n\n const trueStepsCount = config.trueSteps?.length || 0\n const falseStepsCount = config.falseSteps?.length || 0\n\n return (\n <BaseNode\n data={data}\n selected={selected}\n id={id}\n typeLabel=\"Conditional\"\n icon={<GitBranchIcon />}\n headerColor={NODE_HEADER_COLORS.conditional}\n showSourceHandle={false}\n additionalSourceHandles={[\n {\n id: 'true',\n position: Position.Right,\n label: 'True',\n color: '#22c55e',\n style: { top: '40%' },\n },\n {\n id: 'false',\n position: Position.Right,\n label: 'False',\n color: '#ef4444',\n style: { top: '60%' },\n },\n ]}\n >\n <div style={styles.field}>\n <label style={styles.label}>Step Name</label>\n <input\n style={styles.input}\n value={step.name}\n onChange={handleNameChange}\n placeholder=\"Enter step name\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>Condition (JavaScript)</label>\n <textarea\n style={styles.conditionArea}\n value={config.condition || ''}\n onChange={(e) => handleChange('condition', e.target.value)}\n placeholder=\"user_type === 'premium'\"\n spellCheck={false}\n onKeyDown={(e) => e.stopPropagation()}\n />\n <div style={styles.helpText}>\n Access variables directly: <code>variable_name</code>, <code>_record.metadata.field</code>\n </div>\n </div>\n\n <div style={styles.branchInfo}>\n <div style={styles.branchCard('true')}>\n <div style={styles.branchLabel('true')}>\n <TrueIcon /> True Branch\n </div>\n <div style={styles.branchCount}>{trueStepsCount}</div>\n <div style={styles.branchCountLabel}>\n step{trueStepsCount !== 1 ? 's' : ''}\n </div>\n </div>\n <div style={styles.branchCard('false')}>\n <div style={styles.branchLabel('false')}>\n <FalseIcon /> False Branch\n </div>\n <div style={styles.branchCount}>{falseStepsCount}</div>\n <div style={styles.branchCountLabel}>\n step{falseStepsCount !== 1 ? 's' : ''}\n </div>\n </div>\n </div>\n\n {isExpanded && (\n <div style={{ marginTop: '12px' }}>\n <div style={styles.field}>\n <label style={styles.label}>Condition Examples</label>\n <div style={{ fontSize: '11px', color: '#6b7280', lineHeight: 1.6 }}>\n <div><code>status === 'active'</code> - Check equality</div>\n <div><code>count {'>'} 10</code> - Numeric comparison</div>\n <div><code>data && data.length {'>'} 0</code> - Check array</div>\n <div><code>_record.metadata.type === 'premium'</code> - API input</div>\n </div>\n </div>\n </div>\n )}\n\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n style={{\n width: '100%',\n padding: '6px',\n fontSize: '11px',\n color: '#6366f1',\n backgroundColor: 'transparent',\n border: '1px dashed #e5e7eb',\n borderRadius: '6px',\n cursor: 'pointer',\n marginTop: '12px',\n }}\n >\n {isExpanded ? 'Hide Examples' : 'Show Examples'}\n </button>\n </BaseNode>\n )\n})\n\n// ============================================================================\n// Icon Components\n// ============================================================================\n\nconst TrueIcon = () => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ display: 'inline', marginRight: '4px', verticalAlign: 'middle' }}\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n)\n\nconst FalseIcon = () => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ display: 'inline', marginRight: '4px', verticalAlign: 'middle' }}\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n)\n\nexport default ConditionalNode\n\n","import React, { memo, useCallback, useState } from 'react'\nimport type { NodeProps } from '@xyflow/react'\nimport { BaseNode, MailIcon, NODE_HEADER_COLORS } from './BaseNode'\nimport type { RuntypeNodeData, SendEmailStepConfig, FlowStep } from '../../types'\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n field: {\n marginBottom: '12px',\n },\n label: {\n display: 'block',\n fontSize: '11px',\n fontWeight: 600,\n color: '#6b7280',\n marginBottom: '4px',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.03em',\n },\n input: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n },\n textarea: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n resize: 'vertical' as const,\n minHeight: '80px',\n fontFamily: 'inherit',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n },\n select: {\n width: '100%',\n padding: '8px 10px',\n fontSize: '12px',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n backgroundColor: '#f9fafb',\n color: '#1f2937',\n outline: 'none',\n cursor: 'pointer',\n },\n row: {\n display: 'flex',\n gap: '8px',\n },\n emailPreview: {\n backgroundColor: '#f8fafc',\n border: '1px solid #e2e8f0',\n borderRadius: '8px',\n padding: '10px',\n marginTop: '8px',\n },\n previewHeader: {\n fontSize: '10px',\n color: '#64748b',\n marginBottom: '4px',\n },\n previewValue: {\n fontSize: '12px',\n color: '#1e293b',\n fontWeight: 500,\n marginBottom: '8px',\n wordBreak: 'break-all' as const,\n },\n variableHint: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 6px',\n borderRadius: '4px',\n fontSize: '10px',\n backgroundColor: '#f0f9ff',\n color: '#0369a1',\n fontFamily: 'monospace',\n marginRight: '4px',\n marginTop: '4px',\n },\n}\n\n// ============================================================================\n// Send Email Node Component\n// ============================================================================\n\nexport const SendEmailNode = memo(function SendEmailNode(props: NodeProps) {\n const { data, selected, id } = props as NodeProps & { data: RuntypeNodeData }\n const { step, onChange } = data\n const config = step.config as SendEmailStepConfig\n \n const [isExpanded, setIsExpanded] = useState(false)\n\n const handleChange = useCallback(\n (field: keyof SendEmailStepConfig, value: unknown) => {\n onChange?.(id, {\n config: {\n ...config,\n [field]: value,\n },\n } as Partial<FlowStep>)\n },\n [id, config, onChange]\n )\n\n const handleNameChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(id, { name: e.target.value })\n },\n [id, onChange]\n )\n\n // Check for template variables in fields\n const hasVariables = (value: string) => /\\{\\{[\\w._]+\\}\\}/.test(value)\n\n return (\n <BaseNode\n data={data}\n selected={selected}\n id={id}\n typeLabel=\"Send Email\"\n icon={<MailIcon />}\n headerColor={NODE_HEADER_COLORS['send-email']}\n >\n <div style={styles.field}>\n <label style={styles.label}>Step Name</label>\n <input\n style={styles.input}\n value={step.name}\n onChange={handleNameChange}\n placeholder=\"Enter step name\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>To</label>\n <input\n style={styles.input}\n value={config.to || ''}\n onChange={(e) => handleChange('to', e.target.value)}\n placeholder=\"recipient@example.com or {{_record.metadata.email}}\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n {hasVariables(config.to || '') && (\n <span style={styles.variableHint}>Uses variable</span>\n )}\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>Subject</label>\n <input\n style={styles.input}\n value={config.subject || ''}\n onChange={(e) => handleChange('subject', e.target.value)}\n placeholder=\"Your subject line\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>HTML Content</label>\n <textarea\n style={styles.textarea}\n value={config.html || ''}\n onChange={(e) => handleChange('html', e.target.value)}\n placeholder=\"<p>Your email content...</p>&#10;&#10;Use {{variable}} for dynamic content\"\n rows={4}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n {isExpanded && (\n <>\n <div style={styles.field}>\n <label style={styles.label}>From</label>\n <input\n style={styles.input}\n value={config.from || ''}\n onChange={(e) => handleChange('from', e.target.value)}\n placeholder=\"no-reply@messages.runtype.com\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.row}>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>CC</label>\n <input\n style={styles.input}\n value={config.cc || ''}\n onChange={(e) => handleChange('cc', e.target.value)}\n placeholder=\"cc@example.com\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>BCC</label>\n <input\n style={styles.input}\n value={config.bcc || ''}\n onChange={(e) => handleChange('bcc', e.target.value)}\n placeholder=\"bcc@example.com\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>Reply To</label>\n <input\n style={styles.input}\n value={config.replyTo || ''}\n onChange={(e) => handleChange('replyTo', e.target.value)}\n placeholder=\"reply@example.com\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.field}>\n <label style={styles.label}>Plain Text (Fallback)</label>\n <textarea\n style={styles.textarea}\n value={config.text || ''}\n onChange={(e) => handleChange('text', e.target.value)}\n placeholder=\"Plain text version of your email...\"\n rows={2}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n\n <div style={styles.row}>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>On Error</label>\n <select\n style={styles.select}\n value={config.errorHandling || 'fail'}\n onChange={(e) => handleChange('errorHandling', e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <option value=\"fail\">Fail</option>\n <option value=\"continue\">Continue</option>\n <option value=\"default\">Use Default</option>\n </select>\n </div>\n <div style={{ ...styles.field, flex: 1 }}>\n <label style={styles.label}>Output Variable</label>\n <input\n style={styles.input}\n value={config.outputVariable || ''}\n onChange={(e) => handleChange('outputVariable', e.target.value)}\n placeholder=\"email_result\"\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n </div>\n </>\n )}\n\n {/* Email Preview */}\n {(config.to || config.subject) && (\n <div style={styles.emailPreview}>\n <div style={styles.previewHeader}>Preview</div>\n {config.to && (\n <div style={styles.previewValue}>\n <strong>To:</strong> {config.to}\n </div>\n )}\n {config.subject && (\n <div style={styles.previewValue}>\n <strong>Subject:</strong> {config.subject}\n </div>\n )}\n </div>\n )}\n\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n style={{\n width: '100%',\n padding: '6px',\n fontSize: '11px',\n color: '#6366f1',\n backgroundColor: 'transparent',\n border: '1px dashed #e5e7eb',\n borderRadius: '6px',\n cursor: 'pointer',\n marginTop: '8px',\n }}\n >\n {isExpanded ? 'Show Less' : 'Show More Options'}\n </button>\n </BaseNode>\n )\n})\n\nexport default SendEmailNode\n\n","import React, { useCallback, useMemo, useState } from 'react'\nimport {\n ReactFlow,\n Controls,\n Background,\n MiniMap,\n Panel,\n type NodeTypes,\n BackgroundVariant,\n ConnectionLineType,\n} from '@xyflow/react'\n\nimport type {\n RuntypeFlowEditorProps,\n RuntypeNode,\n FlowStep,\n SupportedNodeType,\n} from '../types'\nimport { useRuntypeFlow } from '../hooks/useRuntypeFlow'\nimport { useFlowValidation } from '../hooks/useFlowValidation'\nimport { PromptNode } from './nodes/PromptNode'\nimport { FetchUrlNode } from './nodes/FetchUrlNode'\nimport { CodeNode } from './nodes/CodeNode'\nimport { ConditionalNode } from './nodes/ConditionalNode'\nimport { SendEmailNode } from './nodes/SendEmailNode'\nimport { BaseNode, BrainIcon, NODE_HEADER_COLORS } from './nodes/BaseNode'\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n container: {\n width: '100%',\n height: '100%',\n position: 'relative' as const,\n },\n toolbar: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n backgroundColor: '#ffffff',\n borderRadius: '8px',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',\n border: '1px solid #e5e7eb',\n },\n toolbarButton: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '8px 12px',\n fontSize: '12px',\n fontWeight: 500,\n backgroundColor: '#f9fafb',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n cursor: 'pointer',\n color: '#374151',\n transition: 'all 0.15s ease',\n },\n toolbarButtonPrimary: {\n backgroundColor: '#6366f1',\n borderColor: '#6366f1',\n color: '#ffffff',\n },\n toolbarDivider: {\n width: '1px',\n height: '24px',\n backgroundColor: '#e5e7eb',\n margin: '0 4px',\n },\n statusPanel: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n backgroundColor: '#ffffff',\n borderRadius: '8px',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',\n border: '1px solid #e5e7eb',\n fontSize: '12px',\n color: '#6b7280',\n },\n statusBadge: (isValid: boolean) => ({\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 8px',\n borderRadius: '12px',\n fontSize: '10px',\n fontWeight: 600,\n backgroundColor: isValid ? '#d1fae5' : '#fee2e2',\n color: isValid ? '#059669' : '#dc2626',\n }),\n addStepMenu: {\n position: 'absolute' as const,\n top: '100%',\n left: 0,\n marginTop: '4px',\n backgroundColor: '#ffffff',\n borderRadius: '8px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n border: '1px solid #e5e7eb',\n padding: '4px',\n zIndex: 1000,\n minWidth: '200px',\n },\n addStepMenuItem: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n fontSize: '12px',\n color: '#374151',\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n width: '100%',\n textAlign: 'left' as const,\n transition: 'background-color 0.15s ease',\n },\n flowNameInput: {\n padding: '6px 10px',\n fontSize: '14px',\n fontWeight: 600,\n border: '1px solid transparent',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: '#1f2937',\n outline: 'none',\n transition: 'border-color 0.15s ease, background-color 0.15s ease',\n minWidth: '200px',\n },\n unsavedBadge: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 6px',\n borderRadius: '4px',\n fontSize: '10px',\n fontWeight: 500,\n backgroundColor: '#fef3c7',\n color: '#d97706',\n },\n}\n\n// ============================================================================\n// Node Types Configuration\n// ============================================================================\n\nconst nodeTypes: NodeTypes = {\n prompt: PromptNode,\n 'fetch-url': FetchUrlNode,\n 'transform-data': CodeNode,\n conditional: ConditionalNode,\n 'send-email': SendEmailNode,\n // Default node for unsupported types\n default: DefaultNode,\n}\n\n// Default node for unsupported step types\nfunction DefaultNode(props: { data: { step: FlowStep; label: string }; selected?: boolean; id: string }) {\n const { data, selected, id } = props\n \n return (\n <BaseNode\n data={data as any}\n selected={selected}\n id={id}\n typeLabel={data.step.type}\n icon={<BrainIcon />}\n headerColor={NODE_HEADER_COLORS.default}\n >\n <div style={{ fontSize: '12px', color: '#6b7280' }}>\n This step type is not yet fully supported in the visual editor.\n </div>\n </BaseNode>\n )\n}\n\n// ============================================================================\n// Step Type Options\n// ============================================================================\n\nconst STEP_TYPE_OPTIONS: Array<{\n type: SupportedNodeType\n label: string\n icon: React.ReactNode\n color: string\n}> = [\n {\n type: 'prompt',\n label: 'AI Prompt',\n icon: <PromptIcon />,\n color: NODE_HEADER_COLORS.prompt,\n },\n {\n type: 'fetch-url',\n label: 'Fetch URL',\n icon: <GlobeIcon />,\n color: NODE_HEADER_COLORS['fetch-url'],\n },\n {\n type: 'transform-data',\n label: 'Run Code',\n icon: <CodeIcon />,\n color: NODE_HEADER_COLORS['transform-data'],\n },\n {\n type: 'conditional',\n label: 'Conditional',\n icon: <BranchIcon />,\n color: NODE_HEADER_COLORS.conditional,\n },\n {\n type: 'send-email',\n label: 'Send Email',\n icon: <MailIcon />,\n color: NODE_HEADER_COLORS['send-email'],\n },\n]\n\n// ============================================================================\n// Main Editor Component\n// ============================================================================\n\nexport function RuntypeFlowEditor({\n client,\n flowId,\n initialName = 'Untitled Flow',\n initialDescription = '',\n initialSteps = [],\n onSave,\n onChange,\n onStepSelect,\n showToolbar = true,\n readOnly = false,\n className,\n}: RuntypeFlowEditorProps) {\n const [showAddMenu, setShowAddMenu] = useState(false)\n const [selectedNode, setSelectedNode] = useState<RuntypeNode | null>(null)\n\n // Initialize flow hook\n const {\n nodes,\n edges,\n onNodesChange,\n onEdgesChange,\n onConnect,\n flowName,\n setFlowName,\n saveFlow,\n addStep,\n isLoading,\n isSaving,\n error,\n hasUnsavedChanges,\n } = useRuntypeFlow({\n client,\n flowId,\n initialName,\n initialDescription,\n initialSteps,\n onChange,\n autoLayoutOnLoad: true,\n })\n\n // Validation\n const { result: validationResult } = useFlowValidation({ nodes })\n\n // Handlers\n const handleSave = useCallback(async () => {\n try {\n const savedFlow = await saveFlow()\n onSave?.(savedFlow)\n } catch (err) {\n console.error('Failed to save flow:', err)\n }\n }, [saveFlow, onSave])\n\n const handleAddStep = useCallback(\n (type: SupportedNodeType) => {\n addStep(type)\n setShowAddMenu(false)\n },\n [addStep]\n )\n\n const handleNodeClick = useCallback(\n (_: React.MouseEvent, node: RuntypeNode) => {\n setSelectedNode(node)\n onStepSelect?.(node.data.step)\n },\n [onStepSelect]\n )\n\n const handlePaneClick = useCallback(() => {\n setSelectedNode(null)\n onStepSelect?.(null)\n }, [onStepSelect])\n\n // Minimap node color\n const minimapNodeColor = useCallback((node: RuntypeNode) => {\n return NODE_HEADER_COLORS[node.data.step.type] || NODE_HEADER_COLORS.default\n }, [])\n\n return (\n <div style={styles.container} className={className}>\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={readOnly ? undefined : onNodesChange}\n onEdgesChange={readOnly ? undefined : onEdgesChange}\n onConnect={readOnly ? undefined : onConnect}\n onNodeClick={handleNodeClick}\n onPaneClick={handlePaneClick}\n nodeTypes={nodeTypes}\n fitView\n fitViewOptions={{ padding: 0.2 }}\n snapToGrid\n snapGrid={[20, 20]}\n connectionLineType={ConnectionLineType.SmoothStep}\n defaultEdgeOptions={{\n type: 'smoothstep',\n animated: false,\n }}\n proOptions={{ hideAttribution: true }}\n >\n <Background variant={BackgroundVariant.Dots} gap={20} size={1} color=\"#d1d5db\" />\n <Controls showInteractive={!readOnly} />\n <MiniMap\n nodeColor={minimapNodeColor}\n nodeStrokeWidth={3}\n zoomable\n pannable\n style={{\n backgroundColor: '#f9fafb',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n }}\n />\n\n {/* Top Toolbar */}\n {showToolbar && (\n <Panel position=\"top-left\">\n <div style={styles.toolbar}>\n {/* Flow Name */}\n <input\n style={styles.flowNameInput}\n value={flowName}\n onChange={(e) => setFlowName(e.target.value)}\n placeholder=\"Flow name...\"\n disabled={readOnly}\n onFocus={(e) => {\n e.target.style.borderColor = '#6366f1'\n e.target.style.backgroundColor = '#ffffff'\n }}\n onBlur={(e) => {\n e.target.style.borderColor = 'transparent'\n e.target.style.backgroundColor = 'transparent'\n }}\n />\n\n {hasUnsavedChanges && (\n <span style={styles.unsavedBadge}>Unsaved</span>\n )}\n\n <div style={styles.toolbarDivider} />\n\n {/* Add Step Button */}\n {!readOnly && (\n <div style={{ position: 'relative' }}>\n <button\n style={styles.toolbarButton}\n onClick={() => setShowAddMenu(!showAddMenu)}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#f3f4f6'\n e.currentTarget.style.borderColor = '#d1d5db'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = '#f9fafb'\n e.currentTarget.style.borderColor = '#e5e7eb'\n }}\n >\n <PlusIcon /> Add Step\n </button>\n\n {showAddMenu && (\n <div style={styles.addStepMenu}>\n {STEP_TYPE_OPTIONS.map((option) => (\n <button\n key={option.type}\n style={styles.addStepMenuItem}\n onClick={() => handleAddStep(option.type)}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = option.color\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n >\n {option.icon}\n {option.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Save Button */}\n {!readOnly && flowId && (\n <button\n style={{ ...styles.toolbarButton, ...styles.toolbarButtonPrimary }}\n onClick={handleSave}\n disabled={isSaving || !hasUnsavedChanges}\n onMouseEnter={(e) => {\n if (!isSaving && hasUnsavedChanges) {\n e.currentTarget.style.backgroundColor = '#4f46e5'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = '#6366f1'\n }}\n >\n {isSaving ? 'Saving...' : 'Save'}\n </button>\n )}\n </div>\n </Panel>\n )}\n\n {/* Status Panel */}\n <Panel position=\"top-right\">\n <div style={styles.statusPanel}>\n <span style={styles.statusBadge(validationResult.isValid)}>\n {validationResult.isValid ? 'Valid' : `${validationResult.errors.length} Error(s)`}\n </span>\n <span>{nodes.length} steps</span>\n {isLoading && <span>Loading...</span>}\n {error && (\n <span style={{ color: '#dc2626' }}>Error: {error.message}</span>\n )}\n </div>\n </Panel>\n </ReactFlow>\n\n {/* Click outside to close menu */}\n {showAddMenu && (\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 999,\n }}\n onClick={() => setShowAddMenu(false)}\n />\n )}\n </div>\n )\n}\n\n// ============================================================================\n// Icon Components\n// ============================================================================\n\nfunction PlusIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n )\n}\n\nfunction PromptIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z\" />\n <path d=\"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z\" />\n </svg>\n )\n}\n\nfunction GlobeIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </svg>\n )\n}\n\nfunction CodeIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"16 18 22 12 16 6\" />\n <polyline points=\"8 6 2 12 8 18\" />\n </svg>\n )\n}\n\nfunction BranchIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\" />\n <circle cx=\"18\" cy=\"6\" r=\"3\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <path d=\"M18 9a9 9 0 0 1-9 9\" />\n </svg>\n )\n}\n\nfunction MailIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\" />\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\n </svg>\n )\n}\n\nexport default RuntypeFlowEditor\n\n"]}