'use client'; import React, { memo, useState, useCallback } from 'react'; import { type NodeProps } from '@xyflow/react'; import { ChevronDown, ChevronRight, FolderOpen } from 'lucide-react'; import type { ToolGroup } from '@mcpengine/ai-pipeline/types'; export interface GroupNodeData extends Record { group: ToolGroup; childCount: number; } export const GroupNode = memo(function GroupNode({ data }: NodeProps) { const { group, childCount } = data as GroupNodeData; const [collapsed, setCollapsed] = useState(false); const toggleCollapse = useCallback((e: React.MouseEvent) => { e.stopPropagation(); setCollapsed((prev) => !prev); }, []); return (
{/* Header */}
{group.name} {childCount} tool{childCount !== 1 ? 's' : ''} {collapsed ? ( ) : ( )}
{/* Description (when expanded) */} {!collapsed && group.description && (

{group.description}

)} {/* Child area — React Flow handles nested node rendering externally, this is the visual container. Children are positioned by parentId in RF. */} {!collapsed && (
)}
); });