import React from 'react'; import { X } from 'lucide-react'; import { AxisData, ADDR_AXIS_BASE, ADDR_AXIS_STRIDE, OFF_AXIS_CURRENT_POS, OFF_AXIS_TARGET_POS, OFF_AXIS_SPEED } from '../types'; interface SystemSetupDialogProps { isOpen: boolean; onClose: () => void; inputNames: string[]; outputNames: string[]; axes: AxisData[]; onUpdatePortName: (type: 'input' | 'output', index: number, name: string) => void; onUpdateAxis: (index: number, updates: Partial) => void; } export const SystemSetupDialog: React.FC = ({ isOpen, onClose, inputNames, outputNames, onUpdatePortName, axes, onUpdateAxis }) => { const [activeTab, setActiveTab] = React.useState<'io' | 'axes'>('io'); if (!isOpen) return null; return (
{/* Header */}

System Setup

Configure Hardware & Drives

{/* Content */}
{activeTab === 'io' && (
{/* Input Configuration */}

Input Mapping (X00 - X31)

{inputNames.map((name, i) => (
X{i.toString().padStart(2, '0')} onUpdatePortName('input', i, e.target.value)} />
))}
{/* Output Configuration */}

Output Mapping (Y00 - Y31)

{outputNames.map((name, i) => (
Y{i.toString().padStart(2, '0')} onUpdatePortName('output', i, e.target.value)} />
))}
)} {activeTab === 'axes' && (

Global Axis Configuration (8 Channels)

{axes.map((axis, i) => (
onUpdateAxis(i, { name: e.target.value })} className="bg-gray-900 border border-gray-800 rounded px-2 py-1 text-sm text-white focus:border-blue-500 outline-none" />
{axis.value.toFixed(1)} {axis.type === 'rotary' ? 'deg' : 'mm'}
{ const val = parseFloat(e.target.value); onUpdateAxis(i, { value: val, target: val }); }} className="w-full h-2 bg-gray-800 rounded-lg appearance-none cursor-pointer accent-blue-600 hover:accent-blue-500" />
{/* Memory Map Info */}
MEMORY MAP Base: {ADDR_AXIS_BASE + (axis.id * ADDR_AXIS_STRIDE)}
Status: +{0} Cur Pos: +{OFF_AXIS_CURRENT_POS} Cmd Pos: +{OFF_AXIS_TARGET_POS} Speed: +{OFF_AXIS_SPEED}
))}
)}
{/* Footer */}
); };