import React from 'react'; import { AxisData } from '../types'; interface IOPanelProps { inputs: boolean[]; outputs: boolean[]; inputNames: string[]; outputNames: string[]; onToggleInput: (index: number) => void; onToggleOutput: (index: number) => void; axes: AxisData[]; setAxes: React.Dispatch>; } export const IOPanel: React.FC = ({ inputs, outputs, inputNames, outputNames, onToggleInput, onToggleOutput, axes, setAxes }) => { const renderBits = ( bits: boolean[], names: string[], colorClass: string, label: string, onToggle: (i: number) => void ) => (

{label}

{bits.map((isActive, i) => (
{/* Tooltip on hover */}
{names[i] || `Port ${i}`}
))}
); return (

I/O Monitor

{renderBits(inputs, inputNames, 'bg-green-500', 'Inputs', onToggleInput)}
{renderBits(outputs, outputNames, 'bg-red-500', 'Outputs', onToggleOutput)}

Interactive Panel

• Click bits to toggle state

• Hover to see port names

Axis Channels

{axes.map((axis, i) => (
CH{i} {axis.name} {axis.value.toFixed(1)}
{/* Miniature Slider for quick view/control */} { const val = parseFloat(e.target.value); setAxes(prev => prev.map((a, idx) => idx === i ? { ...a, value: val, target: val } : a)); }} className="w-full h-1 bg-gray-700 rounded-lg appearance-none cursor-pointer accent-blue-500" />
))}
); };