import React from 'react'; import { Trash2, PlusCircle, Power, Zap, Gauge, Move } from 'lucide-react'; import { IOLogicRule, LogicCondition, LogicAction, LogicTriggerType, LogicActionType, AxisData } from '../types'; interface LadderEditorProps { logicRules: IOLogicRule[]; inputNames: string[]; outputNames: string[]; currentInputs: boolean[]; currentOutputs: boolean[]; onAddRule: (rule: IOLogicRule) => void; onDeleteRule: (id: string) => void; onUpdateRule: (id: string, updates: Partial) => void; axes: AxisData[]; } export const LadderEditor: React.FC = ({ logicRules, inputNames, outputNames, currentInputs, currentOutputs, onAddRule, onDeleteRule, onUpdateRule, axes }) => { return (
{/* Background Grid Pattern */}
{/* Toolbar */}

Main Controller (Ladder Logic)

{/* Programming Workspace */}
{/* Left Bus Bar (Hot) */}
{/* Right Bus Bar (Neutral) */}
{logicRules.map((rule, index) => { const isInputTrigger = rule.triggerType === LogicTriggerType.INPUT_BIT; const isAxisTrigger = rule.triggerType === LogicTriggerType.AXIS_COMPARE; const isOutputAction = rule.actionType === LogicActionType.OUTPUT_COIL; const isAxisAction = rule.actionType === LogicActionType.AXIS_MOVE; const inputActive = isInputTrigger && currentInputs[rule.inputPort]; const outputActive = isOutputAction && currentOutputs[rule.outputPort]; return (
{/* Rung Number */}
{(index + 1).toString().padStart(3, '0')}
{/* Delete Button */}
{/* LEFT: TRIGGER */}
{isInputTrigger ? (
{inputNames[rule.inputPort] || `Input ${rule.inputPort}`}
) : (
onUpdateRule(rule.id, { triggerValue: parseFloat(e.target.value) })} />
)}
{/* ARROW */}
{/* RIGHT: ACTION */}
{isOutputAction ? (
{outputNames[rule.outputPort] || `Output ${rule.outputPort}`}
) : (
MOVE TO onUpdateRule(rule.id, { targetAxisValue: parseFloat(e.target.value) })} />
)}
); })} {/* End of Program */}
End of Program
); };