import { Position } from "@xyflow/react"; import { ReactNode } from "react"; import { BaseHandle } from "@/components/flow/nodes/BaseHandle"; import { BaseNode } from "@/components/flow/nodes/BaseNode"; import { cn } from "@/lib/utils"; interface NodeContentProps { selected: boolean; invalid?: boolean; selected_through_edge?: boolean; hovered_through_edge?: boolean; title: string; icon: ReactNode; nodeType?: 'start' | 'agent' | 'end' | 'global' | 'trigger' | 'webhook' | 'qa'; hasSourceHandle?: boolean; hasTargetHandle?: boolean; children?: ReactNode; className?: string; onDoubleClick?: () => void; nodeId?: string; } // Get badge styling based on node type const getNodeTypeBadge = (nodeType?: string) => { switch (nodeType) { case 'start': return { label: 'Start Node', className: 'bg-emerald-500 text-white' }; case 'agent': return { label: 'Agent Node', className: 'bg-blue-500 text-white' }; case 'end': return { label: 'End Node', className: 'bg-rose-500 text-white' }; case 'global': return { label: 'Global Node', className: 'bg-amber-500 text-white' }; case 'trigger': return { label: 'API Trigger', className: 'bg-purple-500 text-white' }; case 'webhook': return { label: 'Webhook', className: 'bg-indigo-500 text-white' }; case 'qa': return { label: 'QA Analysis', className: 'bg-teal-500 text-white' }; default: return { label: 'Node', className: 'bg-zinc-500 text-white' }; } }; export const NodeContent = ({ selected, invalid, selected_through_edge, hovered_through_edge, title, icon, nodeType, hasSourceHandle = false, hasTargetHandle = false, children, className = "", onDoubleClick, nodeId, }: NodeContentProps) => { const badge = getNodeTypeBadge(nodeType); return ( {hasTargetHandle && } {/* Node type badge - positioned at top */}
{icon} {badge.label}
{/* Header with title */}

{title} {nodeId && ( #{nodeId} )}

{/* Content area with prompt label */}
Prompt:
{children}
{hasSourceHandle && }
); };