'use client'; import React, { useState, useCallback } from 'react'; import { GripVertical, Trash2, ChevronDown, ChevronRight } from 'lucide-react'; import type { SchemaProperty } from '@mcpengine/ai-pipeline/types'; interface ParamEditorProps { name: string; property: SchemaProperty; required: boolean; onUpdate: (updates: Partial) => void; onToggleRequired: () => void; onDelete: () => void; } const TYPE_OPTIONS = ['string', 'number', 'boolean', 'array', 'object'] as const; export function ParamEditor({ name, property, required, onUpdate, onToggleRequired, onDelete, }: ParamEditorProps) { const [expanded, setExpanded] = useState(false); const toggleExpand = useCallback(() => setExpanded((prev) => !prev), []); return (
{/* Collapsed header row */}
{/* Drag handle */} {/* Expand toggle */} {/* Name */} {name} {/* Type badge */} {property.type} {/* Required badge */} {required && ( req )} {/* Delete */}
{/* Expanded fields */} {expanded && (
{/* Name input */}
{/* Type select */}
{/* Required toggle */}
{/* Description */}
onUpdate({ description: e.target.value })} placeholder="Describe this parameter..." className="w-full bg-gray-800 border border-gray-700 rounded px-2 py-1.5 text-xs text-gray-300 outline-none focus:border-indigo-500 transition-colors" />
{/* Default value */}
onUpdate({ default: e.target.value === '' ? undefined : e.target.value, }) } placeholder="Optional default..." className="w-full bg-gray-800 border border-gray-700 rounded px-2 py-1.5 text-xs text-gray-300 outline-none focus:border-indigo-500 transition-colors" />
)}
); }