import { useState } from 'react'; import { FolderSearch, Microscope } from 'lucide-react'; import { useCanvasStore } from '../../../hooks/useCanvasStore'; import { ExpressionSelector } from './ExpressionSelector'; import { FileBrowser } from './FileBrowser'; import { IntrospectionPanel } from './IntrospectionPanel'; import { ModelNodeData, SolverNodeData, DesignVarNodeData, AlgorithmNodeData, ObjectiveNodeData, ExtractorNodeData, ConstraintNodeData, SurrogateNodeData } from '../../../lib/canvas/schema'; interface NodeConfigPanelProps { nodeId: string; } // Common input class for dark theme const inputClass = "w-full px-3 py-2 bg-dark-800 border border-dark-600 text-white placeholder-dark-400 rounded-lg focus:border-primary-500 focus:outline-none transition-colors"; const selectClass = "w-full px-3 py-2 bg-dark-800 border border-dark-600 text-white rounded-lg focus:border-primary-500 focus:outline-none transition-colors"; const labelClass = "block text-sm font-medium text-dark-300 mb-1"; export function NodeConfigPanel({ nodeId }: NodeConfigPanelProps) { const { nodes, updateNodeData, deleteSelected } = useCanvasStore(); const node = nodes.find((n) => n.id === nodeId); const [showFileBrowser, setShowFileBrowser] = useState(false); const [showIntrospection, setShowIntrospection] = useState(false); if (!node) return null; const { data } = node; const handleChange = (field: string, value: unknown) => { updateNodeData(nodeId, { [field]: value, configured: true }); }; return (