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; runtimeActive?: boolean; title: string; icon: ReactNode; badgeLabel?: string; badgeClassName?: string; contentLabel?: string; hasSourceHandle?: boolean; hasTargetHandle?: boolean; children?: ReactNode; className?: string; onDoubleClick?: () => void; nodeId?: string; } // Get badge styling based on node type const DEFAULT_BADGE = { label: 'Node', className: 'bg-zinc-500 text-white' }; export const NodeContent = ({ selected, invalid, selected_through_edge, hovered_through_edge, runtimeActive, title, icon, badgeLabel, badgeClassName, contentLabel = "Prompt", hasSourceHandle = false, hasTargetHandle = false, children, className = "", onDoubleClick, nodeId, }: NodeContentProps) => { const badge = { label: badgeLabel ?? DEFAULT_BADGE.label, className: badgeClassName ?? DEFAULT_BADGE.className, }; return ( {hasTargetHandle && } {/* Node type badge - positioned at top */}
{icon} {badge.label}
{/* Header with title */}

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

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