import { cn } from "@/lib/utils" import type { NodeParameter } from "../../types/node-compositing" interface NodeParameterControlProps { parameter: NodeParameter onChange: (value: any) => void className?: string } export function NodeParameterControl({ parameter, onChange, className }: NodeParameterControlProps) { if (parameter.visible === false) return null const renderControl = () => { switch (parameter.type) { case "number": return (
onChange(Number.parseFloat(e.target.value))} className="flex-1 h-1 bg-gray-700 rounded-lg appearance-none cursor-pointer" style={{ background: `linear-gradient(to right, #3b82f6 0%, #3b82f6 ${ ((parameter.value - (parameter.min ?? 0)) / ((parameter.max ?? 100) - (parameter.min ?? 0))) * 100 }%, #374151 ${ ((parameter.value - (parameter.min ?? 0)) / ((parameter.max ?? 100) - (parameter.min ?? 0))) * 100 }%, #374151 100%)`, }} /> onChange(Number.parseFloat(e.target.value))} className="w-16 px-1 py-0.5 text-xs bg-gray-700 border border-gray-600 rounded text-white" />
) case "color": return (
onChange(e.target.value)} className="w-8 h-6 bg-transparent border border-gray-600 rounded cursor-pointer" /> onChange(e.target.value)} className="flex-1 px-2 py-0.5 text-xs bg-gray-700 border border-gray-600 rounded text-white" />
) case "select": return ( ) case "boolean": return ( ) case "text": return ( onChange(e.target.value)} className="w-full px-2 py-0.5 text-xs bg-gray-700 border border-gray-600 rounded text-white" /> ) case "range": return (
onChange([Number.parseFloat(e.target.value), parameter.value[1]])} className="flex-1 px-1 py-0.5 text-xs bg-gray-700 border border-gray-600 rounded text-white" /> to onChange([parameter.value[0], Number.parseFloat(e.target.value)])} className="flex-1 px-1 py-0.5 text-xs bg-gray-700 border border-gray-600 rounded text-white" />
) default: return null } } return (
{renderControl()}
) }