Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 5x 5x | import { PinMonitor } from "@/components/features/pin-monitor";
import { ArduinoBoard } from "@/components/features/arduino-board";
import type { PinState, BatchStats } from "@/hooks/use-simulation-store";
type SimulationStatus = "running" | "stopped" | "paused";
type SimulatorSidebarProps = {
readonly pinMonitorVisible: boolean;
readonly pinStates: PinState[];
readonly batchStats: BatchStats;
readonly simulationStatus: SimulationStatus | undefined;
readonly txActivity: number;
readonly rxActivity: number;
readonly onReset: () => void;
readonly onPinToggle: (pin: number, newValue: number) => void;
readonly analogPins: number[];
readonly onAnalogChange: (pin: number, newValue: number) => void;
readonly isMobile?: boolean;
};
export default function SimulatorSidebar({
pinMonitorVisible,
pinStates,
batchStats,
simulationStatus,
txActivity,
rxActivity,
onReset,
onPinToggle,
analogPins,
onAnalogChange,
isMobile = false,
}: SimulatorSidebarProps) {
// Pure UI/presentation component — receives data + callbacks from parent hooks.
const isRunning = simulationStatus !== "stopped";
return (
<div className={isMobile ? "h-full w-full" : "h-full w-full flex flex-col gap-3 p-2 overflow-y-auto"}>
{pinMonitorVisible && (
<div>
<PinMonitor pinStates={pinStates} batchStats={batchStats} />
{/* telemetry display could be added here if desired */}
</div>
)}
<div className="flex-1 min-h-0">
<ArduinoBoard
pinStates={pinStates}
isSimulationRunning={isRunning}
simulationStatus={simulationStatus}
txActive={txActivity}
rxActive={rxActivity}
onReset={onReset}
onPinToggle={onPinToggle}
analogPins={analogPins}
onAnalogChange={onAnalogChange}
/>
</div>
</div>
);
}
|